diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2006-04-05 18:46:38 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-04-05 18:46:38 +0000 |
commit | 35d213aec3718a76e1ac161cc0db10b5b5609456 (patch) | |
tree | cde2e5737a98ab3f27481ba5df82dcb307b3650e /apps/tagcache.c | |
parent | 1de1f5b141d5fdc0427877425928c77a9006e027 (diff) | |
download | rockbox-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.c | 36 |
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) | |||
815 | inline void check_if_empty(char **tag) | 815 | inline 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 | } |