diff --git a/photograb/main.py b/photograb/main.py index 49eabe9..0481e11 100644 --- a/photograb/main.py +++ b/photograb/main.py @@ -27,31 +27,40 @@ def main(opts): # TODO: gracefully fail if camera is not writable. pass + # Store the content list before grabbing + camera_files = camera.read_content() + new_files = {} if opts.grab: # Grab new files from camera # TODO: gracefully fail if camera is not readable. print_success("Grabbing...") - camera_files = camera.read_content() for ext, backup in backups.items(): bkp_files = backup.read_content(exclude_trash=False) with_ext = camera_files.filter_by_ext(ext) - new_files = with_ext.difference(bkp_files) - backup.copy_content(new_files) + new_files[ext] = with_ext.difference(bkp_files) + backup.copy_content(new_files[ext]) if ext in imports: - imports[ext].copy_content(new_files) + imports[ext].copy_content(new_files[ext]) if opts.sync: # Synchronize deleted files print_success("Syncing...") imported = find_imported() for ext, backup in backups.items(): with_ext = imported.filter_by_ext(ext) - deleted = backup.difference(with_ext) + deleted = backup.read_content().difference(with_ext) + # Prevent from trashing new (thus not yet imported) files + deleted.difference(new_files[ext]) backup.trash_content(deleted) if opts.update_card: - deleted = camera.difference(with_ext) + # Use content list before grabbing + # to avoid deleting new files + deleted = camera_files.difference(with_ext) camera.remove_content(deleted) - if opts.wipe_card: # Wipe the camera memory - pass + if opts.wipe_card: # Remove all files from camera + on_card = camera.read_content() + for ext in backups: + to_delete = on_card.filter_by_ext(ext) + camera.remove_content(to_delete) if opts.clean_trash: # Clean the bins print_success("Cleaning...") diff --git a/photograb/store.py b/photograb/store.py index 11dc9f2..154b150 100644 --- a/photograb/store.py +++ b/photograb/store.py @@ -4,6 +4,8 @@ import shutil import os import time +from .utils import print_warning + class Content(dict): @@ -100,4 +102,4 @@ class Backup(Store): self.trash.move_content(content) def clean_trash(self): - raise NotImplementedError + print_warning("Fake cleaning !") diff --git a/photograb/test/test_store.py b/photograb/test/test_store.py index 99b0ebe..56ebb2e 100644 --- a/photograb/test/test_store.py +++ b/photograb/test/test_store.py @@ -27,6 +27,14 @@ class TestContent(unittest.TestCase): ('test2.jpg', Path("~/test2.jpg")), ('test4.mp4', Path("~/test4.mp4")), ))) + diff = self.second.difference(self.first) + self.assertEqual( + diff, + Content()) + + def test_difference_with_empty_returns_all(self): + diff = self.first.difference(Content()) + self.assertEqual(diff, self.first) def test_filter_by_ext_that_exists(self): self.assertEqual(