GPhotoFS
--------

GPhotoFS is a filesystem client based on libgphoto2 that exposes 
supported cameras as filesystems; while some cameras implement the
USB Mass Storage class and already appear as filesystems (making
this program redundant), many use the Picture Transfer Protocol (PTP)
or some other custom protocol. But as long as the camera is supported
by libgphoto2, it can be mounted as a filesystem using this program.

As libgphoto2 is a userspace library for interacting with cameras,
it is natural that if one is to build a filesystem ontop of it, one
should use FUSE, and that is what I have done.

Getting it
----------

For now, releases are available at:

   http://intr.overt.org/gphotofs

and the current source is available in the gphoto project's cvs
repository:

   http://sourceforge.net/projects/gphoto

Requirements
------------

FUSE >= 2.2
GLib >= 2.6
libgphoto2 >= 2.1 (Maybe one can go further back but I haven't tried).

How to mount a filesystem
-------------------------

GPhotoFS implements the same model/port/speed/usbid command line
options that gphoto2 does, so you can use them to fine tune your
choice of camera - but for most people, the autodetection will
Just Work(tm) -  all you do is run it and give it a mount point.

So, just do:

   gphotofs <mountpoint>

and when you're finished, you can unmount with:

   fusermount -u <mountpoint>

Usage
-----

As you'd expect, once you've mounted the camera, you can interact
with it like a filesystem, though with limitations.

You can:
- Traverse directories
- Read the contents of files
- Delete files
- Move files (Read + delete)
- Use 'du' to measure file size
- Mount the filesystem before plugging in a camera.

You cannot:
- Add/Remove directories
- Rename files/directories
- Add or modify files
  - All of these are supported by libgphoto2, but only if the camera
    supports them. As my silly Canon doesn't support these operations,
    I cannot implement them effectively.
- Get free space information
  - This one seems to be very much at the mercy of the camera
    manufacturer. I don't know if it'll ever be possible in a
    general way.
- Unplug and replug a camera and expect things to keep working.
  - The backend gets confused and you'll just get errors when
    you try to do anything. Unmount and remount the filesystem
    and you'll be back in business.

Acknowledgements
----------------

Christopher Lester wrote a FUSE filesystem that is built on top of the
gphoto2 command line utility rather than libgphoto2. As he indicated he 
was not inclined to move it over to the library, and as I wanted to have
a go at writing a FUSE filesystem, I went ahead and did it. For the time
being, his one is more featureful, but has problems compiling with the
latest release of FUSE and is self-admittedly slow.

http://www.hep.phy.cam.ac.uk/~lester/gphoto2-fuse-fs/

Contact info
------------

Philip Langdale <philipl@mail.utexas.edu>
