[Proposal] Improve IMAP folder parent selection, subscription management

Albrecht Dreß <[email protected]> Sun, 24 Mar 2019 13:35:14 +0100
Newsgroups gmane.comp.gnome.apps.balsa
Message-ID <[email protected]>
Hi all,

attached is a *proposal* addressing two inconveniences in IMAP folder management:

1. Selecting the parent folder using the “Browse” button
a. The button opens a new window, containing /all/ folders Balsa knows about.  In my case, I have ~50 local folders, plus two different IMAP (ISP) servers with ~10 folders each.  IOW, only a fraction of the folders displayed can actually be used as new parent of the IMAP folder, which is confusing and tedious.
b. If only subscribed folders are displayed, it is not possible to define a currently unsubscribed folder as new parent (which is perfectly legal) simply as it is not visible.  The workaround is to disable “Subscribed folders only”, then shift the folder, and switch to subscribed only again, i.e. three operations have to be performed in two places.

2. Subscription management
a. Currently, folders can be (un-) subscribed only by using the context menu item in the folder tree view.  There is no indication if the folder is currently subscribed or not (it is hidden if “Subscribed folders only” is enabled, though).
b. Related to #1b. above, it is not possible to directly subscribe to an unsubscribed folder if “Subscribed folders only” is activated, with the same workaround as outlined above.

Thus, I would like to propose a different approach.  It basically scans the IMAP server's folder structure, instead of relying on the cached data in Balsa, every time the two aforementioned management operations above shall be performed.

For issue 1, a new dialogue is displayed, containing the tree view of /all/ (subscribed and unsubscribed) folders on the IMAP server.  The user can either double-click the requested new parent, or select the entry and click OK.  The tree store of folders is kept as long as the parent dialogue (IMAP subfolder configuration) is open, i.e. the scan is performed only /once/ when the “Browse” is clicked.

For issue 2, instead of managing the state for each folder individually, a button “Manage subscriptions” is placed next to the “Subscribed folders only” check box in the IMAP server configuration dialogue.  Clicking this button scans the folder structure on the IMAP server, plus the subscription state of all folders.  The dialogue is similar to case #1 above, with an additional column of check boxes indicating the subscription state.  If the user has changed the subscription state, the folder is printed in /italics/.  As above, the store of folders, old and new subscription states is kept until the server configuration dialogue is closed.  If requested, all changed subscriptions are applied.  Note that the “Manage subscriptions” button is sensitive only if “Subscribed folders only” is activated.  If there are use cases where subscription management should always be available, this limitation can easily be removed.

There has recently been a discussion regarding the traffic required for scanning the server for /very/ slow or low-bandwidth connections.  IMO, the proposed approach will actually improve (apart from the usability) the situation in this scenario: a typical approach for such connections will be accessing subscribed folders only.  In this case, it is (as via the workaround outlined above) actually required to scan the server /twice/ after toggling “Subscribed folders only”.  And for a connection with a typical bandwidth *and* “Subscribed folders only” not being activated, I assume that the extra overhead will be negligible.

As always, any comment will be highly appreciated!

Cheers,
Albrecht.

---
Patch details:
* libbalsa/folder-scanners.[ch]: implement new function libbalsa_scanner_imap_tree() for scanning an IMAP server's folder structure and subscription state into a GtkTreeStore, requires a bunch of helper functions
* libbalsa/imap-server.[ch]: implement new function libbalsa_imap_server_subscriptions() for subscribing to and unsubscribing from arrays of folders using a single IMAP connection
* libbalsa/mailbox_imap.[ch]: remove unused function libbalsa_mailbox_imap_subscribe() (obsoleted by libbalsa_imap_server_subscriptions())
* src/folder-conf.c: implement new style subscription and parent folder selection:
   * imap_apply_subscriptions() collects folders with modified subscription states from the GtkTreeView;
   * imap_update_subscriptions() applies changed subscription states, called from folder_conf_clicked_ok();
   * on_subscription_toggled() callback for subscription state checkbox;
   * create_imap_folder_dialog() create the dialogue for parent folder selection and subscription management;
   * folder_conf_imap_subscriptions() runs the subscription management dialogue;
   * fcw_subscribed_toggled() callback for activating the subscription management button;
   * folder_conf_imap_node() add button for subscription management;
   * select_parent_folder() find parent of a folder in the GtkTreeModel;
   * on_parent_double_click() callback for double-click folder selection;
   * browse_button_cb() modified, runs the parent selection dialogue;
   * remove obsolete functions browse_button_select_row_cb(), browse_button_row_activated(), browse_button_response(), folder_selection_func(), browse_button_data_free()
* src/mailbox-node.c: remove obsolete mailbox tree view entries for (un)subscribing
* src/save-restore.c: add the two new dialogues to the geometry manager

_______________________________________________
balsa-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/balsa-list
imap-management-proposal.diff.bz2 (application/x-bzip, 7.9 KB) - not displayed
signature.asc (application/pgp-signature, 488 B)
-----BEGIN PGP SIGNATURE-----

iQEzBAABCgAdFiEEcCEPemLFTtyGf4zATKlvDmfn2fgFAlyXeYIACgkQTKlvDmfn
2fhyOwf9EqhcxSE7gKK+cJ84SxbNcC+WZqDM40XflHAqLtqjo3W/8OyUFNR2F79r
aDRKp9EG1XDr/Jvxp/Y0fXmSbu1P8xxgSPkSwhABu5RzFymsNPU19+ac78SajLqn
318aJIKL4Pxd4pqAGpGIXOYlzknnHXFuJ0WIWaR4z+6oU3VtrnznJBQmKxu4Jrnb
zOksmeeeY2cxsQxYwalIB8bd/olc9cafhk1Ka5dnxe4WeblZFlC0f1B+QPxHLcxw
OcPnHoYEWO7MtW9YsuC4UEWlIyxo7/8/jIMC79VNgXUzzDr6eN77tzOlMCXINt7e
1CrtfZIll398w6ctLlx9GgMCqcHXzw==
=ChfN
-----END PGP SIGNATURE-----