Gallery Remote 1.x features

Document goal

Serve as a basis for team and community discussions about GR 1.0 features, how they will be implemented, and by whom.

The goal is to ship Gallery Remote 1.0 once all P1 and P2 features have been implemented. P3 and lower features will be implemented in point-releases following the release of GR 1.0.

Feature list (Gallery Remote)

Name Priority Status Version Who Description Comments
Main UI P1 90% 1.0 paour The main UI needs to be rewritten using Layouts, in order to allow more flexibility.  
Preferences P2 90% 1.1 paour A preferences dialog, that allows users to set most or all the preferences that are exposed in the properties files, and create/edit Gallery connection profiles. The structure for this is starting to emerge: all or most preferences should be read directly from the Preferences class, and a system of defaults exists.
Inspector P2 70% 1.0

paour

In the UI, have an inspector pane for each Picture, that can display full filename, file size, thumbnail, caption, order ID, resize/rotate buttons, remove button, move up/down buttons, order counter, etc.

And later on, any property that is supported by G2.

Also, with Explorer UI, can inspect Album properties.

Create album P2 100% 1.0 paour

Provide UI to create albums on server.

Option to create albums before existing albums, or after.

Would be more elegant in Explorer UI.

Needs protocol upgrade

Upload Picture captions P2 100% 1.0 tim When a picture is uploaded, also upload a caption. Needs protocol upgrade
Pre-upload resize P2 100% 1.0 paour Pictures can be resized on the client, thus minimizing the bandwidth necessary for the upload. Default Java resizing quality is not great, and not very flexible. We may need to use an external app. It may be worth investigating the plug-in mechanism in G2 for resizing.
Fix DnD P2 0% 1.2 DxM

Dragging pictures out can cause duplicates and is counter-intuitive.

Dragging in should scroll the list when pictures are dragged over the top or bottom parts of the list.

 
Fetch only writeable albums P3 100% 1.1 paour Display only writeable albums (and albums that contain albums that are writeable) in the combo-box. Needs protocol upgrade to optimize network traffic. Could be a client-side only solution too...
Picture inspector: extra fields P3 100% 1.1 paour Display in the Picture Inspector text fields so extra fields can be set for each picture, in addition to Caption. Needs protocol upgrade
Download Album P3 0% 1.2   In order to support reordering existing albums, we need to be able to download albums from the server, including order, thumbnails and captions. Needs protocol upgrade
Upload Album order P3 0% 1.2   Upload updated order for album. Would be nice to do it in such a way that we don't need to lock the album while the user is editing the album order. Needs protocol upgrade
Auto-rotate P3 0% 1.2   Use EXIF to figure out whether an image has to be rotated (optionally). This is only useful for pictures from cameras that contain a horizontal/vertical sensor, such as the G5. Needs EXIF reader class. I will not do this if it requires executing yet another external app.
Multi-album upload P3 100% 1.0 paour Allow pictures to be uploaded to different albums within one session. This can be done without a protocol upgrade, and is slightly different than batch upload.  
Pre-upload rotate P3 100% 1.1 paour Pictures can be rotated on the client. This can probably be done in Java, since it's not resource-intensive (only for JPEG, though).
Proxy support P3 100% 1.1 paour Allow setting up and using a proxy to access to Gallery.  
SSL support P3 100% 1.1 paour Allow using SSL/https to access Gallery.  
Watermarking P3 10% 1.2 paour Allow watermarking operations using ImageMagick. Also arbitrary IM operations.  
Fix progress bar P3 0% 1.2  

The progress bar currently doesn't provide predictable feedback, as it can be overriden by different tasks.

Also, a Cancel button should be provided. Does this mean that we should display progress in a separate window? Probably.

 
Explorer UI P4 0% 1.2   In the long run, I want to use a Windows Explorer-like UI, with albums on the right, and their contents on the left. Depends on Download Album
XML serialization P4 100% 1.1 paour Album objects need to be able to serialize themselves, so batch uploads can be considered Data is now stored in Bean classes that could be serialized automatically (Castor) or by hand (lighter). Final choice:
Batch uploading P4 30%   paour Allow pictures to be uploaded using command-line tools, all in one go, using saved files (XML) containing the upload parameters.

Alternately, it could be interesting to allow more than one album to be viewed in the UI at the same time, and to set up uploads to more than one album.

Also see Explorer UI

Shutdown after upload P4 0%     Optionally shutdown the machine after upload is complete. Architecture-dependant.

gallery_remote.php changes

Name Priority Status Who Description Comments
Security P0 20% tim One person needs to be in charge of auditing the security of any protocol change. Maybe we can ask help from Bharrat for this. Security problem
Modularity P1 80% tim The remote code is all in one file, and other projects want to use remote functionality, but want a UI or other features. We should see if we can separate the current code to isolate what is GR-specific, and what should be available to other remote interfaces. WPW project is one example
Protocol versioning P1 100% tim Make it easy to support protocol versioning. It's probably somewhat in there, but we need to make sure we won't run into trouble when we start revving the protocol frequently.  
IIS support P1 100% paour IIS seems to send a slightly different acknowledgement to GR, so login fails. Bug 602606
Picture caption upload P2 100% tim

Expose an interface to allow uploading captions for a given picture.

Right now there is a hack that allows using the filename for the caption: posts 3 and 4 of this thread in the forums describe the hack.

We need to also allow the user to type in a caption.

 

Create album P2 100% tim Expose and interface to allow creating albums remotely. Does this mean we also need to handle album security setting, or just that we only use the default settings?
Fetch only writeable albums P3 100% paour Only send to the client albums that are writeable by the user, and albums where at least one decendent is writeable. The order is that of the creation of albums. Clients have to resort according to containment, for example.
Album: get extra fields; Picture upload: set extra fields P3 100% paour In the album fetching, get the extra fields list. In the Picture upload, allow uploading extra field values.  
Album download P3 0% tim Expose an interface to allow downloading of picture order, thumbnails and captions for a given album.  
Album order upload P3 0% tim Expose an interface to allow remotely changing the order of pictures/sub-albums in an album.  
Double byte support P3 0%   We need to make sure the protocol can handle double-byte chars. Bug 480880
Honor Filename retention P4 0%  

The server needs to allow not retaining filenames of uploaded files (if that is the server setting).

Right now, all uploaded images use their original filename instead of an automatically generated filename.

 

SOAP protocol P4 0%   Move to SOAP for the protocol. Probably not useful until GR2.

Things we need to do throughout

Name Priority Description Comments
Logging P1

Every user task and network task should be logged (using the Log class) so we can figure out what happened when something doesn't work.

Shipping versions of GR should write nothing to System.out and System.err

Log.log(level, message)
Log.log(level, module, message)
Log.log(level, class, message)
Log.logStack(level, module)
Log.logException(level, module, throwable)

Status and progress P2

Most user actions should update the status bar. All actions that take time (network stuff, image manipulation) should also update the progress bar built into the status bar.

When the progress bar is being used, it locks the status message so that only updateProgressStatus can be used to change the message. This suppresses 'normal' status messages.

MainFrame.setStatus(message)

MainFrame.startProgress(min, max, message)
MainFrame.updateProgressValue(value)
MainFrame.updateProgressValue(value, newMax)
MainFrame.updateProgressStatus(message)
MainFrame.stopProgress(message)