summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/filetypes.c225
-rw-r--r--apps/filetypes.h5
-rw-r--r--apps/tree.c20
3 files changed, 146 insertions, 104 deletions
diff --git a/apps/filetypes.c b/apps/filetypes.c
index da3fdd0283..12b4fe3dc6 100644
--- a/apps/filetypes.c
+++ b/apps/filetypes.c
@@ -38,6 +38,7 @@
38#include "splash.h" 38#include "splash.h"
39#include "core_alloc.h" 39#include "core_alloc.h"
40#include "icons.h" 40#include "icons.h"
41/*#define LOGF_ENABLE*/
41#include "logf.h" 42#include "logf.h"
42 43
43/* max filetypes (plugins & icons stored here) */ 44/* max filetypes (plugins & icons stored here) */
@@ -47,103 +48,136 @@
47 48
48/* a table for the known file types */ 49/* a table for the known file types */
49static const struct filetype inbuilt_filetypes[] = { 50static const struct filetype inbuilt_filetypes[] = {
50 { "mp3", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 51 { "mp3", FILE_ATTR_AUDIO },
51 { "mp2", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 52 { "mp2", FILE_ATTR_AUDIO },
52 { "mpa", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 53 { "mpa", FILE_ATTR_AUDIO },
53 { "mp1", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 54 { "mp1", FILE_ATTR_AUDIO },
54 { "ogg", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 55 { "ogg", FILE_ATTR_AUDIO },
55 { "oga", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 56 { "oga", FILE_ATTR_AUDIO },
56 { "wma", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 57 { "wma", FILE_ATTR_AUDIO },
57 { "wmv", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 58 { "wmv", FILE_ATTR_AUDIO },
58 { "asf", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 59 { "asf", FILE_ATTR_AUDIO },
59 { "wav", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 60 { "wav", FILE_ATTR_AUDIO },
60 { "flac", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 61 { "flac", FILE_ATTR_AUDIO },
61 { "ac3", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 62 { "ac3", FILE_ATTR_AUDIO },
62 { "a52", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 63 { "a52", FILE_ATTR_AUDIO },
63 { "mpc", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 64 { "mpc", FILE_ATTR_AUDIO },
64 { "wv", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 65 { "wv", FILE_ATTR_AUDIO },
65 { "m4a", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 66 { "m4a", FILE_ATTR_AUDIO },
66 { "m4b", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 67 { "m4b", FILE_ATTR_AUDIO },
67 { "mp4", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 68 { "mp4", FILE_ATTR_AUDIO },
68 { "mod", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 69 { "mod", FILE_ATTR_AUDIO },
69 { "mpga", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 70 { "mpga", FILE_ATTR_AUDIO },
70 { "shn", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 71 { "shn", FILE_ATTR_AUDIO },
71 { "aif", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 72 { "aif", FILE_ATTR_AUDIO },
72 { "aiff", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 73 { "aiff", FILE_ATTR_AUDIO },
73 { "spx" , FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 74 { "spx" , FILE_ATTR_AUDIO },
74 { "opus", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 75 { "opus", FILE_ATTR_AUDIO },
75 { "sid", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 76 { "sid", FILE_ATTR_AUDIO },
76 { "adx", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 77 { "adx", FILE_ATTR_AUDIO },
77 { "nsf", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 78 { "nsf", FILE_ATTR_AUDIO },
78 { "nsfe", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 79 { "nsfe", FILE_ATTR_AUDIO },
79 { "spc", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 80 { "spc", FILE_ATTR_AUDIO },
80 { "ape", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 81 { "ape", FILE_ATTR_AUDIO },
81 { "mac", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 82 { "mac", FILE_ATTR_AUDIO },
82 { "sap" , FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 83 { "sap" , FILE_ATTR_AUDIO },
83 { "rm", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 84 { "rm", FILE_ATTR_AUDIO },
84 { "ra", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 85 { "ra", FILE_ATTR_AUDIO },
85 { "rmvb", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 86 { "rmvb", FILE_ATTR_AUDIO },
86 { "cmc", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 87 { "cmc", FILE_ATTR_AUDIO },
87 { "cm3", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 88 { "cm3", FILE_ATTR_AUDIO },
88 { "cmr", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 89 { "cmr", FILE_ATTR_AUDIO },
89 { "cms", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 90 { "cms", FILE_ATTR_AUDIO },
90 { "dmc", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 91 { "dmc", FILE_ATTR_AUDIO },
91 { "dlt", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 92 { "dlt", FILE_ATTR_AUDIO },
92 { "mpt", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 93 { "mpt", FILE_ATTR_AUDIO },
93 { "mpd", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 94 { "mpd", FILE_ATTR_AUDIO },
94 { "rmt", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 95 { "rmt", FILE_ATTR_AUDIO },
95 { "tmc", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 96 { "tmc", FILE_ATTR_AUDIO },
96 { "tm8", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 97 { "tm8", FILE_ATTR_AUDIO },
97 { "tm2", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 98 { "tm2", FILE_ATTR_AUDIO },
98 { "oma", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 99 { "oma", FILE_ATTR_AUDIO },
99 { "aa3", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 100 { "aa3", FILE_ATTR_AUDIO },
100 { "at3", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 101 { "at3", FILE_ATTR_AUDIO },
101 { "mmf", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 102 { "mmf", FILE_ATTR_AUDIO },
102 { "au", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 103 { "au", FILE_ATTR_AUDIO },
103 { "snd", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 104 { "snd", FILE_ATTR_AUDIO },
104 { "vox", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 105 { "vox", FILE_ATTR_AUDIO },
105 { "w64", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 106 { "w64", FILE_ATTR_AUDIO },
106 { "tta", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 107 { "tta", FILE_ATTR_AUDIO },
107 { "ay", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 108 { "ay", FILE_ATTR_AUDIO },
108 { "vtx", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 109 { "vtx", FILE_ATTR_AUDIO },
109 { "gbs", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 110 { "gbs", FILE_ATTR_AUDIO },
110 { "hes", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 111 { "hes", FILE_ATTR_AUDIO },
111 { "sgc", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 112 { "sgc", FILE_ATTR_AUDIO },
112 { "vgm", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 113 { "vgm", FILE_ATTR_AUDIO },
113 { "vgz", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 114 { "vgz", FILE_ATTR_AUDIO },
114 { "kss", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 115 { "kss", FILE_ATTR_AUDIO },
115 { "aac", FILE_ATTR_AUDIO, VOICE_EXT_MPA }, 116 { "aac", FILE_ATTR_AUDIO },
116 { "m3u", FILE_ATTR_M3U, LANG_PLAYLIST }, 117 { "m3u", FILE_ATTR_M3U },
117 { "m3u8", FILE_ATTR_M3U, LANG_PLAYLIST }, 118 { "m3u8", FILE_ATTR_M3U },
118 { "cfg", FILE_ATTR_CFG, VOICE_EXT_CFG }, 119 { "cfg", FILE_ATTR_CFG },
119 { "wps", FILE_ATTR_WPS, VOICE_EXT_WPS }, 120 { "wps", FILE_ATTR_WPS },
120#ifdef HAVE_REMOTE_LCD 121#ifdef HAVE_REMOTE_LCD
121 { "rwps", FILE_ATTR_RWPS, VOICE_EXT_RWPS }, 122 { "rwps", FILE_ATTR_RWPS },
122#endif 123#endif
123#if CONFIG_TUNER 124#if CONFIG_TUNER
124 { "fmr", FILE_ATTR_FMR, LANG_FMR }, 125 { "fmr", FILE_ATTR_FMR },
125 { "fms", FILE_ATTR_FMS, VOICE_EXT_FMS }, 126 { "fms", FILE_ATTR_FMS },
126#endif 127#endif
127 { "lng", FILE_ATTR_LNG, LANG_LANGUAGE }, 128 { "lng", FILE_ATTR_LNG },
128 { "rock", FILE_ATTR_ROCK, VOICE_EXT_ROCK }, 129 { "rock", FILE_ATTR_ROCK },
129 { "lua", FILE_ATTR_LUA, VOICE_EXT_ROCK }, 130 { "lua", FILE_ATTR_LUA },
130 { "opx", FILE_ATTR_OPX, VOICE_EXT_ROCK }, 131 { "opx", FILE_ATTR_OPX },
131 { "fnt", FILE_ATTR_FONT, VOICE_EXT_FONT }, 132 { "fnt", FILE_ATTR_FONT },
132 { "kbd", FILE_ATTR_KBD, VOICE_EXT_KBD }, 133 { "kbd", FILE_ATTR_KBD },
133 { "bmark",FILE_ATTR_BMARK, VOICE_EXT_BMARK }, 134 { "bmark",FILE_ATTR_BMARK },
134 { "cue", FILE_ATTR_CUE, VOICE_EXT_CUESHEET }, 135 { "cue", FILE_ATTR_CUE },
135 { "sbs", FILE_ATTR_SBS, VOICE_EXT_SBS }, 136 { "sbs", FILE_ATTR_SBS },
136#ifdef HAVE_REMOTE_LCD 137#ifdef HAVE_REMOTE_LCD
137 { "rsbs", FILE_ATTR_RSBS, VOICE_EXT_RSBS }, 138 { "rsbs", FILE_ATTR_RSBS },
138#if CONFIG_TUNER 139#if CONFIG_TUNER
139 { "rfms", FILE_ATTR_RFMS, VOICE_EXT_RFMS }, 140 { "rfms", FILE_ATTR_RFMS },
140#endif 141#endif
141#endif 142#endif
142#ifdef BOOTFILE_EXT 143#ifdef BOOTFILE_EXT
143 { BOOTFILE_EXT, FILE_ATTR_MOD, VOICE_EXT_AJZ }, 144 { BOOTFILE_EXT, FILE_ATTR_MOD },
144#endif 145#endif
145#ifdef BOOTFILE_EXT2 146#ifdef BOOTFILE_EXT2
146 { BOOTFILE_EXT2, FILE_ATTR_MOD, VOICE_EXT_AJZ }, 147 { BOOTFILE_EXT2, FILE_ATTR_MOD },
148#endif
149};
150
151/* a table for the known file types voice clips */
152static const struct fileattr_voice inbuilt_attrvoices[] = {
153 { FILE_ATTR_AUDIO, VOICE_EXT_MPA },
154 { FILE_ATTR_M3U, LANG_PLAYLIST },
155 { FILE_ATTR_CFG, VOICE_EXT_CFG },
156 { FILE_ATTR_WPS, VOICE_EXT_WPS },
157#ifdef HAVE_REMOTE_LCD
158 { FILE_ATTR_RWPS, VOICE_EXT_RWPS },
159#endif
160#if CONFIG_TUNER
161 { FILE_ATTR_FMR, LANG_FMR },
162 { FILE_ATTR_FMS, VOICE_EXT_FMS },
163#endif
164 { FILE_ATTR_LNG, LANG_LANGUAGE },
165 { FILE_ATTR_ROCK, VOICE_EXT_ROCK },
166 { FILE_ATTR_LUA, VOICE_EXT_ROCK },
167 { FILE_ATTR_OPX, VOICE_EXT_ROCK },
168 { FILE_ATTR_FONT, VOICE_EXT_FONT },
169 { FILE_ATTR_KBD, VOICE_EXT_KBD },
170 { FILE_ATTR_BMARK, VOICE_EXT_BMARK },
171 { FILE_ATTR_CUE, VOICE_EXT_CUESHEET },
172 { FILE_ATTR_SBS, VOICE_EXT_SBS },
173#ifdef HAVE_REMOTE_LCD
174 { FILE_ATTR_RSBS, VOICE_EXT_RSBS },
175#if CONFIG_TUNER
176 { FILE_ATTR_RFMS, VOICE_EXT_RFMS },
177#endif
178#endif
179#if defined(BOOTFILE_EXT) || defined(BOOTFILE_EXT2)
180 { FILE_ATTR_MOD, VOICE_EXT_AJZ },
147#endif 181#endif
148}; 182};
149 183
@@ -191,6 +225,25 @@ void tree_get_filetypes(const struct filetype** types, int* count)
191 *count = sizeof(inbuilt_filetypes) / sizeof(*inbuilt_filetypes); 225 *count = sizeof(inbuilt_filetypes) / sizeof(*inbuilt_filetypes);
192} 226}
193 227
228long tree_filetype_voiceclip(int attr)
229{
230 logf("%s attr %d", __func__, attr);
231 int j;
232 if (global_settings.talk_filetype)
233 {
234 int count = sizeof(inbuilt_attrvoices)/sizeof(*inbuilt_attrvoices);
235 /* try to find a voice ID for the extension, if known */
236 //attr &= FILE_ATTR_MASK; /* file type */
237 for (j=0; j<count; j++)
238 if (attr == inbuilt_attrvoices[j].tree_attr)
239 {
240 logf("%s attr %d id %d", __func__, attr, inbuilt_attrvoices[j].voiceclip);
241 return inbuilt_attrvoices[j].voiceclip;
242 }
243 }
244 return -1;
245}
246
194#define ROCK_EXTENSION "rock" 247#define ROCK_EXTENSION "rock"
195 248
196struct file_type { 249struct file_type {
diff --git a/apps/filetypes.h b/apps/filetypes.h
index 767a26fc1f..fc1022a014 100644
--- a/apps/filetypes.h
+++ b/apps/filetypes.h
@@ -53,10 +53,15 @@
53struct filetype { 53struct filetype {
54 char* extension; 54 char* extension;
55 int tree_attr; 55 int tree_attr;
56};
57
58struct fileattr_voice {
59 int tree_attr;
56 int voiceclip; 60 int voiceclip;
57}; 61};
58 62
59void tree_get_filetypes(const struct filetype**, int*) INIT_ATTR; 63void tree_get_filetypes(const struct filetype**, int*) INIT_ATTR;
64long tree_filetype_voiceclip(int attr) INIT_ATTR;
60 65
61/* init the filetypes structs. 66/* init the filetypes structs.
62 uses audio buffer for storage, so call early in init... */ 67 uses audio buffer for storage, so call early in init... */
diff --git a/apps/tree.c b/apps/tree.c
index e8655cd0d0..d945b721b4 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -1179,25 +1179,9 @@ bool bookmark_play(char *resume_file, int index, unsigned long elapsed,
1179 return started; 1179 return started;
1180} 1180}
1181 1181
1182static long filetype_voiceclip(int attr)
1183{
1184 int j;
1185 if (global_settings.talk_filetype)
1186 {
1187 /* try to find a voice ID for the extension, if known */
1188 attr &= FILE_ATTR_MASK; /* file type */
1189 for (j=0; j<filetypes_count; j++)
1190 if (attr == filetypes[j].tree_attr)
1191 {
1192 return filetypes[j].voiceclip;
1193 }
1194 }
1195 return -1;
1196}
1197
1198static void say_filetype(int attr) 1182static void say_filetype(int attr)
1199{ 1183{
1200 talk_id(filetype_voiceclip(attr), true); 1184 talk_id(tree_filetype_voiceclip(attr), true);
1201} 1185}
1202 1186
1203static int ft_play_dirname(char* name) 1187static int ft_play_dirname(char* name)
@@ -1215,7 +1199,7 @@ static int ft_play_filename(char *dir, char *file, int attr)
1215 file_thumbnail_ext)) 1199 file_thumbnail_ext))
1216 /* file has no .talk extension */ 1200 /* file has no .talk extension */
1217 return talk_file(dir, NULL, file, file_thumbnail_ext, 1201 return talk_file(dir, NULL, file, file_thumbnail_ext,
1218 TALK_IDARRAY(filetype_voiceclip(attr)), false); 1202 TALK_IDARRAY(tree_filetype_voiceclip(attr)), false);
1219 1203
1220 /* it already is a .talk file, play this directly, but prefix it. */ 1204 /* it already is a .talk file, play this directly, but prefix it. */
1221 return talk_file(dir, NULL, file, NULL, 1205 return talk_file(dir, NULL, file, NULL,