Skip to content

Commit 75185f4

Browse files
Merge branch 'zulip:main' into insert-time-element--global
2 parents c5ccf00 + efcf201 commit 75185f4

File tree

88 files changed

+1734
-1302
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+1734
-1302
lines changed

.github/workflows/ci.yml

+2-5
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@ jobs:
1818
distribution: temurin
1919

2020
- name: Clone Flutter SDK
21-
# We can't do a depth-1 clone, because we need the most recent tag
22-
# so that Flutter knows its version and sees the constraint in our
23-
# pubspec is satisfied. It's uncommon for flutter/flutter to go
24-
# more than 100 commits between tags. Fetch 1000 for good measure.
21+
# TODO(#1204) reinstate shallow clone with --depth=1000 and its corresponding comment here
2522
run: |
26-
git clone --depth=1000 -b main https://github.com/flutter/flutter ~/flutter
23+
git clone -b main https://github.com/flutter/flutter ~/flutter
2724
TZ=UTC git --git-dir ~/flutter/.git log -1 --format='%h | %ci | %s' --date=iso8601-local
2825
echo ~/flutter/bin >> "$GITHUB_PATH"
2926

android/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ gradle-wrapper.jar
66
/local.properties
77
GeneratedPluginRegistrant.java
88

9+
.cxx/
10+
911
*keystore.properties
1012
*.keystore
1113
*.keystore.pgp

assets/icons/ZulipIcons.ttf

248 Bytes
Binary file not shown.

assets/icons/info.svg

+1
Loading

docs/changelog.md

+18
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,24 @@
33
## Unreleased
44

55

