Index: trunk/apps/bookmark.c =================================================================== --- trunk.orig/apps/bookmark.c +++ trunk/apps/bookmark.c @@ -102,7 +102,8 @@ static int buffer_bookmarks(struct bookm 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, bool is_mrb); static bool system_check(void); -static bool write_bookmark(bool create_bookmark_file, char *bookmark); +static bool write_bookmark(bool create_bookmark_file, bool is_autocreate, + char *bookmark); static int get_bookmark_count(const char* bookmark_file_name); static char global_temp_buffer[MAX_PATH+1]; @@ -122,7 +123,7 @@ bool bookmark_create_menu(void) if(!system_check()) return false; gui_syncsplash(0, ID2P(LANG_WAIT)); - write_bookmark(true, create_bookmark()); + write_bookmark(true, false, create_bookmark()); return false; } @@ -184,13 +185,14 @@ bool bookmark_autobookmark(void) switch (global_settings.autocreatebookmark) { case BOOKMARK_YES: - return write_bookmark(true, bookmark); + case BOOKMARK_IFEXISTS: + return write_bookmark(true, true, bookmark); case BOOKMARK_NO: return false; case BOOKMARK_RECENT_ONLY_YES: - return write_bookmark(false, bookmark); + return write_bookmark(false, true, bookmark); } #ifdef HAVE_LCD_BITMAP unsigned char *lines[]={ID2P(LANG_AUTO_BOOKMARK_QUERY)}; @@ -210,9 +212,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, true, bookmark); else - return write_bookmark(true, bookmark); + return write_bookmark(true, true, bookmark); } return false; } @@ -224,7 +226,8 @@ 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, + bool is_autocreate, char *bookmark) { bool success=false; @@ -232,8 +235,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, true); - + if (!success) + gui_syncsplash(HZ, ID2P(LANG_BOOKMARK_CREATE_FAILURE)); + } /* writing the bookmark */ if (create_bookmark_file) @@ -242,13 +248,21 @@ 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, false); - } + 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 @@ -677,9 +677,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 @@ -81,8 +81,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: trunk/apps/lang/english.lang =================================================================== --- trunk.orig/apps/lang/english.lang +++ trunk/apps/lang/english.lang @@ -11567,3 +11567,17 @@ *: "Speed" + + 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" + +