device_folder_page.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import 'package:flutter/material.dart';
  2. import 'package:photos/core/configuration.dart';
  3. import 'package:photos/core/event_bus.dart';
  4. import 'package:photos/db/device_files_db.dart';
  5. import 'package:photos/db/files_db.dart';
  6. import 'package:photos/ente_theme_data.dart';
  7. import 'package:photos/events/backup_folders_updated_event.dart';
  8. import 'package:photos/events/files_updated_event.dart';
  9. import 'package:photos/events/local_photos_updated_event.dart';
  10. import 'package:photos/models/device_collection.dart';
  11. import 'package:photos/models/gallery_type.dart';
  12. import 'package:photos/models/selected_files.dart';
  13. import 'package:photos/ui/viewer/gallery/gallery.dart';
  14. import 'package:photos/ui/viewer/gallery/gallery_app_bar_widget.dart';
  15. import 'package:photos/ui/viewer/gallery/gallery_overlay_widget.dart';
  16. class DeviceFolderPage extends StatelessWidget {
  17. final DeviceCollection deviceCollection;
  18. final _selectedFiles = SelectedFiles();
  19. DeviceFolderPage(this.deviceCollection, {Key key}) : super(key: key);
  20. @override
  21. Widget build(Object context) {
  22. final gallery = Gallery(
  23. asyncLoader: (creationStartTime, creationEndTime, {limit, asc}) {
  24. return FilesDB.instance.getFilesInDeviceCollection(
  25. deviceCollection,
  26. creationStartTime,
  27. creationEndTime,
  28. limit: limit,
  29. asc: asc,
  30. );
  31. },
  32. reloadEvent: Bus.instance.on<LocalPhotosUpdatedEvent>(),
  33. removalEventTypes: const {
  34. EventType.deletedFromDevice,
  35. EventType.deletedFromEverywhere,
  36. },
  37. tagPrefix: "device_folder:" + deviceCollection.name,
  38. selectedFiles: _selectedFiles,
  39. header: Configuration.instance.hasConfiguredAccount()
  40. ? BackupConfigurationHeaderWidget(deviceCollection)
  41. : const SizedBox.shrink(),
  42. initialFiles: [deviceCollection.thumbnail],
  43. );
  44. return Scaffold(
  45. appBar: PreferredSize(
  46. preferredSize: const Size.fromHeight(50.0),
  47. child: GalleryAppBarWidget(
  48. GalleryType.localFolder,
  49. deviceCollection.name,
  50. _selectedFiles,
  51. deviceCollection: deviceCollection,
  52. ),
  53. ),
  54. body: Stack(
  55. alignment: Alignment.bottomCenter,
  56. children: [
  57. gallery,
  58. GalleryOverlayWidget(
  59. GalleryType.localFolder,
  60. _selectedFiles,
  61. )
  62. ],
  63. ),
  64. );
  65. }
  66. }
  67. class BackupConfigurationHeaderWidget extends StatefulWidget {
  68. final DeviceCollection deviceCollection;
  69. const BackupConfigurationHeaderWidget(this.deviceCollection, {Key key})
  70. : super(key: key);
  71. @override
  72. State<BackupConfigurationHeaderWidget> createState() =>
  73. _BackupConfigurationHeaderWidgetState();
  74. }
  75. class _BackupConfigurationHeaderWidgetState
  76. extends State<BackupConfigurationHeaderWidget> {
  77. bool _isBackedUp;
  78. @override
  79. void initState() {
  80. _isBackedUp = widget.deviceCollection.shouldBackup;
  81. super.initState();
  82. }
  83. @override
  84. Widget build(BuildContext context) {
  85. return Container(
  86. padding: const EdgeInsets.only(left: 20, right: 12, top: 4, bottom: 4),
  87. margin: const EdgeInsets.only(bottom: 12),
  88. color: Theme.of(context).colorScheme.backupEnabledBgColor,
  89. child: Row(
  90. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  91. children: [
  92. _isBackedUp
  93. ? const Text("Backup enabled")
  94. : Text(
  95. "Backup disabled",
  96. style: TextStyle(
  97. color: Theme.of(context)
  98. .colorScheme
  99. .defaultTextColor
  100. .withOpacity(0.7),
  101. ),
  102. ),
  103. Switch(
  104. value: _isBackedUp,
  105. onChanged: (value) async {
  106. await FilesDB.instance.updateDevicePathSyncStatus(
  107. {widget.deviceCollection.id: value},
  108. );
  109. _isBackedUp = value;
  110. setState(() {});
  111. Bus.instance.fire(BackupFoldersUpdatedEvent());
  112. },
  113. ),
  114. ],
  115. ),
  116. );
  117. }
  118. }