Skip to content

Commit

Permalink
Merge pull request #144 from xsm1997/Dev/v2
Browse files Browse the repository at this point in the history
add full size preview & fix fc on Android 12L and 13
  • Loading branch information
remi-martin authored Feb 28, 2023
2 parents 6b5a1f3 + 2257135 commit 8012d8e
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 6 deletions.
1 change: 1 addition & 0 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,6 @@ flutter {

dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "androidx.window:window:1.0.0"
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}
38 changes: 36 additions & 2 deletions lib/views/image/image_view_page.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:mime_type/mime_type.dart';
import 'package:photo_view/photo_view.dart';
import 'package:photo_view/photo_view_gallery.dart';
import 'package:piwigo_ng/api/api_client.dart';
import 'package:piwigo_ng/api/api_error.dart';
import 'package:piwigo_ng/api/images.dart';
import 'package:piwigo_ng/components/popup_list_item.dart';
Expand All @@ -11,6 +16,7 @@ import 'package:piwigo_ng/services/preferences_service.dart';
import 'package:piwigo_ng/utils/image_actions.dart';
import 'package:piwigo_ng/utils/localizations.dart';
import 'package:piwigo_ng/views/image/video_view.dart';
import 'package:html_unescape/html_unescape.dart';

/// Media Full Screen page
/// * Video player
Expand Down Expand Up @@ -60,6 +66,9 @@ class _ImageViewPageState extends State<ImageViewPage> {
/// API Image Pagination
int _imagePage = 0;

/// Server Cookie String
String _serverCookie = '';

/// Initialize [PageView]
@override
void initState() {
Expand All @@ -73,6 +82,9 @@ class _ImageViewPageState extends State<ImageViewPage> {
}
}
_pageController = PageController(initialPage: _page);

_loadCookies();

super.initState();
}

Expand All @@ -95,6 +107,17 @@ class _ImageViewPageState extends State<ImageViewPage> {
});
}

Future<void> _loadCookies() async {
FlutterSecureStorage secureStorage = const FlutterSecureStorage();
String? serverUrl = await secureStorage.read(key: 'SERVER_URL');
List<Cookie> cookies = await ApiClient.cookieJar.loadForRequest(Uri.parse(serverUrl!));

String cookiesStr = cookies.map((cookie) => '${cookie.name}=${cookie.value}').join('; ');
setState(() {
_serverCookie = cookiesStr;
});
}

/// Get image that is shown in the [PhotoViewGallery] at [_page]
ImageModel get _currentImage => _imageList[_page];

Expand Down Expand Up @@ -330,7 +353,7 @@ class _ImageViewPageState extends State<ImageViewPage> {
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => _onToggleOverlay(MediaQuery.of(context).orientation),
child: PhotoViewGallery.builder(
child: _serverCookie == '' ? null : PhotoViewGallery.builder(
/// Compatibility with PageView and PhotoView
pageController: _pageController,
onPageChanged: (page) => setState(() {
Expand Down Expand Up @@ -358,13 +381,24 @@ class _ImageViewPageState extends State<ImageViewPage> {
);
}

String imageUrl = '';
if (Preferences.getImageFullScreenSize == 'full') {
imageUrl = image.elementUrl ?? '';
imageUrl = HtmlUnescape().convert(imageUrl);
} else {
imageUrl = image.getDerivativeFromString(Preferences.getImageFullScreenSize)?.url ?? '';
}

ApiClient.cookieJar.loadForRequest(Uri.parse(imageUrl));

// Default behavior: Zoomable image

return PhotoViewGalleryPageOptions(
heroAttributes: PhotoViewHeroAttributes(
tag: "<hero image ${image.id}>",
),
imageProvider: NetworkImage(
image.getDerivativeFromString(Preferences.getImageFullScreenSize)?.url ?? '',
imageUrl, headers: {HttpHeaders.cookieHeader: _serverCookie},
),
maxScale: 2.0,
minScale: PhotoViewComputedScale.contained,
Expand Down
15 changes: 11 additions & 4 deletions lib/views/settings/settings_view_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
late final Future<ApiResult<InfoModel>> _infoFuture;

late final List<String> _availableSizes;
late final List<String> _availablePreviewSizes;
late int _imageRowNumber;
late bool _thumbnailTitle;
late String _imageThumbnailSize;
Expand All @@ -61,6 +62,7 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
_imageSort = Preferences.getImageSort;
_albumThumbnailSize = Preferences.getAlbumThumbnailSize;
_availableSizes = Preferences.getAvailableSizes;
_availablePreviewSizes = Preferences.getAvailableSizes;
_author = Preferences.getUploadAuthor ?? '';
_stripMetadata = Preferences.getRemoveMetadata;
_compressBeforeUpload = Preferences.getCompressUpload;
Expand All @@ -69,6 +71,11 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
_quality = Preferences.getUploadQuality;
_downloadNotification = Preferences.getDownloadNotification;
_uploadNotification = Preferences.getUploadNotification;

if (!_availablePreviewSizes.contains('full')) {
_availablePreviewSizes.add('full');
}

super.initState();
_infoFuture = getInfo();
}
Expand Down Expand Up @@ -299,13 +306,13 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
});
},
selectedItemBuilder: (context) {
return List.generate(_availableSizes.length, (index) {
String size = _availableSizes[index];
return List.generate(_availablePreviewSizes.length, (index) {
String size = _availablePreviewSizes[index];
return Center(child: Text("${thumbnailSize(size)}"));
});
},
items: List.generate(_availableSizes.length, (index) {
String size = _availableSizes[index];
items: List.generate(_availablePreviewSizes.length, (index) {
String size = _availablePreviewSizes[index];
return DropdownMenuItem<String>(
value: size,
child: Text(
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ dependencies:
flutter_localizations:
sdk: flutter
intl: ^0.17.0 # Used for translations
html_unescape: ^2.0.0

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 8012d8e

Please sign in to comment.