show all collection of file in file info + remaned RawExifButton file

This commit is contained in:
ashilkn 2022-09-06 16:57:39 +05:30
parent f51016c995
commit a85f2229a7
3 changed files with 96 additions and 26 deletions

View file

@ -1273,6 +1273,26 @@ class FilesDB {
return result;
}
Future<Set<int>> getAllCollectionIDsOfFile(
int uploadedFileID,
int ownerID,
) async {
final db = await instance.database;
final results = await db.query(
table,
where:
'$columnUploadedFileID = ? AND $columnOwnerID = ? AND $columnCollectionID != -1',
columns: [columnCollectionID],
whereArgs: [uploadedFileID, ownerID],
distinct: true,
);
final Set<int> collectionIDsOfFile = {};
for (var result in results) {
collectionIDsOfFile.add(result['collection_id']);
}
return collectionIDsOfFile;
}
List<File> _convertToFiles(List<Map<String, dynamic>> results) {
final List<File> files = [];
for (final result in results) {

View file

@ -3,14 +3,15 @@ import "package:flutter/cupertino.dart";
import "package:flutter/material.dart";
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import "package:photos/core/configuration.dart";
import 'package:photos/db/files_db.dart';
import "package:photos/ente_theme_data.dart";
import 'package:photos/models/collection.dart';
import 'package:photos/models/collection_items.dart';
import "package:photos/models/file.dart";
import "package:photos/models/file_type.dart";
import "package:photos/services/collections_service.dart";
import 'package:photos/services/collections_service.dart';
import 'package:photos/ui/common/DividerWithPadding.dart';
import 'package:photos/ui/viewer/file/RawExifButton.dart';
import 'package:photos/ui/common/loading_widget.dart';
import 'package:photos/ui/viewer/file/raw_exif_button.dart';
import 'package:photos/ui/viewer/gallery/collection_page.dart';
import "package:photos/utils/date_time_util.dart";
import "package:photos/utils/exif_util.dart";
@ -62,6 +63,10 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
@override
Widget build(BuildContext context) {
final file = widget.file;
final allCollectionIDsOfFile = FilesDB.instance.getAllCollectionIDsOfFile(
file.uploadedFileID,
Configuration.instance.getUserID(),
);
final dateTime = DateTime.fromMicrosecondsSinceEpoch(file.creationTime);
final dateTimeForUpdationTime =
DateTime.fromMicrosecondsSinceEpoch(file.updationTime);
@ -198,29 +203,74 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
showExifListTile
? const DividerWithPadding(left: 70, right: 20)
: const SizedBox.shrink(),
ListTile(
SizedBox(
height: 62,
child: ListTile(
leading: const Padding(
padding: EdgeInsets.only(left: 6),
child: Icon(Icons.folder_outlined),
),
title: GestureDetector(
title: FutureBuilder(
future: allCollectionIDsOfFile,
builder: (context, snapshot) {
if (snapshot.hasData) {
final Set<int> collectionIDs = snapshot.data;
final collections = [];
for (var collectionID in collectionIDs) {
collections.add(
CollectionsService.instance.getCollectionByID(collectionID),
);
}
return ListView.builder(
itemCount: collections.length,
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return GestureDetector(
onTap: () {
if (file.collectionID != null) {
Navigator.pop(context); // info dialog
final Collection c = CollectionsService.instance
.getCollectionByID(file.collectionID);
routeToPage(
context,
CollectionPage(CollectionWithThumbnail(c, null)),
CollectionPage(
CollectionWithThumbnail(collections[index], null),
),
);
}
},
child: Container(
margin: const EdgeInsets.only(
top: 10,
bottom: 18,
right: 8,
),
decoration: BoxDecoration(
color: Theme.of(context)
.colorScheme
.inverseBackgroundColor
.withOpacity(0.08),
borderRadius: const BorderRadius.all(
Radius.circular(8),
),
),
child: Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Text(
file.collectionID != null
? CollectionsService.instance
.getCollectionByID(file.collectionID)
.name
: file.deviceFolder,
collections[index].name,
style: Theme.of(context).textTheme.subtitle2,
overflow: TextOverflow.ellipsis,
),
),
),
),
);
},
);
} else if (snapshot.hasError) {
return const Text("Oops, Something went wrong.");
} else {
return const EnteLoadingWidget();
}
},
),
),
),