Index: trunk/apps/lang/english.lang =================================================================== --- trunk.orig/apps/lang/english.lang +++ trunk/apps/lang/english.lang @@ -11849,3 +11849,17 @@ *: "slash" + + 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: trunk/apps/bookmark.c =================================================================== --- trunk.orig/apps/bookmark.c +++ trunk/apps/bookmark.c @@ -93,7 +93,8 @@ static char* get_bookmark_info(int list_ size_t buffer_len); 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, char *bookmark); +static bool write_bookmark(bool create_bookmark_file, char *bookmark, + bool is_autocreate); static int get_bookmark_count(const char* bookmark_file_name); static char global_temp_buffer[MAX_PATH+1]; @@ -110,7 +111,7 @@ static char global_filename[MAX_PATH]; /* ----------------------------------------------------------------------- */ bool bookmark_create_menu(void) { - write_bookmark(true, create_bookmark()); + write_bookmark(true, create_bookmark(), false); return false; } @@ -176,13 +177,14 @@ bool bookmark_autobookmark(void) switch (global_settings.autocreatebookmark) { case BOOKMARK_YES: - return write_bookmark(true, bookmark); + case BOOKMARK_IFEXISTS: + return write_bookmark(true, bookmark, true); case BOOKMARK_NO: return false; case BOOKMARK_RECENT_ONLY_YES: - return write_bookmark(false, bookmark); + return write_bookmark(false, bookmark, true); } #ifdef HAVE_LCD_BITMAP const char *lines[]={ID2P(LANG_AUTO_BOOKMARK_QUERY)}; @@ -202,9 +204,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, bookmark); + return write_bookmark(false, bookmark, true); else - return write_bookmark(true, bookmark); + return write_bookmark(true, bookmark, true); } return false; } @@ -216,15 +218,19 @@ 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, char *bookmark) +static bool write_bookmark(bool create_bookmark_file, char *bookmark, + bool is_autocreate) { bool success=false; if (!bookmark) 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) @@ -233,13 +239,21 @@ static bool write_bookmark(bool create_b 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; } Index: trunk/apps/settings_list.c =================================================================== --- trunk.orig/apps/settings_list.c +++ trunk/apps/settings_list.c @@ -732,9 +732,10 @@ const struct settings_list settings[] = /* 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: trunk/apps/settings.h =================================================================== --- trunk.orig/apps/settings.h +++ trunk/apps/settings.h @@ -89,8 +89,9 @@ struct opt_items { #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 enum {