static IMAPSession *imap_session_get (Folder *folder);
static gint imap_scan_tree_recursive (IMAPSession *session,
- FolderItem *item,
- IMAPNameSpace *namespace);
+ FolderItem *item);
static GSList *imap_parse_list (IMAPSession *session,
const gchar *real_path);
IMAPFolder *folder);
static IMAPNameSpace *imap_find_namespace (IMAPFolder *folder,
const gchar *path);
+static gchar imap_get_path_separator (IMAPFolder *folder,
+ const gchar *path);
static gchar *imap_get_real_path (IMAPFolder *folder,
const gchar *path);
static gboolean imap_rename_folder_func (GNode *node,
gpointer data);
+
Folder *imap_folder_new(const gchar *name, const gchar *path)
{
Folder *folder;
IMAPFolder *imapfolder = IMAP_FOLDER(folder);
FolderItem *item;
IMAPSession *session;
- IMAPNameSpace *namespace = NULL;
gchar *root_folder = NULL;
g_return_if_fail(folder != NULL);
session = imap_session_get(folder);
if (!session) return;
- if (imapfolder->ns_personal && imapfolder->ns_personal->data)
- namespace = (IMAPNameSpace *)imapfolder->ns_personal->data;
-
if (folder->account->imap_dir && *folder->account->imap_dir) {
gchar *imap_dir;
+ IMAPNameSpace *namespace = NULL;
+
Xstrdup_a(imap_dir, folder->account->imap_dir, return);
strtailchomp(imap_dir, '/');
+
+ if (imapfolder->ns_personal && imapfolder->ns_personal->data)
+ namespace = (IMAPNameSpace *)imapfolder->ns_personal->data;
root_folder = g_strconcat
(namespace && namespace->name ? namespace->name : "",
imap_dir, NULL);
folder->node = g_node_new(item);
g_free(root_folder);
- imap_scan_tree_recursive(session, item, namespace);
+ imap_scan_tree_recursive(session, item);
imap_create_missing_folders(folder);
}
-static gint imap_scan_tree_recursive(IMAPSession *session, FolderItem *item,
- IMAPNameSpace *namespace)
+static gint imap_scan_tree_recursive(IMAPSession *session, FolderItem *item)
{
Folder *folder;
IMAPFolder *imapfolder;
GSList *item_list, *cur;
gchar *real_path;
gchar *wildcard_path;
- gchar separator = '/';
+ gchar separator;
gchar wildcard[3];
g_return_val_if_fail(item != NULL, -1);
folder = FOLDER(item->folder);
imapfolder = IMAP_FOLDER(folder);
- if (namespace && namespace->separator)
- separator = namespace->separator;
+ separator = imap_get_path_separator(imapfolder, item->path);
if (item->folder->ui_func)
item->folder->ui_func(folder, item, folder->ui_func_data);
} else {
wildcard[0] = '%';
wildcard[1] = '\0';
- real_path = g_strdup(namespace && namespace->name &&
- strncmp(namespace->name, "INBOX", 5) != 0
- ? namespace->name : "");
+ real_path = g_strdup("");
}
Xstrcat_a(wildcard_path, real_path, wildcard,
if (new_item->no_select == FALSE)
imap_scan_folder(folder, new_item);
if (new_item->no_sub == FALSE)
- imap_scan_tree_recursive(session, new_item, namespace);
+ imap_scan_tree_recursive(session, new_item);
}
return IMAP_SUCCESS;
{
gchar *dirpath, *imap_path;
IMAPSession *session;
- IMAPNameSpace *namespace;
FolderItem *new_item;
+ gchar separator;
gchar *new_name;
const gchar *p;
gint ok;
imap_path = imap_locale_to_modified_utf7(dirpath);
Xstrdup_a(new_name, name, {g_free(dirpath); return NULL;});
strtailchomp(new_name, '/');
- namespace = imap_find_namespace(IMAP_FOLDER(folder), imap_path);
- if (namespace && namespace->separator) {
- imap_path_separator_subst(imap_path, namespace->separator);
- subst_char(new_name, '/', namespace->separator);
- }
+ separator = imap_get_path_separator(IMAP_FOLDER(folder), imap_path);
+ imap_path_separator_subst(imap_path, separator);
+ subst_char(new_name, '/', separator);
if (strcmp(name, "INBOX") != 0) {
GPtrArray *argbuf;
gchar *old_cache_dir;
gchar *new_cache_dir;
IMAPSession *session;
- IMAPNameSpace *namespace;
+ gchar separator;
gint ok;
gint exists, recent, unseen;
guint32 uid_validity;
return -1;
}
- namespace = imap_find_namespace(IMAP_FOLDER(folder), item->path);
+ separator = imap_get_path_separator(IMAP_FOLDER(folder), item->path);
if (strchr(item->path, G_DIR_SEPARATOR)) {
dirpath = g_dirname(item->path);
newpath = g_strconcat(dirpath, G_DIR_SEPARATOR_S, name, NULL);
newpath = g_strdup(name);
real_newpath = imap_locale_to_modified_utf7(newpath);
- if (namespace && namespace->separator)
- imap_path_separator_subst(real_newpath, namespace->separator);
+ imap_path_separator_subst(real_newpath, separator);
ok = imap_cmd_rename(SESSION(session)->sock, real_oldpath, real_newpath);
statusbar_pop_all();
const gchar *path)
{
IMAPNameSpace *namespace = NULL;
- gchar *name;
+ gchar *tmp_path, *name;
- g_return_val_if_fail(path != NULL, NULL);
+ if (!path) path = "";
+
+ Xstrcat_a(tmp_path, path, "/", return NULL);
for (; ns_list != NULL; ns_list = ns_list->next) {
IMAPNameSpace *tmp_ns = ns_list->data;
Xstrdup_a(name, tmp_ns->name, return namespace);
if (tmp_ns->separator && tmp_ns->separator != '/')
subst_char(name, tmp_ns->separator, '/');
- if (strncmp(path, name, strlen(name)) == 0)
+ if (strncmp(tmp_path, name, strlen(name)) == 0)
namespace = tmp_ns;
}
{
IMAPNameSpace *namespace;
+ g_return_val_if_fail(folder != NULL, NULL);
+
namespace = imap_find_namespace_from_list(folder->ns_personal, path);
if (namespace) return namespace;
namespace = imap_find_namespace_from_list(folder->ns_others, path);
return NULL;
}
+static gchar imap_get_path_separator(IMAPFolder *folder, const gchar *path)
+{
+ IMAPNameSpace *namespace;
+ gchar separator = '/';
+
+ namespace = imap_find_namespace(folder, path);
+ if (namespace && namespace->separator)
+ separator = namespace->separator;
+
+ return separator;
+}
+
static gchar *imap_get_real_path(IMAPFolder *folder, const gchar *path)
{
gchar *real_path;
- IMAPNameSpace *namespace;
+ gchar separator;
g_return_val_if_fail(folder != NULL, NULL);
g_return_val_if_fail(path != NULL, NULL);
real_path = imap_locale_to_modified_utf7(path);
- namespace = imap_find_namespace(folder, path);
- if (namespace && namespace->separator)
- imap_path_separator_subst(real_path, namespace->separator);
+ separator = imap_get_path_separator(folder, path);
+ imap_path_separator_subst(real_path, separator);
return real_path;
}
GtkWidget *chkbtn_folder_unread;
GtkWidget *chkbtn_display_img;
+ GtkWidget *entry_ng_abbrev_len;
+ GtkWidget *spinbtn_ng_abbrev_len;
+ GtkObject *spinbtn_ng_abbrev_len_adj;
GtkWidget *chkbtn_transhdr;
GtkWidget *chkbtn_useaddrbook;
GtkWidget *chkbtn_expand_thread;
GtkWidget *chkbtn_bold_unread;
-
GtkWidget *entry_datefmt;
} display;
&prefs_common.display_img, P_BOOL,
&display.chkbtn_display_img,
prefs_set_data_from_toggle, prefs_set_toggle},
+ {"newsgroup_abbrev_len", "16",
+ &prefs_common.ng_abbrev_len, P_INT,
+ &display.spinbtn_ng_abbrev_len,
+ prefs_set_data_from_spinbtn, prefs_set_spinbtn},
{"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
&display.chkbtn_transhdr,
GtkWidget *label_textfont;
GtkWidget *entry_textfont;
GtkWidget *button_textfont;
- GtkWidget *chkbtn_folder_unread;
GtkWidget *chkbtn_display_img;
GtkWidget *chkbtn_transhdr;
+ GtkWidget *chkbtn_folder_unread;
+ GtkWidget *hbox1;
+ GtkWidget *label_ng_abbrev;
+ GtkWidget *spinbtn_ng_abbrev_len;
+ GtkObject *spinbtn_ng_abbrev_len_adj;
GtkWidget *frame_summary;
GtkWidget *vbox2;
GtkWidget *chkbtn_swapfrom;
GtkWidget *chkbtn_expand_thread;
GtkWidget *chkbtn_bold_unread;
GtkWidget *vbox3;
- GtkWidget *hbox1;
GtkWidget *label_datefmt;
GtkWidget *button_datefmt;
GtkWidget *entry_datefmt;
PACK_CHECK_BUTTON (vbox2, chkbtn_display_img,
_("Automatically display images"));
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ label_ng_abbrev = gtk_label_new
+ (_("Abbreviate newsgroups longer than"));
+ gtk_widget_show (label_ng_abbrev);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
+
+ spinbtn_ng_abbrev_len_adj = gtk_adjustment_new (16, 0, 999, 1, 10, 10);
+ spinbtn_ng_abbrev_len = gtk_spin_button_new
+ (GTK_ADJUSTMENT (spinbtn_ng_abbrev_len_adj), 1, 0);
+ gtk_widget_show (spinbtn_ng_abbrev_len);
+ gtk_box_pack_start (GTK_BOX (hbox1), spinbtn_ng_abbrev_len,
+ FALSE, FALSE, 0);
+ gtk_widget_set_usize (spinbtn_ng_abbrev_len, 56, -1);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_ng_abbrev_len),
+ TRUE);
+
+ label_ng_abbrev = gtk_label_new
+ (_("letters"));
+ gtk_widget_show (label_ng_abbrev);
+ gtk_box_pack_start (GTK_BOX (hbox1), label_ng_abbrev, FALSE, FALSE, 0);
/* ---- Summary ---- */
display.entry_textfont = entry_textfont;
display.button_textfont = button_textfont;
- display.chkbtn_folder_unread = chkbtn_folder_unread;
display.chkbtn_display_img = chkbtn_display_img;
- display.chkbtn_transhdr = chkbtn_transhdr;
+ display.chkbtn_transhdr = chkbtn_transhdr;
+ display.chkbtn_folder_unread = chkbtn_folder_unread;
+ display.spinbtn_ng_abbrev_len = spinbtn_ng_abbrev_len;
+ display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
display.chkbtn_swapfrom = chkbtn_swapfrom;
display.chkbtn_hscrollbar = chkbtn_hscrollbar;