Maybe quite a bit later. The way the database is organized right now makes it hard for me to do any kind of different "views" of the songs. This is why it is difficult to do a view of songs by source instead of by artist, then by source. The reason the database is organized this way is to save space on your Palm device. Most likely if I were to redesign the .pdb file it would increase in size by at least 50%. Let me explain the way it works now. The .pdb file looks like this:
Palm header information
This section includes create date, modfication date, db owner id, etc. It's a standard header that is on every .pdb file
Record list index
This section contains byte offsets for every record in the database. This is the record index. This is another standard section in every .pdb database.
Record 0
Palantir header record. This record is 4 ints smashed together. The 4 ints represent:
1 - index of the first Artist record
2 - number of Artist records
3 - index of the first Track record
4 - number of Track records
Record 1 - (Number of Artist Records)
These are records that store the Artist information These are separate so I don't have to store the artist name in every track record, and so I can iterate through an artist view easily to display the artist names. The format of these records is defined in the PDB Creator Java program in PDBArtistRecord.java
public int artistID;
public int trackCount;
public int sourceCount; //how many sources
public int[] sourceOffset; //where they sources are (first one is always first record)
public String name;
Basically I store where the albums start and end in the sourceOffset array so when someone selects an Artist, then I can iterate through the track listings beginning at sourceOffset[0] and get the album names for the Album view in Palantir.
Record (Number of Artist Records +1) - (Total number of records)
These are the Track records. They store the artistID and the rest of the details about the track listing. This is defined in PDBTrackRecord.java as such:
public int fid;
public int artistID; //integer value for artist
public String data; //year + source + track + title + genre + bitrate + duration
I can get the Title, Genre, Bitrate and Duration out of the packed data string by looking for null terminators '\n".
You can see by the format of the .pdb that it would be hard to key a view off of anything but an Artist. I could redesign everything so that each source had a sourceRecord, and those were all stored at the top of the .pdb file along with the Artist Records, but that would increase the size of the file a lot since you usually have more sources than artists. Another thing to think about is the screen real estate you have on the Palm. It doesn't have the space to display Title - Artist usually, and something would have to be truncated to work that in.
I'm not really opposed to the ideas of viewing by source first (like with soundtracks) or viewing by track only, but you can see that it's a redesign effort to do so. If anyone can suggest a better way of formatting the .pdb file I would appreciate it, but I can't see a better size/functionality combination right now. My track listing of 5800 songs takes somewhere around 420k, and I think that's pretty good considering how much data we're dealing with.