FireflyClient - a Java Firefly Client client to Firefly Media Server

This page is under construction.
# Firefly Client CHANGELOG

Version 0.9 b

- Enhanced applet configuration 
	- read more in fireflyclient.html file when fireflyclient-applet(.zip or .tar.gz) has been uncompressed
- Added the possibility to set a separator for genre and artist tag
	- Ex: if genre tag contains "Classical; [C]Classical; Orchestral;Symphony" and that
	';' character has been set as genre separator in preferences dialog, 4 genres
	are extracted for this song (the song matching the four of them:
		- Classical
		- [C]Classical
		- Orchestral
		- Symphony
	Same functionnality for artist tag. 
	When changing separators, application must be restarted.
- Enhanced keylistener on genre, artist and album lists
	- When genre, artist or album list has the focus, you can type the first letters to go to the first matching item.
- Weakly crypted passwords (library and lastfm) in configuration file (needs library saving)

Version 0.8 b

- Added library autoloading option (activated by default if only one library exists or in applet mode)
	- can be changed in the preferences dialog 
- Added a splash screen on startup (Might be usefull in autoload mode when app takes time to contact the server)
- Added an optional "Genre" panel (activated by default, might need to reload the remote library)
- Search by criteria feature (all, genre, artist, album or title)
- Added shortcuts to control the player (play/pause, next and previous)
- Added an applet version of the application (allows server-side installation)
	- fireflyclient-applet(.zip or .tar.gz) must be uncompressed in admin-root directory or server
	- the URL to load the applet is then : http://server:port/applet/fireflyclient.html
	- applet should work well with Firefox and IE if Java runtime plugin is installed
		- This works because those two browser manage 'jnlp_href' param in <applet> tag
		- For those that don't (Safari, Chrome), workaround can be found but jar file (FireflyClient.jar) must be served by
		  another web-server than the built-in Firefly Media Server web-server. 
		  Indeed, as built-in FMS web server doesn't send HTTP header 'Content-Length',
		  classic java plugin behaviour (as opposed to JNLP behaviour) is unable to 
		  cache the resource (jar file) which can be pretty inconvenient. 
- Added IT translation file (thanks to Christian)
- Added a right-click menu on editable playlist songs to remove songs from it
- [FIXED BUG] Window title unicode support
- [FIXED BUG] Now manage EOFException when seeking too close to the end of track 
- minor bug fixes

Version 0.7 b

- Added multiple column sorting functionnality (CTRL+click to sort on more than one column)
	- sorting criteria are persisted through application restart
- Make amazon cover search ignore accent (search with accents give no result)
- Authorized multiple artist/album selection
- Added NL translation file (thanks to William)
- Added DE translation file (thanks to Thorsten)
- Added the possibility to filter on media type to hide unsupported filetypes
	- comma-separated list of extension to ignore in Preferences dialog (persisted through app restart)
	- library has to be fully reloaded from server (don't forget to save it after) for this to work
- Added optional scrobbling support (default: deactivated)
	- Check checkbox in preferences and enter username/password. 
	- Supports following functions :
		- NOWPLAYING : each time a song changes (not persisted in profile) 
		- SUBMISSION : Songs are submitted regarding last fm criteria (more than 30 seconds long, 
			have been played over half of the song's length or more than 240 seconds)
- [FIXED BUG] Correct time display for tracks over 1 hour
- [FIXED BUG] Correct first track selection in shuffle mode (it was always the first one before)
- minor bug fixes

Version 0.6 b

- Added editable static playlists management (readwrite) for firefly media server over svn-1488 (previous version make server crash)
	- create/rename/delete static playlists (confirmation before deleting)
	- rename smart playlists
   	- add songs to playlist by drag and drop from song list (if playlist has been previously loaded)
   	- delete songs from playlist list (DEL button once a song is selected)
- Added a preference option to sort static playlists (default: yes)
- Display server version in window title when not playling song
- Added optional usage of amazon webservice cover support for missing covers
	- option in preference (default: no)   
- Rework of info panel around track slider
	- added volume slider
	- icons for status
	- song info, redesigned track slider (now seek to the click position)
- Tries to skip invalid frames when reading mp3
- Switched back HTTP compresion default to false

- [FIXED BUG] Correct time display for all time zone
- [FIXED BUG] Correct the artist display in frame title when unknown
- [FIXED BUG] When you paused a song, and unpause, it played the selected song and didn't continue the previous song: now fixed.
- [FIXED BUG] Playlists were being loaded correctly, however browsing them was broken. 
	- It always selected ALL songs from a given artist or album, and not only those in the playlist: now fixed.
- [FIXED BUG] When encountering playlist names with special character, could crash: now fixed.
- [FIXED BUG]: Seeking was not available anymore after having changed look 'n feel: now fixed

Version 0.5 b

- Playlists management (readonly)
	- Playlists names are loaded remotely whenever loading a library (local/remote/update)
	- Playlists songs are lazily loaded when clicking on the playlist item
	- Smart playlists are displayed first, then static ones (all sorted alphabetically)
	- Playlists items are not cached locally when quitting the application (always remotely loaded)

- Smart library update, just request new songs present on the server
	- removed songs are not detected while the update which may lead to invalid songs in the current playlist
		-> So, when the player tries to open an invalid song (HTTP status 404), it is automatically removed from the list

- Modifiy search box to search on the current playlist
- Made left panel resizable (size persisted)
- Change window title to display song played
- Now closes current open library if any before opening new one (without confirmation)
- Exit confirmation popup  opens only if changes are detected (new songs, removed songs, password changed)
- Added the firefly client store directory in about dialog (beside/below the client version) 
- Bug fix about sorting with unknown artists (when loading remote songlist)
- Minor improvement on dialogs sizing/navigation
- Improved cover management (for all size/ratio)
- Minor bugs fixes 

Version 0.4 b

- Rearranged left panel for next release playlist management
	- Moved song info below cover
	- Moved random button to status bar
	- Added a 'reflect' effect for covers
	- Added a default cover when none available
- Added support for native look and feel ('Normal') - needs to be restarted after having applied it.
- Add a 'Save and quit' + 'Save password and quit' buttons when asking close confirmation
- Corrected bug for cover smaller than 200x200 (led to infinite loop)
- Restored java 1.4 compatibility (still no support for notification popup though)
- Enhanced error popup to provide error details (stacktrace)
- Enhanced management of Unknown artist/album (best detection, displayed at the end of the songlist)
- Filter remote songlist to skip control character (avoid some parsing error -> invalid characters in ID3 comment tag)  
- Corrected song sorting
- Backend rework (load/save functionnalities)
- Minor bug fixes
Version 0.3 b

- Ogg vorbis playback support (no seeking, no cover, just playback) (thanks to Javazoom OGG Vorbis SPI)
- Flac playback support (no seeking, no cover, just playback) (thanks to JFlac)
- Manage 'Unknown Artist' and 'Unknown Album'
- Fix the seeking to 0 problem for MP3 files
- Made HTTP compression option default value to 'true'
- Better cover display (scaling quality, manage multi covers and display first one) for MP3
- Made 'open saved library' easier:
   - made a submenu with the list of libraries instead of a dialog
   - now tries to connect with the configured password (if any) and displays authentication dialog only if authentication fails
- Made 'delete library' easier:
   - made a submenu instead of a dialog (+ separator and delete all)
- Updated 'About box'
   - added a 'Contact' tab
   - updated the 'Resources' tab

Version 0.2 b

- Use of RSP Roku Server Protocol) instead of DAAP XML.
- Optional use HTTP compression (gzip) functionnality of RSP protocol (can be configured in the Preferences - default: deactivated)
  - HTTP compression can slow down traffic when server is not powerful enough (ex: NSLU2)
- New functionnality : clear all saved libraries  
- Added licence to 'About' box

Version 0.1 b

- Can connect to a Firefly Media Server wherever on the network/internet given the host name and the port
- Optional proxy configuration
- Use of DAAP XML request
- Authentication management for password protected libraries
- MP3 + WAV playback support (thanks to Javazoom MP3 SPI, Tritonus and JLayer)
- Cover display through ID3v2 MP3 tags if any (thanks to JAudioTagger)
- Shuffle mode
- Seeking is supported for MP3
- Loads the whole bunch of songs at startup and display them
   - artist panel + album panel + songs pannel
   - Compilation grouping
   - Songs are sorted by:  artist > album > disk number > track number > song title
- Search feature (search in artist+album+title)   
- Sublists are displayed by selecting either artist, albums, or to display a search result
- Possibility to save the library locally to load it later (much faster)
   - Warning when remote songlist does not have the same number of songs as locally cached one
- Different languages managed: english and french
- Skin support (thanks to SkinLF)
- Application settings are automatically saved locally (language, proxy, skin, window position)
   - As songlists, app parameters are saved in ${user.home}/.firefly-client
- When application does not have the focus and a song changes, a notification popup fires with new song info (optional) Logo