[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19687 - gnunet-gtk/src/fs
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19687 - gnunet-gtk/src/fs |
Date: |
Sat, 4 Feb 2012 21:13:38 +0100 |
Author: grothoff
Date: 2012-02-04 21:13:38 +0100 (Sat, 04 Feb 2012)
New Revision: 19687
Modified:
gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c
Log:
-create directory if it does not exist to allow nice save-as suggestion; clean
it up on abort
Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c 2012-02-04 20:03:37 UTC
(rev 19686)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c 2012-02-04 20:13:38 UTC
(rev 19687)
@@ -49,10 +49,36 @@
*/
GtkWidget *dialog;
+ /**
+ * Name of the directory that should be unlinked if the operation is aborted,
+ * can be NULL.
+ */
+ char *dirname;
+
};
/**
+ * Clean up the given DLC context, including possibly removing
+ * the left-over (empty) directory.
+ *
+ * @param dlc context to clean up
+ */
+static void
+clean_up_download_as_context (struct DownloadAsDialogContext *dlc)
+{
+ g_object_unref (G_OBJECT (dlc->builder));
+ if (NULL != dlc->dirname)
+ {
+ if (0 != RMDIR (dlc->dirname))
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "rmdir",
dlc->dirname);
+ GNUNET_free (dlc->dirname);
+ }
+ GNUNET_free (dlc);
+}
+
+
+/**
* Free resources associated with the given download entry.
*
* @param de context to free
@@ -89,8 +115,7 @@
struct DownloadAsDialogContext *dlc = user_data;
GNUNET_FS_GTK_free_download_entry (dlc->de);
- g_object_unref (G_OBJECT (dlc->builder));
- GNUNET_free (dlc);
+ clean_up_download_as_context (dlc);
return FALSE;
}
@@ -116,9 +141,8 @@
if (GTK_RESPONSE_OK != response_id)
{
GNUNET_FS_GTK_free_download_entry (de);
- gtk_widget_destroy (GTK_WIDGET (dialog));
- g_object_unref (G_OBJECT (dlc->builder));
- GNUNET_free (dlc);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ clean_up_download_as_context (dlc);
return;
}
GNUNET_free_non_null (de->filename);
@@ -136,8 +160,9 @@
(dlc->builder,
"GNUNET_GTK_save_as_dialog_anonymity_spin_button")));
gtk_widget_destroy (GTK_WIDGET (dialog));
- g_object_unref (G_OBJECT (dlc->builder));
- GNUNET_free (dlc);
+ GNUNET_free_non_null (dlc->dirname);
+ dlc->dirname = NULL;
+ clean_up_download_as_context (dlc);
GNUNET_FS_GTK_download_context_start_download (de);
}
@@ -184,6 +209,7 @@
{
char *dirname;
char *basename;
+ struct stat sbuf;
dirname = GNUNET_strdup (de->filename);
basename = (char *) GNUNET_STRINGS_get_short_name (dirname);
@@ -191,16 +217,21 @@
if (basename > dirname)
basename[-1] = '\0';
- /* FIXME: remove following lines after testing... */
- fprintf (stderr,
- "Splitting `%s' into `%s' + `%s' for file chooser dialog.\n",
- de->filename,
- dirname,
- basename);
-
+ if (0 != STAT (dirname, &sbuf))
+ {
+ if (GNUNET_OK != GNUNET_DISK_directory_create (dirname))
+ {
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "mkdir", dirname);
+ }
+ else
+ {
+ dlc->dirname = dirname;
+ }
+ }
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dlc->dialog),
dirname);
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dlc->dialog),
basename);
- GNUNET_free (dirname);
+ if (NULL == dlc->dirname)
+ GNUNET_free (dirname);
}
gtk_dialog_set_default_response (GTK_DIALOG (dlc->dialog),
GTK_RESPONSE_OK);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19687 - gnunet-gtk/src/fs,
gnunet <=