1+ // ignore_for_file: prefer_single_quotes
2+
13import 'dart:convert' ;
24import 'dart:io' ;
35
@@ -27,12 +29,14 @@ final class Api {
2729 if (statusCode == 403 || statusCode == 404 ) {
2830 // Ignore 403 errors when unable to login with magic link
2931 // Ignore 404 errors so we can update the build-id and re-fetch posts
30- handler.resolve (Response (
31- requestOptions: error.requestOptions,
32- statusCode: statusCode,
33- ));
32+ handler.resolve (
33+ Response (
34+ requestOptions: error.requestOptions,
35+ statusCode: statusCode,
36+ ),
37+ );
3438 } else {
35- debugPrint (error.response? .data);
39+ debugPrint (error.response? .data. toString () );
3640 handler.next (error);
3741 }
3842 },
@@ -165,16 +169,28 @@ final class Api {
165169 throw Exception ('Error fetching more' );
166170 }
167171
168- final response = await _dio.post (
169- 'https://stacker.news/api/graphql' ,
170- data: postType.getGraphQLBody (cursor),
171- );
172+ try {
173+ final response = await _dio.post (
174+ 'https://stacker.news/api/graphql' ,
175+ data: postType.getGraphQLBody (cursor),
176+ );
172177
173- if (response.statusCode == 200 ) {
174- return await _parsePosts (response.data, postType);
178+ if (response.statusCode == 200 ) {
179+ return await _parsePosts (response.data, postType);
180+ }
181+ } catch (e, st) {
182+ debugPrint (e.toString ());
183+ debugPrintStack (stackTrace: st);
184+
185+ final msg =
186+ ((e is DioException ) ? e.response? .data.toString () : e.toString ()) ??
187+ '' ;
188+ Utils .showException (msg, st);
189+
190+ rethrow ;
175191 }
176192
177- throw Exception ('Error fetching more' );
193+ throw Exception ('Error fetching more posts ' );
178194 }
179195
180196 Future <Post > fetchPostDetails (String id) async {
@@ -251,8 +267,9 @@ final class Api {
251267 }
252268
253269 User _parseProfile (dynamic responseData) {
254- final userMap =
255- responseData['pageProps' ]['data' ]['user' ] as Map <String , dynamic >;
270+ final response = (responseData['pageProps' ] ?? responseData);
271+ final data = response['ssrData' ] ?? response['data' ];
272+ final userMap = data['user' ] as Map <String , dynamic >;
256273
257274 return User .fromJson (userMap);
258275 }
@@ -466,7 +483,7 @@ final class Api {
466483 // #endregion Zap Things
467484
468485 // #region Items & Comments
469- Future <Post ?> createComment ({
486+ Future <Post ?> upsertComment ({
470487 required String parentId,
471488 required String text,
472489 }) async {
@@ -475,7 +492,7 @@ final class Api {
475492 final response = await _dio.post (
476493 'https://stacker.news/api/graphql' ,
477494 data:
478- '{"operationName":"createComment","variables":{"text":"$text","parentId":"$parentId"},"query":"fragment CommentFields on Item {\\n id\\n parentId\\n createdAt\\n deletedAt\\n text\\n user {\\n name\\n streak\\n hideCowboyHat\\n id\\n __typename\\n }\\n sats\\n upvotes\\n wvotes\\n boost\\n meSats\\n meDontLike\\n meBookmark\\n meSubscription\\n outlawed\\n freebie\\n path\\n commentSats\\n mine\\n otsHash\\n ncomments\\n __typename\\n}\\n\\nfragment CommentsRecursive on Item {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n}\\n\\nmutation createComment(\$text: String!, \$parentId: ID!) {\\n createComment(text: \$text, parentId: \$parentId) {\\n ...CommentFields\\n comments {\\n ...CommentsRecursive\\n __typename\\n }\\n __typename\\n }\\n}\\n"}',
495+ "{\"operationName\":\"upsertComment\",\"variables\":{\"parentId\":\"$parentId\",\"text\":\"$text\"},\"query\":\"fragment CommentFields on Item {\\n id\\n parentId\\n createdAt\\n deletedAt\\n text\\n user {\\n name\\n streak\\n hideCowboyHat\\n id\\n meMute\\n __typename\\n }\\n sats\\n upvotes\\n wvotes\\n boost\\n meSats\\n meDontLike\\n meBookmark\\n meSubscription\\n outlawed\\n freebie\\n path\\n commentSats\\n mine\\n otsHash\\n ncomments\\n imgproxyUrls\\n __typename\\n}\\n\\nfragment CommentsRecursive on Item {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n comments {\\n ...CommentFields\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n __typename\\n}\\n\\nmutation upsertComment(\$text: String!, \$parentId: ID!, \$hash: String, \$hmac: String) {\\n upsertComment(text: \$text, parentId: \$parentId, hash: \$hash, hmac: \$hmac) {\\n ...CommentFields\\n comments {\\n ...CommentsRecursive\\n __typename\\n }\\n __typename\\n }\\n}\"}",
479496 );
480497
481498 if (response.statusCode == 200 ) {
0 commit comments