Skip to content

Commit

Permalink
Pouvoir enregistrer les médias dans la galerie
Browse files Browse the repository at this point in the history
  • Loading branch information
johan-perso committed Mar 15, 2024
1 parent b17f0c9 commit 520fe23
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 1 deletion.
2 changes: 2 additions & 0 deletions ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@
<true/>
<key>NSPhotoLibraryUsageDescription</key>
<string>Stend doit avoir accès à votre galerie pour pouvoir partager des photos via celle-ci.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Stend doit avoir accès à votre galerie pour pouvoir télécharger des photos dans celle-ci.</string>
<key>NSCameraUsageDescription</key>
<string>Stend doit avoir accès à votre appareil photo pour pouvoir partager des photos via celui-ci.</string>
</dict>
Expand Down
57 changes: 56 additions & 1 deletion lib/pages/download.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gal/gal.dart';
import 'package:stendmobile/utils/format_bytes.dart';
import 'package:stendmobile/utils/format_date.dart';
import 'package:stendmobile/utils/show_snackbar.dart';
Expand Down Expand Up @@ -617,6 +618,7 @@ class _DownloadPageState extends State<DownloadPage> {
}

// On télécharge chaque transfert
bool savedInGallery = false;
for (var transfert in transfertsDownloads) {
debugPrint(transfert.toString());
// Vérifier les propriétés
Expand Down Expand Up @@ -687,14 +689,67 @@ class _DownloadPageState extends State<DownloadPage> {
// On ferme différents éléments
await sink.flush();
await sink.close();

// Si on souhaite enregistrer dans la galerie et que c'est une image ou une vidéo
if (box.read('saveMediasInGallery') == true) {
// Déterminer le type de fichier
var determinedFileType = fileName.split('.').last.toLowerCase();
if (determinedFileType == 'jpeg' || determinedFileType == 'jpg' || determinedFileType == 'png' || determinedFileType == 'gif' || determinedFileType == 'webp') {
determinedFileType = 'image';
} else if (determinedFileType == 'mp4' || determinedFileType == 'mov' || determinedFileType == 'avi' || determinedFileType == 'mkv' || determinedFileType == 'webm') {
determinedFileType = 'video';
}

// Si on a un type de fichier, on continue
if (determinedFileType == 'image' || determinedFileType == 'video') {
bool shouldContinue = false;

// On vérifie les permissions
final hasAccess = await Gal.hasAccess();
if (!hasAccess) {
await Gal.requestAccess();

final hasAccess = await Gal.hasAccess();
if (!hasAccess) {
if (!mounted) return;
showSnackBar(context, "La permission pour enregistrer dans la galerie a été refusée, le fichier se trouve dans le dossier téléchargement");
} else {
shouldContinue = true;
}
} else {
shouldContinue = true;
}

// Si on a la permission, on continue
if (shouldContinue) {
try {
// On enregistre le fichier dans la galerie
if (determinedFileType == 'image') {
await Gal.putImage(finalPath);
savedInGallery = true;
} else if (determinedFileType == 'video') {
await Gal.putVideo(finalPath);
savedInGallery = true;
}

// On supprime le fichier téléchargé
await file.delete();
} catch (e) {
debugPrint(e.toString());
if (!mounted) return;
showSnackBar(context, "Impossible d'enregistrer le fichier dans la galerie");
}
}
}
}
}

// On ferme l'alerte
lastScannedCode = null;
if (!mounted) return;
Navigator.pop(context);
HapticFeedback.heavyImpact();
showSnackBar(context, transfertsDownloads.length > 1 ? "${transfertsDownloads.length} fichiers ont été téléchargés" : "Le fichier a été téléchargé");
showSnackBar(context, "${transfertsDownloads.length > 1 ? "${transfertsDownloads.length} fichiers ont été téléchargés" : "Le fichier a été téléchargé"}${savedInGallery ? " dans la galerie" : " dans vos téléchargements"}");
}

@override
Expand Down
12 changes: 12 additions & 0 deletions lib/pages/settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,18 @@ class _SettingsPageState extends State<SettingsPage> {
) : const SizedBox.shrink(),

// Différents réglages
SwitchListTile(
title: const Text("Enregistrer dans la galerie"),
subtitle: const Text("Les médias téléchargés seront enregistrés dans la galerie"),
value: box.read('saveMediasInGallery') ?? false,
onChanged: (bool? value) {
HapticFeedback.lightImpact();
setState(() {
box.write('saveMediasInGallery', value!);
});
},
),

SwitchListTile(
title: const Text("Copier l'URL après un envoi"),
subtitle: const Text("Copie dans le presser-papier le lien d'un transfert lorsqu'il se termine"),
Expand Down

0 comments on commit 520fe23

Please sign in to comment.