Skip to content

Commit 5e9fe20

Browse files
committed
add full (original) size preview
1 parent 88e0a6a commit 5e9fe20

3 files changed

Lines changed: 46 additions & 6 deletions

File tree

lib/views/image/image_view_page.dart

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +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';
36
import 'package:mime_type/mime_type.dart';
47
import 'package:photo_view/photo_view.dart';
58
import 'package:photo_view/photo_view_gallery.dart';
9+
import 'package:piwigo_ng/api/api_client.dart';
610
import 'package:piwigo_ng/api/api_error.dart';
711
import 'package:piwigo_ng/api/images.dart';
812
import 'package:piwigo_ng/components/popup_list_item.dart';
@@ -12,6 +16,7 @@ import 'package:piwigo_ng/services/preferences_service.dart';
1216
import 'package:piwigo_ng/utils/image_actions.dart';
1317
import 'package:piwigo_ng/utils/localizations.dart';
1418
import 'package:piwigo_ng/views/image/video_view.dart';
19+
import 'package:html_unescape/html_unescape.dart';
1520

1621
/// Media Full Screen page
1722
/// * Video player
@@ -61,6 +66,9 @@ class _ImageViewPageState extends State<ImageViewPage> {
6166
/// API Image Pagination
6267
int _imagePage = 0;
6368

69+
/// Server Cookie String
70+
String _serverCookie = '';
71+
6472
/// Initialize [PageView]
6573
@override
6674
void initState() {
@@ -74,6 +82,9 @@ class _ImageViewPageState extends State<ImageViewPage> {
7482
}
7583
}
7684
_pageController = PageController(initialPage: _page);
85+
86+
_loadCookies();
87+
7788
super.initState();
7889
}
7990

@@ -96,6 +107,17 @@ class _ImageViewPageState extends State<ImageViewPage> {
96107
});
97108
}
98109

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+
99121
/// Get image that is shown in the [PhotoViewGallery] at [_page]
100122
ImageModel get _currentImage => _imageList[_page];
101123

@@ -327,7 +349,7 @@ class _ImageViewPageState extends State<ImageViewPage> {
327349
child: GestureDetector(
328350
behavior: HitTestBehavior.opaque,
329351
onTap: () => _onToggleOverlay(MediaQuery.of(context).orientation),
330-
child: PhotoViewGallery.builder(
352+
child: _serverCookie == '' ? null : PhotoViewGallery.builder(
331353
/// Compatibility with PageView and PhotoView
332354
pageController: _pageController,
333355
onPageChanged: (page) => setState(() {
@@ -356,10 +378,20 @@ class _ImageViewPageState extends State<ImageViewPage> {
356378
);
357379
}
358380

381+
String imageUrl = '';
382+
if (Preferences.getImageFullScreenSize == 'full') {
383+
imageUrl = image.elementUrl ?? '';
384+
imageUrl = HtmlUnescape().convert(imageUrl);
385+
} else {
386+
imageUrl = image.getDerivativeFromString(Preferences.getImageFullScreenSize)?.url ?? '';
387+
}
388+
389+
ApiClient.cookieJar.loadForRequest(Uri.parse(imageUrl));
390+
359391
/// Default behavior: Zoomable image
360392
return PhotoViewGalleryPageOptions(
361393
imageProvider: NetworkImage(
362-
image.getDerivativeFromString(Preferences.getImageFullScreenSize)?.url ?? '',
394+
imageUrl, headers: {HttpHeaders.cookieHeader: _serverCookie},
363395
),
364396
maxScale: 2.0,
365397
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
@@ -58,6 +58,7 @@ dependencies:
5858
flutter_localizations:
5959
sdk: flutter
6060
intl: ^0.17.0 # Used for translations
61+
html_unescape: ^2.0.0
6162

6263
dev_dependencies:
6364
flutter_test:

0 commit comments

Comments
 (0)