* riece-xface.el (riece-xface-user-list-mode-hook): New function.
[riece] / lisp / riece-ndcc.el
index a5a9ae8..c865df5 100644 (file)
@@ -1,4 +1,4 @@
-;;; riece-ndcc.el --- elisp native DCC add-on
+;;; riece-ndcc.el --- DCC file sending protocol support (written in elisp)
 ;; Copyright (C) 1998-2003 Daiki Ueno
 
 ;; Author: Daiki Ueno <ueno@unixuser.org>
 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;; Boston, MA 02111-1307, USA.
 
+;;; Commentary:
+
+;; NOTE: This is an add-on module for Riece.
+
 ;;; Code:
 
 (require 'riece-globals)
 (require 'riece-options)
-(require 'riece-display)
 
 (require 'calc)
 
 (defgroup riece-ndcc nil
-  "Elisp native DCC implementation"
+  "DCC written in elisp."
   :prefix "riece-"
   :group 'riece)
 
@@ -45,6 +48,11 @@ Only used for sending files."
 (defvar riece-ndcc-request-user nil)
 (defvar riece-ndcc-request-size nil)
 
+(defvar riece-ndcc-enabled nil)
+
+(defconst riece-ndcc-description
+  "DCC file sending protocol support (written in elisp.)")
+
 (defun riece-ndcc-encode-address (address)
   (unless (string-match
           "^\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)$"
@@ -92,9 +100,9 @@ Only used for sending files."
    (let ((completion-ignore-case t))
      (unless riece-ndcc-server-address
        (error "Set riece-ndcc-server-address to your host"))
-     (list (completing-read
+     (list (riece-completing-read-identity
            "User: "
-           (mapcar #'list (riece-get-users-on-server)))
+           (riece-get-users-on-server (riece-current-server-name)))
           (expand-file-name (read-file-name "File: ")))))
   (let* (selective-display
         (coding-system-for-read 'binary)
@@ -111,7 +119,8 @@ Only used for sending files."
                                        :sentinel 'riece-ndcc-server-sentinel))
     (riece-send-string
      (format "PRIVMSG %s :\1DCC SEND %s %s %d %d\1\r\n"
-            user (file-name-nondirectory file)
+            (riece-identity-prefix user)
+            (file-name-nondirectory file)
             (riece-ndcc-encode-address riece-ndcc-server-address)
             (nth 1 (process-contact process))
             (nth 7 (file-attributes file))))))
@@ -187,16 +196,17 @@ Only used for sending files."
 
 (defun riece-handle-dcc-request (prefix target message)
   (let ((case-fold-search t))
-    (when (string-match
-          "SEND \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\)"
-          message)
+    (when (and riece-ndcc-enabled
+              (string-match
+               "SEND \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\)"
+               message))
       (let ((file (match-string 1 message))
            (address (match-string 2 message))
            (port (string-to-number (match-string 3 message)))
            (size (string-to-number (match-string 4 message)))
            (buffer (if (riece-channel-p target)
-                       (riece-channel-buffer-name
-                        (riece-make-identity target riece-server-name))))
+                       (riece-channel-buffer (riece-make-identity
+                                              target riece-server-name))))
            (user (riece-prefix-nickname prefix)))
        (setq riece-ndcc-requests
              (cons (list user file address port size)
@@ -222,10 +232,19 @@ Only used for sending files."
 
 (defvar riece-dialogue-mode-map)
 (defun riece-ndcc-insinuate ()
-  (add-hook 'riece-ctcp-dcc-request-hook 'riece-handle-dcc-request)
+  (add-hook 'riece-ctcp-dcc-request-hook 'riece-handle-dcc-request))
+
+(defun riece-ndcc-uninstall ()
+  (remove-hook 'riece-ctcp-dcc-request-hook 'riece-handle-dcc-request))
+
+(defun riece-ndcc-enable ()
   (define-key riece-dialogue-mode-map "\C-ds" 'riece-command-dcc-send)
   (define-key riece-dialogue-mode-map "\C-dr" 'riece-command-dcc-receive))
 
+(defun riece-ndcc-disable ()
+  (define-key riece-dialogue-mode-map "\C-ds" nil)
+  (define-key riece-dialogue-mode-map "\C-dr" nil))
+
 (provide 'riece-ndcc)
 
 ;;; riece-ndcc.el ends here