Skip to content

Commit

Permalink
Optimize the display logic of Japanese titles in download records
Browse files Browse the repository at this point in the history
优化下载记录中日文标题的展示逻辑
  • Loading branch information
jiangtian616 committed Apr 24, 2024
1 parent 3f09a9b commit e605bc1
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 29 deletions.
2 changes: 2 additions & 0 deletions changelog/v7.5.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- 下载页支持显示分组下画廊数量
- Sad Panda异常支持直接跳转Wiki
- 优化搜索弹窗category选择
- 优化下载记录中日文标题的展示逻辑
- 修复部分场景下下载图片错误的bug

------------------------------------------------------------------------------------------
Expand All @@ -12,4 +13,5 @@
- Supports displaying the number of galleries in download group
- Lead to Wiki when Sad Panda occurs
- Optimize the category selection of the search dialog
- Optimize the display logic of Japanese titles in download records
- Fix bug that cannot download images in some scenarios
30 changes: 7 additions & 23 deletions lib/src/pages/details/details_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,30 +79,14 @@ class DetailsPage extends StatelessWidget with Scroll2TopPageMixin {
id: DetailsPageLogic.galleryId,
global: false,
init: logic,
builder: (_) => Text(_mainTitleTextWithBreakWord, style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
builder: (_) => Text(logic.mainTitleText.breakWord, style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
),
actions: [
_buildMenuButton(context),
],
);
}

String get _mainTitleText =>
state.gallery?.title ??
state.galleryDetails?.japaneseTitle ??
state.galleryDetails?.rawTitle ??
state.galleryMetadata?.japaneseTitle ??
state.galleryMetadata?.title ??
'';

String get _mainTitleTextWithBreakWord =>
state.gallery?.title.breakWord ??
state.galleryDetails?.japaneseTitle?.breakWord ??
state.galleryDetails?.rawTitle.breakWord ??
state.galleryMetadata?.japaneseTitle.breakWord ??
state.galleryMetadata?.title.breakWord ??
'';

