fix(waybar): toggle layout
This commit is contained in:
parent
8c268e14b5
commit
9ff1e7ab52
@ -1,46 +0,0 @@
|
||||
require "format".setup {
|
||||
["*"] = {
|
||||
{cmd = {"sed -i 's/[ \t]*$//'"}} -- remove trailing whitespace
|
||||
},
|
||||
vim = {
|
||||
{
|
||||
cmd = {"luafmt -w replace"},
|
||||
start_pattern = "^lua << EOF$",
|
||||
end_pattern = "^EOF$"
|
||||
}
|
||||
},
|
||||
vimwiki = {
|
||||
{
|
||||
cmd = {"prettier -w --parser babel"},
|
||||
start_pattern = "^{{{javascript$",
|
||||
end_pattern = "^}}}$"
|
||||
}
|
||||
},
|
||||
lua = {
|
||||
{
|
||||
cmd = {
|
||||
function(file)
|
||||
return string.format("luafmt -l %s -w replace %s", vim.bo.textwidth, file)
|
||||
end
|
||||
}
|
||||
}
|
||||
},
|
||||
go = {
|
||||
{
|
||||
cmd = {"gofmt -w", "goimports -w"},
|
||||
tempfile_postfix = ".tmp"
|
||||
}
|
||||
},
|
||||
javascript = {
|
||||
{cmd = {"prettier -w", "./node_modules/.bin/eslint --fix"}}
|
||||
},
|
||||
markdown = {
|
||||
{cmd = {"prettier -w"}},
|
||||
{
|
||||
cmd = {"black"},
|
||||
start_pattern = "^```python$",
|
||||
end_pattern = "^```$",
|
||||
target = "current"
|
||||
}
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
{
|
||||
"0 debug pnpm:scope": {
|
||||
"selected": 1
|
||||
},
|
||||
"1 error pnpm": {
|
||||
"code": "ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND",
|
||||
"err": {
|
||||
"name": "pnpm",
|
||||
"message": "No package.json (or package.yaml, or package.json5) was found in \"/home/jim/.dotfiles/configs/nvim/lua\".",
|
||||
"code": "ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND",
|
||||
"stack": "pnpm: No package.json (or package.yaml, or package.json5) was found in \"/home/jim/.dotfiles/configs/nvim/lua\".\n at readProjectManifest (/home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:40641:13)\n at async Object.readProjectManifestOnly (/home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:40645:28)\n at async Object.readProjectManifestOnly (/home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:40864:24)\n at async Object.handler (/home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:129763:24)\n at async /home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:133951:20\n at async run (/home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:133926:34)\n at async runPnpm (/home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:134137:5)\n at async /home/jim/.asdf/installs/nodejs/16.11.0/pnpm-global/5/node_modules/.pnpm/pnpm@6.17.2/node_modules/pnpm/dist/pnpm.cjs:134129:7"
|
||||
}
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
|
||||
WORKSPACE=$(swaymsg -t get_workspaces --raw | jq '.[] | select(.focused == true)')
|
||||
|
||||
WORKSPACE_ID=$(echo $WORKSPACE | jq ".name")
|
||||
WORKSPACE_ID=$(echo $WORKSPACE | jq ".name" | tr -d '"')
|
||||
WORKSPACE_MODE=$(echo $WORKSPACE | jq ".layout");
|
||||
|
||||
MODE_SPLITH='"splith"'
|
||||
@ -10,17 +10,16 @@ MODE_SPLITV='"splitv"'
|
||||
MODE_TABBED='"tabbed"'
|
||||
MODE_STACKED='"stacked"'
|
||||
|
||||
echo $WORKSPACE_MODE
|
||||
function set_layout(){
|
||||
swaymsg "workspace $(swaymsg -t get_workspaces --raw | jq '.[] | select(.focused == true) .name'); layout $1"
|
||||
}
|
||||
|
||||
if [ $WORKSPACE_MODE = $MODE_SPLITH ]; then
|
||||
swaymsg "workspace $WORKSPACE_ID; layout splitv"
|
||||
set_layout splitv
|
||||
elif [ $WORKSPACE_MODE = $MODE_SPLITV ]; then
|
||||
swaymsg "workspace $WORKSPACE_ID; layout tabbed"
|
||||
set_layout tabbed
|
||||
elif [ $WORKSPACE_MODE = $MODE_TABBED ]; then
|
||||
swaymsg "workspace $WORKSPACE_ID; layout stacking"
|
||||
set_layout stacking
|
||||
elif [ $WORKSPACE_MODE = $MODE_STACKED ]; then
|
||||
swaymsg "workspace $WORKSPACE_ID; layout splith"
|
||||
set_layout splith
|
||||
fi
|
||||
|
||||
echo $WORKSPACE_ID;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"height": 20,
|
||||
"spacing": 4,
|
||||
"modules-left": ["sway/workspaces", "sway/mode", "custom/media"],
|
||||
"modules-center": ["custom/spotify"],
|
||||
"modules-left": ["sway/workspaces", "sway/mode"],
|
||||
"modules-center": ["custom/media"],
|
||||
"modules-right": ["pulseaudio", "network", "cpu", "memory", "battery", "custom/clock" ],
|
||||
"sway/workspaces": {
|
||||
"disable-scroll": true,
|
||||
|
88
configs/waybar/media.log
Normal file
88
configs/waybar/media.log
Normal file
@ -0,0 +1,88 @@
|
||||
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Received signal to stop, exiting
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Received signal to stop, exiting
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Received signal to stop, exiting
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': 'spotify'}
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': 'spotify'}
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Received signal to stop, exiting
|
||||
__main__ DEBUG Received signal to stop, exiting
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': 'spotify'}
|
||||
__main__ DEBUG Initialize player: chromium
|
||||
__main__ DEBUG New player appeared, but it's not the selected player, skipping
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': 'spotify'}
|
||||
__main__ DEBUG Initialize player: chromium
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ DEBUG chromium is not the filtered player, skipping it
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Initialize player: chromium
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
||||
__main__ DEBUG Initialize player: chromium
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new playback status
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ INFO Received new metadata
|
||||
__main__ INFO Writing output
|
||||
__main__ DEBUG Received signal to stop, exiting
|
||||
__main__ DEBUG Arguments received {'verbose': 0, 'player': None}
|
@ -3,23 +3,21 @@ import argparse
|
||||
import logging
|
||||
import sys
|
||||
import signal
|
||||
import time
|
||||
import gi
|
||||
import json
|
||||
from os.path import expanduser
|
||||
gi.require_version('Playerctl', '2.0')
|
||||
from gi.repository import Playerctl, GLib
|
||||
import subprocess
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
playerVisible = False
|
||||
|
||||
def write_output(text, player_name):
|
||||
def write_output(text, player):
|
||||
logger.info('Writing output')
|
||||
|
||||
output = {'text': text.replace("&", "&"),
|
||||
'class': 'custom-' + player_name,
|
||||
'alt': player_name}
|
||||
output = {'text': text.replace("\n", " ").strip(),
|
||||
'class': 'custom-' + player.props.player_name,
|
||||
'alt': player.props.player_name}
|
||||
|
||||
sys.stdout.write(json.dumps(output) + '\n')
|
||||
sys.stdout.flush()
|
||||
@ -46,32 +44,18 @@ def on_metadata(player, metadata, manager):
|
||||
|
||||
if player.props.status != 'Playing' and track_info:
|
||||
track_info = ' ' + track_info
|
||||
write_output(track_info, player.props.player_name)
|
||||
write_output(track_info, player)
|
||||
|
||||
|
||||
def update_song():
|
||||
global playerVisible
|
||||
while not playerVisible:
|
||||
result = subprocess.run("./capture_mp3.sh",stdout=subprocess.PIPE)
|
||||
resultString = result.stdout.decode("utf-8")
|
||||
print(resultString);
|
||||
write_output(resultString, "Spotify")
|
||||
time.sleep(6)
|
||||
|
||||
def on_player_appeared(manager, player, selected_player=None):
|
||||
global playerVisible
|
||||
if player is not None and (selected_player is None or player.name == selected_player):
|
||||
playerVisible = True
|
||||
init_player(manager, player)
|
||||
else:
|
||||
logger.debug("New player appeared, but it's not the selected player, skipping")
|
||||
|
||||
|
||||
def on_player_vanished(manager, player):
|
||||
global playerVisible
|
||||
logger.info('Player has vanished')
|
||||
playerVisible = False
|
||||
update_song()
|
||||
sys.stdout.write('\n')
|
||||
sys.stdout.flush()
|
||||
|
||||
@ -81,7 +65,6 @@ def init_player(manager, name):
|
||||
player = Playerctl.Player.new_from_name(name)
|
||||
player.connect('playback-status', on_play, manager)
|
||||
player.connect('metadata', on_metadata, manager)
|
||||
update_song()
|
||||
manager.manage_player(player)
|
||||
on_metadata(player, player.props.metadata, manager)
|
||||
|
||||
@ -90,7 +73,7 @@ def signal_handler(sig, frame):
|
||||
logger.debug('Received signal to stop, exiting')
|
||||
sys.stdout.write('\n')
|
||||
sys.stdout.flush()
|
||||
loop.quit()
|
||||
# loop.quit()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
@ -107,11 +90,11 @@ def parse_arguments():
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
arguments = parse_arguments()
|
||||
|
||||
# Initialize logging
|
||||
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG,
|
||||
LOG=expanduser("~")+"/.dotfiles/configs/waybar/media.log"
|
||||
logging.basicConfig(level=logging.DEBUG, filename=LOG,
|
||||
format='%(name)s %(levelname)s %(message)s')
|
||||
|
||||
# Logging is set by default to WARN and higher.
|
||||
@ -140,8 +123,8 @@ def main():
|
||||
|
||||
init_player(manager, player)
|
||||
|
||||
update_song()
|
||||
loop.run()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
146
configs/waybar/mediaplayer_old.py
Executable file
146
configs/waybar/mediaplayer_old.py
Executable file
@ -0,0 +1,146 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import logging
|
||||
import sys
|
||||
import signal
|
||||
import time
|
||||
import gi
|
||||
import json
|
||||
gi.require_version('Playerctl', '2.0')
|
||||
from gi.repository import Playerctl, GLib
|
||||
import subprocess
|
||||
from os.path import expanduser
|
||||
home = expanduser("~")
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
playerVisible = False
|
||||
|
||||
def write_output(text, player_name):
|
||||
logger.info('Writing output')
|
||||
|
||||
output = {'text': text.replace("&", "&"),
|
||||
'class': 'custom-' + player_name,
|
||||
'alt': player_name}
|
||||
|
||||
sys.stdout.write(json.dumps(output) + '\n')
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
def on_play(player, status, manager):
|
||||
logger.info('Received new playback status')
|
||||
on_metadata(player, player.props.metadata, manager)
|
||||
|
||||
def on_metadata(player, metadata, manager):
|
||||
logger.info('Received new metadata')
|
||||
track_info = ''
|
||||
|
||||
if player.props.player_name == 'spotify' and \
|
||||
'mpris:trackid' in metadata.keys() and \
|
||||
':ad:' in player.props.metadata['mpris:trackid']:
|
||||
track_info = 'AD PLAYING'
|
||||
elif player.get_artist() != '' and player.get_title() != '':
|
||||
track_info = '{artist} - {title}'.format(artist=player.get_artist(),
|
||||
title=player.get_title())
|
||||
else:
|
||||
track_info = player.get_title()
|
||||
|
||||
if player.props.status != 'Playing' and track_info:
|
||||
track_info = ' ' + track_info
|
||||
write_output(track_info, player.props.player_name)
|
||||
|
||||
|
||||
def update_song():
|
||||
global playerVisible
|
||||
while not playerVisible:
|
||||
result = subprocess.run("./capture_mp3.sh",stdout=subprocess.PIPE)
|
||||
resultString = result.stdout.decode("utf-8")
|
||||
logger.debug(resultString);
|
||||
write_output(resultString, "Spotify")
|
||||
time.sleep(6)
|
||||
|
||||
def on_player_appeared(manager, player, selected_player=None):
|
||||
global playerVisible
|
||||
if player is not None and (selected_player is None or player.name == selected_player):
|
||||
playerVisible = True
|
||||
init_player(manager, player)
|
||||
else:
|
||||
logger.debug("New player appeared, but it's not the selected player, skipping")
|
||||
|
||||
|
||||
def on_player_vanished(manager, player):
|
||||
global playerVisible
|
||||
logger.info('Player has vanished')
|
||||
playerVisible = False
|
||||
update_song()
|
||||
sys.stdout.write('\n')
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
def init_player(manager, name):
|
||||
logger.debug('Initialize player: {player}'.format(player=name.name))
|
||||
player = Playerctl.Player.new_from_name(name)
|
||||
player.connect('playback-status', on_play, manager)
|
||||
player.connect('metadata', on_metadata, manager)
|
||||
update_song()
|
||||
manager.manage_player(player)
|
||||
on_metadata(player, player.props.metadata, manager)
|
||||
|
||||
|
||||
def signal_handler(sig, frame):
|
||||
logger.debug('Received signal to stop, exiting')
|
||||
sys.stdout.write('\n')
|
||||
sys.stdout.flush()
|
||||
loop.quit()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def parse_arguments():
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
# Increase verbosity with every occurrence of -v
|
||||
parser.add_argument('-v', '--verbose', action='count', default=0)
|
||||
|
||||
# Define for which player we're listening
|
||||
parser.add_argument('--player')
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
arguments = parse_arguments()
|
||||
|
||||
# Initialize logging
|
||||
LOG = home+"/.dotfiles/configs/waybar/media.log" logger.setLevel(max((3 - arguments.verbose) * 10, 0))
|
||||
logging.basicConfig(stream=sys.stderr, filename=LOG, level=logging.DEBUG,
|
||||
format='%(name)s %(levelname)s %(message)s')
|
||||
|
||||
logger.setLevel(0)
|
||||
|
||||
# Log the sent command line arguments
|
||||
logger.debug('Arguments received {}'.format(vars(arguments)))
|
||||
|
||||
manager = Playerctl.PlayerManager()
|
||||
loop = GLib.MainLoop()
|
||||
|
||||
manager.connect('name-appeared', lambda *args: on_player_appeared(*args, arguments.player))
|
||||
manager.connect('player-vanished', on_player_vanished)
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
for player in manager.props.player_names:
|
||||
if arguments.player is not None and arguments.player != player.name:
|
||||
logger.debug('{player} is not the filtered player, skipping it'
|
||||
.format(player=player.name)
|
||||
)
|
||||
continue
|
||||
|
||||
init_player(manager, player)
|
||||
|
||||
update_song()
|
||||
loop.run()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
BIN
configs/waybar/output.mp3
Normal file
BIN
configs/waybar/output.mp3
Normal file
Binary file not shown.
@ -1,249 +0,0 @@
|
||||
{
|
||||
"location": {
|
||||
"altitude": 300.0,
|
||||
"latitude": 45.0,
|
||||
"longitude": 2.0
|
||||
},
|
||||
"matches": [
|
||||
{
|
||||
"channel": "0",
|
||||
"frequencyskew": 0.00008058548,
|
||||
"id": "341270538",
|
||||
"offset": 148.84515625,
|
||||
"timeskew": -0.0023667216
|
||||
}
|
||||
],
|
||||
"tagid": "68982327-bef9-4ff3-a426-7fea39f7997f",
|
||||
"timestamp": 95912955,
|
||||
"timezone": "Europe/Paris",
|
||||
"track": {
|
||||
"albumadamid": "1477092467",
|
||||
"artists": [
|
||||
{
|
||||
"adamid": "827504058",
|
||||
"id": "44445618"
|
||||
}
|
||||
],
|
||||
"genres": {
|
||||
"primary": "Alternative"
|
||||
},
|
||||
"highlightsurls": {
|
||||
"artisthighlightsurl": "https://cdn.shazam.com/video/v3/en/US/android/827504058/highlights?affiliate=mttnagencyid%3D769459046716559743%26mttnsiteid%3D125115%26mttn3pid%3Da_custom_779816081798873874%26mttnsub1%3DShazam_android_am%26mttnsub2%3D5348615A-616D-3235-3830-44754D6D5973%26itscg%3D30201%26app%3Dmusic%26itsct%3DShazam_android_am",
|
||||
"relatedhighlightsurl": "https://cdn.shazam.com/video/v3/en/US/android/44445618/artist-similarities-id-44445618/relatedhighlights?max_artists=5&affiliate=mttnagencyid%3D769459046716559743%26mttnsiteid%3D125115%26mttn3pid%3Da_custom_779816081798873874%26mttnsub1%3DShazam_android_am%26mttnsub2%3D5348615A-616D-3235-3830-44754D6D5973%26itscg%3D30201%26app%3Dmusic%26itsct%3DShazam_android_am"
|
||||
},
|
||||
"hub": {
|
||||
"actions": [
|
||||
{
|
||||
"id": "1477092472",
|
||||
"name": "apple",
|
||||
"type": "applemusicplay"
|
||||
},
|
||||
{
|
||||
"name": "apple",
|
||||
"type": "uri",
|
||||
"uri": "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/17/c4/ff/17c4ff80-8823-5ce9-fa5a-0c1892129e3b/mzaf_15603304596709002890.plus.aac.ep.m4a"
|
||||
}
|
||||
],
|
||||
"displayname": "APPLE MUSIC",
|
||||
"explicit": false,
|
||||
"image": "https://images.shazam.com/static/icons/hub/android/v5/applemusic_{scalefactor}.png",
|
||||
"options": [
|
||||
{
|
||||
"actions": [
|
||||
{
|
||||
"name": "hub:applemusic:deeplink",
|
||||
"type": "intent",
|
||||
"uri": "intent://music.apple.com/us/album/nothings-older-than-yesterday/1477092467?i=1477092472&mttnagencyid=769459046716559743&mttnsiteid=125115&mttn3pid=a_custom_779816081798873874&mttnsub1=Shazam_android_am&mttnsub2=5348615A-616D-3235-3830-44754D6D5973&itscg=30201&app=music&itsct=Shazam_android_am#Intent;scheme=http;package=com.apple.android.music;action=android.intent.action.VIEW;end"
|
||||
},
|
||||
{
|
||||
"id": "1477092472",
|
||||
"name": "hub:applemusic:connect",
|
||||
"type": "applemusicconnect",
|
||||
"uri": "https://unsupported.shazam.com"
|
||||
},
|
||||
{
|
||||
"name": "hub:applemusic:androidstore",
|
||||
"type": "uri",
|
||||
"uri": "https://play.google.com/store/apps/details?id=com.apple.android.music&referrer=utm_source=https%3A%2F%2Fmusic.apple.com%2Fsubscribe%3Fmttnagencyid%3D769459046716559743%26mttnsiteid%3D125115%26mttn3pid%3Da_custom_779816081798873874%26mttnsub1%3DShazam_android_am%26mttnsub2%3D5348615A-616D-3235-3830-44754D6D5973%26itscg%3D30201%26app%3Dmusic%26itsct%3DShazam_android_am"
|
||||
}
|
||||
],
|
||||
"beacondata": {
|
||||
"providername": "applemusic",
|
||||
"type": "open"
|
||||
},
|
||||
"caption": "OPEN",
|
||||
"colouroverflowimage": false,
|
||||
"image": "https://images.shazam.com/static/icons/hub/android/v5/overflow-open-option_{scalefactor}.png",
|
||||
"listcaption": "Open in Apple Music",
|
||||
"overflowimage": "https://images.shazam.com/static/icons/hub/android/v5/applemusic-overflow_{scalefactor}.png",
|
||||
"providername": "applemusic",
|
||||
"type": "open"
|
||||
}
|
||||
],
|
||||
"providers": [
|
||||
{
|
||||
"actions": [
|
||||
{
|
||||
"name": "hub:spotify:searchdeeplink",
|
||||
"type": "uri",
|
||||
"uri": "spotify:search:Nothing%27s%20Older%20Than%20Yesterday%20Cari%20Cari"
|
||||
}
|
||||
],
|
||||
"caption": "Open in Spotify",
|
||||
"images": {
|
||||
"default": "https://images.shazam.com/static/icons/hub/android/v5/spotify_{scalefactor}.png",
|
||||
"overflow": "https://images.shazam.com/static/icons/hub/android/v5/spotify-overflow_{scalefactor}.png"
|
||||
},
|
||||
"type": "SPOTIFY"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
{
|
||||
"name": "hub:youtubemusic:androiddeeplink",
|
||||
"type": "uri",
|
||||
"uri": "https://music.youtube.com/search?q=Nothings+Older+Than+Yesterday+Cari+Cari&feature=shazam"
|
||||
}
|
||||
],
|
||||
"caption": "Open in YouTube Music",
|
||||
"images": {
|
||||
"default": "https://images.shazam.com/static/icons/hub/android/v5/youtubemusic_{scalefactor}.png",
|
||||
"overflow": "https://images.shazam.com/static/icons/hub/android/v5/youtubemusic-overflow_{scalefactor}.png"
|
||||
},
|
||||
"type": "YOUTUBEMUSIC"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
{
|
||||
"name": "hub:deezer:searchdeeplink",
|
||||
"type": "uri",
|
||||
"uri": "deezer-query://www.deezer.com/play?query=%7Btrack%3A%27Nothing%5C%27s+Older+Than+Yesterday%27%20artist%3A%27Cari+Cari%27%7D"
|
||||
}
|
||||
],
|
||||
"caption": "Open in Deezer",
|
||||
"images": {
|
||||
"default": "https://images.shazam.com/static/icons/hub/android/v5/deezer_{scalefactor}.png",
|
||||
"overflow": "https://images.shazam.com/static/icons/hub/android/v5/deezer-overflow_{scalefactor}.png"
|
||||
},
|
||||
"type": "DEEZER"
|
||||
}
|
||||
],
|
||||
"type": "APPLEMUSIC"
|
||||
},
|
||||
"images": {
|
||||
"background": "https://is3-ssl.mzstatic.com/image/thumb/Music114/v4/62/5c/d7/625cd78a-6d55-3128-1a55-894d244800c9/pr_source.png/800x800cc.jpg",
|
||||
"coverart": "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/b8/c5/3c/b8c53c9c-489f-3bec-1b25-c232368a1fac/rls00069784.jpg/400x400cc.jpg",
|
||||
"coverarthq": "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/b8/c5/3c/b8c53c9c-489f-3bec-1b25-c232368a1fac/rls00069784.jpg/400x400cc.jpg",
|
||||
"joecolor": "b:031827p:fdf0dfs:f7831et:cbc5baq:c66e1f"
|
||||
},
|
||||
"isrc": "ATT801713001",
|
||||
"key": "341270538",
|
||||
"layout": "5",
|
||||
"relatedtracksurl": "https://cdn.shazam.com/shazam/v3/en/US/android/-/tracks/track-similarities-id-341270538?startFrom=0&pageSize=20&connected=",
|
||||
"sections": [
|
||||
{
|
||||
"metadata": [
|
||||
{
|
||||
"text": "Anaana",
|
||||
"title": "Album"
|
||||
},
|
||||
{
|
||||
"text": "recordJet",
|
||||
"title": "Label"
|
||||
},
|
||||
{
|
||||
"text": "2017",
|
||||
"title": "Released"
|
||||
}
|
||||
],
|
||||
"metapages": [
|
||||
{
|
||||
"caption": "Cari Cari",
|
||||
"image": "https://is3-ssl.mzstatic.com/image/thumb/Music114/v4/62/5c/d7/625cd78a-6d55-3128-1a55-894d244800c9/pr_source.png/800x800cc.jpg"
|
||||
},
|
||||
{
|
||||
"caption": "Nothing's Older Than Yesterday",
|
||||
"image": "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/b8/c5/3c/b8c53c9c-489f-3bec-1b25-c232368a1fac/rls00069784.jpg/400x400cc.jpg"
|
||||
}
|
||||
],
|
||||
"tabname": "Song",
|
||||
"type": "SONG"
|
||||
},
|
||||
{
|
||||
"beacondata": {
|
||||
"commontrackid": "70387093",
|
||||
"lyricsid": "19307144",
|
||||
"providername": "musixmatch"
|
||||
},
|
||||
"footer": "Writer(s): Stephanie Widmer, Alexander Koeck
|
||||
Lyrics powered by www.musixmatch.com",
|
||||
"tabname": "Lyrics",
|
||||
"text": [
|
||||
"Waves are rolling on the beach",
|
||||
"Sunlight is striking through the trees",
|
||||
"Heads up, don't look back",
|
||||
"On the coast of Jamaica, there ain't no looking back",
|
||||
"",
|
||||
"Move, nothing's older than yesterday",
|
||||
"'Cause we're riding, it's just the streets and you and me",
|
||||
"Heads up, don't look back!",
|
||||
"On the streets of Tokyo, no looking back",
|
||||
"C'mon baby, we can stay up all night",
|
||||
"I stay here till sunrise",
|
||||
"Come on, don't miss this ride"
|
||||
],
|
||||
"type": "LYRICS",
|
||||
"url": "https://cdn.shazam.com/lyrics/v1/en/US/android/musixmatch/subtitles/70387093/202/1?token=d3fe124c5cfcec867f24caddbb4fb700"
|
||||
},
|
||||
{
|
||||
"tabname": "Video",
|
||||
"type": "VIDEO",
|
||||
"youtubeurl": "https://cdn.shazam.com/video/v3/-/US/android/341270538/youtube/video?q=Cari+Cari+%22Nothing's+Older+Than+Yesterday%22&c=UCiL526VL2ZWT9pUuUQP52uw"
|
||||
},
|
||||
{
|
||||
"actions": [
|
||||
{
|
||||
"id": "44445618",
|
||||
"type": "artistposts"
|
||||
},
|
||||
{
|
||||
"id": "44445618",
|
||||
"type": "artist"
|
||||
}
|
||||
],
|
||||
"avatar": "https://is3-ssl.mzstatic.com/image/thumb/Music114/v4/62/5c/d7/625cd78a-6d55-3128-1a55-894d244800c9/pr_source.png/800x800cc.jpg",
|
||||
"id": "44445618",
|
||||
"name": "Cari Cari",
|
||||
"tabname": "Artist",
|
||||
"toptracks": {
|
||||
"url": "https://cdn.shazam.com/shazam/v3/en/US/android/-/tracks/artisttoptracks_44445618?startFrom=0&pageSize=20&connected="
|
||||
},
|
||||
"type": "ARTIST",
|
||||
"url": "https://cdn.shazam.com/digest/v1/en/US/android/artist/44445618/recentpost",
|
||||
"verified": false
|
||||
},
|
||||
{
|
||||
"tabname": "Related",
|
||||
"type": "RELATED",
|
||||
"url": "https://cdn.shazam.com/shazam/v3/en/US/android/-/tracks/track-similarities-id-341270538?startFrom=0&pageSize=20&connected="
|
||||
}
|
||||
],
|
||||
"share": {
|
||||
"avatar": "https://is3-ssl.mzstatic.com/image/thumb/Music114/v4/62/5c/d7/625cd78a-6d55-3128-1a55-894d244800c9/pr_source.png/800x800cc.jpg",
|
||||
"href": "https://www.shazam.com/track/341270538/nothings-older-than-yesterday",
|
||||
"html": "https://www.shazam.com/snippets/email-share/341270538?lang=en&country=US",
|
||||
"image": "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/b8/c5/3c/b8c53c9c-489f-3bec-1b25-c232368a1fac/rls00069784.jpg/400x400cc.jpg",
|
||||
"snapchat": "https://www.shazam.com/partner/sc/track/341270538",
|
||||
"subject": "Nothing's Older Than Yesterday - Cari Cari",
|
||||
"text": "I used Shazam to discover Nothing's Older Than Yesterday by Cari Cari.",
|
||||
"twitter": "I used @Shazam to discover Nothing's Older Than Yesterday by Cari Cari."
|
||||
},
|
||||
"subtitle": "Cari Cari",
|
||||
"title": "Nothing's Older Than Yesterday",
|
||||
"type": "MUSIC",
|
||||
"url": "https://www.shazam.com/track/341270538/nothings-older-than-yesterday",
|
||||
"urlparams": {
|
||||
"{trackartist}": "Cari+Cari",
|
||||
"{tracktitle}": "Nothing%27s+Older+Than+Yesterday"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user