change-log for last.fm bindings. Please read with each new release. =================================================================== 12/6/2010 - added: Chart.getHypedXXX and Chart.getTopXXX methods - changed: moved Artist.getPercentageChange to MusicEntry.getPercentageChange - added: PaginatedResult.isEmpty() 11/14/2010 - added: Geo.getMetroXXXChart methods (issue 8) - Refactorings, code cleanup, documentation 11/06/2010 - changed: Track.getTopTags() now returns a more general Collection instead of a List - Refactorings 11/05/2010 - added: Artist.getCorrection - fixed: Track.getCorrection failed if supplied artist/track are already correct or Last.fm can't supply a correction - added: Track.unlove() and Track.unban() - added: Tag.getInfo() - changed: Track.getInfo() now takes a Locale parameter - changed: Artist.getInfo(), Track.getInfo(), Tag.getInfo() now don't pass a language parameter to the webservice if no Locale was specified, instead of the default Locale - added: Geo.getMetros() and Geo.Metro class (issue 8) - added: ItemFactory, ItemFactoryBuilder, ResponseBuilder as well as several implementations of ItemFactory to help remove duplicate code - changed: Tag.getSimilar() now returns a Collection of Tags instead of Strings - changed: Tag.getTopTags() now returns a more general Collection instead of a List - changed: Tag.search() now returns a Collection of Tags instead of Strings - Refactorings in various classes to make use of the new ResponseBuilder - updated ant build script 11/04/2010 - Added trackNumber and streamId params to scrobbling classes. 10/31/2010 - Added license info to all files, updated license.txt - Some documentation changes - fixed: StringUtilities.isMD5() where a string was recognized as possible md5 encoded - added: Scrobbler.setHandshakeURL() (issue 13) - added: Track.getCorrection() (issue 14) - added: Group.getHype() and Artist.getPercentageChange() (issue 9) - added: Album.getTopTags() - added: User.getNewReleases() and User.getBannedTracks() (issue 15) - fixed: Result.getContentElement() returned the wrong element on Android (see issue 12) 10/26/2010 - Added support for scrobbling and now playing requests using the new Last.fm Scrobble 2.0 API (Adrian Woodhead). - Deprecated 1.2.x scrobble protocol classes. 4/22: - fixed: Event.getStartDate() (issue 7) - added: Event.getEndDate() 3/17: - changed: User.getRecentTracks returns PaginatedResult (issue 6) - added: MusicEntry.getUserPlaycount(): returns user's playcount for Album/Artist/Tracks, when a username was supplied on the respective new getInfo() calls. - changed: Session now has private default constructor to precent accidentally instantiation. Use the static methods provided in the Authenticator class. - changed: User.getInfo() changed to an unauthenticated call, now takes username parameter - added: Album.getBuylinks(), Track.getBuylinks() and the BuyLink class - added: Artist.getPastEvents() - added: User.getArtistTracks() - added: Venue.getPhonenumber(), Venue.getWebsite() - added: Venue.getImageUrl() 8/10: - fixed: Explicitly using UTF-8 encoding now 7/31: - changed: User.getLovedTracks now returns a PaginatedResult and accepts a page parameter 6/15: - fixed: User.getNeighbours(user, key) was not working properly 6/12: - added: User.getRealname() method (thanks Marko Luther) 6/26: - added: MEGA size to ImageSize enum - R.I.P. Michael Jackson 6/19: - added: Event.getWebsite(), Event.getTicketSuppliers() 6/18: - fixed: NPE in Track.search() w/o artist parameter 5/21: - fixed: Library.add methods 5/14: - changed: some methods in User changed to public 4/23: - added: Caller.getLastResult 4/13: - changed: User() constructor now private, was public - added: Track.getLastFmInfo 4/11: - added: Track.getPosition (thanks again Marko Luther) 4/9: - changed: implemented Radio 2.0 API 3/27: - fixed: User.getInfo 3/20: - added: Event.getAttendees - added: Artist.getImages - added: Image class, ImageHolder.availableSizes() - added: User.shout, Artist.shout 3/10: - added: ScrobbleCache.clearScrobbleCache - fixed: new SubmissionData(String) ArrayIndexOutOfBoundsException 2/28: - added: ScrobbleCache - added: SubmissionData.toString() SubmissionData(String) - added: FileSystemCache now supports caching scrobbles through the ScrobbleCache interface 2/9: - added: Radio.skipsLeft 2/5: - added: Session.createSession to restore sessions - changed: Radio.handshake and Authenticator.getMobileSession now accept 32-character MD5 string as password parameter 1/5: - added: DatabaseCache - Cache implementation that stores into any jdbc database - added: DomElement.getTagName method 1/1: - changed: Cache.createCacheEntryName now returns md5 hashes by default. 12/30: - fixed: StringUtilities.cleanUp not replacing * lead to caching error (thanks Andrew Collins) 12/20: - Venue promoted to top level class - added: Venue.search, Venue.getEvents, Venue.getPastEvents - added: Venue.getId 12/11: - added: Track.getInfo recognizes duration if available - fixed: Track.getInfo for tracks with no album (thanks Robin Fernandes) - ant build now includes debug information 12/10: - changed: getTopTags methods now return list of Tag (thanks Rudolf Mayer) - fixed: FileSystemCache directory is created lazily - happy birthday yet another K. ;-) 12/6: - changed license to 2-clause BSD - fixed: User.getInfo tests if age element is present 12/5: - added: User.getRecommendedArtists - added: Group.getMembers 12/1: - fixed: now playing notification UTF-8 encoding 11/25: - fixed: caching may fail due to invalid filename characters, added StringUtilities.cleanUp (thanks Jakob Frank) 11/12: - added: Basic cache implementation in net.roarsoftware.lastfm.cache and Caller.setCache (thanks Martin Chorley for his cache implementation I built upon) - added: Rating ability to Scrobbler/SubmissionData (thanks Lukasz Wisniewski) 11/10: - added: Artist.getEvents (thanks Idan Zohar) - added: Artist.share - fixed: Event.getStartDate now contains event's start time if available (thanks Idan Zohar) 11/5: - added: User.getRecommendedEvents - added: Library.addArtist, Library.addAlbum, Library.addTrack 10/24: - added: localised Artist.getInfo method - fixed: Playlist.create - warning: Artist.getInfo => getWikiLastChanged may return null if locale neither english nor default. 10/18: - added: Playlist.create 10/6: - added: Album.search method - added: Tag.getWeeklyArtistChart method - added: internal Chart.getChart, Chart.getWeeklyChartList, Chart.getWeeklyChartListAsCharts methods - changed: refactored all Chart methods to use the new internal Chart.getXXX methods 9/28: - fixed: Authenticator.getSession() now sends api_sig (thanks Alex Aranda) 9/25: - fixed: MusicEntry.getPlaycount() (thanks Henrique Pinto) 9/17: - changed: ImageSize.EXTRALARGE constant added. 9/8: - changed: for consistency reasons order of parameters in Track are now always: artist, track/mbid - changed: biography loading and accessor methods now renamed to getWikiXXX() and made available in MusicEntry - added: Track.getInfo - fixed: StringUtilities.isMbid - added: Event.share - ps: happy birthday, K. :-)