moved safe delete functions to separate file
authorVladimir Nadvornik <nadvornik@suse.cz>
Tue, 6 May 2008 21:35:31 +0000 (21:35 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Tue, 6 May 2008 21:35:31 +0000 (21:35 +0000)
src/Makefile.am
src/preferences.c
src/trash.c [new file with mode: 0644]
src/trash.h [new file with mode: 0644]
src/utilops.c
src/utilops.h

index 174edd3..a53fac2 100644 (file)
@@ -184,6 +184,7 @@ geeqie_SOURCES = \
        thumb.h         \
        thumb_standard.c        \
        thumb_standard.h        \
+       trash.c         \
        utilops.c       \
        utilops.h       \
        view_dir.c      \
index 73d9f6d..f36eec1 100644 (file)
@@ -28,6 +28,7 @@
 #include "layout_util.h"
 #include "pixbuf_util.h"
 #include "slideshow.h"
+#include "trash.h"
 #include "utilops.h"
 #include "ui_fileops.h"
 #include "ui_misc.h"
diff --git a/src/trash.c b/src/trash.c
new file mode 100644 (file)
index 0000000..f073a8a
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Geeqie
+ * (C) 2006 John Ellis
+ * Copyright (C) 2008 The Geeqie Team
+ *
+ * Author: John Ellis
+ *
+ * This software is released under the GNU General Public License (GNU GPL).
+ * Please read the included file COPYING for more information.
+ * This software comes with no warranty of any kind, use at your own risk!
+ */
+
+
+#include "main.h"
+#include "trash.h"
+#include "utilops.h"
+
+
+#include "debug.h"
+#include "filedata.h"
+#include "ui_fileops.h"
+#include "ui_misc.h"
+
+
+/*
+ *--------------------------------------------------------------------------
+ * Safe Delete
+ *--------------------------------------------------------------------------
+ */
+
+static gint file_util_safe_number(gint64 free_space)
+{
+       gint n = 0;
+       gint64 total = 0;
+       GList *list;
+       GList *work;
+       gint sorted = FALSE;
+       gint warned = FALSE;
+
+       if (!filelist_read(options->file_ops.safe_delete_path, &list, NULL)) return 0;
+
+       work = list;
+       while (work)
+               {
+               FileData *fd;
+               gint v;
+
+               fd = work->data;
+               work = work->next;
+
+               v = (gint)strtol(fd->name, NULL, 10);
+               if (v >= n) n = v + 1;
+
+               total += fd->size;
+               }
+
+       while (options->file_ops.safe_delete_folder_maxsize > 0 && list &&
+              (free_space < 0 || total + free_space > (gint64)options->file_ops.safe_delete_folder_maxsize * 1048576) )
+               {
+               FileData *fd;
+
+               if (!sorted)
+                       {
+                       list = filelist_sort(list, SORT_NAME, TRUE);
+                       sorted = TRUE;
+                       }
+
+               fd = list->data;
+               list = g_list_remove(list, fd);
+
+               DEBUG_1("expunging from trash for space: %s", fd->name);
+               if (!unlink_file(fd->path) && !warned)
+                       {
+                       file_util_warning_dialog(_("Delete failed"),
+                                                _("Unable to remove old file from trash folder"),
+                                                GTK_STOCK_DIALOG_WARNING, NULL);
+                       warned = TRUE;
+                       }
+               total -= fd->size;
+               file_data_unref(fd);
+               }
+
+       filelist_free(list);
+
+       return n;
+}
+
+void file_util_trash_clear(void)
+{
+       file_util_safe_number(-1);
+}
+
+static gchar *file_util_safe_dest(const gchar *path)
+{
+       gint n;
+
+       n = file_util_safe_number(filesize(path));
+       return g_strdup_printf("%s/%06d_%s", options->file_ops.safe_delete_path, n, filename_from_path(path));
+}
+
+static void file_util_safe_del_toggle_cb(GtkWidget *button, gpointer data)
+{
+       options->file_ops.safe_delete_enable = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+}
+
+static void file_util_safe_del_close_cb(GtkWidget *dialog, gpointer data)
+{
+       GenericDialog **gd = data;
+
+       *gd = NULL;
+}
+
+gint file_util_safe_unlink(const char *path)
+{
+       static GenericDialog *gd = NULL;
+       gchar *result = NULL;
+       gint success = TRUE;
+
+       if (!isfile(path)) return FALSE;
+
+       if (!isdir(options->file_ops.safe_delete_path))
+               {
+               DEBUG_1("creating trash: %s", options->file_ops.safe_delete_path);
+               if (!options->file_ops.safe_delete_path || !mkdir_utf8(options->file_ops.safe_delete_path, 0755))
+                       {
+                       result = _("Could not create folder");
+                       success = FALSE;
+                       }
+               }
+
+       if (success)
+               {
+               gchar *dest;
+
+               dest = file_util_safe_dest(path);
+               if (dest)
+                       {
+                       DEBUG_1("safe deleting %s to %s", path, dest);
+                       success = move_file(path, dest);
+                       }
+               else
+                       {
+                       success = FALSE;
+                       }
+
+               if (!success && !access_file(path, W_OK))
+                       {
+                       result = _("Permission denied");
+                       }
+               g_free(dest);
+               }
+
+       if (result && !gd)
+               {
+               GtkWidget *button;
+               gchar *buf;
+
+               buf = g_strdup_printf(_("Unable to access or create the trash folder.\n\"%s\""), options->file_ops.safe_delete_path);
+               gd = file_util_warning_dialog(result, buf, GTK_STOCK_DIALOG_WARNING, NULL);
+               g_free(buf);
+
+               button = gtk_check_button_new_with_label(_("Turn off safe delete"));
+               g_signal_connect(G_OBJECT(button), "toggled",
+                                G_CALLBACK(file_util_safe_del_toggle_cb), NULL);
+               gtk_box_pack_start(GTK_BOX(gd->vbox), button, FALSE, FALSE, 0);
+               gtk_widget_show(button);
+
+               g_signal_connect(G_OBJECT(gd->dialog), "destroy",
+                                G_CALLBACK(file_util_safe_del_close_cb), &gd);
+               }
+
+       return success;
+}
+
+char *file_util_safe_delete_status(void)
+{
+       gchar *buf;
+
+       if (options->editor_command[CMD_DELETE])
+               {
+               buf = g_strdup(_("Deletion by external command"));
+               }
+       else
+               {
+               if (options->file_ops.safe_delete_enable)
+                       {
+                       gchar *buf2;
+                       if (options->file_ops.safe_delete_folder_maxsize > 0)
+                               buf2 = g_strdup_printf(_(" (max. %d MB)"), options->file_ops.safe_delete_folder_maxsize);
+                       else
+                               buf2 = g_strdup("");
+
+                       buf = g_strdup_printf(_("Safe delete: %s%s\nTrash: %s"), _("on"), buf2, options->file_ops.safe_delete_path);
+                       g_free(buf2);
+                       }
+               else
+                       {
+                       buf = g_strdup_printf(_("Safe delete: %s"), _("off"));
+                       }
+               }
+               
+       return buf;
+}
+
diff --git a/src/trash.h b/src/trash.h
new file mode 100644 (file)
index 0000000..168163b
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Geeqie
+ * Copyright (C) 2008 The Geeqie Team
+ *
+ * This software is released under the GNU General Public License (GNU GPL).
+ * Please read the included file COPYING for more information.
+ * This software comes with no warranty of any kind, use at your own risk!
+ */
+
+
+#ifndef TRASH_H
+#define TRASH_H
+
+#include "ui_utildlg.h"
+
+void file_util_trash_clear(void);
+gint file_util_safe_unlink(const char *path);
+char *file_util_safe_delete_status(void);
+
+#endif
index 6743429..e7614e4 100644 (file)
@@ -27,6 +27,7 @@
 #include "layout.h"
 #include "search.h"
 #include "thumb_standard.h"
+#include "trash.h"
 #include "ui_bookmark.h"
 #include "ui_fileops.h"
 #include "ui_misc.h"
@@ -1326,100 +1327,30 @@ void file_util_copy_simple(GList *list, const gchar *dest_path)
        file_util_move_multiple(file_data_multiple_new(list, dest_path, TRUE));
 }
 
