summaryrefslogtreecommitdiffhomepage
path: root/lib/media
diff options
context:
space:
mode:
Diffstat (limited to 'lib/media')
-rw-r--r--lib/media/jao-spt.el77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/media/jao-spt.el b/lib/media/jao-spt.el
new file mode 100644
index 0000000..adafed6
--- /dev/null
+++ b/lib/media/jao-spt.el
@@ -0,0 +1,77 @@
+;;; jao-spt.el --- Access to the spotify-tui CLI -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021, 2022 jao
+
+;; Author: jao <mail@jao.io>
+;; Keywords: multimedia
+
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Simple spotifyd controls via the spt executable.
+
+;;; Code:
+
+(require 'jao-minibuffer)
+(require 'jao-notify)
+
+(defvar jao-spt-bin (expand-file-name "~/bin/spt"))
+
+(defun jao-spt--exec (&rest args)
+ (let ((display-buffer-alist `((".*spt commands.*" display-buffer-no-window)))
+ (buff (get-buffer-create "* spt commands *")))
+ (apply #'start-process "spt" buff jao-spt-bin args)))
+
+(defvar jao-spt--status-str "")
+
+;;;###autoload
+(defun jao-spt-play-uri (uri)
+ (jao-spt--exec "play" "--uri" uri))
+
+;;;###autoload
+(defun jao-spt-update-status ()
+ (interactive)
+ (let ((st (string-trim (shell-command-to-string (format "%s pb" jao-spt-bin)))))
+ (setq jao-spt--status-str (when (string-prefix-p "▶" st) st))
+ (jao-minibuffer-refresh)
+ st))
+
+;;;###autoload
+(defun jao-spt-toggle ()
+ (interactive)
+ (jao-spt--exec "pb" "-t"))
+
+;;;###autoload
+(defun jao-spt-next ()
+ (interactive)
+ (jao-spt--exec "pb" "-n"))
+
+;;;###autoload
+(defun jao-spt-previous ()
+ (interactive)
+ (jao-spt--exec "pb" "-p"))
+
+;;;###autoload
+(defun jao-spt-echo-current ()
+ (interactive)
+ (let ((jao-notify-use-messages-p t))
+ (jao-notify (jao-spt-update-status))))
+
+;;;###autoload
+(defun jao-spt-set-up ()
+ (jao-minibuffer-add-variable 'jao-spt--status-str 20))
+
+(provide 'jao-spt)
+;;; jao-spt.el ends here