elodie icon indicating copy to clipboard operation
elodie copied to clipboard

Sync EXIF and filesystem without issuing commands

Open ibizaman opened this issue 10 years ago • 6 comments

TL;DR: what would you think about using fuse?

First of all THANK YOU. This is the project I always wanted to do - in the exact same way.

So for now, the only way to update pictures is to run the elodie.py command. I would propose to make importing and updating even more intuitive by adding fuse into the mix. This way, making a modification on the filesystem - renaming a directory, moving a file, etc. - would trigger elodie.py and automatically change the EXIF information.

The UI could then be very inuitive. Assuming:

├── 2015-06-Jun
│   ├── California
│   │   ├── 2015-06-29_16-34-14-img_3900.jpg
│   │   └── 2015-06-29_17-07-06-img_3901.jpg
│   └── Paris
│       └── 2015-06-30_02-40-43-img_3903.jpg
├── 2015-07-Jul
│   ├── Mountain View
│   │   ├── 2015-07-19_17-16-37-img_9426.jpg
│   │   └── 2015-07-24_19-06-33-img_9432.jpg

Renaming California to Silicon Valley would trigger:

./elodie.py update --location="Silicon Valley" \
    2015-06-Jun/California/2015-06-29_16-34-14-img_3900.jpg \
    2015-06-Jun/California/2015-06-29_16-34-14-img_3901.jpg

Renaming 2015-07-Jul to 2015-08 would trigger, with a bit of magick:

./elodie.py update --time="2015-08-19" 2015-07-Jul/Mountain View/2015-07-19_17-16-37-img_9426.jpg
./elodie.py update --time="2015-08-24" 2015-07-Jul/Mountain View/2015-07-24_19-06-33-img_9432.jpg

And of course, editing the EXIF information directly would also trigger corresponding ./elodie.py commands.

Python bindings for fuse can be installed with pip too: pip install fuse-python.

What do you think of this?

ibizaman avatar Dec 19 '15 02:12 ibizaman

What do you think of this?

Definitely think it's a great idea. Can you explain in more detail how it would work?

jmathai avatar Dec 19 '15 05:12 jmathai

Great. So first from a user perspective. Assuming we know what fuse is, the first step is to mount the filesystem:

elodie-fs "/where/my/photos/are" "/where/i/want/my/photos/to/go"
# equivalent to:
./elodie.py import --source="/where/my/photos/are" --destination="/where/i/want/my/photos/to/go"

From now on, renaming or moving a file or directory will issue an elodie.py command under the hood. Of course, not all rename or move are meaningful so some will be denied by elodie-fs. Allowed ones are those given previously.

From a technical point of view, it is as simple as implementing all needed system call callbacks. I could not explain it better than http://www.stavros.io/posts/python-fuse-filesystem/ which is based on https://github.com/terencehonles/fusepy.

ibizaman avatar Dec 20 '15 01:12 ibizaman

You mainly see that happening in the write and create methods?

Besides identifying which operations should be ignored it seems quite doable. I can create a branch to develop this feature on to see where t goes.

jmathai avatar Dec 20 '15 03:12 jmathai

@ibizaman I pushed a branch gh-35-fs-sync that I'll keep rebased with master for this work.

jmathai avatar Dec 20 '15 08:12 jmathai

Awesome! I made a little tweak to the given example in the aforementioned link: https://gist.github.com/ibizaman/e3609e01abd48e7bd605. Now it prints all arguments, making it easy to know what happens.

ibizaman avatar Dec 20 '15 11:12 ibizaman

@ibizaman sounds good. You can keep a PR open and push commits as they come available. I'll make sure that the @travisci and @scrutinizer jobs are hooked into this branch so we make sure changes here don't break existing code. I'll merge PRs once they look good and open can open another.

jmathai avatar Dec 21 '15 06:12 jmathai