fix(mobile): setting to always display remote assets (#3044)

This commit is contained in:
Fynn Petersen-Frey 2023-07-01 03:47:44 +02:00 committed by GitHub
parent 5869648f19
commit 615893be38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 26 additions and 6 deletions

View file

@ -5,6 +5,8 @@
"advanced_settings_tile_title": "Advanced",
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
"advanced_settings_troubleshooting_title": "Troubleshooting",
"advanced_settings_prefer_remote_title": "Prefer remote images",
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
"album_info_card_backup_album_excluded": "EXCLUDED",
"album_info_card_backup_album_included": "INCLUDED",
"album_thumbnail_card_item": "1 item",
@ -288,4 +290,4 @@
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89",
"all_people_page_title": "People"
}
}

View file

@ -131,7 +131,8 @@ class GalleryViewerPage extends HookConsumerWidget {
if (index < totalAssets && index >= 0) {
final asset = loadAsset(index);
if (asset.isLocal) {
if (!asset.isRemote ||
asset.isLocal && !Store.get(StoreKey.preferRemoteImage, false)) {
// Preload the local asset
precacheImage(localImageProvider(asset), context);
} else {
@ -459,7 +460,8 @@ class GalleryViewerPage extends HookConsumerWidget {
});
ImageProvider imageProvider(Asset asset) {
if (asset.isLocal) {
if (!asset.isRemote ||
asset.isLocal && !Store.get(StoreKey.preferRemoteImage, false)) {
return localImageProvider(asset);
} else {
if (isLoadOriginal.value) {
@ -518,7 +520,9 @@ class GalleryViewerPage extends HookConsumerWidget {
loadingBuilder: isLoadPreview.value
? (context, event) {
final a = asset();
if (!a.isLocal) {
if (!a.isLocal ||
(a.isRemote &&
Store.get(StoreKey.preferRemoteImage, false))) {
// Use the WEBP Thumbnail as a placeholder for the JPEG thumbnail to achieve
// Three-Stage Loading (WEBP -> JPEG -> Original)
final webPThumbnail = CachedNetworkImage(

View file

@ -44,7 +44,8 @@ enum AppSettingsEnum<T> {
0,
),
advancedTroubleshooting<bool>(StoreKey.advancedTroubleshooting, null, false),
logLevel<int>(StoreKey.logLevel, null, 5) // Level.INFO = 5
logLevel<int>(StoreKey.logLevel, null, 5), // Level.INFO = 5
preferRemoteImage<bool>(StoreKey.preferRemoteImage, null, false),
;
const AppSettingsEnum(this.storeKey, this.hiveKey, this.defaultValue);

View file

@ -16,6 +16,8 @@ class AdvancedSettings extends HookConsumerWidget {
final isEnabled =
useState(AppSettingsEnum.advancedTroubleshooting.defaultValue);
final levelId = useState(AppSettingsEnum.logLevel.defaultValue);
final preferRemote =
useState(AppSettingsEnum.preferRemoteImage.defaultValue);
useEffect(
() {
@ -23,6 +25,8 @@ class AdvancedSettings extends HookConsumerWidget {
AppSettingsEnum.advancedTroubleshooting,
);
levelId.value = appSettingService.getSetting(AppSettingsEnum.logLevel);
preferRemote.value =
appSettingService.getSetting(AppSettingsEnum.preferRemoteImage);
return null;
},
[],
@ -77,6 +81,13 @@ class AdvancedSettings extends HookConsumerWidget {
activeColor: Theme.of(context).primaryColor,
),
),
SettingsSwitchListTile(
appSettingService: appSettingService,
valueNotifier: preferRemote,
settingsEnum: AppSettingsEnum.preferRemoteImage,
title: "advanced_settings_prefer_remote_title".tr(),
subtitle: "advanced_settings_prefer_remote_subtitle".tr(),
),
],
);
}

View file

@ -173,6 +173,7 @@ enum StoreKey<T> {
selectedAlbumSortOrder<int>(113, type: int),
advancedTroubleshooting<bool>(114, type: bool),
logLevel<int>(115, type: int),
preferRemoteImage<bool>(116, type: bool),
;
const StoreKey(

View file

@ -43,7 +43,8 @@ class ImmichImage extends StatelessWidget {
);
}
final Asset asset = this.asset!;
if (asset.isLocal) {
if (!asset.isRemote ||
(asset.isLocal && !Store.get(StoreKey.preferRemoteImage, false))) {
return Image(
image: AssetEntityImageProvider(
asset.local!,