]> granicus.if.org Git - handbrake/commitdiff
LinGui: Fix duplicate preset name creation
authorJohn Stebbins <jstebbins.hb@gmail.com>
Thu, 29 Oct 2015 15:27:52 +0000 (08:27 -0700)
committerJohn Stebbins <jstebbins.hb@gmail.com>
Thu, 29 Oct 2015 15:29:33 +0000 (08:29 -0700)
Don't allow presets with the same name in the same folder.  If duplicate
found, append "(N)" to the name.

gtk/src/presets.c

index a6ee0f360281bdc9eeda7d7d5275d5d9e4fc25c7..151ac8b0961bb24a146072aef4f8da6656d4a807 100644 (file)
@@ -1624,8 +1624,37 @@ settings_save(signal_user_data_t *ud, hb_preset_index_t *path, const char *name)
             replace = TRUE;
         }
     }
+    char * new_name = strdup(name);
+    if (!replace)
+    {
+        // We are creating a new preset.  Make sure there is not
+        // another preset in this folder that has the same name
+        int       ii, count, index = 1;
+        GhbValue *children;
+
+        children = hb_presets_get_folder_children(path);
+        count   = ghb_array_len(children);
+        do
+        {
+            for (ii = 0; ii < count; ii++)
+            {
+                GhbValue   *preset;
+                const char *s;
+
+                preset = ghb_array_get(children, ii);
+                s      = ghb_dict_get_string(preset, "PresetName");
+                if (s != NULL && !strcmp(s, new_name))
+                {
+                    free(new_name);
+                    new_name = g_strdup_printf("%s (%d)", name, index++);
+                    break;
+                }
+            }
+        } while (ii < count);
+    }
     dict = ghb_settings_to_preset(ud->settings);
-    ghb_dict_set_string(dict, "PresetName", name);
+    ghb_dict_set_string(dict, "PresetName", new_name);
+    free(new_name);
     if (replace)
     {
         // Already exists, update its description