6+
## 0.0.25 (2025-01-13)
7+
8+
### Highlights for users
9+
10+
* The combined feed is now conveniently accessible from the app's main
11+
navigation bar. (#1164)
12+
* Messages with @-topic mentions now show them properly. (#892)
13+
* The lightbox now shows the sender's avatar. (#41)
14+
* The About Zulip screen is now available from the main menu. (#1128)
15+
* Too many other improvements and fixes to describe them all here.
16+
17+
18+
### Highlights for developers
19+
20+
* Resolved in main: #892, #1177, #1164, #1177, #1128, #1189, #1116,
21+
#739, #41
22+
23+
624
## 0.0.24 (2024-12-11)
725

826
This is a preview beta, including some experimental changes

ios/Podfile.lock

+66-68
Original file line numberDiff line numberDiff line change
@@ -37,77 +37,75 @@ PODS:
3737
- file_picker (0.0.1):
3838
- DKImagePickerController/PhotoGallery
3939
- Flutter
40-
- Firebase/CoreOnly (10.29.0):
41-
- FirebaseCore (= 10.29.0)
42-
- Firebase/Messaging (10.29.0):
40+
- Firebase/CoreOnly (11.4.0):
41+
- FirebaseCore (= 11.4.0)
42+
- Firebase/Messaging (11.4.0):
4343
- Firebase/CoreOnly
44-
- FirebaseMessaging (~> 10.29.0)
45-
- firebase_core (3.3.0):
46-
- Firebase/CoreOnly (= 10.29.0)
44+
- FirebaseMessaging (~> 11.4.0)
45+
- firebase_core (3.9.0):
46+
- Firebase/CoreOnly (= 11.4.0)
4747
- Flutter
48-
- firebase_messaging (15.0.4):
49-
- Firebase/Messaging (= 10.29.0)
48+
- firebase_messaging (15.1.6):
49+
- Firebase/Messaging (= 11.4.0)
5050
- firebase_core
5151
- Flutter
52-
- FirebaseCore (10.29.0):
53-
- FirebaseCoreInternal (~> 10.0)
54-
- GoogleUtilities/Environment (~> 7.12)
55-
- GoogleUtilities/Logger (~> 7.12)
56-
- FirebaseCoreInternal (10.29.0):
57-
- "GoogleUtilities/NSData+zlib (~> 7.8)"
58-
- FirebaseInstallations (10.29.0):
59-
- FirebaseCore (~> 10.0)
60-
- GoogleUtilities/Environment (~> 7.8)
61-
- GoogleUtilities/UserDefaults (~> 7.8)
62-
- PromisesObjC (~> 2.1)
63-
- FirebaseMessaging (10.29.0):
64-
- FirebaseCore (~> 10.0)
65-
- FirebaseInstallations (~> 10.0)
66-
- GoogleDataTransport (~> 9.3)
67-
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
68-
- GoogleUtilities/Environment (~> 7.8)
69-
- GoogleUtilities/Reachability (~> 7.8)
70-
- GoogleUtilities/UserDefaults (~> 7.8)
71-
- nanopb (< 2.30911.0, >= 2.30908.0)
52+
- FirebaseCore (11.4.0):
53+
- FirebaseCoreInternal (~> 11.0)
54+
- GoogleUtilities/Environment (~> 8.0)
55+
- GoogleUtilities/Logger (~> 8.0)
56+
- FirebaseCoreInternal (11.6.0):
57+
- "GoogleUtilities/NSData+zlib (~> 8.0)"
58+
- FirebaseInstallations (11.4.0):
59+
- FirebaseCore (~> 11.0)
60+
- GoogleUtilities/Environment (~> 8.0)
61+
- GoogleUtilities/UserDefaults (~> 8.0)
62+
- PromisesObjC (~> 2.4)
63+
- FirebaseMessaging (11.4.0):
64+
- FirebaseCore (~> 11.0)
65+
- FirebaseInstallations (~> 11.0)
66+
- GoogleDataTransport (~> 10.0)
67+
- GoogleUtilities/AppDelegateSwizzler (~> 8.0)
68+
- GoogleUtilities/Environment (~> 8.0)
69+
- GoogleUtilities/Reachability (~> 8.0)
70+
- GoogleUtilities/UserDefaults (~> 8.0)
71+
- nanopb (~> 3.30910.0)
7272
- Flutter (1.0.0)
73-
- GoogleDataTransport (9.4.1):
74-
- GoogleUtilities/Environment (~> 7.7)
75-
- nanopb (< 2.30911.0, >= 2.30908.0)
76-
- PromisesObjC (< 3.0, >= 1.2)
77-
- GoogleUtilities/AppDelegateSwizzler (7.13.3):
73+
- GoogleDataTransport (10.1.0):
74+
- nanopb (~> 3.30910.0)
75+
- PromisesObjC (~> 2.4)
76+
- GoogleUtilities/AppDelegateSwizzler (8.0.2):
7877
- GoogleUtilities/Environment
7978
- GoogleUtilities/Logger
8079
- GoogleUtilities/Network
8180
- GoogleUtilities/Privacy
82-
- GoogleUtilities/Environment (7.13.3):
81+
- GoogleUtilities/Environment (8.0.2):
8382
- GoogleUtilities/Privacy
84-
- PromisesObjC (< 3.0, >= 1.2)
85-
- GoogleUtilities/Logger (7.13.3):
83+
- GoogleUtilities/Logger (8.0.2):
8684
- GoogleUtilities/Environment
8785
- GoogleUtilities/Privacy
88-
- GoogleUtilities/Network (7.13.3):
86+
- GoogleUtilities/Network (8.0.2):
8987
- GoogleUtilities/Logger
9088
- "GoogleUtilities/NSData+zlib"
9189
- GoogleUtilities/Privacy
9290
- GoogleUtilities/Reachability
93-
- "GoogleUtilities/NSData+zlib (7.13.3)":
91+
- "GoogleUtilities/NSData+zlib (8.0.2)":
9492
- GoogleUtilities/Privacy
95-
- GoogleUtilities/Privacy (7.13.3)
96-
- GoogleUtilities/Reachability (7.13.3):
93+
- GoogleUtilities/Privacy (8.0.2)
94+
- GoogleUtilities/Reachability (8.0.2):
9795
- GoogleUtilities/Logger
9896
- GoogleUtilities/Privacy
99-
- GoogleUtilities/UserDefaults (7.13.3):
97+
- GoogleUtilities/UserDefaults (8.0.2):
10098
- GoogleUtilities/Logger
10199
- GoogleUtilities/Privacy
102100
- image_picker_ios (0.0.1):
103101
- Flutter
104102
- integration_test (0.0.1):
105103
- Flutter
106-
- nanopb (2.30910.0):
107-
- nanopb/decode (= 2.30910.0)
108-
- nanopb/encode (= 2.30910.0)
109-
- nanopb/decode (2.30910.0)
110-
- nanopb/encode (2.30910.0)
104+
- nanopb (3.30910.0):
105+
- nanopb/decode (= 3.30910.0)
106+
- nanopb/encode (= 3.30910.0)
107+
- nanopb/decode (3.30910.0)
108+
- nanopb/encode (3.30910.0)
111109
- package_info_plus (0.4.5):
112110
- Flutter
113111
- path_provider_foundation (0.0.1):
@@ -119,21 +117,21 @@ PODS:
119117
- SDWebImage/Core (5.20.0)
120118
- share_plus (0.0.1):
121119
- Flutter
122-
- sqlite3 (3.47.1):
123-
- sqlite3/common (= 3.47.1)
124-
- sqlite3/common (3.47.1)
125-
- sqlite3/dbstatvtab (3.47.1):
120+
- sqlite3 (3.47.2):
121+
- sqlite3/common (= 3.47.2)
122+
- sqlite3/common (3.47.2)
123+
- sqlite3/dbstatvtab (3.47.2):
126124
- sqlite3/common
127-
- sqlite3/fts5 (3.47.1):
125+
- sqlite3/fts5 (3.47.2):
128126
- sqlite3/common
129-
- sqlite3/perf-threadsafe (3.47.1):
127+
- sqlite3/perf-threadsafe (3.47.2):
130128
- sqlite3/common
131-
- sqlite3/rtree (3.47.1):
129+
- sqlite3/rtree (3.47.2):
132130
- sqlite3/common
133131
- sqlite3_flutter_libs (0.0.1):
134132
- Flutter
135133
- FlutterMacOS
136-
- sqlite3 (~> 3.47.1)
134+
- sqlite3 (~> 3.47.2)
137135
- sqlite3/dbstatvtab
138136
- sqlite3/fts5
139137
- sqlite3/perf-threadsafe
@@ -219,30 +217,30 @@ SPEC CHECKSUMS:
219217
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
220218
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
221219
file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655
222-
Firebase: cec914dab6fd7b1bd8ab56ea07ce4e03dd251c2d
223-
firebase_core: 57aeb91680e5d5e6df6b888064be7c785f146efb
224-
firebase_messaging: c862b3d2b973ecc769194dc8de09bd22c77ae757
225-
FirebaseCore: 30e9c1cbe3d38f5f5e75f48bfcea87d7c358ec16
226-
FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934
227-
FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd
228-
FirebaseMessaging: 7b5d8033e183ab59eb5b852a53201559e976d366
220+
Firebase: cf1b19f21410b029b6786a54e9764a0cacad3c99
221+
firebase_core: b62a5080210edad3f2934314a8b2c6f5124e8e10
222+
firebase_messaging: 98619a0572d82cfb3668e78859ba9f1110e268c9
223+
FirebaseCore: e0510f1523bc0eb21653cac00792e1e2bd6f1771
224+
FirebaseCoreInternal: d98ab91e2d80a56d7b246856a8885443b302c0c2
225+
FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414
226+
FirebaseMessaging: f8a160d99c2c2e5babbbcc90c4a3e15db036aee2
229227
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
230-
GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
231-
GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15
228+
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
229+
GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
232230
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
233231
integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573
234-
nanopb: 438bc412db1928dac798aa6fd75726007be04262
232+
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
235233
package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4
236234
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
237235
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
238236
SDWebImage: 73c6079366fea25fa4bb9640d5fb58f0893facd8
239-
share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad
240-
sqlite3: 1e522f0938463e44b7faf50393b40bdc1e1e456d
241-
sqlite3_flutter_libs: 1b4e98da20ebd4e9b1240269b78cdcf492dbe9f3
237+
share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f
238+
sqlite3: 7559e33dae4c78538df563795af3a86fc887ee71
239+
sqlite3_flutter_libs: 58ae36c0dd086395d066b4fe4de9cdca83e717b3
242240
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
243241
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
244242
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
245-
wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
243+
wakelock_plus: 373cfe59b235a6dd5837d0fb88791d2f13a90d56
246244

247245
PODFILE CHECKSUM: 7ed5116924b3be7e8fb75f7aada61e057028f5c7
248246

lib/api/exception.dart

+36-28
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,46 @@ sealed class ApiRequestException implements Exception {
2828
String toString() => message;
2929
}
3030

31-
/// An error returned through the Zulip server API.
31+
/// A network-level error that prevented even getting an HTTP response
32+
/// to some Zulip API network request.
3233
///
33-
/// See API docs: https://zulip.com/api/rest-error-handling
34-
class ZulipApiException extends ApiRequestException {
34+
/// This is the antonym of [HttpException].
35+
class NetworkException extends ApiRequestException {
36+
/// The exception describing the underlying error.
37+
///
38+
/// This can be any exception value that [http.Client.send] throws.
39+
/// Ideally that would always be an [http.ClientException],
40+
/// but empirically it can be [TlsException] and possibly others.
41+
final Object cause;
3542

36-
/// The Zulip API error code returned by the server.
37-
final String code;
43+
NetworkException({required super.routeName, required super.message, required this.cause});
3844

45+
@override
46+
String toString() {
47+
return 'NetworkException: $message ($cause)';
48+
}
49+
}
50+
51+
/// Some kind of [ApiRequestException] that came as an HTTP response.
52+
///
53+
/// This is the antonym of [NetworkException].
54+
sealed class HttpException extends ApiRequestException {
3955
/// The HTTP status code returned by the server.
4056
///
41-
/// This is always in the range 400..499.
57+
/// On [ZulipApiException], this is always in the range 400..499.
4258
final int httpStatus;
4359

60+
HttpException({required super.routeName, required this.httpStatus, required super.message});
61+
}
62+
63+
/// An error returned through the Zulip server API,
64+
/// and with a 4xx HTTP status code.
65+
///
66+
/// See API docs: https://zulip.com/api/rest-error-handling
67+
class ZulipApiException extends HttpException {
68+
/// The Zulip API error code returned by the server.
69+
final String code;
70+
4471
/// The error's JSON data, if any, beyond the properties common to all errors.
4572
///
4673
/// This consists of the properties other than `result`, `code`, and `msg`.
@@ -50,8 +77,8 @@ class ZulipApiException extends ApiRequestException {
5077

5178
ZulipApiException({
5279
required super.routeName,
80+
required super.httpStatus,
5381
required this.code,
54-
required this.httpStatus,
5582
required this.data,
5683
required super.message,
5784
}) : assert(400 <= httpStatus && httpStatus <= 499);
@@ -69,39 +96,20 @@ class ZulipApiException extends ApiRequestException {
6996
}
7097
}
7198

72-
/// A network-level error that prevented even getting an HTTP response.
73-
class NetworkException extends ApiRequestException {
74-
/// The exception describing the underlying error.
75-
///
76-
/// This can be any exception value that [http.Client.send] throws.
77-
/// Ideally that would always be an [http.ClientException],
78-
/// but empirically it can be [TlsException] and possibly others.
79-
final Object cause;
80-
81-
NetworkException({required super.routeName, required super.message, required this.cause});
82-
83-
@override
84-
String toString() {
85-
return 'NetworkException: $message ($cause)';
86-
}
87-
}
88-
8999
/// Some kind of server-side error in handling the request.
90100
///
91101
/// This should always represent either some kind of operational issue
92102
/// on the server, or a bug in the server where its responses don't
93103
/// agree with the documented API.
94-
sealed class ServerException extends ApiRequestException {
95-
final int httpStatus;
96-
104+
sealed class ServerException extends HttpException {
97105
/// The response body, decoded as a JSON object.
98106
///
99107
/// This is null if the body could not be read, or was not a valid JSON object.
100108
final Map<String, dynamic>? data;
101109

102110
ServerException({
103111
required super.routeName,
104-
required this.httpStatus,
112+
required super.httpStatus,
105113
required this.data,
106114
required super.message,
107115
});

0 commit comments

Comments
 (0)