diff --git a/TODO b/TODO index ac4be8bf..7a44a200 100644 --- a/TODO +++ b/TODO @@ -26,8 +26,6 @@ - show maildirs as a tree, not a list in speed bar - mark message, decide what to do with them later - make killing all windows (i.e.. 'fullscreen mode' optional) - - *BUG* don't remove unknown message flags when moving (see - https://github.com/djcb/mu/issues/20) - improve fringe marks (see https://github.com/djcb/mu/issues/21) ** Done @@ -52,6 +50,8 @@ - *FIX* fix for strings where len (g_utf8_strdown (str)) > len (str) - make sure marks correspond to the *current* message in message view (see https://github.com/djcb/mu/issues/26) + - *FIX* don't remove unknown message flags when moving (see + https://github.com/djcb/mu/issues/20) diff --git a/lib/mu-maildir.c b/lib/mu-maildir.c index cf8b77bb..82721d19 100644 --- a/lib/mu-maildir.c +++ b/lib/mu-maildir.c @@ -711,7 +711,8 @@ mu_maildir_get_flags_from_path (const char *path) * */ static gchar* -get_new_path (const char *mdir, const char *mfile, MuFlags flags) +get_new_path (const char *mdir, const char *mfile, MuFlags flags, + const char* custom_flags) { if (flags & MU_FLAG_NEW) return g_strdup_printf ("%s%cnew%c%s", @@ -721,9 +722,10 @@ get_new_path (const char *mdir, const char *mfile, MuFlags flags) const char *flagstr; flagstr = mu_flags_to_str_s (flags, MU_FLAG_TYPE_MAILFILE); - return g_strdup_printf ("%s%ccur%c%s:2,%s", + return g_strdup_printf ("%s%ccur%c%s:2,%s%s", mdir, G_DIR_SEPARATOR, G_DIR_SEPARATOR, - mfile, flagstr); + mfile, flagstr, + custom_flags ? custom_flags : ""); } } @@ -755,32 +757,35 @@ char* mu_maildir_get_new_path (const char *oldpath, const char *new_mdir, MuFlags newflags) { - char *mfile, *mdir, *newpath, *cur; + char *mfile, *mdir, *custom_flags, *newpath, *cur; g_return_val_if_fail (oldpath, NULL); - mfile = newpath = NULL; + mfile = newpath = custom_flags = NULL; /* determine the maildir */ mdir = mu_maildir_get_maildir_from_path (oldpath); if (!mdir) return NULL; - /* determine the name of the mailfile, stripped of its flags */ + /* determine the name of the mailfile, stripped of its flags, as well + * as any custom (non-standard) flags */ mfile = g_path_get_basename (oldpath); for (cur = &mfile[strlen(mfile)-1]; cur > mfile; --cur) { if ((*cur == ':' || *cur == '!') && (cur[1] == '2' && cur[2] == ',')) { + /* get the custom flags (if any) */ + custom_flags = mu_flags_custom_from_str (cur + 3); cur[0] = '\0'; /* strip the flags */ break; } } newpath = get_new_path (new_mdir ? new_mdir : mdir, - mfile, newflags); - + mfile, newflags, custom_flags); g_free (mfile); g_free (mdir); + g_free (custom_flags); return newpath; } diff --git a/lib/tests/test-mu-maildir.c b/lib/tests/test-mu-maildir.c index c2853185..59c72f0d 100644 --- a/lib/tests/test-mu-maildir.c +++ b/lib/tests/test-mu-maildir.c @@ -517,6 +517,43 @@ test_mu_maildir_get_new_path_02 (void) } +static void +test_mu_maildir_get_new_path_custom (void) +{ + int i; + + struct { + const char *oldpath; + MuFlags flags; + const char *targetdir; + const char *newpath; + } paths[] = { + { + "/home/foo/Maildir/test/cur/123456:2,FR", + MU_FLAG_REPLIED, "/home/foo/Maildir/blabla", + "/home/foo/Maildir/blabla/cur/123456:2,R" + }, { + "/home/foo/Maildir/test/cur/123456:2,hFeRllo123", + MU_FLAG_FLAGGED, "/home/foo/Maildir/blabla", + "/home/foo/Maildir/blabla/cur/123456:2,Fhello123" + }, { + "/home/foo/Maildir/test/cur/123456:2,abc", + MU_FLAG_PASSED, "/home/foo/Maildir/blabla", + "/home/foo/Maildir/blabla/cur/123456:2,Pabc" + } + }; + + for (i = 0; i != G_N_ELEMENTS(paths); ++i) { + gchar *str; + str = mu_maildir_get_new_path(paths[i].oldpath, + paths[i].targetdir, + paths[i].flags); + g_assert_cmpstr(str, ==, paths[i].newpath); + g_free(str); + } +} + + static void test_mu_maildir_get_maildir_from_path (void) @@ -573,6 +610,8 @@ main (int argc, char *argv[]) test_mu_maildir_get_new_path_01); g_test_add_func("/mu-maildir/mu-maildir-get-new-path-02", test_mu_maildir_get_new_path_02); + g_test_add_func("/mu-maildir/mu-maildir-get-new-path-custom", + test_mu_maildir_get_new_path_custom); g_test_add_func("/mu-maildir/mu-maildir-get-flags-from-path", test_mu_maildir_get_flags_from_path);