Patch MediaPlayer Ignore 'A', 'An', and 'The' In Artist and Album names

The Pre's default music player does not treat artists and albums beginning with 'A', 'An', or 'The' with any special consideration. Thus 'The Killers' shows up under the 'T' section in your list of artists, or an album such as 'The Colour and The Shape' also resides under 'T' in an album title listing.

1.2.1 Single File Patch

--- .orig/usr/palm/applications/com.palm.app.musicplayer/app/views/artists/artist-entry.html +++ /usr/palm/applications/com.palm.app.musicplayer/app/views/artists/artist-entry.html @@ -9,7 +9,7 @@ -     #{artistNameFormatted} +     #{artistDisplayNameFormatted} --- .orig/usr/palm/applications/com.palm.app.musicplayer/app/views/allalbums/album-entry.html +++ /usr/palm/applications/com.palm.app.musicplayer/app/views/allalbums/album-entry.html @@ -8,7 +8,7 @@ -     #{albumTitleFormatted} +     #{albumDisplayTitleFormatted} #{albumArtistFormatted} --- .orig/usr/palm/applications/com.palm.app.musicplayer/app/views/albums/album-entry.html +++ /usr/palm/applications/com.palm.app.musicplayer/app/views/albums/album-entry.html @@ -7,7 +7,7 @@ -     #{albumTitleFormatted} +     #{albumDisplayTitleFormatted} --- .orig/usr/palm/applications/com.palm.app.musicplayer/app/controllers/artists-assistant.js +++ /usr/palm/applications/com.palm.app.musicplayer/app/controllers/artists-assistant.js @@ -25,7 +25,8 @@ lookahead: 100, fixedHeightItems: true, formatters: { -				artistName: Util.artistFormatter +				artistName: Util.artistFormatter, +				artistDisplayName: Util.artistFormatter } 		}; 		this.controller.setupWidget('artistslist', model); @@ -145,6 +145,12 @@ 	translateResults: function(filter, widget, offset, response){ +		function sortByArtistDisplayName(a,b) { +			var x = a.artistDisplayName.toLowerCase; +			var y = b.artistDisplayName.toLowerCase; +			return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +		} + 		if(response.artistsTotal == 0){ this.controller.get('no-items-message').innerHTML = AppAssistant.noItems; this.controller.get('no-items-message').show; @@ -158,6 +158,26 @@ 		ret.list = response.artists; ret.total = parseInt(response.artistsTotal); +		for (i = 0; i < ret.list.length; i++) { +			var artistName = ret.list[i].artistName; +			if (artistName.toUpperCase.indexOf('THE ') == 0) { +				ret.list[i].artistDisplayName = artistName.substring(4) + ', ' + artistName.substr(0,3); +			} +			else +			if (artistName.toUpperCase.indexOf('A ') == 0) { +				ret.list[i].artistDisplayName = artistName.substring(2) + ', ' + artistName.substr(0,1); +			} +			else +			if (artistName.toUpperCase.indexOf('AN ') == 0) { +				ret.list[i].artistDisplayName = artistName.substring(3) + ', ' + artistName.substr(0,2); +			} +			else { +				ret.list[i].artistDisplayName = artistName; +			} +			//Mojo.Log.info(ret.list[i].artistDisplayName); +		} +		ret.list.sort(sortByArtistDisplayName); + 		widget.mojo.noticeUpdatedItems(offset, ret.list); widget.mojo.setCount(ret.total); widget.mojo.setLength(ret.total); @@ -190,7 +190,7 @@    },     getAlphaGroup: function(item){ -       return Util.getAlphaGroup(item.artistName); +       return Util.getAlphaGroup(item.artistDisplayName); }, 	THUMB_WIDTH: 80, --- .orig/usr/palm/applications/com.palm.app.musicplayer/app/controllers/allalbums-assistant.js +++ /usr/palm/applications/com.palm.app.musicplayer/app/controllers/allalbums-assistant.js @@ -28,6 +28,7 @@ fixedHeightItems : true, formatters: { albumTitle: Util.albumFormatter, +				albumDisplayTitle: Util.albumFormatter, albumArtist: Util.artistFormatter, albumPictureUrl: Util.albumArtListUrlFormatter } @@ -184,6 +184,12 @@ 	translateResults : function(filter, widget, offset, response){ +		function sortByAlbumDisplayTitle(a,b) { +			var x = a.albumDisplayTitle.toLowerCase; +			var y = b.albumDisplayTitle.toLowerCase; +			return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +		} + 		if(response.albums.length == 0){ this.controller.get('no-items-message').innerHTML = AppAssistant.noItems; this.controller.get('no-items-message').show; @@ -196,6 +196,26 @@ 		ret.list = response.albums; ret.total = parseInt(response.albumsTotal); +		for (i = 0; i < ret.list.length; i++) { +			var albumTitle = ret.list[i].albumTitle; +			if (albumTitle.toUpperCase.indexOf('THE ') == 0) { +				ret.list[i].albumDisplayTitle = albumTitle.substring(4) + ', ' + albumTitle.substr(0,3); +			} +			else +			if (albumTitle.toUpperCase.indexOf('A ') == 0) { +				ret.list[i].albumDisplayTitle = albumTitle.substring(2) + ', ' + albumTitle.substr(0,1); +			} +			else +			if (albumTitle.toUpperCase.indexOf('AN ') == 0) { +				ret.list[i].albumDisplayTitle = albumTitle.substring(3) + ', ' + albumTitle.substr(0,2); +			} +			else { +				ret.list[i].albumDisplayTitle = albumTitle; +			} +			//Mojo.Log.info(ret.list[i].albumDisplayTitle); +		} +		ret.list.sort(sortByAlbumDisplayTitle); + 		Util.setZOrder(ret.list, offset); widget.mojo.noticeUpdatedItems(offset, ret.list); @@ -213,7 +213,7 @@ 	}, 	getAlphaGroup: function(item){ -       return Util.getAlphaGroup(item.albumTitle); +       return Util.getAlphaGroup(item.albumDisplayTitle); } }); --- .orig/usr/palm/applications/com.palm.app.musicplayer/app/controllers/albums-assistant.js +++ /usr/palm/applications/com.palm.app.musicplayer/app/controllers/albums-assistant.js @@ -26,6 +26,7 @@ 			fixedHeightItems : true, 			formatters: { 				albumTitle: Util.albumFormatter, +				albumDisplayTitle: Util.albumFormatter, 				albumPictureUrl: Util.albumArtListUrlFormatter 			} 		}; @@ -120,7 +120,13 @@ 	translateResults : function(filter, widget, offset, response){ -		+ +		function sortByAlbumDisplayTitle(a,b) { +			var x = a.albumDisplayTitle.toLowerCase; +			var y = b.albumDisplayTitle.toLowerCase; +			return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +		} + 		if(response.albums.length == 0){ 			this.controller.get('playAllAlbums').hide; 			this.controller.get('no-items-message').innerHTML = AppAssistant.noItems; @@ -134,7 +134,27 @@ 		var ret = {}; 		ret.list = response.albums; 		ret.total = parseInt(response.albumsTotal); -		+ +		for (i = 0; i < ret.list.length; i++) { +			var albumTitle = ret.list[i].albumTitle; +			if (albumTitle.toUpperCase.indexOf('THE ') == 0) { +				ret.list[i].albumDisplayTitle = albumTitle.substring(4) + ', ' + albumTitle.substr(0,3); +			} +			else +			if (albumTitle.toUpperCase.indexOf('A ') == 0) { +				ret.list[i].albumDisplayTitle = albumTitle.substring(2) + ', ' + albumTitle.substr(0,1); +			} +			else +			if (albumTitle.toUpperCase.indexOf('AN ') == 0) { +				ret.list[i].albumDisplayTitle = albumTitle.substring(3) + ', ' + albumTitle.substr(0,2); +			} +			else { +				ret.list[i].albumDisplayTitle = albumTitle; +			} +			//Mojo.Log.info(ret.list[i].albumDisplayTitle); +		} +		ret.list.sort(sortByAlbumDisplayTitle); + 		Util.setZOrder(ret.list, offset); widget.mojo.noticeUpdatedItems(offset, ret.list);

