Skip to content

Commit

Permalink
修复从排行榜页面进入详情页,评分信息和收藏信息不显示的bug
Browse files Browse the repository at this point in the history
Fix bug with missing rating info and favorite info in details page if user enter from ranklist page
  • Loading branch information
jiangtian616 committed Aug 9, 2022
1 parent d3fdf65 commit d390e55
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 40 deletions.
4 changes: 0 additions & 4 deletions lib/src/model/gallery_detail.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@ import 'gallery_thumbnail.dart';

class GalleryDetail {
String rawTitle;
String? uploader;
int ratingCount;
double realRating;
String size;
int pageCount;
int favoriteCount;
String torrentCount;
String torrentPageUrl;
Expand All @@ -22,11 +20,9 @@ class GalleryDetail {

GalleryDetail({
required this.rawTitle,
this.uploader,
required this.ratingCount,
required this.realRating,
required this.size,
required this.pageCount,
required this.favoriteCount,
required this.torrentCount,
required this.torrentPageUrl,
Expand Down
66 changes: 34 additions & 32 deletions lib/src/pages/details/details_page_logic.dart
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,6 @@ class DetailsPageLogic extends GetxController {
if (arg is String) {
getFullPage().then((_) => historyService.record(state.gallery));
}

/// enter from ranklist view
if (arg is List) {
state.gallery = arg[0];
state.galleryDetails = arg[1];
state.apikey = arg[2];
state.thumbnailsPageCount = (state.galleryDetails!.pageCount / SiteSetting.thumbnailsCountPerPage.value).ceil();
state.loadingDetailsState = LoadingState.success;
historyService.record(state.gallery);
update([bodyId]);
return;
}
}

@override
Expand All @@ -112,9 +100,9 @@ class DetailsPageLogic extends GetxController {
state.loadingPageState = LoadingState.loading;
update([loadingStateId]);

Map<String, dynamic> galleryAndDetailsAndApikey;
Map<String, dynamic> galleryAndDetailAndApikey;
try {
galleryAndDetailsAndApikey = await EHRequest.requestDetailPage(
galleryAndDetailAndApikey = await EHRequest.requestDetailPage(
galleryUrl: Get.arguments,
parser: EHSpiderParser.detailPage2GalleryAndDetailAndApikey,
);
Expand All @@ -130,11 +118,10 @@ class DetailsPageLogic extends GetxController {
update([bodyId]);
return;
}
state.gallery = galleryAndDetailsAndApikey['gallery']!;
state.galleryDetails = galleryAndDetailsAndApikey['galleryDetails']!;
state.apikey = galleryAndDetailsAndApikey['apikey']!;
state.gallery!.pageCount = state.galleryDetails!.pageCount;
state.thumbnailsPageCount = (state.galleryDetails!.pageCount / SiteSetting.thumbnailsCountPerPage.value).ceil();
state.gallery = galleryAndDetailAndApikey['gallery']!;
state.galleryDetails = galleryAndDetailAndApikey['galleryDetails']!;
state.apikey = galleryAndDetailAndApikey['apikey']!;

state.loadingPageState = LoadingState.success;
state.loadingDetailsState = LoadingState.success;

Expand All @@ -155,11 +142,11 @@ class DetailsPageLogic extends GetxController {
}

Log.info('get gallery details', false);
Map<String, dynamic> galleryDetailsAndApikey;
Map<String, dynamic> galleryAndDetailAndApikey;
try {
galleryDetailsAndApikey = await EHRequest.requestDetailPage<Map<String, dynamic>>(
galleryAndDetailAndApikey = await EHRequest.requestDetailPage<Map<String, dynamic>>(
galleryUrl: state.gallery!.galleryUrl,
parser: EHSpiderParser.detailPage2DetailAndApikey,
parser: EHSpiderParser.detailPage2GalleryAndDetailAndApikey,
);
} on DioError catch (e) {
Log.error('Get Gallery Detail Failed', e.message);
Expand All @@ -168,11 +155,17 @@ class DetailsPageLogic extends GetxController {
update([loadingStateId]);
return;
}
state.galleryDetails = galleryDetailsAndApikey['galleryDetails'];
state.apikey = galleryDetailsAndApikey['apikey'];
state.gallery!.pageCount = state.galleryDetails!.pageCount;
state.gallery!.uploader = state.galleryDetails!.uploader;
state.thumbnailsPageCount = (state.galleryDetails!.pageCount / SiteSetting.thumbnailsCountPerPage.value).ceil();
state.galleryDetails = galleryAndDetailAndApikey['galleryDetails'];
state.apikey = galleryAndDetailAndApikey['apikey'];
state.gallery!.pageCount = (galleryAndDetailAndApikey['gallery'] as Gallery).pageCount;
state.gallery!.uploader = (galleryAndDetailAndApikey['gallery'] as Gallery).uploader;
state.gallery!.isFavorite = (galleryAndDetailAndApikey['gallery'] as Gallery).isFavorite;
state.gallery!.favoriteTagIndex = (galleryAndDetailAndApikey['gallery'] as Gallery).favoriteTagIndex;
state.gallery!.favoriteTagName = (galleryAndDetailAndApikey['gallery'] as Gallery).favoriteTagName;
state.gallery!.hasRated = (galleryAndDetailAndApikey['gallery'] as Gallery).hasRated;
state.gallery!.rating = (galleryAndDetailAndApikey['gallery'] as Gallery).rating;
state.thumbnailsPageCount = ((galleryAndDetailAndApikey['gallery'] as Gallery).pageCount! / SiteSetting.thumbnailsCountPerPage.value).ceil();

await tagTranslationService.translateGalleryDetailTagsIfNeeded(state.galleryDetails!);
state.loadingDetailsState = LoadingState.success;

Expand All @@ -187,11 +180,11 @@ class DetailsPageLogic extends GetxController {
Future<void> handleRefresh() async {
Log.info('refresh gallery details', false);

Map<String, dynamic> detailAndApikey;
Map<String, dynamic> galleryAndDetailAndApikey;
try {
detailAndApikey = await EHRequest.requestDetailPage<Map<String, dynamic>>(
galleryAndDetailAndApikey = await EHRequest.requestDetailPage<Map<String, dynamic>>(
galleryUrl: state.gallery!.galleryUrl,
parser: EHSpiderParser.detailPage2DetailAndApikey,
parser: EHSpiderParser.detailPage2GalleryAndDetailAndApikey,
useCacheIfAvailable: false,
);
} on DioError catch (e) {
Expand All @@ -201,8 +194,17 @@ class DetailsPageLogic extends GetxController {
}

state.refresh();
state.galleryDetails = detailAndApikey['galleryDetails'];
state.apikey = detailAndApikey['apikey'];
state.galleryDetails = galleryAndDetailAndApikey['galleryDetails'];
state.apikey = galleryAndDetailAndApikey['apikey'];
state.gallery!.pageCount = (galleryAndDetailAndApikey['gallery'] as Gallery).pageCount;
state.gallery!.uploader = (galleryAndDetailAndApikey['gallery'] as Gallery).uploader;
state.gallery!.isFavorite = (galleryAndDetailAndApikey['gallery'] as Gallery).isFavorite;
state.gallery!.favoriteTagIndex = (galleryAndDetailAndApikey['gallery'] as Gallery).favoriteTagIndex;
state.gallery!.favoriteTagName = (galleryAndDetailAndApikey['gallery'] as Gallery).favoriteTagName;
state.gallery!.hasRated = (galleryAndDetailAndApikey['gallery'] as Gallery).hasRated;
state.gallery!.rating = (galleryAndDetailAndApikey['gallery'] as Gallery).rating;
state.thumbnailsPageCount = ((galleryAndDetailAndApikey['gallery'] as Gallery).pageCount! / SiteSetting.thumbnailsCountPerPage.value).ceil();

await tagTranslationService.translateGalleryDetailTagsIfNeeded(state.galleryDetails!);
update([bodyId]);
}
Expand Down
8 changes: 4 additions & 4 deletions lib/src/utils/eh_spider_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,9 @@ class EHSpiderParser {

return GalleryDetail(
rawTitle: document.querySelector('#gn')!.text,
uploader: document.querySelector('#gdn > a')?.text,
ratingCount: int.parse(document.querySelector('#rating_count')?.text ?? '0'),
realRating: _parseGalleryDetailsRealRating(document),
size: document.querySelector('#gdd > table > tbody')?.children[4].children[1].text ?? '',
pageCount: int.parse((document.querySelector('#gdd > table > tbody > tr:nth-child(5) > .gdt2')?.text ?? '').split(' ')[0]),
favoriteCount: _parseGalleryDetailsFavoriteCount(document),
torrentCount: RegExp(r'\d+').firstMatch(document.querySelector('#gd5')?.children[2].querySelector('a')?.text ?? '')?.group(0) ?? '0',
torrentPageUrl: document.querySelector('#gd5')?.children[2].querySelector('a')?.attributes['onclick']?.split('\'')[1] ?? '',
Expand All @@ -129,7 +127,7 @@ class EHSpiderParser {
);
}

static Map<String, dynamic> detailPage2DetailAndApikey(Response response) {
static Map<String, dynamic> detailPage2DetailAndApiKey(Response response) {
String html = response.data! as String;
Document document = parse(html);

Expand All @@ -139,8 +137,10 @@ class EHSpiderParser {
};
}

// In some page like favorite page or ranklist page, infos like uploader, pageCount, favorited info, rated info is
// missing. So we need to extract these infos in details page.
static Map<String, dynamic> detailPage2GalleryAndDetailAndApikey(Response response) {
Map<String, dynamic> map = detailPage2DetailAndApikey(response);
Map<String, dynamic> map = detailPage2DetailAndApiKey(response);
map['gallery'] = detailPage2Gallery(response);
return map;
}
Expand Down

0 comments on commit d390e55

Please sign in to comment.