Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 16201) +++ apps/lang/english.lang (working copy) @@ -11574,3 +11574,17 @@ swcodec: "Keyclick Repeats" + + id: LANG_BOOKMARK_SETTINGS_IFEXISTS + desc: Save if bookmark file already exists + user: + + *: "If bookmark file already exists" + + + *: "If bookmark file already exists" + + + *: "If bookmark file already exists" + + Index: apps/settings.h =================================================================== --- apps/settings.h (revision 16201) +++ apps/settings.h (working copy) @@ -87,8 +87,9 @@ #define BOOKMARK_YES 1 #define BOOKMARK_ASK 2 #define BOOKMARK_UNIQUE_ONLY 2 -#define BOOKMARK_RECENT_ONLY_YES 3 -#define BOOKMARK_RECENT_ONLY_ASK 4 +#define BOOKMARK_IFEXISTS 3 +#define BOOKMARK_RECENT_ONLY_YES 4 +#define BOOKMARK_RECENT_ONLY_ASK 5 #define TRIG_MODE_OFF 0 #define TRIG_MODE_NOREARM 1 Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 16201) +++ apps/settings_list.c (working copy) @@ -633,9 +633,10 @@ /* bookmarks */ CHOICE_SETTING(0, autocreatebookmark, LANG_BOOKMARK_SETTINGS_AUTOCREATE, BOOKMARK_NO, "autocreate bookmarks", - "off,on,ask,recent only - on,recent only - ask", NULL, 5, + "off,on,ask,if bmark file exists,recent only - on,recent only - ask", NULL, 6, ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES), - ID2P(LANG_ASK), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES), + ID2P(LANG_ASK), ID2P(LANG_BOOKMARK_SETTINGS_IFEXISTS), + ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK)), CHOICE_SETTING(0, autoloadbookmark, LANG_BOOKMARK_SETTINGS_AUTOLOAD, BOOKMARK_NO, "autoload bookmarks", off_on_ask, NULL, 3, Index: apps/bookmark.c =================================================================== --- apps/bookmark.c (revision 16201) +++ apps/bookmark.c (working copy) @@ -102,7 +102,7 @@ static char* get_bookmark_info(int list_index, void* data, char *buffer); static char* select_bookmark(const char* bookmark_file_name, bool show_dont_resume); static bool system_check(void); -static bool write_bookmark(bool create_bookmark_file); +static bool write_bookmark(bool create_bookmark_file, bool is_autocreate); static int get_bookmark_count(const char* bookmark_file_name); static char global_temp_buffer[MAX_PATH+1]; @@ -119,7 +119,7 @@ /* ----------------------------------------------------------------------- */ bool bookmark_create_menu(void) { - write_bookmark(true); + write_bookmark(true, false); return false; } @@ -178,13 +178,14 @@ switch (global_settings.autocreatebookmark) { case BOOKMARK_YES: - return write_bookmark(true); + case BOOKMARK_IFEXISTS: + return write_bookmark(true, true); case BOOKMARK_NO: return false; case BOOKMARK_RECENT_ONLY_YES: - return write_bookmark(false); + return write_bookmark(false, true); } #ifdef HAVE_LCD_BITMAP unsigned char *lines[]={ID2P(LANG_AUTO_BOOKMARK_QUERY)}; @@ -204,9 +205,9 @@ if(gui_syncyesno_run(&message, NULL, NULL)==YESNO_YES) { if (global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_ASK) - return write_bookmark(false); + return write_bookmark(false, true); else - return write_bookmark(true); + return write_bookmark(true, true); } return false; } @@ -218,7 +219,7 @@ /* resume_index*resume_offset*resume_seed*resume_first_index* */ /* resume_file*milliseconds*MP3 Title* */ /* ------------------------------------------------------------------------*/ -static bool write_bookmark(bool create_bookmark_file) +static bool write_bookmark(bool create_bookmark_file, bool is_autocreate) { bool success=false; char* bookmark; @@ -231,9 +232,12 @@ return false; /* something didn't happen correctly, do nothing */ if (global_settings.usemrb) + { success = add_bookmark(RECENT_BOOKMARK_FILE, bookmark, true); + if (!success) + gui_syncsplash(HZ, ID2P(LANG_BOOKMARK_CREATE_FAILURE)); + } - /* writing the bookmark */ if (create_bookmark_file) { @@ -241,13 +245,21 @@ sizeof(global_temp_buffer)); if (generate_bookmark_file_name(name)) { + if(is_autocreate + && global_settings.autocreatebookmark == BOOKMARK_IFEXISTS) + { /* Check if bookmark file exists */ + int fd = open(global_bookmark_file_name, O_RDONLY); + if(fd < 0) + /* bookmark file does not exist, do not save. */ + return true; + close(fd); + } success = add_bookmark(global_bookmark_file_name, bookmark, false); } + gui_syncsplash(HZ, success ? ID2P(LANG_BOOKMARK_CREATE_SUCCESS) + : ID2P(LANG_BOOKMARK_CREATE_FAILURE)); } - gui_syncsplash(HZ, success ? ID2P(LANG_BOOKMARK_CREATE_SUCCESS) - : ID2P(LANG_BOOKMARK_CREATE_FAILURE)); - return true; }