From 412bc43cbf76a3892cc378c2cc8194d6b9ba2cf0 Mon Sep 17 00:00:00 2001
From: DattatreyaReddy Panta
<58727124+DattatreyaReddy@users.noreply.github.com>
Date: Wed, 14 Dec 2022 15:54:50 +0530
Subject: [PATCH] Bug fixes & new features for v0.3.1 (#93)
* Added refresh button & fixed images cropping in single page screen
* addded resume button to manga details screen
* added last page read support
* version bump to v0.3.1
---
README.md | 2 +-
assets/locales/en_US.json | 119 ++++++++---------
.../about/widget/clipboard_list_tile.dart | 8 +-
.../extension/extension_screen.dart | 3 +-
.../widgets/extension_list_tile.dart | 5 +-
.../presentation/source/source_screen.dart | 3 +-
.../category/edit_category_screen.dart | 3 +-
.../manga_details/manga_details_screen.dart | 42 +++++-
.../widgets/big_screen_manga_details.dart | 1 +
.../widgets/chapter_list_tile.dart | 29 ++++-
.../widgets/manga_description.dart | 28 ++--
.../widgets/small_screen_manga_details.dart | 1 +
.../presentation/reader/reader_screen.dart | 116 ++++++++---------
.../reader_mode/single_page_reader_mode.dart | 23 ++--
.../reader_mode/webtoon_reader_mode.dart | 18 ++-
.../presentation/updates/updates_screen.dart | 3 +-
.../widgets/chapter_manga_list_tile.dart | 4 +-
.../multi_chapters_action_icon.dart | 3 +-
.../single_chapter_action_icon.dart | 3 +-
.../widgets/update_status_popup_menu.dart | 3 +-
.../presentation/more/more_screen.dart | 6 +-
.../presentation/server/server_screen.dart | 8 +-
lib/src/i18n/codegen_loader.g.dart | 99 +++++++-------
lib/src/i18n/locale_keys.g.dart | 121 +++++++++---------
.../custom_extensions/int_extensions.dart | 3 +
lib/src/utils/misc/toast/toast.dart | 19 ++-
pubspec.lock | 4 +-
pubspec.yaml | 2 +-
28 files changed, 392 insertions(+), 287 deletions(-)
diff --git a/README.md b/README.md
index de9abed7..89d0fd9e 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
Tachidesk Sorayomi
diff --git a/assets/locales/en_US.json b/assets/locales/en_US.json
index 96c345dc..2dcfce88 100644
--- a/assets/locales/en_US.json
+++ b/assets/locales/en_US.json
@@ -1,68 +1,17 @@
{
- "AuthType": {
- "basic": "Basic Auth",
- "none": "None"
- },
- "ChapterSort": {
- "fetchedDate": "By Fetched Data",
- "source": "By Source"
- },
- "DisplayMode": {
- "descriptiveList": "Descriptive List",
- "grid": "Grid",
- "list": "List"
- },
- "MangaSort": {
- "alphabetical": "Alphabetical",
- "dateAdded": "Date Added",
- "unread": "Unread"
- },
- "MangaStatus": {
- "cancelled": "Cancelled",
- "completed": "Completed",
- "licensed": "Licensed",
- "onHiatus": "On Hiatus",
- "ongoing": "Ongoing",
- "publishingFinished": "Publishing Finished",
- "unknown": "Unknown"
- },
- "ReaderMode": {
- "continuousHorizontalLTR": "Continuous Horizontal (LTR)",
- "continuousHorizontalRTL": "Continuous Horizontal (RTL)",
- "continuousVertical": "Continuous Vertical",
- "defaultReader": "Default",
- "singleHorizontalLTR": "Single Horizontal (LTR)",
- "singleHorizontalRTL": "Single Horizontal (RTL)",
- "singleVertical": "Single Vertical",
- "webtoon": "Webtoon"
- },
- "ReaderNavigationLayout": {
- "disabled": "Disabled",
- "edge": "Edge",
- "kindlish": "Kindle-ish",
- "lShaped": "L Shaped",
- "rightAndLeft": "Right and Left",
- "defaultNavigation": "Default"
- },
- "SourceType": {
- "filter": "Filter",
- "latest": "Latest",
- "popular": "Popular"
- },
- "ThemeMode": {
- "dark": "Dark",
- "light": "Light",
- "system": "System"
- },
"about": "About",
"add": "Add",
"addCategory": "Add Category",
"addCategoryHint": "Add new categories in settings",
"addToLibrary": "Add to Library",
+ "appearance": "Appearance",
"appTheme": "App Theme",
"appTitle": "Tachidesk Sorayomi",
- "appearance": "Appearance",
"artist": "Artist",
+ "AuthType": {
+ "basic": "Basic Auth",
+ "none": "None"
+ },
"backup": "Backup & Restore",
"badges": "Badges",
"baseAuthType": "Authentication Type",
@@ -87,6 +36,10 @@
},
"chapterNumber": "Chapter {number}",
"chapters": "Chapters",
+ "ChapterSort": {
+ "fetchedDate": "By Fetched Data",
+ "source": "By Source"
+ },
"checkForServerUpdates": "Check for Server updates",
"checkForUpdates": "Check for updates",
"client": "Client",
@@ -110,6 +63,11 @@
"discord": "Discord",
"display": "Display",
"displayMode": "Display Mode",
+ "DisplayMode": {
+ "descriptiveList": "Descriptive List",
+ "grid": "Grid",
+ "list": "List"
+ },
"downloaded": "Downloaded",
"downloads": "Downloads",
"edit": "Edit",
@@ -152,6 +110,20 @@
"loading": "Loading!",
"manga": "Manga",
"mangaSearch": "Search manga..",
+ "MangaSort": {
+ "alphabetical": "Alphabetical",
+ "dateAdded": "Date Added",
+ "unread": "Unread"
+ },
+ "MangaStatus": {
+ "cancelled": "Cancelled",
+ "completed": "Completed",
+ "licensed": "Licensed",
+ "ongoing": "Ongoing",
+ "onHiatus": "On Hiatus",
+ "publishingFinished": "Publishing Finished",
+ "unknown": "Unknown"
+ },
"missingExtension": "Missing Extensions",
"missingTrackers": "Missing Trackers",
"more": "More",
@@ -178,6 +150,7 @@
},
"nsfw18": "18+",
"numSelected": "{num} Selected",
+ "page": "Page: {number}",
"password": "Password",
"pause": "Pause",
"pending": "Pending",
@@ -185,9 +158,27 @@
"previousChapter": "Previous Chapter",
"reader": "Reader",
"readerMode": "Reading Mode",
+ "ReaderMode": {
+ "continuousHorizontalLTR": "Continuous Horizontal (LTR)",
+ "continuousHorizontalRTL": "Continuous Horizontal (RTL)",
+ "continuousVertical": "Continuous Vertical",
+ "defaultReader": "Default",
+ "singleHorizontalLTR": "Single Horizontal (LTR)",
+ "singleHorizontalRTL": "Single Horizontal (RTL)",
+ "singleVertical": "Single Vertical",
+ "webtoon": "Webtoon"
+ },
"readerNavigationLayout": "Navigation layout",
- "readerNavigationLayoutInvert": "Invert tapping",
+ "ReaderNavigationLayout": {
+ "defaultNavigation": "Default",
+ "disabled": "Disabled",
+ "edge": "Edge",
+ "kindlish": "Kindle-ish",
+ "lShaped": "L Shaped",
+ "rightAndLeft": "Right and Left"
+ },
"readerNavigationLayout_": "Navigation layout",
+ "readerNavigationLayoutInvert": "Invert tapping",
"readerSettingsView": "Reader Settings",
"reddit": "Reddit",
"refresh": "Refresh",
@@ -206,8 +197,8 @@
"savedImagePathTitle": "Image path saved to Clipboard",
"search": "Search...",
"searchGlobally": "Search Globally",
- "searchManga": "Search manga..",
"searchingForUpdates": "Searching for updates...",
+ "searchManga": "Search manga..",
"server": "Server",
"serverVersion": "Server version",
"setAsDefault": "Set as default",
@@ -225,7 +216,18 @@
"sortUnread": "Unread",
"source": "Source",
"sources": "Sources",
+ "SourceType": {
+ "filter": "Filter",
+ "latest": "Latest",
+ "popular": "Popular"
+ },
+ "start": "Start",
"status": "Status",
+ "ThemeMode": {
+ "dark": "Dark",
+ "light": "Light",
+ "system": "System"
+ },
"uninstall": "Uninstall",
"uninstalling": "Uninstalling",
"unknown": "Unknown",
@@ -234,6 +236,7 @@
"unknownSource": "Unknown Source",
"unread": "Unread",
"update": "Update",
+ "updateCompleted": "Update Completed",
"updates": "Updates",
"updatesSummary": "Updates Summary",
"updating": "Updating",
diff --git a/lib/src/features/about/presentation/about/widget/clipboard_list_tile.dart b/lib/src/features/about/presentation/about/widget/clipboard_list_tile.dart
index d851b55f..1a207ad6 100644
--- a/lib/src/features/about/presentation/about/widget/clipboard_list_tile.dart
+++ b/lib/src/features/about/presentation/about/widget/clipboard_list_tile.dart
@@ -23,7 +23,6 @@ class ClipboardListTile extends ConsumerWidget {
final String? subtitle;
@override
Widget build(BuildContext context, WidgetRef ref) {
- final Toast toast = ref.watch(toastProvider(context));
return ListTile(
title: Text(title),
subtitle: subtitle.isNotBlank ? Text(subtitle!) : null,
@@ -33,10 +32,9 @@ class ClipboardListTile extends ConsumerWidget {
Clipboard.setData(
ClipboardData(text: msg),
);
- toast.close();
- toast.show(
- LocaleKeys.copyMsg.tr(namedArgs: {"msg": msg}),
- );
+ ref.read(toastProvider(context)).instantShow(
+ LocaleKeys.copyMsg.tr(namedArgs: {"msg": msg}),
+ );
}
: null,
);
diff --git a/lib/src/features/browse_center/presentation/extension/extension_screen.dart b/lib/src/features/browse_center/presentation/extension/extension_screen.dart
index 5e4d618b..f0b66d0f 100644
--- a/lib/src/features/browse_center/presentation/extension/extension_screen.dart
+++ b/lib/src/features/browse_center/presentation/extension/extension_screen.dart
@@ -51,9 +51,8 @@ class ExtensionScreen extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
- final toast = ref.watch(toastProvider(context));
final extensionMapData = ref.watch(extensionMapFilteredAndQueriedProvider)
- ..showToastOnError(toast, withMicrotask: true);
+ ..showToastOnError(ref.read(toastProvider(context)), withMicrotask: true);
final extensionMap = {...?extensionMapData.valueOrNull};
final installed = extensionMap.remove("installed");
final update = extensionMap.remove("update");
diff --git a/lib/src/features/browse_center/presentation/extension/widgets/extension_list_tile.dart b/lib/src/features/browse_center/presentation/extension/widgets/extension_list_tile.dart
index 16c7ba50..ab41a46c 100644
--- a/lib/src/features/browse_center/presentation/extension/widgets/extension_list_tile.dart
+++ b/lib/src/features/browse_center/presentation/extension/widgets/extension_list_tile.dart
@@ -30,7 +30,6 @@ class ExtensionListTile extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final repository = ref.watch(extensionRepositoryProvider);
- final toast = ref.watch(toastProvider(context));
final isLoading = useState(false);
return ListTile(
key: key,
@@ -85,7 +84,7 @@ class ExtensionListTile extends HookConsumerWidget {
await refresh();
}))
- .showToastOnError(toast);
+ .showToastOnError(ref.read(toastProvider(context)));
isLoading.value = false;
} catch (e) {
//
@@ -114,7 +113,7 @@ class ExtensionListTile extends HookConsumerWidget {
await repository.installExtension(extension.pkgName!);
await refresh();
}))
- .showToastOnError(toast);
+ .showToastOnError(ref.read(toastProvider(context)));
isLoading.value = false;
} catch (e) {
//
diff --git a/lib/src/features/browse_center/presentation/source/source_screen.dart b/lib/src/features/browse_center/presentation/source/source_screen.dart
index ead69309..2e2cc85e 100644
--- a/lib/src/features/browse_center/presentation/source/source_screen.dart
+++ b/lib/src/features/browse_center/presentation/source/source_screen.dart
@@ -22,9 +22,8 @@ class SourceScreen extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
- final toast = ref.watch(toastProvider(context));
final sourceMapData = ref.watch(sourceMapFilteredProvider)
- ..showToastOnError(toast, withMicrotask: true);
+ ..showToastOnError(ref.read(toastProvider(context)), withMicrotask: true);
final sourceMap = {...?sourceMapData.valueOrNull};
final localSource = sourceMap.remove("localsourcelang");
final lastUsed = sourceMap.remove("lastUsed");
diff --git a/lib/src/features/library/presentation/category/edit_category_screen.dart b/lib/src/features/library/presentation/category/edit_category_screen.dart
index 54c56908..a54ca13d 100644
--- a/lib/src/features/library/presentation/category/edit_category_screen.dart
+++ b/lib/src/features/library/presentation/category/edit_category_screen.dart
@@ -24,9 +24,8 @@ class EditCategoryScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
- final toast = ref.watch(toastProvider(context));
final categoryList = ref.watch(categoryListProvider())
- ..showToastOnError(toast, withMicrotask: true);
+ ..showToastOnError(ref.read(toastProvider(context)), withMicrotask: true);
return Scaffold(
appBar: AppBar(
title: Text(LocaleKeys.editCategory.tr()),
diff --git a/lib/src/features/manga_book/presentation/manga_details/manga_details_screen.dart b/lib/src/features/manga_book/presentation/manga_details/manga_details_screen.dart
index d503d3a8..35c3333a 100644
--- a/lib/src/features/manga_book/presentation/manga_details/manga_details_screen.dart
+++ b/lib/src/features/manga_book/presentation/manga_details/manga_details_screen.dart
@@ -7,11 +7,14 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import '../../../../constants/app_sizes.dart';
import '../../../../i18n/locale_keys.g.dart';
+import '../../../../routes/router_config.dart';
import '../../../../utils/extensions/custom_extensions.dart';
+import '../../../../utils/misc/toast/toast.dart';
import '../../../../widgets/emoticons.dart';
import '../../domain/chapter/chapter_model.dart';
import '../../widgets/chapter_actions/multi_chapters_actions_bottom_app_bar.dart';
@@ -33,8 +36,20 @@ class MangaDetailsScreen extends HookConsumerWidget {
final chapterList = ref.watch(chapterListProvider);
final selectedChapters = useState