mirror of
				https://github.com/Mastermindzh/dotfiles.git
				synced 2025-11-04 02:38:53 +01:00 
			
		
		
		
	removed spotify and google play
This commit is contained in:
		
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							@@ -14,20 +14,20 @@ Older versions:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Tools
 | 
					## Tools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Purpose          | Tool                                 |
 | 
					| Purpose          | Tool                                                                   |
 | 
				
			||||||
| ---------------- | ------------------------------------ |
 | 
					| ---------------- | ---------------------------------------------------------------------- |
 | 
				
			||||||
| WM               | i3 (i3-gaps)                         |
 | 
					| WM               | i3 (i3-gaps)                                                           |
 | 
				
			||||||
| App launcher     | rofi                                 |
 | 
					| App launcher     | rofi                                                                   |
 | 
				
			||||||
| Shell            | Bash                                 |
 | 
					| Shell            | Bash                                                                   |
 | 
				
			||||||
| Package managers | Pacman & Trizen                      |
 | 
					| Package managers | Pacman & Trizen                                                        |
 | 
				
			||||||
| OS               | Arch Linux (or Antergos if I'm lazy) |
 | 
					| OS               | Arch Linux                                                             |
 | 
				
			||||||
| Terminal         | xfce4-terminal                       |
 | 
					| Terminal         | xfce4-terminal                                                         |
 | 
				
			||||||
| Editor           | nano                                 |
 | 
					| Editor           | nano                                                                   |
 | 
				
			||||||
| Code editor      | vscode / jetbrains stuff             |
 | 
					| Code editor      | vscode / jetbrains stuff                                               |
 | 
				
			||||||
| Browser          | Chromium                             |
 | 
					| Browser          | Chromium                                                               |
 | 
				
			||||||
| File manager     | If I have to use one ... Nautilus    |
 | 
					| File manager     | If I have to use one ... Nautilus                                      |
 | 
				
			||||||
| Music            | Google Play Music Desktop Player     |
 | 
					| Music            | Tidal through [Tidal-hifi](https://github.com/Mastermindzh/tidal-hifi) |
 | 
				
			||||||
|                  |                                      |
 | 
					|                  |                                                                        |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## computer specifc setup
 | 
					## computer specifc setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								dependencies/aur.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								dependencies/aur.txt
									
									
									
									
										vendored
									
									
								
							@@ -9,7 +9,6 @@ otf-droid-sans-mono-powerline-git
 | 
				
			|||||||
downgrade
 | 
					downgrade
 | 
				
			||||||
dive
 | 
					dive
 | 
				
			||||||
xorg-xev
 | 
					xorg-xev
 | 
				
			||||||
spotify
 | 
					 | 
				
			||||||
networkmanager-l2tp
 | 
					networkmanager-l2tp
 | 
				
			||||||
snapd
 | 
					snapd
 | 
				
			||||||
i3blocks-contrib
 | 
					i3blocks-contrib
 | 
				
			||||||
@@ -39,7 +39,6 @@ set $workspace11 " Virtualbox"
 | 
				
			|||||||
set $workspace12 " Enpass"
 | 
					set $workspace12 " Enpass"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# scripts
 | 
					# scripts
 | 
				
			||||||
set $spotify ~/.config/i3/scripts/spotify-cli.sh
 | 
					 | 
				
			||||||
set $tidal ~/.config/i3/scripts/tidal-cli.sh
 | 
					set $tidal ~/.config/i3/scripts/tidal-cli.sh
 | 
				
			||||||
set $vpnmanager ~/.config/i3/scripts/vpn-manager.sh
 | 
					set $vpnmanager ~/.config/i3/scripts/vpn-manager.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -229,7 +228,6 @@ for_window [class="Eog"] floating enable
 | 
				
			|||||||
#    Workspace specific tools              #
 | 
					#    Workspace specific tools              #
 | 
				
			||||||
#       Use xprop to determine class       #
 | 
					#       Use xprop to determine class       #
 | 
				
			||||||
############################################
 | 
					############################################
 | 
				
			||||||
assign [class="Google Play Music Desktop Player"] $workspace10
 | 
					 | 
				
			||||||
assign [class="Franz"] $workspace9
 | 
					assign [class="Franz"] $workspace9
 | 
				
			||||||
assign [class="Enpass-Desktop"] $workspace12
 | 
					assign [class="Enpass-Desktop"] $workspace12
 | 
				
			||||||
assign [class="Enpass"] $workspace12
 | 
					assign [class="Enpass"] $workspace12
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,12 +41,6 @@ separator_block_width=13
 | 
				
			|||||||
interval=1
 | 
					interval=1
 | 
				
			||||||
color=#4293f5
 | 
					color=#4293f5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# [spotify]
 | 
					 | 
				
			||||||
# command=bash ~/.config/i3/scripts/blocks/spotify.sh
 | 
					 | 
				
			||||||
# separator_block_width=13
 | 
					 | 
				
			||||||
# interval=1
 | 
					 | 
				
			||||||
# color=#1DB954
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[weather]
 | 
					[weather]
 | 
				
			||||||
command=curl wttr.in?format=1
 | 
					command=curl wttr.in?format=1
 | 
				
			||||||
separator_block_width=13
 | 
					separator_block_width=13
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,74 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/python
 | 
					 | 
				
			||||||
import json
 | 
					 | 
				
			||||||
from os.path import expanduser
 | 
					 | 
				
			||||||
import sys
 | 
					 | 
				
			||||||
import argparse
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
home = expanduser("~")
 | 
					 | 
				
			||||||
parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter, description="Parses and print Google Play Music Desktop Player song info")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def parseJson():
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        with open(home + '/.config/Google Play Music Desktop Player/json_store/playback.json') as f:
 | 
					 | 
				
			||||||
            data = f.read()
 | 
					 | 
				
			||||||
    except:
 | 
					 | 
				
			||||||
        with open(home + '/GPMDP_STORE/playback.json') as f:
 | 
					 | 
				
			||||||
            data = f.read()
 | 
					 | 
				
			||||||
    return json.loads(data)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def getSong(data):
 | 
					 | 
				
			||||||
    return data['song']['title']
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def getAlbum(data):
 | 
					 | 
				
			||||||
    return data['song']['album']
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def getArtist(data):
 | 
					 | 
				
			||||||
    return data['song']['artist']
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def convert_time(ms):
 | 
					 | 
				
			||||||
    x = ms / 1000
 | 
					 | 
				
			||||||
    x % 60
 | 
					 | 
				
			||||||
    m, s = divmod(x, 60)
 | 
					 | 
				
			||||||
    return "%d:%02d" % (m, s)
 | 
					 | 
				
			||||||
def getProgress(data):
 | 
					 | 
				
			||||||
    cur = data['time']['current']
 | 
					 | 
				
			||||||
    total = data['time']['total']
 | 
					 | 
				
			||||||
    return convert_time(cur) + "/" + convert_time(total)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def parseLayout(layout):
 | 
					 | 
				
			||||||
    displaystr = " "
 | 
					 | 
				
			||||||
    for i in layout:
 | 
					 | 
				
			||||||
        if i == 't':
 | 
					 | 
				
			||||||
            displaystr += getSong(data)
 | 
					 | 
				
			||||||
        elif i == 'a':
 | 
					 | 
				
			||||||
            displaystr += getAlbum(data)
 | 
					 | 
				
			||||||
        elif i == 'A':
 | 
					 | 
				
			||||||
            displaystr += getArtist(data)
 | 
					 | 
				
			||||||
        elif i == 'p':
 | 
					 | 
				
			||||||
            displaystr += getProgress(data)
 | 
					 | 
				
			||||||
        elif i == '-':
 | 
					 | 
				
			||||||
            displaystr += " - "
 | 
					 | 
				
			||||||
    return displaystr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def run(data, layout):
 | 
					 | 
				
			||||||
    displaystr = ""
 | 
					 | 
				
			||||||
    if data['playing']:
 | 
					 | 
				
			||||||
        displaystr = parseLayout(layout)
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        sys.stdout.write("   ")
 | 
					 | 
				
			||||||
    if sys.version[0] == '2':
 | 
					 | 
				
			||||||
        print(displaystr.encode('utf-8'))
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        print(displaystr)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
parser.add_argument("--layout",
 | 
					 | 
				
			||||||
        action="store",
 | 
					 | 
				
			||||||
        dest="layout",
 | 
					 | 
				
			||||||
        help="t = Song Title\na = Song Album\nA = Artist Name\np = Track time progess\n- = Spacer\nExample: t-a-A-p",
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
args = parser.parse_args()
 | 
					 | 
				
			||||||
data = parseJson()
 | 
					 | 
				
			||||||
try:
 | 
					 | 
				
			||||||
    run(data, args.layout)
 | 
					 | 
				
			||||||
except:
 | 
					 | 
				
			||||||
    run(data, "t-a-A-p")
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
case $BLOCK_BUTTON in
 | 
					 | 
				
			||||||
    1) ~/.config/i3/scripts/spotify-cli.sh play ;; # left click
 | 
					 | 
				
			||||||
    4) ~/.config/i3/scripts/spotify-cli.sh next ;; # scroll up
 | 
					 | 
				
			||||||
    5) ~/.config/i3/scripts/spotify-cli.sh prev ;; # scroll down
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if ~/.config/i3/scripts/spotify-cli.sh status | grep 'Paused' > /dev/null; then
 | 
					 | 
				
			||||||
    printf ' ' # fa-pause
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    printf ' ' # fa-play
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
~/.config/i3/scripts/spotify-cli.sh current-oneline
 | 
					 | 
				
			||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
