Skip to content

Commit

Permalink
refactor: add parser file
Browse files Browse the repository at this point in the history
  • Loading branch information
khoadng committed Jun 26, 2023
1 parent 047911b commit 61a8845
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 56 deletions.
57 changes: 57 additions & 0 deletions lib/boorus/gelbooru/feats/posts/gelbooru_post_parser.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import 'package:boorusama/boorus/core/feats/posts/posts.dart';
import 'package:boorusama/dart.dart';
import 'package:path/path.dart' as path;
import 'package:retrofit/retrofit.dart';

import 'gelbooru_post.dart';
import 'gelbooru_post_dto.dart';

List<GelbooruPost> parseGelbooruResponse(HttpResponse<dynamic> value) =>
parseGelbooruDtos(value).map(gelbooruPostDtoToGelbooruPost).toList();

List<GelbooruPostDto> parseGelbooruDtos(HttpResponse<dynamic> value) {
final dtos = <GelbooruPostDto>[];
dynamic data;
try {
data = value.response.data['post'];
if (data == null) return [];
} catch (e) {
return [];
}

for (final item in data) {
dtos.add(GelbooruPostDto.fromJson(item));
}

return dtos;
}

GelbooruPost gelbooruPostDtoToGelbooruPost(GelbooruPostDto dto) {
return GelbooruPost(
id: dto.id!,
thumbnailImageUrl: dto.previewUrl ?? '',
sampleImageUrl: dto.sampleUrl ?? '',
originalImageUrl: dto.fileUrl ?? '',
tags: dto.tags?.split(' ').toList() ?? [],
width: dto.width?.toDouble() ?? 0,
height: dto.height?.toDouble() ?? 0,
format: path.extension(dto.image ?? 'foo.png').substring(1),
source: PostSource.from(dto.source),
rating: mapStringToRating(dto.rating ?? 'general'),
md5: dto.md5 ?? '',
hasComment: _boolFromString(dto.hasComments),
hasParentOrChildren: _boolFromString(dto.hasChildren) ||
(dto.parentId != null && dto.parentId != 0),
fileSize: 0,
score: dto.score ?? 0,
createdAt: dto.createdAt != null ? parseRFC822String(dto.createdAt!) : null,
);
}

bool _boolFromString(String? value) {
if (value == null) return false;
if (value == 'false') return false;
if (value == 'true') return true;

return false;
}
58 changes: 2 additions & 56 deletions lib/boorus/gelbooru/feats/posts/gelbooru_post_repository_api.dart
Original file line number Diff line number Diff line change
@@ -1,38 +1,14 @@
// Package imports:
import 'package:path/path.dart' as path;
import 'package:retrofit/retrofit.dart';

// Project imports:
import 'package:boorusama/api/gelbooru/gelbooru_api.dart';
import 'package:boorusama/boorus/core/feats/blacklists/blacklists.dart';
import 'package:boorusama/boorus/core/feats/boorus/boorus.dart';
import 'package:boorusama/boorus/core/feats/posts/posts.dart';
import 'package:boorusama/boorus/core/feats/settings/settings.dart';
import 'package:boorusama/boorus/gelbooru/feats/posts/gelbooru_post.dart';
import 'package:boorusama/boorus/gelbooru/feats/tags/utils.dart';
import 'package:boorusama/dart.dart';
import 'package:boorusama/foundation/http/http_utils.dart';
import 'package:boorusama/functional.dart';
import 'gelbooru_post_dto.dart';

List<GelbooruPost> _parsePostInIsolate(HttpResponse<dynamic> value) {
final dtos = <GelbooruPostDto>[];
dynamic data;
try {
data = value.response.data['post'];
if (data == null) return [];
} catch (e) {
return [];
}

for (final item in data) {
dtos.add(GelbooruPostDto.fromJson(item));
}

return dtos.map((e) {
return _postDtoToPost(e);
}).toList();
}
import 'gelbooru_post_parser.dart';

class GelbooruPostRepositoryApi
with GlobalBlacklistedTagFilterMixin, SettingsRepositoryMixin
Expand Down Expand Up @@ -82,41 +58,11 @@ class GelbooruPostRepositoryApi

final data = await $(tryParseJsonFromResponse(
response,
_parsePostInIsolate,
parseGelbooruResponse,
));

final filtered = await $(tryFilterBlacklistedTags(data));

return filtered;
});
}

GelbooruPost _postDtoToPost(GelbooruPostDto dto) {
return GelbooruPost(
id: dto.id!,
thumbnailImageUrl: dto.previewUrl ?? '',
sampleImageUrl: dto.sampleUrl ?? '',
originalImageUrl: dto.fileUrl ?? '',
tags: dto.tags?.split(' ').toList() ?? [],
width: dto.width?.toDouble() ?? 0,
height: dto.height?.toDouble() ?? 0,
format: path.extension(dto.image ?? 'foo.png').substring(1),
source: PostSource.from(dto.source),
rating: mapStringToRating(dto.rating ?? 'general'),
md5: dto.md5 ?? '',
hasComment: _boolFromString(dto.hasComments),
hasParentOrChildren: _boolFromString(dto.hasChildren) ||
(dto.parentId != null && dto.parentId != 0),
fileSize: 0,
score: dto.score ?? 0,
createdAt: dto.createdAt != null ? parseRFC822String(dto.createdAt!) : null,
);
}

bool _boolFromString(String? value) {
if (value == null) return false;
if (value == 'false') return false;
if (value == 'true') return true;

return false;
}

0 comments on commit 61a8845

Please sign in to comment.