summaryrefslogtreecommitdiff
path: root/apps/tagcache.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-04-05 18:46:38 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-04-05 18:46:38 +0000
commit35d213aec3718a76e1ac161cc0db10b5b5609456 (patch)
treecde2e5737a98ab3f27481ba5df82dcb307b3650e /apps/tagcache.c
parent1de1f5b141d5fdc0427877425928c77a9006e027 (diff)
downloadrockbox-35d213aec3718a76e1ac161cc0db10b5b5609456.tar.gz
rockbox-35d213aec3718a76e1ac161cc0db10b5b5609456.zip
Tagcache engine: Better handling for track numbers and genre strings.
Browser: Don't jam if search string was not supplied. Don't show incorrect track numbers. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9523 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/tagcache.c')
-rw-r--r--apps/tagcache.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/apps/tagcache.c b/apps/tagcache.c
index 25728fa6f1..1a47b10ba8 100644
--- a/apps/tagcache.c
+++ b/apps/tagcache.c
@@ -66,7 +66,7 @@ static const int numeric_tags[] = { tag_year, tag_tracknumber, tag_length, tag_b
66#define TAGCACHE_FILE_INDEX ROCKBOX_DIR "/tagcache_%d.tcd" 66#define TAGCACHE_FILE_INDEX ROCKBOX_DIR "/tagcache_%d.tcd"
67 67
68/* Tag Cache Header version 'TCHxx' */ 68/* Tag Cache Header version 'TCHxx' */
69#define TAGCACHE_MAGIC 0x54434801 69#define TAGCACHE_MAGIC 0x54434802
70 70
71/* Tag database structures. */ 71/* Tag database structures. */
72 72
@@ -815,7 +815,7 @@ static inline void write_item(const char *item)
815inline void check_if_empty(char **tag) 815inline void check_if_empty(char **tag)
816{ 816{
817 if (tag == NULL || *tag == NULL || *tag[0] == '\0') 817 if (tag == NULL || *tag == NULL || *tag[0] == '\0')
818 *tag = "Unknown"; 818 *tag = "<Untagged>";
819} 819}
820 820
821#define CRC_BUF_LEN 8 821#define CRC_BUF_LEN 8
@@ -831,6 +831,7 @@ static void add_tagcache(const char *path)
831 bool ret; 831 bool ret;
832 int fd; 832 int fd;
833 char tracknumfix[3]; 833 char tracknumfix[3];
834 char *genrestr;
834 //uint32_t crcbuf[CRC_BUF_LEN]; 835 //uint32_t crcbuf[CRC_BUF_LEN];
835 836
836 if (cachefd < 0) 837 if (cachefd < 0)
@@ -870,17 +871,19 @@ static void add_tagcache(const char *path)
870 if (!ret) 871 if (!ret)
871 return ; 872 return ;
872 873
874 genrestr = id3_get_genre(&track.id3);
875
873 check_if_empty(&track.id3.title); 876 check_if_empty(&track.id3.title);
874 check_if_empty(&track.id3.artist); 877 check_if_empty(&track.id3.artist);
875 check_if_empty(&track.id3.album); 878 check_if_empty(&track.id3.album);
876 check_if_empty(&track.id3.genre_string); 879 check_if_empty(&genrestr);
877 check_if_empty(&track.id3.composer); 880 check_if_empty(&track.id3.composer);
878 881
879 entry.tag_length[tag_filename] = strlen(path) + 1; 882 entry.tag_length[tag_filename] = strlen(path) + 1;
880 entry.tag_length[tag_title] = strlen(track.id3.title) + 1; 883 entry.tag_length[tag_title] = strlen(track.id3.title) + 1;
881 entry.tag_length[tag_artist] = strlen(track.id3.artist) + 1; 884 entry.tag_length[tag_artist] = strlen(track.id3.artist) + 1;
882 entry.tag_length[tag_album] = strlen(track.id3.album) + 1; 885 entry.tag_length[tag_album] = strlen(track.id3.album) + 1;
883 entry.tag_length[tag_genre] = strlen(track.id3.genre_string) + 1; 886 entry.tag_length[tag_genre] = strlen(genrestr) + 1;
884 entry.tag_length[tag_composer] = strlen(track.id3.composer) + 1; 887 entry.tag_length[tag_composer] = strlen(track.id3.composer) + 1;
885 888
886 entry.tag_offset[tag_filename] = 0; 889 entry.tag_offset[tag_filename] = 0;
@@ -899,21 +902,22 @@ static void add_tagcache(const char *path)
899 902
900 if (entry.tag_offset[tag_tracknumber] <= 0) 903 if (entry.tag_offset[tag_tracknumber] <= 0)
901 { 904 {
902 int start, i; 905 const char *p = strrchr(path, '.');
903 906
904 for (start = 0; path[start] != '\0'; start++) 907 if (p == NULL)
905 if (isdigit(path[start])) 908 p = &path[strlen(path)-1];
906 break ;
907 909
908 for (i = 0; i < (int)sizeof(tracknumfix)-1 910 while (*p != '/')
909 && path[start+i] != '\0'; i++)
910 { 911 {
911 if (isdigit(path[start+i])) 912 if (isdigit(*p) && isdigit(*(p-1)))
912 tracknumfix[i] = path[start+i]; 913 {
913 else 914 tracknumfix[1] = *p--;
914 break ; 915 tracknumfix[0] = *p;
916 break;
917 }
918 p--;
915 } 919 }
916 920
917 if (tracknumfix[0] != '\0') 921 if (tracknumfix[0] != '\0')
918 entry.tag_offset[tag_tracknumber] = atoi(tracknumfix); 922 entry.tag_offset[tag_tracknumber] = atoi(tracknumfix);
919 else 923 else
@@ -925,7 +929,7 @@ static void add_tagcache(const char *path)
925 write_item(track.id3.title); 929 write_item(track.id3.title);
926 write_item(track.id3.artist); 930 write_item(track.id3.artist);
927 write_item(track.id3.album); 931 write_item(track.id3.album);
928 write_item(track.id3.genre_string); 932 write_item(genrestr);
929 write_item(track.id3.composer); 933 write_item(track.id3.composer);
930 total_entry_count++; 934 total_entry_count++;
931} 935}