diff options
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-request-worker.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-request-worker.el | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-request-worker.el b/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-request-worker.el deleted file mode 100644 index 13068f94800c..000000000000 --- a/configs/shared/emacs/.emacs.d/elpa/slack-20180913.651/slack-request-worker.el +++ /dev/null @@ -1,143 +0,0 @@ -;;; slack-request-worker.el --- -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 南優也 - -;; Author: 南優也 <yuyaminami@minamiyuuya-no-MacBook.local> -;; Keywords: - -;; 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: - -;; - -;;; Code: - -(require 'eieio) -(require 'slack-util) -(require 'slack-request) -(require 'slack-team) - -(defcustom slack-request-worker-max-request-limit 30 - "Max request count perform simultaneously." - :group 'slack) - -(defvar slack-request-worker-instance nil) - -(defclass slack-request-worker () - ((queue :initform '() :type list) - (timer :initform nil) - (current-request-count :initform 0 :type integer) - )) - -(defun slack-request-worker-create () - "Create `slack-request-worker' instance." - (make-instance 'slack-request-worker)) - -(defmethod slack-request-worker-push ((this slack-request-worker) req) - (let ((l '())) - (cl-pushnew req (oref this queue) - :test #'slack-equalp))) - -(defun slack-request-worker-set-timer () - (cl-labels - ((on-timeout () - (slack-request-worker-execute) - (when (timerp slack-request-worker-instance) - (cancel-timer slack-request-worker-instance)) - (slack-request-worker-set-timer))) - (oset slack-request-worker-instance timer - (run-at-time 1 nil #'on-timeout)))) - -(defun slack-request-worker-execute () - "Pop request from queue until `slack-request-worker-max-request-limit', and execute." - (when slack-request-worker-instance - (let ((do '()) - (skip '()) - (current (time-to-seconds)) - (limit (- slack-request-worker-max-request-limit - (oref slack-request-worker-instance - current-request-count)))) - - (cl-loop for req in (reverse (oref slack-request-worker-instance queue)) - do (if (and (< (oref req execute-at) current) - (< (length do) limit)) - (push req do) - (push req skip))) - - ;; (message "[WORKER] QUEUE: %s, LIMIT: %s, CURRENT: %s, DO: %s, SKIP: %s" - ;; (length (oref slack-request-worker-instance queue)) - ;; slack-request-worker-max-request-limit - ;; (oref slack-request-worker-instance current-request-count) - ;; (length do) - ;; (length skip)) - - (oset slack-request-worker-instance queue skip) - - (cl-labels - ((decl-request-count - () - (cl-decf (oref slack-request-worker-instance - current-request-count)))) - (cl-loop for req in do - do (progn - (cl-incf (oref slack-request-worker-instance - current-request-count)) - (slack-request req - :on-success #'decl-request-count - :on-error #'decl-request-count - ))))))) - -(defmethod slack-request-worker-push ((req slack-request-request)) - (unless slack-request-worker-instance - (setq slack-request-worker-instance - (slack-request-worker-create))) - (slack-request-worker-push slack-request-worker-instance req) - (unless (oref slack-request-worker-instance timer) - (slack-request-worker-set-timer))) - -(defun slack-request-worker-quit () - "Cancel timer and remove `slack-request-worker-instance'." - (when (and slack-request-worker-instance - (timerp (oref slack-request-worker-instance timer))) - (cancel-timer (oref slack-request-worker-instance timer))) - (setq slack-request-worker-instance nil)) - -(defmethod slack-request-worker-remove-request ((team slack-team)) - "Remove request from TEAM in queue." - (when slack-request-worker-instance - (let ((to-remove '()) - (new-queue '()) - (all (oref slack-request-worker-instance queue))) - - (dolist (req all) - (if (string= (oref (oref req team) id) - (oref team id)) - (push req to-remove) - (push req new-queue))) - - (dolist (req to-remove) - (when (and (oref req response) - (not (request-response-done-p (oref req response)))) - (request-abort (oref req response)))) - - (oset slack-request-worker-instance queue new-queue) - (slack-log (format "Remove Request from Worker, ALL: %s, REMOVED: %s, NEW-QUEUE: %s" - (length all) - (length to-remove) - (length new-queue)) - team :level 'debug)))) - -(provide 'slack-request-worker) -;;; slack-request-worker.el ends here |