Skip to content

Commit

Permalink
Added connection check
Browse files Browse the repository at this point in the history
  • Loading branch information
Hiumee committed Jul 3, 2020
1 parent d3c7b22 commit 59aeb04
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 65 deletions.
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<addon id="service.discord.richpresence"
name="Discord Rich Presence"
version="1.2.4"
version="1.2.5"
provider-name="Hiumee">
<requires>
<import addon="xbmc.python" version="2.25.0"/>
Expand Down
136 changes: 72 additions & 64 deletions default.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def __init__(self):
self.settings = {}
self.lastActivity = None
self.paused = True
self.connected = False

self.updateSettings()
self.clientId = self.settings['client_id']
Expand All @@ -26,14 +27,17 @@ def setPauseState(self, state):
self.paused = state

def connectToDiscord(self):
self.connected = False
while not self.presence:
try:
self.presence = discordpresence.DiscordIpcClient.for_platform(CLIENT_ID[self.clientId])
except Exception as e:
log("Could not connect to discord: "+str(e))
self.presence = None
monitor.waitForAbort(5)
# update every 5s just in case

self.connected = True
self.lastActivity = None
self.updatePresence()

Expand Down Expand Up @@ -147,80 +151,83 @@ def mainLoop(self):
log("Abort called. Exiting...")
break
self.updatePresence()
if self.presence:
if self.connected:
self.presence.close()

def updatePresence(self):
try:
if self.presence:
data = self.gatherData()

activity = None
#activity['assets'] = {'large_image' : 'default',
# 'large_text' : self.settings['large_text']}

if not data:
# no video playing
log("Setting default")
if self.settings['inmenu']:
activity = self.craftNoVideoState(data)
if self.connected:
data = self.gatherData()

activity = None
#activity['assets'] = {'large_image' : 'default',
# 'large_text' : self.settings['large_text']}

if not data:
# no video playing
log("Setting default")
if self.settings['inmenu']:
activity = self.craftNoVideoState(data)
else:
if data.getMediaType() == 'episode':
activity = self.craftEpisodeState(data)
elif data.getMediaType() == 'movie':
activity = self.craftMovieState(data)
elif data.getMediaType() == 'video':
activity = self.craftVideoState(data)
else:
if data.getMediaType() == 'episode':
activity = self.craftEpisodeState(data)
elif data.getMediaType() == 'movie':
activity = self.craftMovieState(data)
elif data.getMediaType() == 'video':
activity = self.craftVideoState(data)
else:
log("Unsupported media type: "+str(data.getMediaType()))

if self.paused:
activity['assets']['small_image'] = 'paused'
# Works for
# xx:xx/xx:xx
# xx:xx/xx:xx:xx
# xx:xx:xx/xx:xx:xx
currentTime = player.getTime()
hours = int(currentTime/3600)
minutes = int(currentTime/60) - hours*60
seconds = int(currentTime) - minutes*60 - hours*3600

fullTime = player.getTotalTime()
fhours = int(fullTime/3600)
fminutes = int(fullTime/60) - fhours*60
fseconds = int(fullTime) - fminutes*60 - fhours*3600
activity['assets']['small_text'] = "{}{:02}:{:02}/{}{:02}:{:02}".format('{}:'.format(hours) if hours>0 else '',
minutes,
seconds,
'{}:'.format(fhours) if fhours>0 else '',
fminutes,
fseconds
)
log("Unsupported media type: "+str(data.getMediaType()))

if self.paused:
activity['assets']['small_image'] = 'paused'
# Works for
# xx:xx/xx:xx
# xx:xx/xx:xx:xx
# xx:xx:xx/xx:xx:xx
currentTime = player.getTime()
hours = int(currentTime/3600)
minutes = int(currentTime/60) - hours*60
seconds = int(currentTime) - minutes*60 - hours*3600

fullTime = player.getTotalTime()
fhours = int(fullTime/3600)
fminutes = int(fullTime/60) - fhours*60
fseconds = int(fullTime) - fminutes*60 - fhours*3600
activity['assets']['small_text'] = "{}{:02}:{:02}/{}{:02}:{:02}".format('{}:'.format(hours) if hours>0 else '',
minutes,
seconds,
'{}:'.format(fhours) if fhours>0 else '',
fminutes,
fseconds
)

else:
currentTime = player.getTime()
fullTime = player.getTotalTime()
remainingTime = fullTime - currentTime
activity['timestamps'] = {'end' : int(time.time()+remainingTime)}
else:
currentTime = player.getTime()
fullTime = player.getTotalTime()
remainingTime = fullTime - currentTime
activity['timestamps'] = {'end' : int(time.time()+remainingTime)}


if activity != self.lastActivity:
self.lastActivity = activity
if activity == None:
self.presence.clear_activity()
if activity != self.lastActivity:
self.lastActivity = activity
if activity == None:
self.presence.clear_activity()
else:
if self.settings['client_id'] != self.clientId:
self.clientId = self.settings['client_id']
self.presence.close()
self.presence = None
self.connected = False
self.connectToDiscord()
self.updatePresence()
else:
if self.settings['client_id'] != self.clientId:
self.clientId = self.settings['client_id']
self.presence.close()
self.presence = None
log("Activity set: " + str(activity))
try:
self.presence.set_activity(activity)
except IOError:
log("Activity set failed. Reconnecting to Discord")
self.connected = False
self.connectToDiscord()
self.updatePresence()
else:
log("Activity set: " + str(activity))
self.presence.set_activity(activity)
except Exception as e:
# shitty way to make sure it runs forever
log("Exception caught: " + str(e))

class MyPlayer(xbmc.Player):
def __init__(self):
Expand All @@ -234,6 +241,7 @@ def onAVChange(self):
drp.updatePresence()

def onAVStarted(self):
drp.setPauseState(False)
drp.updatePresence()

def onPlayBackEnded(seld):
Expand Down

0 comments on commit 59aeb04

Please sign in to comment.