Skip to content

Commit 8012d8e

Browse files
authored
Merge pull request #144 from xsm1997/Dev/v2
add full size preview & fix fc on Android 12L and 13
2 parents 6b5a1f3 + 2257135 commit 8012d8e

4 files changed

Lines changed: 49 additions & 6 deletions

File tree

android/app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,6 @@ flutter {
8282

8383
dependencies {
8484
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
85+
implementation "androidx.window:window:1.0.0"
8586
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
8687
}

lib/views/image/image_view_page.dart

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
import 'dart:io';
2+
13
import 'package:flutter/material.dart';
24
import 'package:flutter/services.dart';
5+
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
6+
import 'package:mime_type/mime_type.dart';
37
import 'package:photo_view/photo_view.dart';
48
import 'package:photo_view/photo_view_gallery.dart';
9+
import 'package:piwigo_ng/api/api_client.dart';
510
import 'package:piwigo_ng/api/api_error.dart';
611
import 'package:piwigo_ng/api/images.dart';
712
import 'package:piwigo_ng/components/popup_list_item.dart';
@@ -11,6 +16,7 @@ import 'package:piwigo_ng/services/preferences_service.dart';
1116
import 'package:piwigo_ng/utils/image_actions.dart';
1217
import 'package:piwigo_ng/utils/localizations.dart';
1318
import 'package:piwigo_ng/views/image/video_view.dart';
19+
import 'package:html_unescape/html_unescape.dart';
1420

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

69+
/// Server Cookie String
70+
String _serverCookie = '';
71+
6372
/// Initialize [PageView]
6473
@override
6574
void initState() {
@@ -73,6 +82,9 @@ class _ImageViewPageState extends State<ImageViewPage> {
7382
}
7483
}
7584
_pageController = PageController(initialPage: _page);
85+
86+
_loadCookies();
87+
7688
super.initState();
7789
}
7890

@@ -95,6 +107,17 @@ class _ImageViewPageState extends State<ImageViewPage> {
95107
});
96108
}
97109

110+
Future<void> _loadCookies() async {
111+
FlutterSecureStorage secureStorage = const FlutterSecureStorage();
112+
String? serverUrl = await secureStorage.read(key: 'SERVER_URL');
113+
List<Cookie> cookies = await ApiClient.cookieJar.loadForRequest(Uri.parse(serverUrl!));
114+
115+
String cookiesStr = cookies.map((cookie) => '${cookie.name}=${cookie.value}').join('; ');
116+
setState(() {
117+
_serverCookie = cookiesStr;
118+
});
119+
}
120+
98121
/// Get image that is shown in the [PhotoViewGallery] at [_page]
99122
ImageModel get _currentImage => _imageList[_page];
100123

@@ -330,7 +353,7 @@ class _ImageViewPageState extends State<ImageViewPage> {
330353
child: GestureDetector(
331354
behavior: HitTestBehavior.opaque,
332355
onTap: () => _onToggleOverlay(MediaQuery.of(context).orientation),
333-
child: PhotoViewGallery.builder(
356+
child: _serverCookie == '' ? null : PhotoViewGallery.builder(
334357
/// Compatibility with PageView and PhotoView
335358
pageController: _pageController,
336359
onPageChanged: (page) => setState(() {
@@ -358,13 +381,24 @@ class _ImageViewPageState extends State<ImageViewPage> {
358381
);
359382
}
360383

384+
String imageUrl = '';
385+
if (Preferences.getImageFullScreenSize == 'full') {
386+
imageUrl = image.elementUrl ?? '';
387+
imageUrl = HtmlUnescape().convert(imageUrl);
388+
} else {
389+
imageUrl = image.getDerivativeFromString(Preferences.getImageFullScreenSize)?.url ?? '';
390+
}
391+
392+
ApiClient.cookieJar.loadForRequest(Uri.parse(imageUrl));
393+
361394
// Default behavior: Zoomable image
395+
362396
return PhotoViewGalleryPageOptions(
363397
heroAttributes: PhotoViewHeroAttributes(
364398
tag: "<hero image ${image.id}>",
365399
),
366400
imageProvider: NetworkImage(
367-
image.getDerivativeFromString(Preferences.getImageFullScreenSize)?.url ?? '',
401+
imageUrl, headers: {HttpHeaders.cookieHeader: _serverCookie},
368402
),
369403
maxScale: 2.0,
370404
minScale: PhotoViewComputedScale.contained,

lib/views/settings/settings_view_page.dart

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
3737
late final Future<ApiResult<InfoModel>> _infoFuture;
3838

3939
late final List<String> _availableSizes;
40+
late final List<String> _availablePreviewSizes;
4041
late int _imageRowNumber;
4142
late bool _thumbnailTitle;
4243
late String _imageThumbnailSize;
@@ -61,6 +62,7 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
6162
_imageSort = Preferences.getImageSort;
6263
_albumThumbnailSize = Preferences.getAlbumThumbnailSize;
6364
_availableSizes = Preferences.getAvailableSizes;
65+
_availablePreviewSizes = Preferences.getAvailableSizes;
6466
_author = Preferences.getUploadAuthor ?? '';
6567
_stripMetadata = Preferences.getRemoveMetadata;
6668
_compressBeforeUpload = Preferences.getCompressUpload;
@@ -69,6 +71,11 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
6971
_quality = Preferences.getUploadQuality;
7072
_downloadNotification = Preferences.getDownloadNotification;
7173
_uploadNotification = Preferences.getUploadNotification;
74+
75+
if (!_availablePreviewSizes.contains('full')) {
76+
_availablePreviewSizes.add('full');
77+
}
78+
7279
super.initState();
7380
_infoFuture = getInfo();
7481
}
@@ -299,13 +306,13 @@ class _SettingsViewPageState extends State<SettingsViewPage> {
299306
});
300307
},
301308
selectedItemBuilder: (context) {
302-
return List.generate(_availableSizes.length, (index) {
303-
String size = _availableSizes[index];
309+
return List.generate(_availablePreviewSizes.length, (index) {
310+
String size = _availablePreviewSizes[index];
304311
return Center(child: Text("${thumbnailSize(size)}"));
305312
});
306313
},
307-
items: List.generate(_availableSizes.length, (index) {
308-
String size = _availableSizes[index];
314+
items: List.generate(_availablePreviewSizes.length, (index) {
315+
String size = _availablePreviewSizes[index];
309316
return DropdownMenuItem<String>(
310317
value: size,
311318
child: Text(

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dependencies:
5959
flutter_localizations:
6060
sdk: flutter
6161
intl: ^0.17.0 # Used for translations
62+
html_unescape: ^2.0.0
6263

6364
dev_dependencies:
6465
flutter_test:

0 commit comments

Comments
 (0)