Index: trunk/apps/lang/english.lang
===================================================================
--- trunk.orig/apps/lang/english.lang
+++ trunk/apps/lang/english.lang
@@ -11082,3 +11082,17 @@
*: "OK"
+
+ id: LANG_VOICE_FILETYPE
+ desc: voice settings menu
+ user:
+
+ *: "Say file type"
+
+
+ *: "Say file type"
+
+
+ *: "Say file type"
+
+
Index: trunk/apps/menus/settings_menu.c
===================================================================
--- trunk.orig/apps/menus/settings_menu.c
+++ trunk/apps/menus/settings_menu.c
@@ -412,6 +412,7 @@ MENUITEM_SETTING(talk_dir_item, &global_
MENUITEM_SETTING(talk_dir_clip_item, &global_settings.talk_dir_clip, talk_callback);
MENUITEM_SETTING(talk_file_item, &global_settings.talk_file, NULL);
MENUITEM_SETTING(talk_file_clip_item, &global_settings.talk_file_clip, talk_callback);
+MENUITEM_SETTING(talk_filetype_item, &global_settings.talk_filetype, NULL);
static int talk_callback(int action,const struct menu_item_ex *this_item)
{
static int oldval = 0;
@@ -438,7 +439,8 @@ static int talk_callback(int action,cons
}
MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice,
&talk_menu_item, &talk_dir_item, &talk_dir_clip_item,
- &talk_file_item, &talk_file_clip_item);
+ &talk_file_item, &talk_file_clip_item,
+ &talk_filetype_item);
/* VOICE MENU */
/***********************************/
Index: trunk/apps/settings.h
===================================================================
--- trunk.orig/apps/settings.h
+++ trunk/apps/settings.h
@@ -535,6 +535,7 @@ struct user_settings
bool talk_dir_clip; /* use directory .talk clips */
int talk_file; /* voice file mode: 0=off, 1=number, 2=spell */
bool talk_file_clip; /* use file .talk clips */
+ bool talk_filetype; /* say file type */
/* file browser sorting */
int sort_file; /* 0=alpha, 1=date, 2=date (new first), 3=type */
Index: trunk/apps/settings_list.c
===================================================================
--- trunk.orig/apps/settings_list.c
+++ trunk/apps/settings_list.c
@@ -740,6 +740,7 @@ const struct settings_list settings[] =
ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER),
ID2P(LANG_VOICE_SPELL)),
OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false, "talk file clip", NULL),
+ OFFON_SETTING(F_TEMPVAR, talk_filetype, LANG_VOICE_FILETYPE, false, "talk filetype", NULL),
/* file sorting */
CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 ,
Index: trunk/apps/tree.c
===================================================================
--- trunk.orig/apps/tree.c
+++ trunk/apps/tree.c
@@ -114,6 +114,7 @@ static int dirbrowse(void);
static int ft_play_filenumber(int pos, int attr);
static int ft_play_dirname(char* name);
static void ft_play_filename(char *dir, char *file);
+static bool say_filetype(int attr, bool enqueue);
/*
* removes the extension of filename (if it doesn't start with a .)
@@ -787,8 +788,16 @@ static int dirbrowse()
break;
case 2: /* dirs spelled */
- talk_spell(name, false);
- break;
+ {
+ bool enqueue = false;
+ if(global_settings.talk_filetype)
+ {
+ talk_id(VOICE_DIR, enqueue);
+ enqueue = true;
+ }
+ talk_spell(name, enqueue);
+ }
+ break;
}
}
}
@@ -931,7 +940,15 @@ static int dirbrowse()
break;
case 2: /* dirs spelled */
- talk_spell(name, false);
+ {
+ bool enqueue = false;
+ if(global_settings.talk_filetype)
+ {
+ talk_id(VOICE_DIR, enqueue);
+ enqueue = true;
+ }
+ talk_spell(name, enqueue);
+ }
break;
}
}
@@ -953,7 +970,11 @@ static int dirbrowse()
break;
case 2: /* files spelled */
- talk_spell(name, false);
+ {
+ bool enqueue = false;
+ enqueue = say_filetype(attr, enqueue);
+ talk_spell(name, true);
+ }
break;
}
}
@@ -1233,11 +1254,12 @@ void bookmark_play(char *resume_file, in
start_wps=true;
}
-static int ft_play_filenumber(int pos, int attr)
+static long get_filetype_voice_id(int attr)
{
/* try to find a voice ID for the extension, if known */
int j;
- int ext_id = -1; /* default to none */
+ long ext_id = -1; /* default to none */
+ attr &= FILE_ATTR_MASK; /* file type */
for (j=0; j