feat(cache): cleanup orphaned plexImageCache directory on startup

This commit is contained in:
edde746
2026-05-13 11:06:52 +02:00
parent 0e296f8659
commit fcbe459177
2 changed files with 18 additions and 1 deletions
+17 -1
View File
@@ -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<void> _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;
+1
View File
@@ -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');