+
+
 /*
  *--------------------------------------------------------------------------
- * Safe Delete
+ * Delete routines
  *--------------------------------------------------------------------------
  */
 
-static gint file_util_safe_number(gint64 free_space)
-{
-       gint n = 0;
-       gint64 total = 0;
-       GList *list;
-       GList *work;
-       gint sorted = FALSE;
-       gint warned = FALSE;
-
-       if (!filelist_read(options->file_ops.safe_delete_path, &list, NULL)) return 0;
-
-       work = list;
-       while (work)
-               {
-               FileData *fd;
-               gint v;
-
-               fd = work->data;
-               work = work->next;
-
-               v = (gint)strtol(fd->name, NULL, 10);
-               if (v >= n) n = v + 1;
-
-               total += fd->size;
-               }
-
-       while (options->file_ops.safe_delete_folder_maxsize > 0 && list &&
-              (free_space < 0 || total + free_space > (gint64)options->file_ops.safe_delete_folder_maxsize * 1048576) )
-               {
-               FileData *fd;
-
-               if (!sorted)
-                       {
-                       list = filelist_sort(list, SORT_NAME, TRUE);
-                       sorted = TRUE;
-                       }
-
-               fd = list->data;
-               list = g_list_remove(list, fd);
-
-               DEBUG_1("expunging from trash for space: %s", fd->name);
-               if (!unlink_file(fd->path) && !warned)
-                       {
-                       file_util_warning_dialog(_("Delete failed"),
-                                                _("Unable to remove old file from trash folder"),
-                                                GTK_STOCK_DIALOG_WARNING, NULL);
-                       warned = TRUE;
-                       }
-               total -= fd->size;
-               file_data_unref(fd);
-               }
-
-       filelist_free(list);
-
-       return n;
-}
-
-void file_util_trash_clear(void)
-{
-       file_util_safe_number(-1);
-}
-
-static gchar *file_util_safe_dest(const gchar *path)
+static void box_append_safe_delete_status(GenericDialog *gd)
 {
-       gint n;
+       GtkWidget *label;
+       gchar *buf;
 
-       n = file_util_safe_number(filesize(path));
-       return g_strdup_printf("%s/%06d_%s", options->file_ops.safe_delete_path, n, filename_from_path(path));
-}
+       buf = file_util_safe_delete_status();
+       label = pref_label_new(gd->vbox, buf);
+       g_free(buf);
 
