diff --git a/configs/lua/autoformat.lua b/configs/lua/autoformat.lua deleted file mode 100644 index d8107b4..0000000 --- a/configs/lua/autoformat.lua +++ /dev/null @@ -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" - } - } -} diff --git a/configs/nvim/lua/.pnpm-debug.log b/configs/nvim/lua/.pnpm-debug.log deleted file mode 100644 index cdd38b9..0000000 --- a/configs/nvim/lua/.pnpm-debug.log +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/configs/sway/toggle_layout.sh b/configs/sway/toggle_layout.sh index 7531d78..54923dc 100755 --- a/configs/sway/toggle_layout.sh +++ b/configs/sway/toggle_layout.sh @@ -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; - diff --git a/configs/waybar/config b/configs/waybar/config index 72002c0..7c4673a 100644 --- a/configs/waybar/config +++ b/configs/waybar/config @@ -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, diff --git a/configs/waybar/launch.sh b/configs/waybar/dev.sh similarity index 100% rename from configs/waybar/launch.sh rename to configs/waybar/dev.sh diff --git a/configs/waybar/media.log b/configs/waybar/media.log new file mode 100644 index 0000000..b226144 --- /dev/null +++ b/configs/waybar/media.log @@ -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} diff --git a/configs/waybar/mediaplayer.py b/configs/waybar/mediaplayer.py index 1c98fa0..5ed81db 100755 --- a/configs/waybar/mediaplayer.py +++ b/configs/waybar/mediaplayer.py @@ -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() diff --git a/configs/waybar/mediaplayer_old.py b/configs/waybar/mediaplayer_old.py new file mode 100755 index 0000000..53c3748 --- /dev/null +++ b/configs/waybar/mediaplayer_old.py @@ -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() diff --git a/configs/waybar/output.mp3 b/configs/waybar/output.mp3 new file mode 100644 index 0000000..2e56733 Binary files /dev/null and b/configs/waybar/output.mp3 differ diff --git a/configs/waybar/song.json b/configs/waybar/song.json deleted file mode 100644 index 5c07add..0000000 --- a/configs/waybar/song.json +++ /dev/null @@ -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" - } - } -}