Photodote is a client to Danga Interactive's Fotobilder photo hosting software, and therefore any service that uses the software.
Development
Photodote is written in Python, using the pyGTK bindings to provide a GUI. It is intended for the GNOME Desktop Environment, although a Windows port will be made if the project proves successful under Linux.
To simplify designing the interface, Glade was used. Glade creates XML describing the widgets in the interface, and this XML is then parsed at runtime to display the interface. This also allows the end-user to edit the interface, although this certainly should not be neccesary if the interface is well-designed.
To store settings, Photodote uses the Python GConf bindings. This means that Photodote requires the GNOME-Python bindings as well. However, it means that settings can be more easily modified and relocated. Because there is no documentation for GConf, I am currently working on this, and therefore development on Photodote is going somewhat slowly.
Recent News
Formal news is available on the SourceForge page, but I prefer to make frequent updates on the day's successes and failures.
September 8th, 2005 - Protocol
Apparently a lot of the features (edit metadata, reorder images, change gallery, etc.) I was going to add are not currently supported by the protocol. I'll make a release (basically featuring everything I can in this version of the Fotobilder protocol) soon and then start helping Brad Whitaker implement those other parts of the protocol. Work is slow because of school. I'm trying to decide how to rearrange the milestones for the new protocol features as they're implemented.
August 14th, 2005 - Milestones
The bugs noted below have all been fixed, with the exception of stale thumbnails -- in addition to being very small, deciding which ones were no longer needed would involve keeping track of them in a text file or something similar, which I'd really like to avoid. I tweaked the main interface a bit, as my plan for 300px-ish previews was squashed by Brad Whitaker -- it's really not a good idea in terms of bandwidth. Thus, you can double-click on an image to view it full-size in a nice viewer window.
I've added a Milestones page so I can have a more defined idea of what makes up each release. 0.1 is definitely coming soon.
August 5th, 2005 - Thumbnails
Finished the code to download, cache, and display thumbnails in the list. It's threaded, so it runs after login (if it needs to) and shows progress in the status bar. You can browse the list while this is happening and actually watch the thumbnails load.
Before I add any new features, there are a number of bugs I need to fix:
- Store "usernames" configuration option upon login (so it can remember all your usernames)
- Keep thumbnails of images that have changed their MD5 from being cached forever
- Cause exiting the program while thumbnails are downloading to cancel the download
- Check for and/or create the
~/.photodote
directory upon start - Add more columns to the photos TreeStore to make other view modes easier to implement.
July 16th, 2005 - Preferences
Realized I was writing a lot of duplicate code, so I wrote generic functions for setting up the notification for widgets and loading their initial state. At some point in the future I should refine this into a module designed to snap in to any program.
Started making preferences functional, as seen above. Everything up until after login is falling into place.
I'm wondering about localization support. I doubt I'll be able to get into GNOME without it, and I'd love to get into GNOME. It would probably make more sense to add it now, but I'm already feeling a little bloat. Code review is in the future.
As soon as preferences is finished, I'll start on the actual gallery manager. Once I start work on that, alpha testers for CVS head would be nifty.
July 13th, 2005 - Threads
Finally made the Cancel button work during login and gallery-prefetch. Threads seem to be working okay with no deadlocking.
All of the code to get and parse server XML is complete, now it's simply a matter of writing code for all the functions. I need to do the preferences window at some point, too.
July 5th, 2005 - Login
Implemented the Login method and added a lot of code for talking to the server, parsing responses, etc.
However, it seems the "Logging in..." window does not refresh as needed, even if gtk.main_iteration()
is called as neccesary. I may be forced to implement threads when talking to the server.
I'm pretty much happy with the design right now. I did have to write a function to make a sense out of what xml.dom.minidom
returns, as it treats nodes a little differently than I would prefer.
Overall I am very pleased with the implementation in the fotobilder
module so far, I was afraid it would act too much like David's code, but I implemented a few things differently:
- Challenges are stored in a queue and popped off, oldest first, as needed. This allows for multiple challenges to be stored if a number of operations are going to take place.
- Challenges are handled outside of the request function, it simply calls
get_challenge
and one is delivered, althoughrequest
is actually called in the process. Piggy-backed challenges are passed tohandle_challenge
inrequest
, though, but that can't be helped.
July 4th, 2005 - Login Preferences
Completed the GConf code to store and load preferences from the GNOME configuration database. In doing this, however, I realzied that I could trade Windows portability for GNOME integration, and opted to fully integrate with GNOME rather than have a half-baked implementation in both environments.
Here's a teaser of the login window:
Adding other providers is supported in the preferences dialog, as well as multiple users.
June 15th, 2005 - Website
Got this website up, finally. It's very basic, but it doesn't really need to be much.
I currently have the interface designed, and enough Python code to load that. I wrote a series of simple Python apps that confirmed the performance of PixBufs inside TreeViews. This means you can have anywhere from tiny (48x48) to very large (128x128 and higher) previews inside the table of photos, which looks very promising. Rescaling is done using the PixBuf functions, and the size is already a configurable preference.
Resources
I am using the following resources while developing Photodote:
- Python Documentation
- PyGTK Reference
- GConf documentation as I write it
- Fotobilder Protocol Reference
- GNOME Human Interface Guidelines