Index: rockbox-devel/apps/bookmark.c =================================================================== --- rockbox-devel.orig/apps/bookmark.c +++ rockbox-devel/apps/bookmark.c @@ -83,7 +83,7 @@ static bool parse_bookmark(const char * char* file_name); static char* select_bookmark(const char* bookmark_file_name, bool is_mrb); 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]; @@ -97,7 +97,7 @@ static char global_filename[MAX_PATH]; /* ----------------------------------------------------------------------- */ bool bookmark_create_menu(void) { - write_bookmark(true); + write_bookmark(true, false); return false; } @@ -202,13 +202,14 @@ bool bookmark_autobookmark(void) 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)}; @@ -225,9 +226,9 @@ bool bookmark_autobookmark(void) 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; } @@ -239,7 +240,7 @@ bool bookmark_autobookmark(void) /* 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; @@ -252,8 +253,11 @@ static bool write_bookmark(bool create_b return false; /* something didn't happen correctly, do nothing */ if (global_settings.usemrb) + { success = add_bookmark(RECENT_BOOKMARK_FILE, bookmark); - + if (!success) + gui_syncsplash(HZ, true, ID2P(LANG_BOOKMARK_CREATE_FAILURE)); + } /* writing the bookmark */ if (create_bookmark_file) @@ -262,15 +266,23 @@ static bool write_bookmark(bool create_b sizeof(global_temp_buffer)); if (generate_bookmark_file_name(name)) { - success = add_bookmark(global_bookmark_file_name, bookmark); - } + 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 already exist, do not + write bookmark. */ + return true; + close(fd); + } + success = add_bookmark(global_bookmark_file_name, bookmark); + } + if (success) + gui_syncsplash(HZ, true, ID2P(LANG_BOOKMARK_CREATE_SUCCESS)); + else + gui_syncsplash(HZ, true, ID2P(LANG_BOOKMARK_CREATE_FAILURE)); } - - if (success) - gui_syncsplash(HZ, true, ID2P(LANG_BOOKMARK_CREATE_SUCCESS)); - else - gui_syncsplash(HZ, true, ID2P(LANG_BOOKMARK_CREATE_FAILURE)); - return true; } Index: rockbox-devel/apps/lang/english.lang =================================================================== --- rockbox-devel.orig/apps/lang/english.lang +++ rockbox-devel/apps/lang/english.lang @@ -10186,3 +10186,17 @@ *: "Directory" + + 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: rockbox-devel/apps/settings.c =================================================================== --- rockbox-devel.orig/apps/settings.c +++ rockbox-devel/apps/settings.c @@ -436,7 +436,7 @@ static const struct bit_entry hd_bits[] "recursive directory insert", off_on_ask }, /* bookmarks */ {3, S_O(autocreatebookmark), BOOKMARK_NO, "autocreate bookmarks", - "off,on,ask,recent only - on,recent only - ask" }, + "off,on,ask,if bmark file exists,recent only - on,recent only - ask" }, {2, S_O(autoloadbookmark), BOOKMARK_NO, "autoload bookmarks", off_on_ask }, {2, S_O(usemrb), BOOKMARK_NO, Index: rockbox-devel/apps/settings.h =================================================================== --- rockbox-devel.orig/apps/settings.h +++ rockbox-devel/apps/settings.h @@ -53,8 +53,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 FF_REWIND_1000 0 #define FF_REWIND_2000 1 #define FF_REWIND_3000 2 Index: rockbox-devel/apps/settings_menu.c =================================================================== --- rockbox-devel.orig/apps/settings_menu.c +++ rockbox-devel/apps/settings_menu.c @@ -853,13 +853,14 @@ static bool autocreatebookmark(void) { STR(LANG_SET_BOOL_NO) }, { STR(LANG_SET_BOOL_YES) }, { STR(LANG_RESUME_SETTING_ASK) }, + { STR(LANG_BOOKMARK_SETTINGS_IFEXISTS) }, { STR(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES) }, { STR(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK) } }; retval = set_option( str(LANG_BOOKMARK_SETTINGS_AUTOCREATE), &global_settings.autocreatebookmark, INT, - names, 5, NULL ); + names, 6, NULL ); if(global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_YES || global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_ASK) {