@@ -42,6 +42,38 @@ Future<Map<String,dynamic>> fetchImages(String albumID, int page) async {
4242 }
4343}
4444
45+ Future <dynamic > getImageInfo (int imageId) async {
46+ Map <String , String > queries = {
47+ "format" : "json" ,
48+ "method" : "pwg.images.getInfo" ,
49+ };
50+ FormData formData = FormData .fromMap ({
51+ "image_id" : imageId
52+ });
53+ try {
54+ Response response = await API .dio.post ('ws.php' ,
55+ data: formData,
56+ queryParameters: queries
57+ );
58+
59+ if (response.statusCode == 200 ) {
60+ return json.decode (response.data);
61+ } else {
62+ return {
63+ 'stat' : 'fail' ,
64+ 'result' : response.statusMessage
65+ };
66+ }
67+ } catch (e) {
68+ var error = e as DioError ;
69+ return {
70+ 'stat' : 'fail' ,
71+ 'result' : error.message
72+ };
73+ }
74+ }
75+
76+
4577Future <bool > _requestPermissions () async {
4678 var permission = await Permission .storage.status;
4779 print (permission.isGranted);
@@ -149,6 +181,7 @@ Future<int> deleteImages(BuildContext context, List<int> imageIdList) async {
149181 ScaffoldMessenger .of (context).showSnackBar (
150182 errorSnackBar (context, '${response ['result' ]}' ),
151183 );
184+ break ;
152185 } else {
153186 nbSuccess++ ;
154187 }
@@ -187,6 +220,71 @@ Future<dynamic> deleteImage(int imageId) async {
187220 }
188221}
189222
223+ Future <int > removeImages (BuildContext context, List <int > imageIdList, String catId) async {
224+ int nbSuccess = 0 ;
225+ for (int id in imageIdList) {
226+ var response = await removeImage (id, catId);
227+ if (response['stat' ] == 'fail' ) {
228+ print (response);
229+ ScaffoldMessenger .of (context).hideCurrentSnackBar ();
230+ ScaffoldMessenger .of (context).showSnackBar (
231+ errorSnackBar (context, '${response ['result' ]}' ),
232+ );
233+ break ;
234+ } else {
235+ nbSuccess++ ;
236+ }
237+ }
238+ return nbSuccess;
239+ }
240+ Future <dynamic > removeImage (int imageId, String catId) async {
241+ var imageInfo = await getImageInfo (imageId);
242+ if (imageInfo['stat' ] == 'fail' ) return imageInfo;
243+
244+ List <String > categories = imageInfo['result' ]['categories' ].map <String >(
245+ (cat) => cat['id' ].toString ()
246+ ).toList ();
247+ categories.removeWhere ((cat) => cat == catId);
248+
249+ if (categories.isEmpty) {
250+ return await deleteImage (imageId);
251+ }
252+
253+ Map <String , String > queries = {
254+ "format" : "json" ,
255+ "method" : "pwg.images.setInfo" ,
256+ };
257+ FormData formData = FormData .fromMap ({
258+ "image_id" : imageId,
259+ "categories" : categories,
260+ "multiple_value_mode" : "replace"
261+ });
262+
263+ try {
264+ Response response = await API .dio.post ('ws.php' ,
265+ data: formData,
266+ queryParameters: queries
267+ );
268+
269+ print (response.data);
270+
271+ if (response.statusCode == 200 ) {
272+ return json.decode (response.data);
273+ } else {
274+ return {
275+ 'stat' : 'fail' ,
276+ 'result' : response.statusMessage
277+ };
278+ }
279+ } catch (e) {
280+ var error = e as DioError ;
281+ return {
282+ 'stat' : 'fail' ,
283+ 'result' : error.message
284+ };
285+ }
286+ }
287+
190288Future <int > moveImages (BuildContext context, List <dynamic > images, int category) async {
191289 int nbMoved = 0 ;
192290 for (var image in images) {
@@ -196,6 +294,7 @@ Future<int> moveImages(BuildContext context, List<dynamic> images, int category)
196294 ScaffoldMessenger .of (context).showSnackBar (
197295 errorSnackBar (context, '${response ['result' ]}' )
198296 );
297+ break ;
199298 } else {
200299 nbMoved++ ;
201300 }
@@ -251,6 +350,7 @@ Future<int> assignImages(BuildContext context, List<dynamic> images, int categor
251350 ScaffoldMessenger .of (context).showSnackBar (
252351 errorSnackBar (context, '${response ['result' ]}' )
253352 );
353+ break ;
254354 } else {
255355 nbAssigned++ ;
256356 }
0 commit comments