about summary refs log tree commit diff
path: root/pkgs/applications/audio/spotify
diff options
context:
space:
mode:
authorTimo Kaufmann <timokau@zoho.com>2018-07-26 12:31:47 +0200
committerTimo Kaufmann <timokau@zoho.com>2018-08-04 15:18:15 +0200
commite875678f8ed34256300cc65e63aae641495572b5 (patch)
tree252fbee9b770eb4f2fe205c3c00092cc16a71d40 /pkgs/applications/audio/spotify
parent4758fe7c564bd5cb55c351930201fcafcca1bd4a (diff)
downloadnixlib-e875678f8ed34256300cc65e63aae641495572b5.tar
nixlib-e875678f8ed34256300cc65e63aae641495572b5.tar.gz
nixlib-e875678f8ed34256300cc65e63aae641495572b5.tar.bz2
nixlib-e875678f8ed34256300cc65e63aae641495572b5.tar.lz
nixlib-e875678f8ed34256300cc65e63aae641495572b5.tar.xz
nixlib-e875678f8ed34256300cc65e63aae641495572b5.tar.zst
nixlib-e875678f8ed34256300cc65e63aae641495572b5.zip
spotify: 1.0.80.480.g51b03ac3-13 -> 1.0.80.474.gef6b503e-7
The purpose of this update (or downgrade?) is to switch the spotify
source to one more reliable. The current source only contains the last
few releases, while the new source retains all old releases.
Diffstat (limited to 'pkgs/applications/audio/spotify')
-rw-r--r--pkgs/applications/audio/spotify/default.nix51
-rw-r--r--pkgs/applications/audio/spotify/update.sh49
2 files changed, 90 insertions, 10 deletions
diff --git a/pkgs/applications/audio/spotify/default.nix b/pkgs/applications/audio/spotify/default.nix
index b8495465db55..04bdff3c8135 100644
--- a/pkgs/applications/audio/spotify/default.nix
+++ b/pkgs/applications/audio/spotify/default.nix
@@ -1,13 +1,18 @@
-{ fetchurl, stdenv, dpkg, xorg, alsaLib, makeWrapper, openssl, freetype
+{ fetchurl, stdenv, squashfsTools, xorg, alsaLib, makeWrapper, openssl, freetype
 , glib, pango, cairo, atk, gdk_pixbuf, gtk2, cups, nspr, nss, libpng
 , libgcrypt, systemd, fontconfig, dbus, expat, ffmpeg_0_10, curl, zlib, gnome3 }:
 
 let
-  # Please update the stable branch!
-  # Latest version number can be found at:
-  # http://repository-origin.spotify.com/pool/non-free/s/spotify-client/
-  # Be careful not to pick the testing version.
-  version = "1.0.80.480.g51b03ac3-13";
+  # "rev" decides what is actually being downloaded
+  version = "1.0.80.474.gef6b503e-7";
+  # To get the latest stable revision:
+  # curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=stable' | jq '.download_url,.version,.last_updated'
+  # To get general information:
+  # curl -H 'Snap-Device-Series: 16' 'https://api.snapcraft.io/v2/snaps/info/spotify' | jq '.'
+  # More exapmles of api usage:
+  # https://github.com/canonical-websites/snapcraft.io/blob/master/webapp/publisher/snaps/views.py
+  rev = "16";
+
 
   deps = [
     alsaLib
@@ -49,12 +54,20 @@ in
 stdenv.mkDerivation {
   name = "spotify-${version}";
 
+  # fetch from snapcraft instead of the debian repository most repos fetch from.
+  # That is a bit more cumbersome. But the debian repository only keeps the last
+  # two versions, while snapcraft should provide versions indefinately:
+  # https://forum.snapcraft.io/t/how-can-a-developer-remove-her-his-app-from-snap-store/512
+
+  # This is the next-best thing, since we're not allowed to re-distribute
+  # spotify ourselves:
+  # https://community.spotify.com/t5/Desktop-Linux/Redistribute-Spotify-on-Linux-Distributions/td-p/1695334
   src = fetchurl {
-    url = "https://repository-origin.spotify.com/pool/non-free/s/spotify-client/spotify-client_${version}_amd64.deb";
-    sha256 = "e32f4816ae79dbfa0c14086e76df3bc83d526402aac1dbba534127fc00fe50ea";
+    url = "https://api.snapcraft.io/api/v1/snaps/download/pOBIoZ2LrCB3rDohMxoYGnbN14EHOgD7_${rev}.snap";
+    sha512 = "45b7ab574b30fb368e0b6f4dd60addbfd1ddc02173b4f98b31c524eed49073432352a361e75959ce8e2f752231e93c79ca1b538c4bd295c935d1e2e0585d147f";
   };
 
-  buildInputs = [ dpkg makeWrapper ];
+  buildInputs = [ squashfsTools makeWrapper ];
 
   doConfigure = false;
   doBuild = false;
@@ -63,7 +76,23 @@ stdenv.mkDerivation {
 
   unpackPhase = ''
     runHook preUnpack
-    dpkg-deb -x $src .
+    unsquashfs "$src" '/usr/share/spotify' '/usr/bin/spotify' '/meta/snap.yaml'
+    cd squashfs-root
+    if ! grep -q 'grade: stable' meta/snap.yaml; then
+      # Unfortunately this check is not reliable: At the moment (2018-07-26) the
+      # latest version in the "edge" channel is also marked as stable.
+      echo "The snap package is marked as unstable:"
+      grep 'grade: ' meta/snap.yaml
+      echo "You probably chose the wrong revision."
+      exit 1
+    fi
+    if ! grep -q '${version}' meta/snap.yaml; then
+      echo "Package version differs from version found in snap metadata:"
+      grep 'version: ' meta/snap.yaml
+      echo "While the nix package specifies: ${version}."
+      echo "You probably chose the wrong revision or forgot to update the nix version."
+      exit 1
+    fi
     runHook postUnpack
   '';
 
@@ -75,6 +104,8 @@ stdenv.mkDerivation {
       mkdir -p $libdir
       mv ./usr/* $out/
 
+      cp meta/snap.yaml $out
+
       # Work around Spotify referring to a specific minor version of
       # OpenSSL.
 
diff --git a/pkgs/applications/audio/spotify/update.sh b/pkgs/applications/audio/spotify/update.sh
new file mode 100644
index 000000000000..114245f6d46c
--- /dev/null
+++ b/pkgs/applications/audio/spotify/update.sh
@@ -0,0 +1,49 @@
+channel="stable" # stable/candidate/edge
+nixpkgs="$(git rev-parse --show-toplevel)"
+spotify_nix="$nixpkgs/pkgs/applications/audio/spotify/default.nix"
+
+
+
+# create bash array from snap info
+snap_info=($(
+	curl -H 'X-Ubuntu-Series: 16' \
+		"https://api.snapcraft.io/api/v1/snaps/details/spotify?channel=$channel" \
+	| jq --raw-output \
+		'.revision,.download_sha512,.version,.last_updated'
+))
+
+revision="${snap_info[0]}"
+sha512="${snap_info[1]}"
+version="${snap_info[2]}"
+last_updated="${snap_info[3]}"
+
+# find the last commited version
+version_pre=$(
+	git  grep 'version\s*=' HEAD "$spotify_nix" \
+	| sed -Ene 's/.*"(.*)".*/\1/p'
+)
+
+if [[ "$version_pre" = "$version" ]]; then
+	echo "Spotify is already up ot date"
+	exit 0
+fi
+
+echo "Updating from ${version_pre} to ${version}, released on ${last_updated}"
+
+# search-andreplace revision, hash and version
+sed --regexp-extended \
+	-e 's/rev\s*=\s*"[0-9]+"\s*;/rev = "'"${revision}"'";/' \
+	-e 's/sha512\s*=\s*".{128}"\s*;/sha512 = "'"${sha512}"'";/' \
+	-e 's/version\s*=\s*".*"\s*;/version = "'"${version}"'";/' \
+	-i "$spotify_nix" 
+
+if ! nix-build -A spotify "$nixpkgs"; then
+	echo "The updated spotify failed to build."
+	exit 1
+fi
+
+git add "$spotify_nix"
+# show diff for review
+git diff HEAD
+# prepare commit message, but allow edit
+git commit --edit --message "spotify: $version_pre -> $version"