瀏覽代碼

Show number of items in folders

vishnukvmd 4 年之前
父節點
當前提交
fff50cafee
共有 2 個文件被更改,包括 56 次插入19 次删除
  1. 18 3
      lib/db/files_db.dart
  2. 38 16
      lib/ui/backup_folder_selection_page.dart

+ 18 - 3
lib/db/files_db.dart

@@ -1,14 +1,14 @@
 import 'dart:io';
 
 import 'package:logging/logging.dart';
+import 'package:path/path.dart';
+import 'package:path_provider/path_provider.dart';
 import 'package:photos/models/backup_status.dart';
+import 'package:photos/models/file.dart';
 import 'package:photos/models/file_load_result.dart';
 import 'package:photos/models/file_type.dart';
 import 'package:photos/models/location.dart';
-import 'package:photos/models/file.dart';
-import 'package:path/path.dart';
 import 'package:sqflite/sqflite.dart';
-import 'package:path_provider/path_provider.dart';
 import 'package:sqflite_migration/sqflite_migration.dart';
 
 class FilesDB {
@@ -723,6 +723,21 @@ class FilesDB {
     }
   }
 
+  Future<Map<String, int>> getFileCountInDeviceFolders() async {
+    final db = await instance.database;
+    final rows = await db.rawQuery('''
+      SELECT COUNT($columnGeneratedID) as count, $columnDeviceFolder
+      FROM $table
+      WHERE $columnLocalID IS NOT NULL
+      GROUP BY $columnDeviceFolder
+    ''');
+    final result = Map<String, int>();
+    for (final row in rows) {
+      result[row[columnDeviceFolder]] = row["count"];
+    }
+    return result;
+  }
+
   Future<bool> doesFileExistInCollection(
       int uploadedFileID, int collectionID) async {
     final db = await instance.database;

+ 38 - 16
lib/ui/backup_folder_selection_page.dart

@@ -3,6 +3,7 @@ import 'dart:ui';
 import 'package:flutter/material.dart';
 import 'package:implicitly_animated_reorderable_list/implicitly_animated_reorderable_list.dart';
 import 'package:implicitly_animated_reorderable_list/transitions.dart';
+import 'package:logging/logging.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/db/files_db.dart';
@@ -31,11 +32,14 @@ class _BackupFolderSelectionPageState extends State<BackupFolderSelectionPage> {
   final Set<String> _allFolders = Set<String>();
   Set<String> _selectedFolders = Set<String>();
   List<File> _latestFiles;
+  Map<String, int> _itemCount;
 
   @override
   void initState() {
     _selectedFolders = Configuration.instance.getPathsToBackUp();
-    FilesDB.instance.getLatestLocalFiles().then((files) {
+    FilesDB.instance.getLatestLocalFiles().then((files) async {
+      _itemCount = await FilesDB.instance.getFileCountInDeviceFolders();
+      Logger("BackupFolderSelectionPage").info(_itemCount);
       setState(() {
         _latestFiles = files;
         for (final file in _latestFiles) {
@@ -189,7 +193,7 @@ class _BackupFolderSelectionPageState extends State<BackupFolderSelectionPage> {
     );
   }
 
-  Padding _getFileItem(File file) {
+  Widget _getFileItem(File file) {
     final isSelected = _selectedFolders.contains(file.deviceFolder);
     return Padding(
       padding: const EdgeInsets.only(bottom: 1, right: 4),
@@ -210,22 +214,40 @@ class _BackupFolderSelectionPageState extends State<BackupFolderSelectionPage> {
           child: Row(
             mainAxisAlignment: MainAxisAlignment.spaceBetween,
             children: [
-              Container(
-                child: Expanded(
-                  child: Row(
-                    children: [
-                      _getThumbnail(file),
-                      Padding(padding: EdgeInsets.all(10)),
-                      Expanded(
-                        child: Text(
-                          file.deviceFolder,
-                          style: TextStyle(fontSize: 16, height: 1.5),
-                          overflow: TextOverflow.clip,
+              Row(
+                children: [
+                  _getThumbnail(file),
+                  Padding(padding: EdgeInsets.all(10)),
+                  Container(
+                    child: Column(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      children: [
+                        SizedBox(
+                          width: 140,
+                          child: Text(
+                            file.deviceFolder,
+                            style: TextStyle(
+                              fontSize: 14,
+                              height: 1.5,
+                            ),
+                            overflow: TextOverflow.fade,
+                          ),
                         ),
-                      ),
-                    ],
+                        Padding(padding: EdgeInsets.all(2)),
+                        Text(
+                          _itemCount[file.deviceFolder].toString() +
+                              " item" +
+                              (_itemCount[file.deviceFolder] == 1 ? "" : "s"),
+                          textAlign: TextAlign.left,
+                          style: TextStyle(
+                            fontSize: 12,
+                            color: Colors.white.withOpacity(0.65),
+                          ),
+                        ),
+                      ],
+                    ),
                   ),
-                ),
+                ],
               ),
               Checkbox(
                 value: isSelected,