2010-12-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-group.el (gnus-group-kill-group): Notify the backend that the
+ group has been killed.
+ (gnus-group-yank-group): Ditto.
+
+ * gnus-srvr.el (gnus-browse-unsubscribe-group): Ditto.
+
+ * nnimap.el (nnimap-request-update-group-status): New function.
+
+ * gnus-int.el (gnus-request-update-group-status): New interface
+ function.
+
* gnus-sum.el (gnus-summary-push-marks-to-backend): Fix the logic for
copying read-ness to the backends.
gnus-list-of-killed-groups))
(gnus-group-change-level
(if entry entry group) gnus-level-killed (if entry nil level))
+ (gnus-request-update-group-status group 'unsubscribe)
(message "Killed group %s" (gnus-group-decoded-name group)))
;; If there are lots and lots of groups to be killed, we use
;; this thing instead.
(setq gnus-zombie-list (delete group gnus-zombie-list))))
;; There may be more than one instance displayed.
(while (gnus-group-goto-group group)
- (gnus-delete-line)))
+ (gnus-delete-line))
+ (gnus-request-update-group-status group 'unsubscribe))
(gnus-make-hashtable-from-newsrc-alist))
(gnus-group-position-point)
(and prev (gnus-group-entry prev))
t)
(gnus-group-insert-group-line-info group)
+ (gnus-request-update-group-status group 'subscribe)
(gnus-undo-register
`(when (gnus-group-goto-group ,group)
(gnus-group-kill-group 1))))
(funcall (gnus-get-function gnus-command-method 'request-type)
(gnus-group-real-name group) article))))
+(defun gnus-request-update-group-status (group status)
+ "Change the status of a group.
+Valid statuses include `subscribe' and `unsubscribe'."
+ (let ((gnus-command-method (gnus-find-method-for-group group)))
+ (if (not (gnus-check-backend-function
+ 'request-update-group-status (car gnus-command-method)))
+ nil
+ (funcall
+ (gnus-get-function gnus-command-method 'request-update-group-status)
+ (gnus-group-real-name group) status
+ (nth 1 gnus-command-method)))))
+
(defun gnus-request-set-mark (group action)
"Set marks on articles in the back end."
(let ((gnus-command-method (gnus-find-method-for-group group)))
;; mechanism for new group subscription.
(gnus-call-subscribe-functions
gnus-browse-subscribe-newsgroup-method
- group)))
+ group)
+ (gnus-request-update-group-status group 'subscribe)))
(delete-char 1)
(insert (let ((lvl (gnus-group-level group)))
(cond
(push flag flags)))
flags))
+(deffoo nnimap-request-update-group-status (group status &optional server)
+ (when (nnimap-possibly-change-group nil server)
+ (let ((command (assoc
+ status
+ '((subscribe "SUBSCRIBE")
+ (unsubscribe "UNSUBSCRIBE")))))
+ (when command
+ (nnimap-command "%s %S" command (utf7-encode group t))))))
+
(deffoo nnimap-request-set-mark (group actions &optional server)
(when (nnimap-possibly-change-group group server)
(let (sequence)