The project concept is to have a Firefox toolbar button that when clicked downloads the currently displayed page's html source file, all media files, and the html source pages of any linked pages. The files will be downloaded into a user specified directory. The media types that are downloaded in addition to other options will be configurable via a browser accessible preferences GUI.

The Media Collector will have an option to have all pictures (or some subset) stored in Google's Picasa Service or sent to a Facebook album.

The Media Collector will support the following media types:
o All Browser supported Image Formats
o Some embedded video (such as youtube video, etc).

Original Implementation Plan (It has changed since):
The implementation will be broken into two layers: a XUL/Javascript layer and a C++ XPCOM component layer.

The XPCOM component layer will manage file i/o, which includes reading and writing the preferences file and writing the media output files. The XPCOM component will consist of the following functions:


The XUL/Javascript layer will manage all user input, gather all relevant information about the webpage's media, and be the bridge to the XPCOM component. The Javascript layer will consist of the following functions (preliminary outline that will be added to/changed):


Mozdev Tools Utilized:

XPCOM - The c++ component handles saving and reading preferences to and from the filesystem via the mediaDownloader object which has two member functions: DoIt() and SaveSummary(). The xpcom component links only to frozen libraries through xpcomglue. This allows a precompiled binary to be placed in the extension/components folder which will autoregister during installation and allow xpcom component functionality by just installing the .xpi! Another advantage of using xpcomglue is that the xpcom component can be compiled using the libraries that are downloaded with Firefox opposed to having to build MineFieldDebug from scratch, which can be difficult.
JS - Displays the pref UI, restoring previous settings. Parses the document for requested tags, handles them by type, and calls urlDownloader() on each after processing.

Primary communication was via google's gmail chat, with chat transcripts being mailed to the HelloWorld mozdev mailing list. Non chat communication was via direct email, including mailing list.

For the majority of the project, communication was good with emails and chats occuring at regular if not daily intervals. As the project deadline approached, interaction increased amongst the majority of the members but dropped off with one member. Ultimately, this lack of correspondence lead to a major feature being dropped. In hindsight better communication during this critical period, would have resulted in a higher quality product and is a lesson I believe all three of us will take away from this.

Some of the techniques we used would be able to scale with little change, whereas other techniques would have to be completely re-thought. The gmail chat would be very difficult to scale as there is no easy way for people to enter into mult-person chats. As the size of a group increased, chat would have to be transitioned to IRC. The mailing list, however, would scale very nicely and relatively few changes would have to be made as member size expanded. Task allocation and managment was handled by dividing the project up at the beginning between the three members. This strategey would not scale well and would have to be completely changed for a bigger project.

Overall, this was a very interesting project that forced members to think seriously about the details of how open source works. Although not always smooth, the project was an excellent first foray into open source and will encourage contribution to open source projects in the future.