diff --git a/catbox.py b/catbox.py
index e8a01cf..53e0423 100644
--- a/catbox.py
+++ b/catbox.py
@@ -19,9 +19,7 @@ HEADERS = {
class Catbox:
-
def generateRandomFileName(self, fileExt=""):
-
if len(fileExt) < 1:
fileExt = "db"
diff --git a/discord_presence.py b/discord_presence.py
index b1ede33..a58e288 100644
--- a/discord_presence.py
+++ b/discord_presence.py
@@ -1,17 +1,22 @@
-#!/usr/bin/env python3.12
+#!/usr/bin/env python3.13
import time
import traceback
import requests
import dbus
import re
+import sys
+import os
import random
import discord_presence_priv
import catbox
+import logging
+from ff_brotab import query_ff
from setproctitle import setproctitle
from typing import Optional
from pypresence import Presence, ActivityType
+
setproctitle("disc-presence")
@@ -49,19 +54,23 @@ class DBus:
"elapsed": None,
"duration": None,
}
- except:
- pass
+ except Exception as e:
+ logging.debug("Exception: %s", str(e))
def is_plexing(self) -> bool:
try:
self.interface_metadata = self.player_interface.GetAll(
"org.mpris.MediaPlayer2.Player"
).get("Metadata")
- if "app.plex.tv" in self.interface_metadata.get("xesam:url"):
+ if self.interface_metadata and "app.plex.tv" in self.interface_metadata.get(
+ "xesam:url"
+ ):
return True
- print(f"WTF, NO PLEX?")
- except:
- print(traceback.format_exc())
+ logging.debug("Plex not found")
+ return False
+ except Exception as e:
+ logging.debug("Exception: %s", str(e))
+ traceback.print_exc()
return False
def get_now_playing(self):
@@ -115,15 +124,17 @@ class DBus:
"elapsed": None,
"duration": None,
}
- print(traceback.format_exc())
+ traceback.print_exc()
return False
class DiscordPresence:
def __init__(self):
self.dbus = DBus()
+ self.radio_station = None
self.last_updated = None
self.last_track = None
+ self.last_track_title = None
self.client_id = discord_presence_priv.CLIENT_ID
self.client_id_plex = discord_presence_priv.CLIENT_ID_PLEX
self.api_key = discord_presence_priv.API_KEY
@@ -212,8 +223,17 @@ class DiscordPresence:
time.sleep(1)
continue
+ ff_brotab = query_ff()
+ if ff_brotab:
+ (station, _track) = ff_brotab
+ self.radio_station = station
+ if self.last_track_title == _track.strip():
+ continue
+ else:
+ self.last_track_title = _track.strip()
+
request = requests.post(
- f"{self.api_url}/radio/np",
+ f"{self.api_url}/radio/np?station={self.radio_station}",
headers={"content-type": "application/json; charset=utf-8"},
timeout=(2, 10),
)
@@ -230,60 +250,9 @@ class DiscordPresence:
end_time = data.get("end")
if self.last_uuid == track_uuid:
+ print("Track has not changed")
continue
- # if self.last_updated and (now - self.last_updated < 15):
- # time.sleep(0.7)
- # continue
-
- # if self.last_track and self.last_track == track:
- # lyr_start_idx = lyr_end_idx
- # lyr_end_idx += 1
- # elif self.last_track:
- # lyr_start_idx = 0
- # lyr_end_idx = 1
-
- # try:
- # # rand_msg_request = requests.post(f'{self.api_url}/randmsg/',
- # # headers={
- # # 'content-type': 'application/json; charset=utf-8'
- # # }, json={
- # # 'short': True,
- # # }, timeout=(1, 2))
- # # rand_msg = rand_msg_request.json().get('msg').strip()
- # # rand_msg = re.sub(r'(|)', '', re.sub(r'(
|
|
|\n|\r\n)', ' ', rand_msg))
- # # if len(rand_msg) > 126:
- # # rand_msg = None
-
- # if not self.last_track or not self.last_track == track:
- # lyrics = requests.post(f'{self.api_url}/lyric/search',
- # headers={
- # 'content-type': 'application/json; charset=utf-8',
- # },
- # json={
- # 'a': track_artist,
- # 's': track_title,
- # 'src': 'WEB-RADIO',
- # }, timeout=(2,10))
- # lyrics.raise_for_status()
- # lyrics_content = lyrics.json().get("lyrics")
-
- # lyrics_current_iteration = " / ".join(lyrics_content.split("
")[lyr_start_idx:lyr_end_idx]).strip()
- # if not lyrics_current_iteration.strip():
- # lyr_start_idx = 0
- # lyr_end_idx = 1
-
- # if len(lyrics_current_iteration) > 128:
- # lyrics_current_iteration = lyrics_current_iteration.split(" / ", maxsplit=1)[0].strip()
-
- # except:
- # try:
- # lyrics_current_iteration = " / ".join(lyrics_content.split("
")[0]).strip()
- # except:
- # lyrics_content = lyrics_current_iteration = None
- # print("FAILED TO GET RANDMSG/LYRICS")
- # print(traceback.format_exc())
-
self.last_updated = now
self.last_track = track
self.last_uuid = track_uuid
@@ -308,26 +277,18 @@ class DiscordPresence:
)
)
- # match chosen_image.get('image'):
- # case "rooster":
- # chosen_image = {
- # 'image': "qu",
- # 'label': "rubber duck :3"
- # }
- # case "qu":
- # chosen_image = {
- # 'image': "rooster",
- # 'label': ":3",
- # }
- except:
- print(traceback.format_exc())
+ except Exception as e:
+ logging.debug("Exception: %s", str(e))
+ traceback.print_exc()
time.sleep(0.7)
continue
- except:
- print(traceback.format_exc())
+ except Exception as e:
+ logging.debug("Exception: %s", str(e))
+ traceback.print_exc()
try:
self.loop()
- except:
+ except Exception as e:
+ logging.debug("Exception: %s", str(e))
pass
diff --git a/ff_brotab.py b/ff_brotab.py
new file mode 100644
index 0000000..083b7c4
--- /dev/null
+++ b/ff_brotab.py
@@ -0,0 +1,31 @@
+"""Radio Info (FF Tab Info Grabber)"""
+
+import subprocess
+import sys
+import logging
+import os
+
+logging.getLogger().setLevel(logging.DEBUG)
+bin_path = os.path.join(os.path.expanduser("~"), ".local", "bin", "bt")
+
+
+def query_ff() -> tuple[str, str] | None:
+ res: str | None = subprocess.check_output(
+ f"{bin_path} query -title 'CODEY STUFF*'", shell=True
+ ).decode() # Utilize brotab to get open tab info
+ if not res:
+ logging.debug("brotab: No matching (radio) tab found")
+ return None
+ tab_name = res.split("\t", maxsplit=1)[
+ 1
+ ] # Discard brotab output before first \t (tab character)
+ station = tab_name.split("[")[-1].split("]", maxsplit=1)[
+ 0
+ ] # Extract station from page title
+ track = tab_name.split(" - Radio - ")[1].split(f"[{station}]")[
+ 0
+ ] # Extract track from page title
+ return (station, track)
+
+
+print(query_ff())