icon="$HOME/.config/i3/icons/lock.png"
 | 
					icon="$HOME/.config/i3/icons/lock.png"
 | 
				
			||||||
tmpbg='/tmp/screen.png'
 | 
					tmpbg='/tmp/screen.png'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# detect whether spotify is running
 | 
					# detect whether tidal is running
 | 
				
			||||||
isPlaying=$(~/.config/i3/scripts/tidal-cli.sh status);
 | 
					isPlaying=$(~/.config/i3/scripts/tidal-cli.sh status);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
scrot "$tmpbg"
 | 
					scrot "$tmpbg"
 | 
				
			||||||
@@ -21,7 +21,7 @@ else
 | 
				
			|||||||
    # if it isn't suspended, enable no-fork
 | 
					    # if it isn't suspended, enable no-fork
 | 
				
			||||||
    i3lock -n -f -i "$tmpbg";
 | 
					    i3lock -n -f -i "$tmpbg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # if spotify was playing before we locked, resume.
 | 
					    # if tidal was playing before we locked, resume.
 | 
				
			||||||
    if [ $isPlaying == "playing" ]; then
 | 
					    if [ $isPlaying == "playing" ]; then
 | 
				
			||||||
        ~/.config/i3/scripts/tidal-cli.sh play
 | 
					        ~/.config/i3/scripts/tidal-cli.sh play
 | 
				
			||||||
    fi;
 | 
					    fi;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,276 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# CONSTANTS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SP_VERSION="0.1"
 | 
					 | 
				
			||||||
SP_DEST="org.mpris.MediaPlayer2.spotify"
 | 
					 | 
				
			||||||
SP_PATH="/org/mpris/MediaPlayer2"
 | 
					 | 
				
			||||||
SP_MEMB="org.mpris.MediaPlayer2.Player"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# To get SP_ID and SP_SECRET register at
 | 
					 | 
				
			||||||
# https://beta.developer.spotify.com/documentation/general/guides/app-settings/
 | 
					 | 
				
			||||||
SP_ID="<yout id>"
 | 
					 | 
				
			||||||
SP_SECRET="<your secret>"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# SHELL OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
shopt -s expand_aliases
 | 
					 | 
				
			||||||
SP_B64ID=$(echo -n "$SP_ID:$SP_SECRET"|base64)
 | 
					 | 
				
			||||||
SP_B64ID=$(echo $SP_B64ID | sed 's/ //g')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# UTILITY FUNCTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function require {
 | 
					 | 
				
			||||||
  hash $1 2>/dev/null || {
 | 
					 | 
				
			||||||
    echo >&2 "Error: '$1' is required, but was not found."; exit 1;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# COMMON REQUIRED BINARIES
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# We need dbus-send to talk to Spotify.
 | 
					 | 
				
			||||||
require dbus-send
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Assert standard Unix utilities are available.
 | 
					 | 
				
			||||||
require grep
 | 
					 | 
				
			||||||
require sed
 | 
					 | 
				
			||||||
require cut
 | 
					 | 
				
			||||||
require tr
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 'SPECIAL' (NON-DBUS-ALIAS) COMMANDS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-dbus {
 | 
					 | 
				
			||||||
  # Sends the given method to Spotify over dbus.
 | 
					 | 
				
			||||||
  dbus-send --print-reply --dest=$SP_DEST $SP_PATH $SP_MEMB.$1 ${*:2} > /dev/null
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-open {
 | 
					 | 
				
			||||||
  # Opens the given spotify: URI in Spotify.
 | 
					 | 
				
			||||||
  sp-dbus OpenUri string:$1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-metadata {
 | 
					 | 
				
			||||||
  # Prints the currently playing track in a parseable format.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  dbus-send                                                                   \
 | 
					 | 
				
			||||||
  --print-reply                                  `# We need the reply.`       \
 | 
					 | 
				
			||||||
  --dest=$SP_DEST                                                             \
 | 
					 | 
				
			||||||
  $SP_PATH                                                                    \
 | 
					 | 
				
			||||||
  org.freedesktop.DBus.Properties.Get                                         \
 | 
					 | 
				
			||||||
  string:"$SP_MEMB" string:'Metadata'                                         \
 | 
					 | 
				
			||||||
  | grep -Ev "^method"                           `# Ignore the first line.`   \
 | 
					 | 
				
			||||||
  | grep -Eo '("(.*)")|(\b[0-9][a-zA-Z0-9.]*\b)' `# Filter interesting fiels.`\
 | 
					 | 
				
			||||||
  | sed -E '2~2 a|'                              `# Mark odd fields.`         \
 | 
					 | 
				
			||||||
  | tr -d '\n'                                   `# Remove all newlines.`     \
 | 
					 | 
				
			||||||
  | sed -E 's/\|/\n/g'                           `# Restore newlines.`        \
 | 
					 | 
				
			||||||
  | sed -E 's/(xesam:)|(mpris:)//'               `# Remove ns prefixes.`      \
 | 
					 | 
				
			||||||
  | sed -E 's/^"//'                              `# Strip leading...`         \
 | 
					 | 
				
			||||||
  | sed -E 's/"$//'                              `# ...and trailing quotes.`  \
 | 
					 | 
				
			||||||
  | sed -E 's/"+/|/'                             `# Regard "" as seperator.`  \
 | 
					 | 
				
			||||||
  | sed -E 's/ +/ /g'                            `# Merge consecutive spaces.`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-current {
 | 
					 | 
				
			||||||
  # Prints the currently playing track in a friendly format.
 | 
					 | 
				
			||||||
  require column
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  sp-metadata \
 | 
					 | 
				
			||||||
  | grep --color=never -E "(title)|(album)|(artist)" \
 | 
					 | 
				
			||||||
  | sed 's/^\(.\)/\U\1/' \
 | 
					 | 
				
			||||||
  | column -t -s'|'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-current-oneline {
 | 
					 | 
				
			||||||
  sp-metadata | grep -E "(title|artist)" | sed 's/^\(.\)*|//' | sed ':a;N;$!ba;s/\n/ - /g'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-status {
 | 
					 | 
				
			||||||
  dbus-send \
 | 
					 | 
				
			||||||
  --print-reply \
 | 
					 | 
				
			||||||
  --dest=$SP_DEST \
 | 
					 | 
				
			||||||
  $SP_PATH \
 | 
					 | 
				
			||||||
  org.freedesktop.DBus.Properties.Get \
 | 
					 | 
				
			||||||
  string:"$SP_MEMB" string:'PlaybackStatus' \
 | 
					 | 
				
			||||||
  | tail -1 \
 | 
					 | 
				
			||||||
  | cut -d "\"" -f2
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-eval {
 | 
					 | 
				
			||||||
  # Prints the currently playing track as shell variables, ready to be eval'ed
 | 
					 | 
				
			||||||
  require sort
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  sp-metadata \
 | 
					 | 
				
			||||||
  | grep --color=never -E "(title)|(album)|(artist)|(trackid)|(trackNumber)" \
 | 
					 | 
				
			||||||
  | sort -r \
 | 
					 | 
				
			||||||
  | sed 's/^\([^|]*\)\|/\U\1/' \
 | 
					 | 
				
			||||||
  | sed -E 's/\|/="/' \
 | 
					 | 
				
			||||||
  | sed -E 's/$/"/' \
 | 
					 | 
				
			||||||
  | sed -E 's/^/SPOTIFY_/'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-art {
 | 
					 | 
				
			||||||
  # Prints the artUrl.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  sp-metadata | grep "artUrl" | cut -d'|' -f2
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-display {
 | 
					 | 
				
			||||||
  # Calls display on the artUrl.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  require display
 | 
					 | 
				
			||||||
  display $(sp-art)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-feh {
 | 
					 | 
				
			||||||
  # Calls feh on the artURl.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  require feh
 | 
					 | 
				
			||||||
  feh $(sp-art)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-url {
 | 
					 | 
				
			||||||
  # Prints the HTTP url.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TRACK=$(sp-metadata | grep "url" | cut -d'|' -f2 | cut -d':' -f3)
 | 
					 | 
				
			||||||
  echo "http://open.spotify.com/track/$TRACK"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-clip {
 | 
					 | 
				
			||||||
  # Copies the HTTP url.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  require xclip
 | 
					 | 
				
			||||||
  sp-url | xclip
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-http {
 | 
					 | 
				
			||||||
  # xdg-opens the HTTP url.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  require xdg-open
 | 
					 | 
				
			||||||
  xdg-open $(sp-url)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-help {
 | 
					 | 
				
			||||||
  # Prints usage information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  echo "Usage: sp [command]"
 | 
					 | 
				
			||||||
  echo "Control a running Spotify instance from the command line."
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "  sp play       - Play/pause Spotify"
 | 
					 | 
				
			||||||
  echo "  sp pause      - Pause Spotify"
 | 
					 | 
				
			||||||
  echo "  sp next       - Go to next track"
 | 
					 | 
				
			||||||
  echo "  sp prev       - Go to previous track"
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "  sp current    - Format the currently playing track"
 | 
					 | 
				
			||||||
  echo "  sp metadata   - Dump the current track's metadata"
 | 
					 | 
				
			||||||
  echo "  sp eval       - Return the metadata as a shell script"
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "  sp art        - Print the URL to the current track's album artwork"
 | 
					 | 
				
			||||||
  echo "  sp display    - Display the current album artwork with \`display\`"
 | 
					 | 
				
			||||||
  echo "  sp feh        - Display the current album artwork with \`feh\`"
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "  sp url        - Print the HTTP URL for the currently playing track"
 | 
					 | 
				
			||||||
  echo "  sp clip       - Copy the HTTP URL to the X clipboard"
 | 
					 | 
				
			||||||
  echo "  sp http       - Open the HTTP URL in a web browser"
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "  sp open <uri> - Open a spotify: uri"
 | 
					 | 
				
			||||||
  echo "  sp search <q> - Start playing the best search result for the given query"
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "  sp version    - Show version information"
 | 
					 | 
				
			||||||
  echo "  sp help       - Show this information"
 | 
					 | 
				
			||||||
  echo ""
 | 
					 | 
				
			||||||
  echo "Any other argument will start a search (i.e. 'sp foo' will search for foo)."
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-search {
 | 
					 | 
				
			||||||
  # Searches for tracks, plays the first result.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  require curl
 | 
					 | 
				
			||||||
    #send request for token with ID and SecretID encoded to base64->grep take only  token from reply->trim reply down to token-> modified request to include token in header
 | 
					 | 
				
			||||||
  Q="$@"
 | 
					 | 
				
			||||||
    ST=$(curl -H "Authorization: Basic $SP_B64ID" -d grant_type=client_credentials https://accounts.spotify.com/api/token --silent \
 | 
					 | 
				
			||||||
    | grep -E -o "access_token\":\"[a-zA-Z0-9_-]+\"" -m 1 )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   echo $Q
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ST2=${ST:15:86}}
 | 
					 | 
				
			||||||
  SPTFY_URI=$( \
 | 
					 | 
				
			||||||
    curl -H "Authorization: Bearer $ST2" -s -G --data-urlencode "q=$Q" --data type=artist,track https://api.spotify.com/v1/search/ \
 | 
					 | 
				
			||||||
    | grep -E -o "spotify:track:[a-zA-Z0-9]+" -m 1 \
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  sp-open $SPTFY_URI
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function sp-version {
 | 
					 | 
				
			||||||
  # Prints version information.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  echo "sp $SP_VERSION"
 | 
					 | 
				
			||||||
  echo "Copyright (C) 2013 Wander Nauta"
 | 
					 | 
				
			||||||
  echo "License MIT"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 'SIMPLE' (DBUS-ALIAS) COMMANDS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
alias sp-play="  sp-dbus PlayPause"
 | 
					 | 
				
			||||||
alias sp-pause=" sp-dbus Pause"
 | 
					 | 
				
			||||||
alias sp-next="  sp-dbus Next"
 | 
					 | 
				
			||||||
alias sp-prev="  sp-dbus Previous"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# DISPATCHER
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# First, we connect to the dbus session spotify is on. This isn't really needed
 | 
					 | 
				
			||||||
# when running locally, but is crucial when we don't have an X display handy
 | 
					 | 
				
			||||||
# (for instance, when running sp over ssh.)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SPOTIFY_PID="$(pidof -s spotify)"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -z "$SPOTIFY_PID" ]]; then
 | 
					 | 
				
			||||||
  echo "Spotify is not running."
 | 
					 | 
				
			||||||
  exit 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QUERY_ENVIRON="$(cat /proc/${SPOTIFY_PID}/environ | tr '\0' '\n' | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
 | 
					 | 
				
			||||||
if [[ "${QUERY_ENVIRON}" != "" ]]; then
 | 
					 | 
				
			||||||
  export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Then we dispatch the command.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
subcommand="$1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -z "$subcommand" ]]; then
 | 
					 | 
				
			||||||
  # No arguments given, print help.
 | 
					 | 
				
			||||||
  sp-help
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
  # Arguments given, check if it's a command.
 | 
					 | 
				
			||||||
  if $(type sp-$subcommand > /dev/null 2> /dev/null); then
 | 
					 | 
				
			||||||
    # It is. Run it.
 | 
					 | 
				
			||||||
    shift
 | 
					 | 
				
			||||||
    eval "sp-$subcommand $@"
 | 
					 | 
				
			||||||
  else
 | 
					 | 
				
			||||||
    # It's not. Try a search.
 | 
					 | 
				
			||||||
    eval "sp-search $@"
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Copyright (C) 2013 Wander Nauta
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software, to deal in the Software without restriction, including
 | 
					 | 
				
			||||||
# without limitation the rights to use, copy, modify, merge, publish,
 | 
					 | 
				
			||||||
# distribute, sublicense, and/or sell copies of the Software, and to permit
 | 
					 | 
				
			||||||
# persons to whom the Software is furnished to do so, subject to the following
 | 
					 | 
				
			||||||
# conditions:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in
 | 
					 | 
				
			||||||
# all copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The software is provided "as is", without warranty of any kind, express or
 | 
					 | 
				
			||||||
# implied, including but not limited to the warranties of merchantability,
 | 
					 | 
				
			||||||
# fitness for a particular purpose and noninfringement. In no event shall the
 | 
					 | 
				
			||||||
# authors or copyright holders be liable for any claim, damages or other
 | 
					 | 
				
			||||||
# liability, whether in an action of contract, tort or otherwise, arising from,
 | 
					 | 
				
			||||||
# out of or in connection with the software or the use or other dealings in the
 | 
					 | 
				
			||||||
# software.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user