diff --git a/lib/main.dart b/lib/main.dart index 1ce72fea..d3335bb9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:io' show Platform, ProcessInfo; +import 'dart:io' show Directory, Platform, ProcessInfo; import 'dart:ui' show AppExitResponse; import 'package:flutter/foundation.dart'; // ignore: depend_on_referenced_packages @@ -33,6 +33,7 @@ import 'services/settings_service.dart'; import 'utils/platform_detector.dart'; import 'services/apple_tv_remote_touch_service.dart'; import 'services/discord_rpc_service.dart'; +import 'package:path_provider/path_provider.dart'; import 'services/image_cache_service.dart'; import 'services/gamepad_service.dart'; import 'services/trakt/trakt_scrobble_service.dart'; @@ -158,6 +159,21 @@ Future _bootstrapApp() async { await initializeDateFormatting(savedLocale.languageCode, null); + // One-time cleanup of the old flutter_cache_manager image cache directory + // (replaced by cached_network_image_ce in a prior refactor). + if (!settings.read(SettingsService.cleanedOldImageCache)) { + try { + final tempDir = await getTemporaryDirectory(); + final oldCacheDir = Directory('${tempDir.path}/plexImageCache'); + if (await oldCacheDir.exists()) { + await oldCacheDir.delete(recursive: true); + } + } catch (_) { + // Best-effort; the directory may be locked or already partial. + } + await settings.write(SettingsService.cleanedOldImageCache, true); + } + // Configure image cache — keep budget modest to leave headroom for Skia decode buffers if (PlatformDetector.isDesktopOS()) { PaintingBinding.instance.imageCache.maximumSize = 1000; diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 0cbc8698..5c62d945 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -287,6 +287,7 @@ class SettingsService extends BaseSharedPreferencesService { ); static const subtitleBold = BoolPref('subtitle_bold'); static const subtitleItalic = BoolPref('subtitle_italic'); + static const cleanedOldImageCache = BoolPref('cleaned_old_image_cache'); static const rememberTrackSelections = BoolPref('remember_track_selections', defaultValue: true); static const showChapterMarkersOnTimeline = BoolPref('show_chapter_markers_on_timeline', defaultValue: true); static const clickVideoTogglesPlayback = BoolPref('click_video_toggles_playback');