-static void file_util_safe_del_toggle_cb(GtkWidget *button, gpointer data)
-{
-       options->file_ops.safe_delete_enable = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+       gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
+       gtk_widget_set_sensitive(label, FALSE);
 }
 
-static void file_util_safe_del_close_cb(GtkWidget *dialog, gpointer data)
-{
-       GenericDialog **gd = data;
-
-       *gd = NULL;
-}
 
 static gint file_util_unlink(FileData *fd)
 {
-       static GenericDialog *gd = NULL;
-       gchar *result = NULL;
-       gint success = TRUE;
-
        if (!isfile(fd->path)) return FALSE;
 
 
@@ -1428,101 +1359,9 @@ static gint file_util_unlink(FileData *fd)
                return unlink_file(fd->path);
                }
 
-       if (!isdir(options->file_ops.safe_delete_path))
-               {
-               DEBUG_1("creating trash: %s", options->file_ops.safe_delete_path);
-               if (!options->file_ops.safe_delete_path || !mkdir_utf8(options->file_ops.safe_delete_path, 0755))
-                       {
-                       result = _("Could not create folder");
-                       success = FALSE;
-                       }
-               }
-
-       if (success)
-               {
-               gchar *dest;
-
-               dest = file_util_safe_dest(fd->path);
-               if (dest)
-                       {
-                       DEBUG_1("safe deleting %s to %s", fd->path, dest);
-                       success = move_file(fd->path, dest);
-                       }
-               else
-                       {
-                       success = FALSE;
-                       }
-
-               if (!success && !access_file(fd->path, W_OK))
-                       {
-                       result = _("Permission denied");
-                       }
-               g_free(dest);
-               }
-
-       if (result && !gd)
-               {
-               GtkWidget *button;
-               gchar *buf;
-
-               buf = g_strdup_printf(_("Unable to access or create the trash folder.\n\"%s\""), options->file_ops.safe_delete_path);
-               gd = file_util_warning_dialog(result, buf, GTK_STOCK_DIALOG_WARNING, NULL);
-               g_free(buf);
-
-               button = gtk_check_button_new_with_label(_("Turn off safe delete"));
-               g_signal_connect(G_OBJECT(button), "toggled",
-                                G_CALLBACK(file_util_safe_del_toggle_cb), NULL);
-               gtk_box_pack_start(GTK_BOX(gd->vbox), button, FALSE, FALSE, 0);
-               gtk_widget_show(button);
-
-               g_signal_connect(G_OBJECT(gd->dialog), "destroy",
-                                G_CALLBACK(file_util_safe_del_close_cb), &gd);
-               }
-
-       return success;
-}
-
-static void box_append_safe_delete_status(GenericDialog *gd)
-{
-       GtkWidget *label;
-       gchar *buf;
-
-       if (options->editor_command[CMD_DELETE])
-               {
-               buf = g_strdup(_("Deletion by external command"));
-               }
-       else
-               {
-               if (options->file_ops.safe_delete_enable)
-                       {
-                       gchar *buf2;
-                       if (options->file_ops.safe_delete_folder_maxsize > 0)
-                               buf2 = g_strdup_printf(_(" (max. %d MB)"), options->file_ops.safe_delete_folder_maxsize);
-                       else
-                               buf2 = g_strdup("");
-
-                       buf = g_strdup_printf(_("Safe delete: %s%s\nTrash: %s"), _("on"), buf2, options->file_ops.safe_delete_path);
-                       g_free(buf2);
-                       }
-               else
-                       {
-                       buf = g_strdup_printf(_("Safe delete: %s"), _("off"));
-                       }
-               }
-
-       label = pref_label_new(gd->vbox, buf);
-       g_free(buf);
-
-       gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
-       gtk_widget_set_sensitive(label, FALSE);
+       return file_util_safe_unlink(fd->path);
 }
 
-/*
- *--------------------------------------------------------------------------
- * Delete routines
- *--------------------------------------------------------------------------
- */
-
 /*
  * delete multiple files
  */
index 90d1d64..a62a621 100644 (file)
@@ -34,8 +34,6 @@ FileDialog *file_util_file_dlg(const gchar *title,
 GenericDialog *file_util_warning_dialog(const gchar *heading, const gchar *message,
                                        const gchar *icon_stock_id, GtkWidget *parent);
 
-void file_util_trash_clear(void);
-
 void file_util_delete(FileData *source_fd, GList *source_list, GtkWidget *parent);
 void file_util_move(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent);
 void file_util_copy(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent);