diff --git a/src/mainwindow.c b/src/mainwindow.c index 76c0b66..0731dcc 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -1050,6 +1050,20 @@ static void mainWindow_show_error(struct mainWindow *mainWindow, gchar *text) gtk_widget_destroy(dialog); } +static void mainWindow_show_info(struct mainWindow *mainWindow, gchar *text) +{ + GtkWidget *dialog; + + dialog = gtk_message_dialog_new(GTK_WINDOW(mainWindow->mainWindow), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + "%s", + text); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); +} + void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path, gboolean gpg_enabled) { struct mdiary_scanner *mdiary_scanner; @@ -1086,8 +1100,25 @@ void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path, gbo g_free(temp); } } else { - gtk_header_bar_set_subtitle(GTK_HEADER_BAR(mainWindow->headerBar), "No workspace opened."); - mainWindow_show_error(mainWindow, "Could not open workspace or no entries were found in it."); + if (mdiary_scanner->error_code & MDS_ERROR_GPG) { + NULL; /* Handled in scanner */ + } else if (mdiary_scanner->error_code == 0) { + mainWindow_show_info(mainWindow, "This workspace is empty. Use the New Entry button to create the first entry."); + } else { + mainWindow_show_error(mainWindow, "Could not open workspace. Please choose a different directory."); + g_free(mainWindow->currentWorkspaceUrl); + mainWindow->currentWorkspaceUrl = NULL; + } + } + + if (mainWindow->currentWorkspaceUrl) { + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(mainWindow->headerBar), + mainWindow->currentWorkspaceUrl); + gtk_widget_set_sensitive(mainWindow->buttonNew, 1); + } else { + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(mainWindow->headerBar), + "No workspace opened."); + gtk_widget_set_sensitive(mainWindow->buttonNew, 0); } mdiary_scanner_free(mdiary_scanner); } diff --git a/src/mdiary.c b/src/mdiary.c index 3a4228c..b13cd24 100644 --- a/src/mdiary.c +++ b/src/mdiary.c @@ -381,6 +381,7 @@ static void mdiary_add_gpg_to_store(struct mdiary_scanner *mdiary_scanner, mdiary_add_file_to_store(mdiary_scanner, filename, cmd_stdout, entryListStore, autoCompletion); } else { mdiary_scanner->entries_failed++; + mdiary_scanner->error_code |= MDS_ERROR_GPG; g_warning("GPG: Decryption of message failed!\n" "---------- SNIP ----------\n" "%s" @@ -407,6 +408,7 @@ static void mdiary_recurse_and_collect(struct mdiary_scanner *mdiary_scanner, if (!dir) { g_print("Could not open base directory.\n"); + mdiary_scanner->error_code |= MDS_ERROR_BASE_DIR; } else { while (dirname = (gchar *)g_dir_read_name(dir)) { fullPath = g_strdup_printf("%s/%s", base_dir, dirname); @@ -455,6 +457,7 @@ struct mdiary_scanner *mdiary_scanner_new(gboolean gpg_enabled) mdiary_scanner->gpg_enabled = gpg_enabled; mdiary_scanner->entries_failed = 0; mdiary_scanner->entries_encrypted = 0; + mdiary_scanner->error_code = 0; } return mdiary_scanner; diff --git a/src/mdiary.h b/src/mdiary.h index 5cb591d..558e527 100644 --- a/src/mdiary.h +++ b/src/mdiary.h @@ -5,6 +5,9 @@ #include #include +#define MDS_ERROR_BASE_DIR 1 +#define MDS_ERROR_GPG 2 + enum { COL_TITLE = 0, /* Title of the entry */ COL_DATE_TEXT, /* Textual representation of the date (auto generated) */ @@ -24,6 +27,7 @@ struct mdiary_scanner { gint entries_added; gint entries_encrypted; gint entries_failed; + gint error_code; }; struct mdiary_scanner *mdiary_scanner_new(gboolean gpg_enabled);