From 91c96d70cce3b52b488afe42a9970de482f37f20 Mon Sep 17 00:00:00 2001 From: jideguru Date: Fri, 16 Jun 2023 20:51:10 +0100 Subject: [PATCH] fix: check if book file is not deleted before opening epub reader --- .../screens/book_details_screen.dart | 23 +++++++++-- .../downloads/downloads_state_notifier.dart | 2 +- .../downloads/screens/download_screen.dart | 2 +- macos/Podfile | 2 +- macos/Podfile.lock | 38 ++++++++++--------- macos/Runner.xcodeproj/project.pbxproj | 9 +++-- 6 files changed, 48 insertions(+), 28 deletions(-) diff --git a/lib/src/features/book_details/screens/book_details_screen.dart b/lib/src/features/book_details/screens/book_details_screen.dart index 14406cc..6c6c451 100644 --- a/lib/src/features/book_details/screens/book_details_screen.dart +++ b/lib/src/features/book_details/screens/book_details_screen.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_ebook_app/src/features/common/data/notifiers/favorites/favorites_state_notifier.dart'; @@ -284,7 +286,7 @@ class _DownloadButton extends ConsumerWidget { } final book = books.firstWhere((element) => element['id'] == id); return TextButton( - onPressed: () => openBook(book['path'], context), + onPressed: () => openBook(book['path'], context, ref), child: Text( 'Read Book'.toUpperCase(), style: TextStyle( @@ -318,8 +320,23 @@ class _DownloadButton extends ConsumerWidget { ), ); - Future openBook(String path, BuildContext context) async { - MyRouter.pushPage(context, EpubScreen.fromPath(filePath: path)); + Future openBook( + String path, + BuildContext context, + WidgetRef ref, + ) async { + File bookFile = File(path); + if (bookFile.existsSync()) { + MyRouter.pushPage(context, EpubScreen.fromPath(filePath: path)); + } else { + const snackBar = SnackBar( + content: Text( + 'Could not find the book file. Please download it again.', + ), + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); + ref.read(downloadsStateNotifierProvider.notifier).deleteBook(id); + } } } diff --git a/lib/src/features/common/data/notifiers/downloads/downloads_state_notifier.dart b/lib/src/features/common/data/notifiers/downloads/downloads_state_notifier.dart index dfb287a..62ecd41 100644 --- a/lib/src/features/common/data/notifiers/downloads/downloads_state_notifier.dart +++ b/lib/src/features/common/data/notifiers/downloads/downloads_state_notifier.dart @@ -38,7 +38,7 @@ class DownloadsStateNotifier extends StateNotifier { await _repository.addBook(book, id); } - Future deleteBook(Map book, id) async { + Future deleteBook(String id) async { await _repository.deleteBook(id); } } diff --git a/lib/src/features/downloads/screens/download_screen.dart b/lib/src/features/downloads/screens/download_screen.dart index a46e774..2bf1370 100644 --- a/lib/src/features/downloads/screens/download_screen.dart +++ b/lib/src/features/downloads/screens/download_screen.dart @@ -53,7 +53,7 @@ class _DownloadsScreenState extends ConsumerState { onDismissed: (d) { ref .watch(downloadsStateNotifierProvider.notifier) - .deleteBook(book, book['id']); + .deleteBook(book['id']); }, child: InkWell( onTap: () async { diff --git a/macos/Podfile b/macos/Podfile index dade8df..049abe2 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 5d01b55..63ab7ec 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -3,11 +3,13 @@ PODS: - FMDB (2.7.5): - FMDB/standard (= 2.7.5) - FMDB/standard (2.7.5) - - package_info_plus_macos (0.0.1): + - path_provider_foundation (0.0.1): + - Flutter - FlutterMacOS - - path_provider_macos (0.0.1): + - share_plus_macos (0.0.1): - FlutterMacOS - - shared_preferences_macos (0.0.1): + - shared_preferences_foundation (0.0.1): + - Flutter - FlutterMacOS - sqflite (0.0.2): - FlutterMacOS @@ -17,9 +19,9 @@ PODS: DEPENDENCIES: - FlutterMacOS (from `Flutter/ephemeral`) - - package_info_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus_macos/macos`) - - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - share_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) @@ -30,26 +32,26 @@ SPEC REPOS: EXTERNAL SOURCES: FlutterMacOS: :path: Flutter/ephemeral - package_info_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus_macos/macos - path_provider_macos: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos - shared_preferences_macos: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + share_plus_macos: + :path: Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin sqflite: :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos url_launcher_macos: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos SPEC CHECKSUMS: - FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - package_info_plus_macos: f010621b07802a241d96d01876d6705f15e77c1c - path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f - shared_preferences_macos: 480ce071d0666e37cef23fe6c702293a3d21799e + path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9 + share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4 + shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472 sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea - url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3 + url_launcher_macos: 5335912b679c073563f29d89d33d10d459f95451 -PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c +PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7 COCOAPODS: 1.11.3 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 743c5cf..21a4d06 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -256,6 +256,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -404,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -483,7 +484,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -530,7 +531,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule;