Subject: [bug#29099] [PATCH] gnu: Add kodi-cli.

From: Oleg Pykhalov <[email-masked]>
Date: Thu, 02 Nov 2017 12:14:54 +0300

Hello Marius,

Thank you for review!

Marius Bakke <[email-masked]> writes:

>> +(define-public kodi-cli
>> +  (let ((commit "104dc23b2a993c8e6db8c46f4f8bec24b146549b") ; Add support for
>> +        (revision "1"))                                     ; `$HOME/.kodirc'.
>> +    (package
>> +      (name "kodi-cli")
>> +      (version (string-append "1.1-" revision "." (string-take commit 7)))
>> +      (source (origin
>> +                (method git-fetch)
>> +                (uri (git-reference (url "https://github.com/nawar/kodi-cli")
>> +                                    (commit commit)))
>> +                (sha256
>> +                 (base32
>> +                  "1xjhasc5gngfxpr1dlzy6q24w0wpdfjx12p43fanjppxw4i49n5p"))
>> +                (file-name (string-append name "-" version "-checkout"))))
>> +      (build-system trivial-build-system)
>> +      (inputs `(("bash" ,bash)))
>> +      (propagated-inputs `(("curl" ,curl)))
>
> There is only one reference to `curl` in the script, can you try to
> substitute it with the absolute path and make it a regular input?  It's
> good to avoid propagation when we can.

Done.  I also added input mps-youtube and did the same.

>> +      (arguments
>> +       `(#:modules ((guix build utils))
>> +         #:builder
>> +         (begin
>> +           (use-modules (guix build utils))
>> +           (copy-recursively (assoc-ref %build-inputs "source") ".")
>> +           (substitute* "kodi-cli"
>> +             (("/bin/bash") (string-append (assoc-ref %build-inputs "bash")
>> +                                           "/bin/bash")))
>> +           (install-file "kodi-cli" (string-append %output "/bin")))))
>
> (install-file ...) has an unspecified return value, so please return #t here.

Done.

>> +      (home-page "https://github.com/nawar/kodi-cli")
>> +      (synopsis "Bash script to send commands to Kodi using JSON RPC")
>
> Maybe just "Control Kodi from the command line".

Done.

>> +      (description "@code{kodi-cli} provides the Bash script to send commands to
>> +Kodi using JSON RPC.
>
> Similarly, this sentence can be reduced to something like
> "@code{kodi-cli} is a tool for sending commands to a Kodi server using
> JSON-RPC.".  Bash is an boring implementation detail IMO. :-)

Done.

>> +
>> +Feautures:
>       ^ Stray 'u' character.

Done.

>> +
>> +@itemize
>> +@item Play, pause, stop the current played video.
>
> "currently playing"

Done.

>> +@item Skip forward or backward in the current played video.
>
> Same here.  Maybe it should be "currently playing item", since I assume
> this works for music as well.

Done.

>> +@item Play or queue to the current list YouTube video.
>
> "List of YouTube videos"?

Done.

>> +@item Interactive and noninteractive volume control.
>> +@item Interactive navigation.
>> +@item Send text.
>
> What does this mean?  Arbitrary commands, or text notifications?

From my experience this allows you do the following:

1. Open Videos.
2. Add videos…
3. Select <none>.
4. Enter path by sending a command via 'kodi-cli -t PATH'.

Maybe call this item of the feature list as
“Send text to the Kodi keyboard”?

New patch is attached.

From 82691aa8ec24ebad702867e006014f34eaceeb93 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <[email-masked]>
Date: Wed, 1 Nov 2017 09:39:05 +0300
Subject: [PATCH] gnu: Add kodi-cli.

* gnu/packages/kodi.scm (kodi-cli): New variable.
---
 gnu/packages/kodi.scm | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index c8a65af79..8c49f720a 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -25,11 +25,13 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -426,3 +428,60 @@ plug-in system.")
                    license:public-domain          ;cpluff/examples
                    license:bsd-3                  ;misc, gtest
                    license:bsd-2)))))             ;xbmc/freebsd
+
+(define-public kodi-cli
+  (let ((commit "104dc23b2a993c8e6db8c46f4f8bec24b146549b") ; Add support for
+        (revision "1"))                                     ; `$HOME/.kodirc'.
+    (package
+      (name "kodi-cli")
+      (version (string-append "1.1-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference (url "https://github.com/nawar/kodi-cli")
+                                    (commit commit)))
+                (sha256
+                 (base32
+                  "1xjhasc5gngfxpr1dlzy6q24w0wpdfjx12p43fanjppxw4i49n5p"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (build-system trivial-build-system)
+      (inputs
+       `(("bash"        ,bash)
+         ("curl"        ,curl)
+         ("mps-youtube" ,mps-youtube)))
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+           (copy-recursively (assoc-ref %build-inputs "source") ".")
+           (substitute* "kodi-cli"
+             (("/bin/bash") (string-append (assoc-ref %build-inputs "bash")
+                                           "/bin/bash"))
+             (("output=\\$\\((curl)" all curl)
+              (string-append "output=$("
+                             (assoc-ref %build-inputs "curl")
+                             "/bin/" curl))
+             (("play_youtube `(mpsyt)" all mpsyt)
+              (string-append "play_youtube `"
+                             (assoc-ref %build-inputs "mps-youtube")
+                             "/bin/" mpsyt)))
+           (install-file "kodi-cli" (string-append %output "/bin"))
+           #t)))
+      (home-page "https://github.com/nawar/kodi-cli")
+      (synopsis "Control Kodi from the command line")
+      (description "@code{kodi-cli} is a tool for sending commands to a Kodi
+server using JSON RPC.
+
+Features:
+
+@itemize
+@item Play, pause, stop the current playing item.
+@item Skip forward or backward in the current playing item.
+@item Play or queue to the current list YouTube videos.
+@item Interactive and noninteractive volume control.
+@item Interactive navigation.
+@item Send text.
+@item Toggle fullscreen.
+@item Update or clean Kodi libraries.
+@end itemize\n")
+      (license license:gpl2+))))
-- 
2.14.3

>> +@item Toggle fullscreen.
>> +@item Update or clean Kodi libraries.
>> +@end itemize\n")
>> +      (license license:gpl2+))))
>
> LGTM with some cosmetic improvements.  And welcome!
>
> By the way, if you use Kodi from Guix, feel free to update the 18
> snapshot if you can.  My media PC died a while back, and I didn't get a
> replacement yet, so I have not been able to maintain the Kodi package.

OK.  I do, but not much.  Primarily use it on a “media tablet”.  :-)

Oleg.