Old Patches, line numbers incorrect for 1.2.1

Thankfully, a few simple code changes fix this.

You will need a rooted Pre to apply this patch.

Start by making the file system writable:

rootfs_open -w

We'll begin by change code related to artist names.

The patch for /usr/palm/applications/com.palm.app.musicplayer/app/views/artists/artist-entry.html

--- artist-entry.html.bak Tue Jun 16 20:52:00 2009 +++ artist-entry.html Sun Jul 5 03:12:29 2009 @@ -9,7 +9,7 @@ - #{artistNameFormatted} + #{artistDisplayNameFormatted}

The patch for /usr/palm/applications/com.palm.app.musicplayer/app/controllers/artists-assistant.js

--- artists-assistant.js.bak Tue Jun 16 20:52:00 2009 +++ artists-assistant.js Sun Jul 5 03:30:02 2009 @@ -23,7 +23,8 @@ lookahead: 100, fixedHeightItems: true, formatters: { - artistName: Util.artistFormatter + artistName: Util.artistFormatter, + artistDisplayName: Util.artistFormatter } }; this.controller.setupWidget('artistslist', model); @@ -141,8 +142,15 @@ }.bind(this)); },

+ translateResults: function(filter, widget, offset, response){

+ function sortByArtistDisplayName(a,b) { + var x = a.artistDisplayName.toLowerCase; + var y = b.artistDisplayName.toLowerCase; + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + } + if(response.artistsTotal == 0){ this.controller.get('no-items-message').innerHTML = AppAssistant.noItems; this.controller.get('no-items-message').show; @@ -155,7 +163,25 @@ var ret = {}; ret.list = response.artists; ret.total = parseInt(response.artistsTotal); - + for (i = 0; i < ret.list.length; i++) { + var artistName = ret.list[i].artistName; + if (artistName.toUpperCase.indexOf('THE ') == 0) { + ret.list[i].artistDisplayName = artistName.substring(4) + ', ' + artistName.substr(0,3); + } + else + if (artistName.toUpperCase.indexOf('A ') == 0) { + ret.list[i].artistDisplayName = artistName.substring(2) + ', ' + artistName.substr(0,1); + } + else + if (artistName.toUpperCase.indexOf('AN ') == 0) { + ret.list[i].artistDisplayName = artistName.substring(3) + ', ' + artistName.substr(0,2); + } + else { + ret.list[i].artistDisplayName = artistName; + } + //Mojo.Log.info(ret.list[i].artistDisplayName); + } + ret.list.sort(sortByArtistDisplayName); widget.mojo.noticeUpdatedItems(offset, ret.list); widget.mojo.setCount(ret.total); widget.mojo.setLength(ret.total); @@ -188,7 +214,7 @@ },

getAlphaGroup: function(item){ - return Util.getAlphaGroup(item.artistName); + return Util.getAlphaGroup(item.artistDisplayName); },

THUMB_WIDTH: 80,

Now we'll patch the files necessary for album names.

The patch for /usr/palm/applications/com.palm.app.musicplayer/app/views/allalbums/album-entry.html

--- album-entry.html.bak Sun Jul 5 16:22:02 2009 +++ album-entry.html Sun Jul 5 16:22:27 2009 @@ -8,7 +8,7 @@ - #{albumTitleFormatted} + #{albumDisplayTitleFormatted}
 * 1) {albumArtistFormatted}

A similar patch for /usr/palm/applications/com.palm.app.musicplayer/app/views/albums/album-entry.html

--- album-entry.html.bak Sun Jul 5 16:01:02 2009 +++ album-entry.html Sun Jul 5 16:01:25 2009 @@ -7,7 +7,7 @@ - #{albumTitleFormatted} + #{albumDisplayTitleFormatted}

For /usr/palm/applications/com.palm.app.musicplayer/app/controllers/albums-assistant.js

--- albums-assistant.js.bak Sun Jul 5 16:01:46 2009 +++ albums-assistant.js Sun Jul 5 16:14:41 2009 @@ -24,6 +24,7 @@ fixedHeightItems : true, formatters: { albumTitle: Util.albumFormatter, + albumDisplayTitle: Util.albumFormatter, albumPictureUrl: Util.albumArtListUrlFormatter } }; @@ -118,6 +119,12 @@

translateResults : function(filter, widget, offset, response){ + + function sortByAlbumDisplayTitle(a,b) { + var x = a.albumDisplayTitle.toLowerCase; + var y = b.albumDisplayTitle.toLowerCase; + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }

if(response.albums.length == 0){ this.controller.get('playAllAlbums').hide; @@ -132,6 +139,26 @@ var ret = {}; ret.list = response.albums; ret.total = parseInt(response.albumsTotal); + + for (i = 0; i < ret.list.length; i++) { + var albumTitle = ret.list[i].albumTitle; + if (albumTitle.toUpperCase.indexOf('THE ') == 0) { + ret.list[i].albumDisplayTitle = albumTitle.substring(4) + ', ' + albumTitle.substr(0,3); + } + else + if (albumTitle.toUpperCase.indexOf('A ') == 0) { + ret.list[i].albumDisplayTitle = albumTitle.substring(2) + ', ' + albumTitle.substr(0,1); + } + else + if (albumTitle.toUpperCase.indexOf('AN ') == 0) { + ret.list[i].albumDisplayTitle = albumTitle.substring(3) + ', ' + albumTitle.substr(0,2); + } + else { + ret.list[i].albumDisplayTitle = albumTitle; + } + //Mojo.Log.info(ret.list[i].albumDisplayTitle); + } + ret.list.sort(sortByAlbumDisplayTitle);

Util.setZOrder(ret.list, offset);

For /usr/palm/applications/com.palm.app.musicplayer/app/controllers/allalbums-assistant.js

--- allalbums-assistant.js.bak Sun Jul 5 16:23:16 2009 +++ allalbums-assistant.js Sun Jul 5 16:26:22 2009 @@ -26,6 +26,7 @@ fixedHeightItems : true, formatters: { albumTitle: Util.albumFormatter, + albumDisplayTitle: Util.albumFormatter, albumArtist: Util.artistFormatter, albumPictureUrl: Util.albumArtListUrlFormatter } @@ -181,6 +182,12 @@

translateResults : function(filter, widget, offset, response){ + + function sortByAlbumDisplayTitle(a,b) { + var x = a.albumDisplayTitle.toLowerCase; + var y = b.albumDisplayTitle.toLowerCase; + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }

if(response.albums.length == 0){ this.controller.get('no-items-message').innerHTML = AppAssistant.noItems; @@ -193,6 +200,26 @@ var ret = {}; ret.list = response.albums; ret.total = parseInt(response.albumsTotal); + + for (i = 0; i < ret.list.length; i++) { + var albumTitle = ret.list[i].albumTitle; + if (albumTitle.toUpperCase.indexOf('THE ') == 0) { + ret.list[i].albumDisplayTitle = albumTitle.substring(4) + ', ' + albumTitle.substr(0,3); + } + else + if (albumTitle.toUpperCase.indexOf('A ') == 0) { + ret.list[i].albumDisplayTitle = albumTitle.substring(2) + ', ' + albumTitle.substr(0,1); + } + else + if (albumTitle.toUpperCase.indexOf('AN ') == 0) { + ret.list[i].albumDisplayTitle = albumTitle.substring(3) + ', ' + albumTitle.substr(0,2); + } + else { + ret.list[i].albumDisplayTitle = albumTitle; + } + //Mojo.Log.info(ret.list[i].albumDisplayTitle); + } + ret.list.sort(sortByAlbumDisplayTitle);

Util.setZOrder(ret.list, offset);

@@ -211,7 +238,7 @@ },

getAlphaGroup: function(item){ - return Util.getAlphaGroup(item.albumTitle); + return Util.getAlphaGroup(item.albumDisplayTitle); } });

That's it!

Now lock the file system:

mount -o remount,ro /

And restart LunaSysMgr to apply the changes:

luna-send -n 1 palm://com.palm.applicationManager/rescan {}