+(defsubst gnus-offline-set-online-sendmail-function ()
+ "*Initialize sendmail-function when plugged status."
+ (if (eq gnus-offline-MTA-type 'smtp)
+ (setq message-send-mail-function 'message-send-mail-with-smtp)
+ (setq message-send-mail-function 'message-send-mail-with-sendmail)))
+
+(defsubst gnus-offline-set-offline-sendmail-function ()
+ "*Initialize sendmail-function when unplugged status."
+ (cond ((eq gnus-offline-drafts-queue-type 'miee)
+ (if (eq gnus-offline-news-fetch-method 'nnagent)
+ (setq gnus-agent-send-mail-function
+ 'sendmail-to-spool-in-gnspool-format))
+ (setq message-send-mail-function 'sendmail-to-spool-in-gnspool-format))
+ (t
+ (setq gnus-agent-send-mail-function
+ (gnus-offline-set-online-sendmail-function)
+ message-send-mail-function 'gnus-agent-send-mail))))
+
+(defsubst gnus-offline-set-offline-post-news-function ()
+ "*Initialize sendnews-function when unplugged status."
+ (if (eq gnus-offline-drafts-queue-type 'miee)
+ (setq message-send-news-function 'gnspool-request-post)))
+
+(defsubst gnus-offline-set-online-post-news-function ()
+ "*Initialize sendnews-function when plugged status."
+ (setq message-send-news-function 'message-send-news-with-gnus))
+
+(defsubst gnus-offline-disable-fetch-mail ()
+ "*Set do not fetch mail."
+ (setq mail-sources nil
+ nnmail-spool-file nil))
+
+(defsubst gnus-offline-enable-fetch-mail ()
+ "*Set to fetch mail."
+ (setq gnus-offline-mail-fetch-method 'nnmail)
+ (setq mail-sources gnus-offline-mail-source))
+
+(defsubst gnus-offline-enable-fetch-news ()
+ "*Set to fetch news."
+ (if (eq gnus-offline-news-fetch-method 'nnagent)
+ (progn
+ (setq gnus-agent-handle-level gnus-level-subscribed)
+ (gnus-agent-toggle-plugged t))))
+
+(when (featurep 'gnus-ofsetup)
+ ;; Advice to Gnus functions.
+ (defadvice gnus-group-get-new-news (before gnus-offline-advice
+ activate preactivate)
+ "When called interactively, dial up and get online automatically."
+ (when (interactive-p)
+ (run-hooks 'gnus-offline-before-online-hook)
+ (if (and (memq 'connect gnus-offline-auto-ppp)
+ (functionp gnus-offline-dialup-function))
+ (funcall gnus-offline-dialup-function))
+ (gnus-offline-get-new-news-function)))
+
+ (defadvice gnus-agent-toggle-plugged (around gnus-offline-advice
+ activate preactivate)
+ "Also toggle gnus-offline `connected--disconnected' status."
+ (interactive (list (not gnus-offline-connected)))
+ (cond ((ad-get-arg 0)
+ (setq gnus-offline-connected (ad-get-arg 0))
+ ad-do-it
+ ;; Set send mail/news function to offline functions.
+ (gnus-offline-set-online-sendmail-function)
+ (gnus-offline-set-online-post-news-function))
+ (t
+ ;; Set to offline status
+ (gnus-offline-set-unplugged-state))))
+
+ (defadvice gnus-agent-expire (around gnus-offline-advice activate preactivate)
+ "Advice not to delete new articles."
+ (cond ((eq 0 gnus-agent-expire-days)
+ (let (gnus-agent-expire-all)
+ ad-do-it))
+ (t
+ ad-do-it)))
+
+ (defadvice gnus-agent-mode (around gnus-offline-advice activate preactivate)
+ "Advice not to close PPP connection."
+ (let (gnus-offline-hangup-function)
+ ad-do-it)))
+