Add "online" indicator to the modeline, and implement command to
authorChris Hanson <org/chris-hanson/cph>
Tue, 23 May 2000 02:57:49 +0000 (02:57 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 23 May 2000 02:57:49 +0000 (02:57 +0000)
disconnect from server.

v7/src/imail/imail-core.scm
v7/src/imail/imail-file.scm
v7/src/imail/imail-imap.scm
v7/src/imail/imail-top.scm
v7/src/imail/todo.txt

index 2a270039847f5cf5abc669cc8199052c40f9f5e2..afdd37eb13000627ae24be36d198fd1e9517baf2 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-core.scm,v 1.87 2000/05/22 20:51:00 cph Exp $
+;;; $Id: imail-core.scm,v 1.88 2000/05/23 02:57:13 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
 ;; Probe FOLDER's server for changes.  Useful as a check for new mail.
 
 (define-generic probe-folder (folder))
+
+;; -------------------------------------------------------------------
+;; Return a symbol representing FOLDER's connection status.  The
+;; returned value is one of the following symbols:
+;; ONLINE      Open connection to the server.
+;; OFFLINE     No connection to the server.
+;; NO-SERVER   Folder is not server-based.
+
+(define-generic folder-connection-status (folder))
+
+;; -------------------------------------------------------------------
+;; Disconnect FOLDER from its associated server.  The folder will
+;; automatically reconnect as needed.
+
+(define-generic disconnect-folder (folder))
 \f
 ;;;; Message type
 
index 3f511f266e428b4f2db8659cf697d9bdcf5c752c..fef77ec393339ea1eaa408a665c5e5f1564430cd 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-file.scm,v 1.37 2000/05/22 20:32:37 cph Exp $
+;;; $Id: imail-file.scm,v 1.38 2000/05/23 02:57:18 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
   (close-folder folder))
 
 (define-method probe-folder ((folder <file-folder>))
+  folder
+  unspecific)
+
+(define-method folder-connection-status ((folder <file-folder>))
+  folder
+  'NO-SERVER)
+
+(define-method disconnect-folder ((folder <file-folder>))
   folder
   unspecific)
\ No newline at end of file
index a3c07189efd2b43ecb5f8f699ebb6dc05032ff6b..7f89ebbd6e1bfaa93962fa2b6a17772f9b93cb51 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-imap.scm,v 1.79 2000/05/23 00:37:57 cph Exp $
+;;; $Id: imail-imap.scm,v 1.80 2000/05/23 02:57:21 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
 (define-method %close-folder ((folder <imap-folder>))
   (let ((connection (imap-folder-connection folder)))
     (maybe-close-imap-connection connection)
-    (set-imap-connection-folder! connection #f)))
+    (set-imap-connection-folder! connection #f))
+  (folder-modified! folder 'STATUS))
 
 (define-method folder-length ((folder <imap-folder>))
-  (guarantee-imap-folder-open folder)
   (imap-folder-n-messages folder))
 
 (define-method %get-message ((folder <imap-folder>) index)
-  (guarantee-imap-folder-open folder)
   (vector-ref (imap-folder-messages folder) index))
 
 (define-method first-unseen-message-index ((folder <imap-folder>))
-  (guarantee-imap-folder-open folder)
   (or (imap-folder-unseen folder) 0))
 
 (define-method expunge-deleted-messages ((folder <imap-folder>))
 (define-method probe-folder ((folder <imap-folder>))
   (guarantee-imap-folder-open folder)
   (imap:command:noop (imap-folder-connection folder)))
+
+(define-method folder-connection-status ((folder <imap-folder>))
+  (if (test-imap-connection-open (imap-folder-connection folder))
+      'ONLINE
+      'OFFLINE))
+
+(define-method disconnect-folder ((folder <imap-folder>))
+  (close-folder folder))
 \f
 ;;;; IMAP command invocation
 
index f23ce59f5db0f6cac1dcfbac8f47fe777cce5c10..419b07c7dbcc53449644482b3392d4c25ce27193 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-top.scm,v 1.91 2000/05/23 02:26:01 cph Exp $
+;;; $Id: imail-top.scm,v 1.92 2000/05/23 02:57:28 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
@@ -292,6 +292,8 @@ DEL Scroll to previous screen of this message.
 \\[imail-expunge]      Expunge deleted messages.
 \\[imail-save-folder]  Save the current folder.
 
+\\[imail-get-new-mail] Poll the server for changes.
+\\[imail-disconnect]   Disconnect from the server.
 \\[imail-quit]       Quit IMAIL: save, then switch to another buffer.
 
 \\[imail-mail] Mail a message (same as \\[mail-other-window]).
@@ -352,6 +354,7 @@ DEL Scroll to previous screen of this message.
 (define-key 'imail #\x         'imail-expunge)
 
 (define-key 'imail #\g         'imail-get-new-mail)
+(define-key 'imail #\m-d       'imail-disconnect)
 (define-key 'imail #\s         'imail-save-folder)
 
 (define-key 'imail #\c-m-h     'imail-summary)
@@ -706,8 +709,13 @@ With prefix argument N moves backward N messages with these flags."
               (index (message-index message)))
           (and folder
                (if index
-                   (let ((n (folder-length folder)))
+                   (let ((n (folder-length folder))
+                         (status (folder-connection-status folder)))
                      (string-append
+                      (case status
+                        ((ONLINE) " online")
+                        ((OFFLINE) " offline")
+                        (else ""))
                       " "
                       (number->string (+ 1 index))
                       "/"
@@ -1216,6 +1224,13 @@ Currently useful only for IMAP folders."
                      message
                      #t
                      (not (get-property message 'FULL-HEADERS? #f))))))
+
+(define-command imail-disconnect
+  "Disconnect the selected IMAIL folder from its server.
+Has no effect on non-server-based folders."
+  ()
+  (lambda ()
+    (disconnect-folder (selected-folder))))
 \f
 (define-command imail-search
   "Show message containing next match for given string.
index aa58190e6261db05a2eabf6d4ec70ab499ca75b7..548c61f75c0db3e88e42a7d5b3dd5aaf80eefb75 100644 (file)
@@ -1,5 +1,5 @@
 IMAIL To-Do List
-$Id: todo.txt,v 1.39 2000/05/23 02:12:10 cph Exp $
+$Id: todo.txt,v 1.40 2000/05/23 02:57:49 cph Exp $
 
 Bug fixes
 ---------
@@ -54,8 +54,6 @@ New features
 
 * Write M-x imail-resend.
 
-* Add an indication showing the connection status in the mode line.
-
 * Add mail notification in mode line, active across the editor as long
   as there is an IMAP connection open in some buffer.