1+ import 'dart:io' ;
2+
13import 'package:flutter/material.dart' ;
24import 'package:flutter/services.dart' ;
5+ import 'package:flutter_secure_storage/flutter_secure_storage.dart' ;
36import 'package:mime_type/mime_type.dart' ;
47import 'package:photo_view/photo_view.dart' ;
58import 'package:photo_view/photo_view_gallery.dart' ;
9+ import 'package:piwigo_ng/api/api_client.dart' ;
610import 'package:piwigo_ng/api/api_error.dart' ;
711import 'package:piwigo_ng/api/images.dart' ;
812import 'package:piwigo_ng/components/popup_list_item.dart' ;
@@ -12,6 +16,7 @@ import 'package:piwigo_ng/services/preferences_service.dart';
1216import 'package:piwigo_ng/utils/image_actions.dart' ;
1317import 'package:piwigo_ng/utils/localizations.dart' ;
1418import '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,
0 commit comments