Online browsing and customizations move to separate file

This commit is contained in:
Denis Zheleztsov 2017-10-16 11:52:32 +03:00
parent c48e6d48c0
commit 14c197ac54
2 changed files with 164 additions and 98 deletions

121
idec-customize.el Normal file
View File

@ -0,0 +1,121 @@
;;; idec-customize.el --- GNU Emacs client for IDEC network
;; Copyright (c) 2017 Denis Zheleztsov
;; Author: Denis Zheleztsov <difrex.punk@gmail.com>
;; Keywords: lisp,network,IDEC
;; Version: 0.1
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; In active developent.
;; Fetched node must be support modern IDEC extensions like /list.txt, /x/c, etc.
;;; Code:
;; CUSTOMIZATION
;; ;;;;;;;;;;;;;
(defgroup idec nil
"IDEC configuration."
:group 'network)
;; Not used
(defcustom idec-nodes-list
'("http://idec.spline-online.tk/"
"https://ii-net.tk/ii/ii-point.php?q=/")
"List of IDEC nodes."
:type 'alist
:group 'idec)
(defcustom idec-primary-node nil
"Primary node to send messages."
:type 'string
:group 'idec)
;; Never used at this time.
(defcustom idec-use-list-txt t
"Use /list.txt extension."
:group 'idec)
(defcustom idec-smart-fetch t
"Enable smat fetching;
Download only new messages; Not implemented."
:type 'boolean
:group 'idec)
(defcustom idec-download-limit "50"
"Limit of download messages;
Not used if `idec-smart-fetching' is not nil."
:type 'string
:group 'idec)
(defcustom idec-download-offset "-50"
"Offset of download messages;
Not used if `idec-smart-fetching' is not nil."
:type 'string
:group 'idec)
(defcustom idec-echo-subscriptions nil
"List of subribes echoes."
:type 'string
:group 'idec)
(defcustom idec-mail-dir "~/.emacs.d/idec-mail"
"Directory to store mail."
:type 'string
:group 'idec)
(defgroup idec-accounts nil
"IDEC accounts settings."
:group 'idec)
(defcustom idec-account-nick nil
"Account nickname."
:type 'string
:group 'idec-accounts)
(defcustom idec-account-node nil
"Node to send messages."
:type 'string
:group 'idec-accounts)
(defcustom idec-account-auth nil
"Account authstring."
:type 'string
:group 'idec-accounts)
;; END OF CUSTOMIZATION
;; ;;;;;;;;;;;;;;;;;;;;
;; VARIABLES
;; ;;;;;;;;;
(defvar smart-download-limit nil
"Used with `idec-smart-fetch'.")
(defvar smart-download-offset nil
"Used with `idec-smart-fetch'.")
(defvar new-messages-list nil
"New messages for display.")
;; END OF VARIABLES
;; ;;;;;;;;;;;;;;;;
(provide 'idec-customize)
;;; idec-customize ends here

141
idec.el
View File

@ -26,95 +26,7 @@
;;; Code:
;; CUSTOMIZATION
;; ;;;;;;;;;;;;;
(defgroup idec nil
"IDEC configuration."
:group 'network)
;; Not used
(defcustom idec-nodes-list
'("http://idec.spline-online.tk/"
"https://ii-net.tk/ii/ii-point.php?q=/")
"List of IDEC nodes."
:type 'alist
:group 'idec)
(defcustom idec-primary-node nil
"Primary node to send messages."
:type 'string
:group 'idec)
;; Never used at this time.
(defcustom idec-use-list-txt t
"Use /list.txt extension."
:group 'idec)
(defcustom idec-smart-fetch t
"Enable smat fetching;
Download only new messages; Not implemented."
:type 'boolean
:group 'idec)
(defcustom idec-download-limit "50"
"Limit of download messages;
Not used if `idec-smart-fetching' is not nil."
:type 'string
:group 'idec)
(defcustom idec-download-offset "-50"
"Offset of download messages;
Not used if `idec-smart-fetching' is not nil."
:type 'string
:group 'idec)
(defcustom idec-echo-subscriptions nil
"List of subribes echoes."
:type 'string
:group 'idec)
(defcustom idec-mail-dir "~/.emacs.d/idec-mail"
"Directory to store mail."
:type 'string
:group 'idec)
(defgroup idec-accounts nil
"IDEC accounts settings."
:group 'idec)
(defcustom idec-account-nick nil
"Account nickname."
:type 'string
:group 'idec-accounts)
(defcustom idec-account-node nil
"Node to send messages."
:type 'string
:group 'idec-accounts)
(defcustom idec-account-auth nil
"Account authstring."
:type 'string
:group 'idec-accounts)
;; END OF CUSTOMIZATION
;; ;;;;;;;;;;;;;;;;;;;;
;; VARIABLES
;; ;;;;;;;;;
(defvar smart-download-limit nil
"Used with `idec-smart-fetch'.")
(defvar smart-download-offset nil
"Used with `idec-smart-fetch'.")
(defvar new-messages-list nil
"New messages for display.")
;; END OF VARIABLES
;; ;;;;;;;;;;;;;;;;
(require 'idec-customize)
;; MODE
;; ;;;;
@ -141,8 +53,7 @@ Not used if `idec-smart-fetching' is not nil."
(defconst idec-font-lock-keywords-2
(append idec-font-lock-keywords-1 (list
'("\\<\\(>>?.*\\)\s\\>" . font-lock-comment-face)
'("\\('\\w*'\\)" . font-lock-variable-name-face)))
'("\\<\\(>>?.*\\)\s\\>" . font-lock-comment-face)))
"Quotes highligting for IDEC mode.")
(defvar idec-font-lock-keywords idec-font-lock-keywords-2
@ -151,6 +62,7 @@ Not used if `idec-smart-fetching' is not nil."
(defvar idec-mode-syntax-table
(make-syntax-table text-mode-syntax-table))
;; Mode function
(defun idec-mode ()
"Major mode for view and editing IDEC messages."
(interactive)
@ -422,6 +334,44 @@ Return list with body content."
new-messages-list))
(idec-mode)))
;; Online reading
(defun display-echo-messages (messages)
"Display downloaded MESSAGES from echo."
(message messages)
(let (msgs echo)
(defvar echo-msg-hash (make-hash-table :test 'equal)
"Hashtable with MSG parsing functions.")
(setq echo (nth 0 (split-string messages "\n")))
(setq msgs (delete (nth 0 (split-string messages "\n")) (split-string messages "\n")))
(dolist (id msgs)
(puthash id echo echo-msg-hash))
(with-output-to-temp-buffer (get-buffer-create (concat "*IDEC: online browse " echo "*" ))
(switch-to-buffer (concat "*IDEC: online browse " echo "*"))
(maphash (lambda (id msg-hash)
(princ "__________________________________\n")
(princ (concat "ID: " id "\n"))
(princ (concat "From: " (get-message-field (gethash "content" msg-hash) "author") "("
(get-message-field (gethash "content" msg-hash) "address") ")" "\n"))
(princ (concat "To: " (get-message-field (gethash "content" msg-hash) "recipient") "\n"))
(princ (concat "Echo: " (get-message-field (gethash "content" msg-hash) "echo") "\n"))
(princ (concat "At: " (get-message-field (gethash "content" msg-hash) "time") "\n"))
(princ (concat "Subject: " (get-message-field (gethash "content" msg-hash) "subj") "\n"))
(princ (concat "__________________________________\n\n"
(s-join "\n" (get-message-field (gethash "content" msg-hash) "body"))))
(princ "\n__________________________________\n")
(princ "[")
(insert-button "Answer"
'action (lambda (x) (message "OK")))
(princ "]")
(princ "\t [")
(insert-button "Answer with quote")
(princ "]\n\n"))
;; Plain messages hash proccesing
(get-messages-content echo-msg-hash))
(add-text-properties (point-min) (point-max) 'read-only)
(idec-mode))
))
(defun get-messages-content (messages)
"Get MESSAGES content from `idec-primary-node'."
(defvar msg-ids '())
@ -488,7 +438,7 @@ with `idec-download-offset' and `idec-download-limit'."
(concat idec-primary-node "u/m/" msgs
;; (s-join "/" messages)
))
(message (concat idec-primary-node "u/m/" messages))))
(concat idec-primary-node "u/m/" messages)))
(defun make-count-url (echo)
"Return messages count url in `idec-primary-node' from ECHO."
@ -499,14 +449,9 @@ with `idec-download-offset' and `idec-download-limit'."
(nth 1 (split-string
(get-url-content (make-count-url echo)) ":")))
(defun display-echo-messages (messages)
"Display downloaded MESSAGES from echo."
(with-output-to-temp-buffer (get-buffer-create (concat "*IDEC: browse echo*"))
(switch-to-buffer "*IDEC: browse echo*")
(princ messages)))
(defun load-echo-messages (echo)
"Load messages from ECHO."
(message (concat "DEBUG: " echo))
(store-echo-counter echo)
(display-echo-messages (get-url-content (make-echo-url echo))))