Skip to content

Commit

Permalink
Remove the need to restart app to toggle auto sync
Browse files Browse the repository at this point in the history
  • Loading branch information
dhzdhd committed Jun 28, 2023
1 parent a057df8 commit b3091a4
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 38 deletions.
8 changes: 4 additions & 4 deletions lib/src/accounts/controllers/folder_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import 'package:syncvault/src/accounts/models/auth_provider_model.dart';
import 'package:syncvault/src/accounts/models/folder_model.dart';
import 'package:syncvault/src/accounts/services/drive_service.dart';
import 'package:syncvault/errors.dart';
import 'package:watcher/watcher.dart';

final folderProvider =
StateNotifierProvider<FolderNotifier, List<FolderModel>>((ref) {
return FolderNotifier(ref);
});
final folderProvider = StateNotifierProvider<FolderNotifier, List<FolderModel>>(
(ref) => FolderNotifier(ref),
);

class FolderNotifier extends StateNotifier<List<FolderModel>> {
FolderNotifier(this.ref) : super(init());
Expand Down
7 changes: 5 additions & 2 deletions lib/src/accounts/services/drive_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,6 @@ class OneDrive implements DriveService {
'$basePath/items/${idMap[parentFolderDir.path]}:/$fileName:/createUploadSession',
);

print(uri.toString());

final response = await dio.postUri<Map<String, dynamic>>(
uri,
options: authOptions,
Expand All @@ -184,6 +182,11 @@ class OneDrive implements DriveService {
final uploadUri = Uri.parse(response.data!['uploadUrl']);
final bytes = await file.readAsBytes();

if (bytes.isEmpty) {
// Throws Content-Range not found if file is empty
continue;
}

await dio.putUri(
uploadUri,
options: Options(
Expand Down
61 changes: 29 additions & 32 deletions lib/src/home/views/home_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,48 +33,48 @@ class _HomeViewState extends ConsumerState<HomeView> {

@override
void initState() {
super.initState();
final folders = ref
.read(folderProvider)
.where((element) => element.isAutoSync)
.toList();
final settings = ref.read(settingsProvider);

final folders = ref.read(folderProvider).toList();
_watchers = folders.map((e) => DirectoryWatcher(e.folderPath)).toList();

for (int i = 0; i < _watchers.length; i++) {
_watchers[i].events.listen((event) async {
switch (event.type) {
case ChangeType.ADD || ChangeType.MODIFY:
{
print(event);
final result = await ref.watch(folderProvider.notifier).upload(
folders[i],
some(event.path),
);

result.match((l) => print(l), (r) => print(r));
}
case ChangeType.REMOVE when folders[i].isDeletionEnabled:
{
print(event);
}
}
});
}
super.initState();
}

@override
void dispose() {
for (DirectoryWatcher i in _watchers) {
i.events.drain();
}

super.dispose();
}

@override
Widget build(BuildContext context) {
useEffect(() {
final folders = ref.watch(folderProvider).toList();

for (int i = 0; i < _watchers.length; i++) {
_watchers[i].events.listen((event) async {
print(event);
switch (event.type) {
case ChangeType.ADD || ChangeType.MODIFY when folders[i].isAutoSync:
{
final result = await ref.read(folderProvider.notifier).upload(
folders[i],
some(event.path),
);

result.match((l) => print(l), (r) => print(r));
}
case ChangeType.REMOVE when folders[i].isDeletionEnabled:
{
ref.read(folderProvider.notifier).delete(folders[i]);
}
}
});
}

return null;
}, []);

final folderInfo = ref.watch(folderProvider);
final progressVisibleList = useState(List.generate(
folderInfo.length,
Expand Down Expand Up @@ -272,9 +272,6 @@ class _HomeViewState extends ConsumerState<HomeView> {
ref
.watch(folderProvider.notifier)
.toggleAutoSync(e);
context.showWarningSnackBar(
'Restart app to see changes',
);
},
),
),
Expand Down

0 comments on commit b3091a4

Please sign in to comment.