Index: rockbox-devel/apps/bookmark.c =================================================================== --- rockbox-devel.orig/apps/bookmark.c +++ rockbox-devel/apps/bookmark.c @@ -202,6 +202,7 @@ bool bookmark_autobookmark(void) switch (global_settings.autocreatebookmark) { case BOOKMARK_YES: + case BOOKMARK_IFEXISTS: return write_bookmark(true); case BOOKMARK_NO: @@ -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,22 @@ 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(global_settings.autocreatebookmark == BOOKMARK_IFEXISTS) + { + 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 @@ -10142,3 +10142,17 @@ *: "Say file type" + + 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 @@ -432,7 +432,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 @@ -844,13 +844,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) {