diff options
Diffstat (limited to 'emacs/.emacs.d/lisp/my')
-rw-r--r-- | emacs/.emacs.d/lisp/my/belf.el | 6 | ||||
-rw-r--r-- | emacs/.emacs.d/lisp/my/infobox.el | 5 | ||||
-rw-r--r-- | emacs/.emacs.d/lisp/my/my-emms.el | 9 | ||||
-rw-r--r-- | emacs/.emacs.d/lisp/my/my-libgen.el | 58 | ||||
-rw-r--r-- | emacs/.emacs.d/lisp/my/my-utils.el | 7 | ||||
-rw-r--r-- | emacs/.emacs.d/lisp/my/my-wget.el | 33 |
6 files changed, 73 insertions, 45 deletions
diff --git a/emacs/.emacs.d/lisp/my/belf.el b/emacs/.emacs.d/lisp/my/belf.el index 4278927..35175be 100644 --- a/emacs/.emacs.d/lisp/my/belf.el +++ b/emacs/.emacs.d/lisp/my/belf.el @@ -397,9 +397,9 @@ Compare without leading \"The \"." (setf (alist-get 'Title info) (concat (alist-get 'Title info) " -- " - (buttonize - "xdg-open" - (lambda (_) (call-process "xdg-open" nil 0 nil file-name))) + (buttonize "context" + (lambda (_) + (funcall my-file-context-function file-name))) " " (buttonize "find-file" (lambda (_) (find-file file-name)))) (alist-get 'Thumbnail info) (belf-book-cover file-name) diff --git a/emacs/.emacs.d/lisp/my/infobox.el b/emacs/.emacs.d/lisp/my/infobox.el index 0e5e054..ff4adb6 100644 --- a/emacs/.emacs.d/lisp/my/infobox.el +++ b/emacs/.emacs.d/lisp/my/infobox.el @@ -171,9 +171,4 @@ something like (lambda (line) (string-match-p "^[0-9]" line)) (split-string (buffer-string) "\n")))) -(defun my-call-process-out (command &rest args) - (with-temp-buffer - (apply 'call-process (append (list command nil t nil) args)) - (buffer-string))) - (provide 'infobox) diff --git a/emacs/.emacs.d/lisp/my/my-emms.el b/emacs/.emacs.d/lisp/my/my-emms.el index 054d3d9..331f309 100644 --- a/emacs/.emacs.d/lisp/my/my-emms.el +++ b/emacs/.emacs.d/lisp/my/my-emms.el @@ -448,8 +448,8 @@ under /zzz-seren/." ;; How many tracks have been from the start of the album ;; (exclusive) (past (- current-ln start-ln)) - ;; How many tracks to go (inclusive) - (remain (- end-ln current-ln)) + ;; ;; How many tracks to go (inclusive) + ;; (remain (- end-ln current-ln)) (idx (/ past my-emms-playlist-group-length)) (maybe-group-start (+ start-ln (* idx my-emms-playlist-group-length))) (group-start @@ -457,10 +457,11 @@ under /zzz-seren/." ;; Too close to the end of the album (max start-ln (- maybe-group-start my-emms-playlist-group-length)) maybe-group-start)) + (maybe-group-end (+ group-start my-emms-playlist-group-length)) (group-end - (if (<= remain my-emms-playlist-tail-group-length) + (if (<= (- end-ln maybe-group-end) my-emms-playlist-tail-group-length) end-ln - (min end-ln (+ group-start my-emms-playlist-group-length))))) + (min end-ln maybe-group-end)))) (cons group-start group-end)))) (defun my-emms-playlist-random-group () diff --git a/emacs/.emacs.d/lisp/my/my-libgen.el b/emacs/.emacs.d/lisp/my/my-libgen.el index 9d3a9db..84d9728 100644 --- a/emacs/.emacs.d/lisp/my/my-libgen.el +++ b/emacs/.emacs.d/lisp/my/my-libgen.el @@ -176,19 +176,32 @@ (defun my-libgen-plus-download-action () (interactive) - (let ((info (get-text-property (point) 'button-data))) + (let* ((info (get-text-property (point) 'button-data)) + (filename (file-name-concat (expand-file-name my-libgen-download-dir) + (my-libgen-format-filename info))) + (md5 (alist-get 'md5 info))) (my-wget-async (my-libgen-plus-get-download-url info) - (file-name-concat (expand-file-name my-libgen-download-dir) - (my-libgen-format-filename info))))) + filename + nil + (lambda () (my-libgen-check-md5 filename md5))))) + +(defun my-libgen-check-md5 (file md5) + (let ((actual (substring (my-call-process-out "md5sum" file) 0 32))) + (unless (equal actual md5) + (warn "MD5 checksum of %s mismatch: should be %s but actually %s" + file md5 actual)))) (defun my-libgen-download-library-action () (interactive) - (let ((info (get-text-property (point) 'button-data))) + (let* ((info (get-text-property (point) 'button-data)) + (filename (file-name-concat (expand-file-name my-libgen-download-dir) + (my-libgen-format-filename info))) + (md5 (alist-get 'md5 info))) (my-wget-async (my-libgen-make-download-link-library info) - (format "%s/%s" (expand-file-name my-libgen-download-dir) - (my-libgen-format-filename info))))) + nil + (lambda () (my-libgen-check-md5 filename md5))))) (defun my-libgen-download-onion-action () (interactive) @@ -291,22 +304,23 @@ (title "") identifier edition-id) - (while (and as (string-empty-p title)) - (setq title (string-trim (dom-texts (car as) "")) - edition-id (string-remove-prefix - "edition.php?id=" - (dom-attr (car as) 'href)) - as (cdr as))) - (when (string-empty-p title) - (error "Title is empty: %s" dom)) (when as - (setq identifier - (replace-regexp-in-string - "; " "," - (string-trim (dom-texts (dom-by-tag (car as) 'i)))))) - `((title . ,title) - (edition-id . ,edition-id) - (identifier . ,identifier)))) + (while (and as (string-empty-p title)) + (setq title (string-trim (dom-texts (car as) "")) + edition-id (string-remove-prefix + "edition.php?id=" + (dom-attr (car as) 'href)) + as (cdr as))) + (when (string-empty-p title) + (error "Title is empty: %s" dom)) + (when as + (setq identifier + (replace-regexp-in-string + "; " "," + (string-trim (dom-texts (dom-by-tag (car as) 'i)))))) + `((title . ,title) + (edition-id . ,edition-id) + (identifier . ,identifier))))) (defun my-libgen-plus-search-parse-tr (tr) (let* ((tds (dom-by-tag tr 'td)) @@ -328,7 +342,7 @@ (mirrors-td (elt tds 8)) (mirrors (seq-map (lambda (mirror) (dom-attr mirror 'href)) (dom-by-tag mirrors-td 'a))) - (md5 (substring (car mirrors) 4 36)) + (md5 (when mirrors (substring (car mirrors) 4 36))) ) `((title . ,title) (identifier . ,identifier) diff --git a/emacs/.emacs.d/lisp/my/my-utils.el b/emacs/.emacs.d/lisp/my/my-utils.el index 3ecd0a9..0743227 100644 --- a/emacs/.emacs.d/lisp/my/my-utils.el +++ b/emacs/.emacs.d/lisp/my/my-utils.el @@ -304,6 +304,13 @@ Example: (format-time-string ... (my-time-from-epoch 1698582504))" ,@body (setq default-directory saved))) + +(defun my-call-process-out (command &rest args) + "Call `call-process' on COMMAND with ARGS and return the output." + (with-temp-buffer + (apply 'call-process (append (list command nil t nil) args)) + (buffer-string))) + (defun my-call-process-with-torsocks (program &optional infile destination display &rest args) (apply 'call-process diff --git a/emacs/.emacs.d/lisp/my/my-wget.el b/emacs/.emacs.d/lisp/my/my-wget.el index 5349257..e7283aa 100644 --- a/emacs/.emacs.d/lisp/my/my-wget.el +++ b/emacs/.emacs.d/lisp/my/my-wget.el @@ -48,20 +48,31 @@ (kill-new full-path) (message "Saved webpage to %s (path copied)." full-path))) -(defun my-wget-async (url filename &optional no-tor move-if-video-or-large) +(defun my-wget-async (url filename &optional no-tor on-success on-fail) (set-process-sentinel (my-start-process-with-torsocks no-tor "wget" "*wget*" "wget" url "-c" "-O" filename) - (lambda (_process _event) - (when (and move-if-video-or-large - (or - (> (file-attribute-size (file-attributes filename)) - my-wget-size-threshold) - (member (file-name-extension filename) my-wget-video-extensions))) - (setq filename - (my-rename-and-symlink-back - filename (expand-file-name my-wget-video-archive-directory) nil))) - (message "Fetched %s and saved to: %s" url filename)))) + (lambda (proc event) + (let ((ps (process-status proc)) + (status (process-exit-status proc))) + (if (eq status 0) + (progn + (message "[DONE] Fetched %s to %s" url filename) + (when on-success (funcall on-success))) + (message "[FAIL] Fetching %s to %s: %s" url filename event) + (when on-fail (funcall on-fail)))) + ) + )) + +(defun my-wget-move-if-video-or-large (url filename _process _event) + (when (or + (> (file-attribute-size (file-attributes filename)) + my-wget-size-threshold) + (member (file-name-extension filename) my-wget-video-extensions)) + (setq filename + (my-rename-and-symlink-back + filename (expand-file-name my-wget-video-archive-directory) nil))) + (message "Fetched %s and saved to: %s" url filename)) (defun wget-async-urls-with-prefix (urls prefix &optional no-tor move-if-video-or-large) (let ((i 1)) |