Widget _buildMenuButton(BuildContext context) {
return GetBuilder<DetailsPageLogic>(
id: DetailsPageLogic.detailsId,
Expand Down Expand Up @@ -299,7 +283,7 @@ class DetailsPage extends StatelessWidget with Scroll2TopPageMixin {
return ScrollConfiguration(
behavior: UIConfig.scrollBehaviourWithoutScrollBarWithMouse,
child: SelectableText(
_mainTitleText,
logic.mainTitleText,
minLines: 1,
maxLines: 5,
style: const TextStyle(
Expand Down Expand Up @@ -349,13 +333,13 @@ class DetailsPage extends StatelessWidget with Scroll2TopPageMixin {
}

String? subTitle;
if (state.galleryDetails?.japaneseTitle != null && state.galleryDetails!.japaneseTitle!.breakWord != _mainTitleText) {
if (state.galleryDetails?.japaneseTitle != null && state.galleryDetails!.japaneseTitle! != logic.mainTitleText) {
subTitle = state.galleryDetails!.japaneseTitle;
} else if (state.galleryDetails?.rawTitle != null && state.galleryDetails!.rawTitle != logic.mainTitleText) {
subTitle = state.galleryDetails!.rawTitle;
} else if (state.galleryDetails?.japaneseTitle != null && state.galleryDetails!.japaneseTitle!.breakWord != _mainTitleText) {
subTitle = state.galleryDetails!.japaneseTitle!;
} else if (state.galleryMetadata?.title != null && state.galleryMetadata!.title.breakWord != _mainTitleText) {
} else if (state.galleryMetadata?.title != null && state.galleryMetadata!.title != logic.mainTitleText) {
subTitle = state.galleryMetadata!.title;
} else if (state.galleryMetadata?.japaneseTitle != null && state.galleryMetadata!.japaneseTitle.breakWord != _mainTitleText) {
} else if (state.galleryMetadata?.japaneseTitle != null && state.galleryMetadata!.japaneseTitle != logic.mainTitleText) {
subTitle = state.galleryMetadata!.japaneseTitle;
}

Expand Down
25 changes: 23 additions & 2 deletions lib/src/pages/details/details_page_logic.dart
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ import '../../service/storage_service.dart';
import '../../setting/eh_setting.dart';
import '../../setting/preference_setting.dart';
import '../../setting/read_setting.dart';
import '../../setting/site_setting.dart';
import '../../utils/process_util.dart';
import '../../utils/route_util.dart';
import '../../utils/search_util.dart';
Expand Down Expand Up @@ -132,6 +133,26 @@ class DetailsPageLogic extends GetxController with LoginRequiredMixin, Scroll2To
_stack.remove(this);
}

String get mainTitleText {
if (state.gallery?.title != null) {
return state.gallery!.title;
}

if (SiteSetting.preferJapaneseTitle.isTrue) {
return state.galleryDetails?.japaneseTitle ??
state.galleryDetails?.rawTitle ??
state.galleryMetadata?.japaneseTitle ??
state.galleryMetadata?.title ??
'';
} else {
return state.galleryDetails?.rawTitle ??
state.galleryDetails?.japaneseTitle ??
state.galleryMetadata?.title ??
state.galleryMetadata?.japaneseTitle ??
'';
}
}

Future<void> getDetails({bool refreshPageImmediately = true, bool useCacheIfAvailable = true}) async {
if (state.loadingState == LoadingState.loading) {
return;
Expand Down Expand Up @@ -314,7 +335,7 @@ class DetailsPageLogic extends GetxController with LoginRequiredMixin, Scroll2To
GalleryDownloadedData galleryDownloadedData = GalleryDownloadedData(
gid: state.galleryDetails?.galleryUrl.gid ?? state.gallery!.galleryUrl.gid,
token: state.galleryDetails?.galleryUrl.token ?? state.gallery!.galleryUrl.token,
title: state.gallery?.title ?? state.galleryDetails?.japaneseTitle ?? state.galleryDetails!.rawTitle,
title: mainTitleText,
category: state.galleryDetails?.category ?? state.gallery!.category,
pageCount: state.galleryDetails?.pageCount ?? state.gallery!.pageCount!,
galleryUrl: state.galleryDetails?.galleryUrl.url ?? state.gallery!.galleryUrl.url,
Expand Down Expand Up @@ -545,7 +566,7 @@ class DetailsPageLogic extends GetxController with LoginRequiredMixin, Scroll2To
ArchiveDownloadedData archive = ArchiveDownloadedData(
gid: state.galleryDetails!.galleryUrl.gid,
token: state.galleryDetails!.galleryUrl.token,
title: state.gallery?.title ?? state.galleryDetails!.japaneseTitle ?? state.galleryDetails!.rawTitle,
title: mainTitleText,
category: state.galleryDetails!.category,
pageCount: state.galleryDetails!.pageCount,
galleryUrl: state.galleryDetails!.galleryUrl.url,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,13 @@ class _SettingEHProfilePageState extends State<SettingEHProfilePage> {
}

loadingState = LoadingState.loading;
({List<Profile> profiles, FrontPageDisplayType frontPageDisplayType, bool isLargeThumbnail, int thumbnailRows}) settings;
({
bool preferJapaneseTitle,
List<Profile> profiles,
FrontPageDisplayType frontPageDisplayType,
bool isLargeThumbnail,
int thumbnailRows,
}) settings;
try {
settings = await retry(
() => EHRequest.requestSettingPage(EHSpiderParser.settingPage2SiteSetting),
Expand Down
14 changes: 13 additions & 1 deletion lib/src/setting/site_setting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import '../service/storage_service.dart';
import '../utils/log.dart';

class SiteSetting {
static RxBool preferJapaneseTitle = true.obs;

/// unused now
static Rx<FrontPageDisplayType> frontPageDisplayType = FrontPageDisplayType.compact.obs;

Expand Down Expand Up @@ -45,7 +47,13 @@ class SiteSetting {

Log.info('refresh SiteSetting');

({List<Profile> profiles, FrontPageDisplayType frontPageDisplayType, bool isLargeThumbnail, int thumbnailRows}) settings;
({
bool preferJapaneseTitle,
List<Profile> profiles,
FrontPageDisplayType frontPageDisplayType,
bool isLargeThumbnail,
int thumbnailRows,
}) settings;
try {
settings = await retry(
() => EHRequest.requestSettingPage(EHSpiderParser.settingPage2SiteSetting),
Expand All @@ -60,6 +68,7 @@ class SiteSetting {
return;
}

preferJapaneseTitle.value = settings.preferJapaneseTitle;
frontPageDisplayType.value = settings.frontPageDisplayType;
isLargeThumbnail.value = settings.isLargeThumbnail;
thumbnailRows.value = settings.thumbnailRows;
Expand All @@ -74,6 +83,7 @@ class SiteSetting {
}

static Future<void> _clear() async {
preferJapaneseTitle.value = true;
frontPageDisplayType.value = FrontPageDisplayType.compact;
isLargeThumbnail.value = false;
thumbnailRows.value = 4;
Expand All @@ -84,6 +94,7 @@ class SiteSetting {

static Map<String, dynamic> _toMap() {
return {
'preferJapaneseTitle': preferJapaneseTitle.value,
'frontPageDisplayType': frontPageDisplayType.value.index,
'isLargeThumbnail': isLargeThumbnail.value,
'thumbnailRows': thumbnailRows.value,
Expand All @@ -92,6 +103,7 @@ class SiteSetting {
}

static _initFromMap(Map<String, dynamic> map) {
preferJapaneseTitle.value = map['preferJapaneseTitle'] ?? true;
frontPageDisplayType.value = FrontPageDisplayType.values[map['frontPageDisplayType']];
isLargeThumbnail.value = map['isLargeThumbnail'];
thumbnailRows.value = map['thumbnailRows'];
Expand Down
11 changes: 9 additions & 2 deletions lib/src/utils/eh_spider_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -610,8 +610,13 @@ class EHSpiderParser {
).toList();
}

static ({List<Profile> profiles, FrontPageDisplayType frontPageDisplayType, bool isLargeThumbnail, int thumbnailRows}) settingPage2SiteSetting(
Headers headers, dynamic data) {
static ({
bool preferJapaneseTitle,
List<Profile> profiles,
FrontPageDisplayType frontPageDisplayType,
bool isLargeThumbnail,
int thumbnailRows,
}) settingPage2SiteSetting(Headers headers, dynamic data) {
Document document = parse(data as String);
List<Element> items = document.querySelectorAll('.optouter');

Expand Down Expand Up @@ -648,10 +653,12 @@ class EHSpiderParser {
frontPageDisplayType = FrontPageDisplayType.minimal;
}

bool preferJapaneseTitle = document.querySelector('#tl_1')?.attributes['checked'] != null;
bool isLargeThumbnail = document.querySelector('#tssel > div > label > input[checked=checked]')?.parent?.text == ' Large' ? true : false;
int thumbnailRows = int.parse(document.querySelector('#trsel > div > label > input[checked=checked]')?.parent?.text ?? '4');

return (
preferJapaneseTitle: preferJapaneseTitle,
profiles: profiles,
frontPageDisplayType: frontPageDisplayType,
isLargeThumbnail: isLargeThumbnail,
Expand Down

0 comments on commit e605bc1

Please sign in to comment.