mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-01-24 17:06:11 +00:00
parent
4551000d70
commit
225c7828fc
8 changed files with 64 additions and 11 deletions
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<addon id="plugin.video.emby"
|
<addon id="plugin.video.emby"
|
||||||
name="Emby"
|
name="Emby"
|
||||||
version="2.3.4"
|
version="2.3.6"
|
||||||
provider-name="Emby.media">
|
provider-name="Emby.media">
|
||||||
<requires>
|
<requires>
|
||||||
<import addon="xbmc.python" version="2.19.0"/>
|
<import addon="xbmc.python" version="2.19.0"/>
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
version 2.3.6
|
||||||
|
- Update French translation
|
||||||
|
- Fix screensaver bug
|
||||||
|
|
||||||
version 2.3.4
|
version 2.3.4
|
||||||
- add throttling for error event logging
|
- add throttling for error event logging
|
||||||
|
|
||||||
|
|
|
@ -3,18 +3,12 @@
|
||||||
<!-- Add-on settings -->
|
<!-- Add-on settings -->
|
||||||
<string id="29999">Emby pour Kodi</string>
|
<string id="29999">Emby pour Kodi</string>
|
||||||
<string id="30000">Adresse principale du serveur</string>
|
<string id="30000">Adresse principale du serveur</string>
|
||||||
<!-- Verified -->
|
|
||||||
<string id="30002">Lire avec HTTP à la place de SMB</string>
|
<string id="30002">Lire avec HTTP à la place de SMB</string>
|
||||||
<!-- Verified -->
|
|
||||||
<string id="30004">Niveau de journalisation</string>
|
<string id="30004">Niveau de journalisation</string>
|
||||||
<!-- Verified -->
|
|
||||||
<string id="30016">Nom de l'appareil</string>
|
<string id="30016">Nom de l'appareil</string>
|
||||||
<!-- Verified -->
|
|
||||||
<string id="30022">Avancé</string>
|
<string id="30022">Avancé</string>
|
||||||
<string id="30024">Nom d'utilisateur</string>
|
<string id="30024">Nom d'utilisateur</string>
|
||||||
<!-- Verified -->
|
|
||||||
<string id="30030">Numéro de port</string>
|
<string id="30030">Numéro de port</string>
|
||||||
<!-- Verified -->
|
|
||||||
<string id="30035">Nombre d'album de musique récents à afficher:</string>
|
<string id="30035">Nombre d'album de musique récents à afficher:</string>
|
||||||
<string id="30036">Nombre de films récents à afficher:</string>
|
<string id="30036">Nombre de films récents à afficher:</string>
|
||||||
<string id="30037">Nombre d'épisodes télévisés récents à afficher:</string>
|
<string id="30037">Nombre d'épisodes télévisés récents à afficher:</string>
|
||||||
|
@ -204,7 +198,7 @@
|
||||||
<string id="30504">Utiliser un nom alternatif de périphérique</string>
|
<string id="30504">Utiliser un nom alternatif de périphérique</string>
|
||||||
<string id="30505">[COLOR yellow]Relancez la connexion[/COLOR]</string>
|
<string id="30505">[COLOR yellow]Relancez la connexion[/COLOR]</string>
|
||||||
<string id="30506">Options de synchronisation</string>
|
<string id="30506">Options de synchronisation</string>
|
||||||
<string id="30507">Afficher l'avancement de la synchro</string>
|
<string id="30507">Afficher l'avancement si le total d'objets est supérieur à</string>
|
||||||
<string id="30508">Sync Séries TV vides</string>
|
<string id="30508">Sync Séries TV vides</string>
|
||||||
<string id="30509">Activer la bibliothèque musicale</string>
|
<string id="30509">Activer la bibliothèque musicale</string>
|
||||||
<string id="30510">Direct stream bibliothèque musicale</string>
|
<string id="30510">Direct stream bibliothèque musicale</string>
|
||||||
|
@ -236,6 +230,33 @@
|
||||||
<string id="30536">Sync si l'écran est désactivé</string>
|
<string id="30536">Sync si l'écran est désactivé</string>
|
||||||
<string id="30537">Force Transcode Hi10P</string>
|
<string id="30537">Force Transcode Hi10P</string>
|
||||||
<string id="30538">Désactivé</string>
|
<string id="30538">Désactivé</string>
|
||||||
|
<string id="30539">Connexion</string>
|
||||||
|
<string id="30540">Connexion manuelle</string>
|
||||||
|
<string id="30541">Emby Connect</string>
|
||||||
|
<string id="30542">Serveur</string>
|
||||||
|
<string id="30543">Nom d'utilisateur ou adresse mail</string>
|
||||||
|
<string id="30544">Activer la protection anti-verrouillage de la base de données (cela ralentira la synchronisation)</string>
|
||||||
|
<string id="30545">Activer le message serveur hors-ligne</string>
|
||||||
|
<!-- dialogs -->
|
||||||
|
<string id="30600">Se connecter avec Emby Connect</string>
|
||||||
|
<string id="30602">Mot de passe</string>
|
||||||
|
<string id="30603">Merci de vous référer à nos conditions d'utilisations. L'utilisation de tout logiciel Emby nécessite l'adhésion à ces conditions.</string>
|
||||||
|
<string id="30604">Scannez-moi</string>
|
||||||
|
<string id="30605">Se connecter</string>
|
||||||
|
<string id="30606">Annuler</string>
|
||||||
|
<string id="30607">Sélectionner le serveur principal</string>
|
||||||
|
<string id="30608">Les champs Nom d'utilisateur ou Mot de passe ne peuvent pas être vide</string>
|
||||||
|
<string id="30609">Impossible de se connecter au serveur sélectionné</string>
|
||||||
|
<string id="30610">Se connecter à</string>
|
||||||
|
<!-- Connect to {server} -->
|
||||||
|
<string id="30611">Ajouter un serveur manuellement</string>
|
||||||
|
<string id="30612">Merci de vous identifier</string>
|
||||||
|
<string id="30613">Le nom d'utilisateur ne peut pas être vide</string>
|
||||||
|
<string id="30614">Se connecter au serveur</string>
|
||||||
|
<string id="30615">Hôte</string>
|
||||||
|
<string id="30616">Connexion</string>
|
||||||
|
<string id="30617">Le serveur ou le port ne peuvent pas être vide</string>
|
||||||
|
<string id="30618">Changer d'utilisateur Emby Connect</string>
|
||||||
<!-- service add-on -->
|
<!-- service add-on -->
|
||||||
<string id="33000">Bienvenue</string>
|
<string id="33000">Bienvenue</string>
|
||||||
<string id="33001">Erreur de connexion</string>
|
<string id="33001">Erreur de connexion</string>
|
||||||
|
@ -248,7 +269,7 @@
|
||||||
<string id="33008">Entrer le mot de passe pour l'utilisateur:</string>
|
<string id="33008">Entrer le mot de passe pour l'utilisateur:</string>
|
||||||
<string id="33009">Utilisateur ou mot de passe invalide</string>
|
<string id="33009">Utilisateur ou mot de passe invalide</string>
|
||||||
<string id="33010">Échec de l'authentification de trop nombreuses fois</string>
|
<string id="33010">Échec de l'authentification de trop nombreuses fois</string>
|
||||||
<string id="33011">Lecture directe impossible</string>
|
<string id="33011">Lecture directe du fichier impossible</string>
|
||||||
<string id="33012">Lecture directe a échoué 3 fois. Activer la lecture a partir de HTTP.</string>
|
<string id="33012">Lecture directe a échoué 3 fois. Activer la lecture a partir de HTTP.</string>
|
||||||
<string id="33013">Choisissez le flux audio</string>
|
<string id="33013">Choisissez le flux audio</string>
|
||||||
<string id="33014">Choisissez le flux de sous-titres</string>
|
<string id="33014">Choisissez le flux de sous-titres</string>
|
||||||
|
|
|
@ -18,6 +18,24 @@ log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
logEventHistory = {}
|
logEventHistory = {}
|
||||||
|
|
||||||
|
# wrap a function to catch, log and then re throw an exception
|
||||||
|
def log_error(errors=(Exception, )):
|
||||||
|
def decorator(func):
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
except errors as error:
|
||||||
|
ga = GoogleAnalytics()
|
||||||
|
errStrings = ga.formatException()
|
||||||
|
ga.sendEventData("Exception", errStrings[0], errStrings[1], True)
|
||||||
|
log.exception(error)
|
||||||
|
log.error("log_error: %s \n args: %s \n kwargs: %s",
|
||||||
|
func.__name__, args, kwargs)
|
||||||
|
raise
|
||||||
|
return wrapper
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
# main GA class
|
||||||
class GoogleAnalytics():
|
class GoogleAnalytics():
|
||||||
|
|
||||||
testing = False
|
testing = False
|
||||||
|
|
|
@ -12,6 +12,7 @@ import downloadutils
|
||||||
import embydb_functions as embydb
|
import embydb_functions as embydb
|
||||||
import playbackutils as pbutils
|
import playbackutils as pbutils
|
||||||
from utils import window, settings, kodiSQL
|
from utils import window, settings, kodiSQL
|
||||||
|
from ga_client import log_error
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
@ -56,6 +57,7 @@ class KodiMonitor(xbmc.Monitor):
|
||||||
log.info("New context setting: %s", current_context)
|
log.info("New context setting: %s", current_context)
|
||||||
window('emby_context', value=current_context)
|
window('emby_context', value=current_context)
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onNotification(self, sender, method, data):
|
def onNotification(self, sender, method, data):
|
||||||
|
|
||||||
if method not in ('Playlist.OnAdd', 'Player.OnStop', 'Player.OnClear'):
|
if method not in ('Playlist.OnAdd', 'Player.OnStop', 'Player.OnClear'):
|
||||||
|
|
|
@ -14,7 +14,7 @@ import downloadutils
|
||||||
import kodidb_functions as kodidb
|
import kodidb_functions as kodidb
|
||||||
import websocket_client as wsc
|
import websocket_client as wsc
|
||||||
from utils import window, settings, language as lang
|
from utils import window, settings, language as lang
|
||||||
from ga_client import GoogleAnalytics
|
from ga_client import GoogleAnalytics, log_error
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ class Player(xbmc.Player):
|
||||||
log.debug("Starting playback monitor.")
|
log.debug("Starting playback monitor.")
|
||||||
xbmc.Player.__init__(self)
|
xbmc.Player.__init__(self)
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onPlayBackStarted(self):
|
def onPlayBackStarted(self):
|
||||||
# Will be called when xbmc starts playing a file
|
# Will be called when xbmc starts playing a file
|
||||||
self.stopAll()
|
self.stopAll()
|
||||||
|
@ -356,6 +357,7 @@ class Player(xbmc.Player):
|
||||||
log.debug("Report: %s" % postdata)
|
log.debug("Report: %s" % postdata)
|
||||||
self.ws.send_progress_update(postdata)
|
self.ws.send_progress_update(postdata)
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onPlayBackPaused(self):
|
def onPlayBackPaused(self):
|
||||||
|
|
||||||
currentFile = self.currentFile
|
currentFile = self.currentFile
|
||||||
|
@ -366,6 +368,7 @@ class Player(xbmc.Player):
|
||||||
|
|
||||||
self.reportPlayback()
|
self.reportPlayback()
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onPlayBackResumed(self):
|
def onPlayBackResumed(self):
|
||||||
|
|
||||||
currentFile = self.currentFile
|
currentFile = self.currentFile
|
||||||
|
@ -376,6 +379,7 @@ class Player(xbmc.Player):
|
||||||
|
|
||||||
self.reportPlayback()
|
self.reportPlayback()
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onPlayBackSeek(self, time, seekOffset):
|
def onPlayBackSeek(self, time, seekOffset):
|
||||||
# Make position when seeking a bit more accurate
|
# Make position when seeking a bit more accurate
|
||||||
currentFile = self.currentFile
|
currentFile = self.currentFile
|
||||||
|
@ -387,6 +391,7 @@ class Player(xbmc.Player):
|
||||||
|
|
||||||
self.reportPlayback()
|
self.reportPlayback()
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onPlayBackStopped(self):
|
def onPlayBackStopped(self):
|
||||||
# Will be called when user stops xbmc playing a file
|
# Will be called when user stops xbmc playing a file
|
||||||
log.debug("ONPLAYBACK_STOPPED")
|
log.debug("ONPLAYBACK_STOPPED")
|
||||||
|
@ -396,6 +401,7 @@ class Player(xbmc.Player):
|
||||||
log.info("Clear playlist properties.")
|
log.info("Clear playlist properties.")
|
||||||
self.stopAll()
|
self.stopAll()
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def onPlayBackEnded(self):
|
def onPlayBackEnded(self):
|
||||||
# Will be called when xbmc stops playing a file
|
# Will be called when xbmc stops playing a file
|
||||||
log.debug("ONPLAYBACK_ENDED")
|
log.debug("ONPLAYBACK_ENDED")
|
||||||
|
|
|
@ -227,7 +227,7 @@ def querySQL(query, args=None, cursor=None, conntype=None):
|
||||||
|
|
||||||
def getScreensaver():
|
def getScreensaver():
|
||||||
# Get the current screensaver value
|
# Get the current screensaver value
|
||||||
result = JSONRPC('Settings.getSettingValues').execute({'setting': "screensaver.mode"})
|
result = JSONRPC('Settings.getSettingValue').execute({'setting': "screensaver.mode"})
|
||||||
try:
|
try:
|
||||||
return result['result']['value']
|
return result['result']['value']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
|
@ -15,6 +15,7 @@ import librarysync
|
||||||
import playlist
|
import playlist
|
||||||
import userclient
|
import userclient
|
||||||
from utils import window, settings, dialog, language as lang, JSONRPC
|
from utils import window, settings, dialog, language as lang, JSONRPC
|
||||||
|
from ga_client import log_error
|
||||||
|
|
||||||
##################################################################################################
|
##################################################################################################
|
||||||
|
|
||||||
|
@ -60,6 +61,7 @@ class WebSocketClient(threading.Thread):
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
log.exception(error)
|
log.exception(error)
|
||||||
|
|
||||||
|
@log_error()
|
||||||
def on_message(self, ws, message):
|
def on_message(self, ws, message):
|
||||||
|
|
||||||
result = json.loads(message)
|
result = json.loads(message)
|
||||||
|
|
Loading…
Reference in a new issue