Merge branch 'master' of github.com:jellyfin/jellyfin-kodi into cleanup-connection-manager

This commit is contained in:
TrueTechy 2020-01-14 21:36:45 +00:00
commit b1d7b5b14b
14 changed files with 276 additions and 136 deletions

View file

@ -95,15 +95,14 @@ def get_device_id(reset=False):
client_id = file_guid.read() client_id = file_guid.read()
if not client_id or reset: if not client_id or reset:
LOG.info("Generating a new GUID.") LOG.debug("Generating a new GUID.")
client_id = str(create_id()) client_id = str(create_id())
file_guid = xbmcvfs.File(jellyfin_guid, 'w') file_guid = xbmcvfs.File(jellyfin_guid, 'w')
file_guid.write(client_id) file_guid.write(client_id)
file_guid.close() file_guid.close()
LOG.debug("DeviceId loaded: %s", client_id)
LOG.info("DeviceId loaded: %s", client_id)
window('jellyfin_deviceId', value=client_id) window('jellyfin_deviceId', value=client_id)
return client_id return client_id

View file

@ -124,7 +124,7 @@ class Database(object):
modified['time'] = modified_int modified['time'] = modified_int
modified['file'] = file modified['file'] = file
LOG.info("Discovered database: %s", modified) LOG.debug("Discovered database: %s", modified)
self.discovered_file = modified['file'] self.discovered_file = modified['file']
return xbmc.translatePath("special://database/%s" % modified['file']) return xbmc.translatePath("special://database/%s" % modified['file'])
@ -184,7 +184,7 @@ class Database(object):
if self.commit_close and changes: if self.commit_close and changes:
LOG.info("[%s] %s rows updated.", self.db_file, changes) LOG.debug("[%s] %s rows updated.", self.db_file, changes)
self.conn.commit() self.conn.commit()
LOG.debug("---<[ database: %s ] %s", self.db_file, id(self.conn)) LOG.debug("---<[ database: %s ] %s", self.db_file, id(self.conn))
@ -210,7 +210,7 @@ def jellyfin_tables(cursor):
columns = cursor.execute("SELECT * FROM jellyfin") columns = cursor.execute("SELECT * FROM jellyfin")
if 'jellyfin_parent_id' not in [description[0] for description in columns.description]: if 'jellyfin_parent_id' not in [description[0] for description in columns.description]:
LOG.info("Add missing column jellyfin_parent_id") LOG.debug("Add missing column jellyfin_parent_id")
cursor.execute("ALTER TABLE jellyfin ADD COLUMN jellyfin_parent_id 'TEXT'") cursor.execute("ALTER TABLE jellyfin ADD COLUMN jellyfin_parent_id 'TEXT'")

View file

@ -27,8 +27,8 @@ class Config(object):
self.http() self.http()
def app(self, name, version, device_name, device_id, capabilities=None, device_pixel_ratio=None): def app(self, name, version, device_name, device_id, capabilities=None, device_pixel_ratio=None):
LOG.info("Begin app constructor.")
LOG.debug("Begin app constructor.")
self.data['app.name'] = name self.data['app.name'] = name
self.data['app.version'] = version self.data['app.version'] = version
self.data['app.device_name'] = device_name self.data['app.device_name'] = device_name
@ -39,8 +39,7 @@ class Config(object):
def auth(self, server, user_id, token=None, ssl=None): def auth(self, server, user_id, token=None, ssl=None):
LOG.info("Begin auth constructor.") LOG.debug("Begin auth constructor.")
self.data['auth.server'] = server self.data['auth.server'] = server
self.data['auth.user_id'] = user_id self.data['auth.user_id'] = user_id
self.data['auth.token'] = token self.data['auth.token'] = token
@ -48,8 +47,7 @@ class Config(object):
def http(self, user_agent=None, max_retries=DEFAULT_HTTP_MAX_RETRIES, timeout=DEFAULT_HTTP_TIMEOUT): def http(self, user_agent=None, max_retries=DEFAULT_HTTP_MAX_RETRIES, timeout=DEFAULT_HTTP_TIMEOUT):
LOG.info("Begin http constructor.") LOG.debug("Begin http constructor.")
self.data['http.max_retries'] = max_retries self.data['http.max_retries'] = max_retries
self.data['http.timeout'] = timeout self.data['http.timeout'] = timeout
self.data['http.user_agent'] = user_agent self.data['http.user_agent'] = user_agent

View file

@ -51,16 +51,16 @@ class HTTP(object):
def _replace_user_info(self, string): def _replace_user_info(self, string):
if '{server}' in string: if '{server}' in string:
if self.config.data['auth.server']: if self.config.data.get('auth.server', None):
string = string.replace("{server}", self.config.data['auth.server']) string = string.replace("{server}", self.config.data['auth.server'])
else: else:
raise Exception("Server address not set.") LOG.debug("Server address not set")
if '{UserId}'in string: if '{UserId}'in string:
if self.config.data['auth.user_id']: if self.config.data.get('auth.user_id', None):
string = string.replace("{UserId}", self.config.data['auth.user_id']) string = string.replace("{UserId}", self.config.data['auth.user_id'])
else: else:
raise Exception("UserId is not set.") LOG.debug("UserId is not set.")
return string return string
@ -150,7 +150,8 @@ class HTTP(object):
raise HTTPException(r.status_code, error) raise HTTPException(r.status_code, error)
except requests.exceptions.MissingSchema as error: except requests.exceptions.MissingSchema as error:
raise HTTPException("MissingSchema", {'Id': self.config.data['auth.server']}) LOG.error("Request missing Schema. " + str(error))
raise HTTPException("MissingSchema", {'Id': self.config.data.get('auth.server', "None")})
except Exception as error: except Exception as error:
raise raise
@ -170,11 +171,11 @@ class HTTP(object):
def _request(self, data): def _request(self, data):
if 'url' not in data: if 'url' not in data:
data['url'] = "%s/%s" % (self.config.data['auth.server'], data.pop('handler', "")) data['url'] = "%s/%s" % (self.config.data.get("auth.server", ""), data.pop('handler', ""))
self._get_header(data) self._get_header(data)
data['timeout'] = data.get('timeout') or self.config.data['http.timeout'] data['timeout'] = data.get('timeout') or self.config.data['http.timeout']
data['verify'] = data.get('verify') or self.config.data['auth.ssl'] or False data['verify'] = data.get('verify') or self.config.data.get('auth.ssl', False)
data['url'] = self._replace_user_info(data['url']) data['url'] = self._replace_user_info(data['url'])
self._process_params(data.get('params') or {}) self._process_params(data.get('params') or {})
self._process_params(data.get('json') or {}) self._process_params(data.get('json') or {})
@ -201,7 +202,7 @@ class HTTP(object):
'Content-type': "application/json", 'Content-type': "application/json",
'Accept-Charset': "UTF-8,*", 'Accept-Charset': "UTF-8,*",
'Accept-encoding': "gzip", 'Accept-encoding': "gzip",
'User-Agent': self.config.data['http.user_agent'] or "%s/%s" % (self.config.data['app.name'], self.config.data['app.version']) 'User-Agent': self.config.data['http.user_agent'] or "%s/%s" % (self.config.data.get('app.name', 'Jellyfin for Kodi'), self.config.data.get('app.version', "0.0.0"))
}) })
if 'x-emby-authorization' not in data['headers']: if 'x-emby-authorization' not in data['headers']:
@ -212,17 +213,17 @@ class HTTP(object):
def _authorization(self, data): def _authorization(self, data):
auth = "MediaBrowser " auth = "MediaBrowser "
auth += "Client=%s, " % self.config.data['app.name'] auth += "Client=%s, " % self.config.data.get('app.name', "Jellyfin for Kodi")
auth += "Device=%s, " % self.config.data['app.device_name'] auth += "Device=%s, " % self.config.data.get('app.device_name', 'Unknown Device')
auth += "DeviceId=%s, " % self.config.data['app.device_id'] auth += "DeviceId=%s, " % self.config.data.get('app.device_id', 'Unknown Device id')
auth += "Version=%s" % self.config.data['app.version'] auth += "Version=%s" % self.config.data.get('app.version', '0.0.0')
data['headers'].update({'x-emby-authorization': auth}) data['headers'].update({'x-emby-authorization': auth})
if self.config.data.get('auth.token') and self.config.data.get('auth.user_id'): if self.config.data.get('auth.token') and self.config.data.get('auth.user_id'):
auth += ', UserId=%s' % self.config.data['auth.user_id'] auth += ', UserId=%s' % self.config.data.get('auth.user_id')
data['headers'].update({'x-emby-authorization': auth, 'X-MediaBrowser-Token': self.config.data['auth.token']}) data['headers'].update({'x-emby-authorization': auth, 'X-MediaBrowser-Token': self.config.data.get('auth.token')})
return data return data

View file

@ -105,8 +105,8 @@ class Monitor(xbmc.Monitor):
try: try:
if not data.get('ServerId'): if not data.get('ServerId'):
raise Exception("ServerId undefined.") server = Jellyfin()
else:
if method != 'LoadServer' and data['ServerId'] not in self.servers: if method != 'LoadServer' and data['ServerId'] not in self.servers:
try: try:

View file

@ -132,7 +132,7 @@ class Movies(KodiDb):
self.add(*values(obj, QU.add_movie_obj)) self.add(*values(obj, QU.add_movie_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_movie_obj)) self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_movie_obj))
LOG.info("ADD movie [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MovieId'], obj['Id'], obj['Title']) LOG.debug("ADD movie [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MovieId'], obj['Id'], obj['Title'])
def movie_update(self, obj): def movie_update(self, obj):
@ -146,7 +146,7 @@ class Movies(KodiDb):
self.update(*values(obj, QU.update_movie_obj)) self.update(*values(obj, QU.update_movie_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE movie [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MovieId'], obj['Id'], obj['Title']) LOG.debug("UPDATE movie [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MovieId'], obj['Id'], obj['Title'])
def trailer(self, obj): def trailer(self, obj):
@ -219,11 +219,11 @@ class Movies(KodiDb):
temp_obj['MovieId'] = obj['Current'][temp_obj['Movie']] temp_obj['MovieId'] = obj['Current'][temp_obj['Movie']]
self.remove_from_boxset(*values(temp_obj, QU.delete_movie_set_obj)) self.remove_from_boxset(*values(temp_obj, QU.delete_movie_set_obj))
self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.delete_parent_boxset_obj)) self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.delete_parent_boxset_obj))
LOG.info("DELETE from boxset [%s] %s: %s", temp_obj['SetId'], temp_obj['Title'], temp_obj['MovieId']) LOG.debug("DELETE from boxset [%s] %s: %s", temp_obj['SetId'], temp_obj['Title'], temp_obj['MovieId'])
self.artwork.add(obj['Artwork'], obj['SetId'], "set") self.artwork.add(obj['Artwork'], obj['SetId'], "set")
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_boxset_obj)) self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_boxset_obj))
LOG.info("UPDATE boxset [%s] %s", obj['SetId'], obj['Title']) LOG.debug("UPDATE boxset [%s] %s", obj['SetId'], obj['Title'])
def boxset_current(self, obj): def boxset_current(self, obj):
@ -255,7 +255,7 @@ class Movies(KodiDb):
self.set_boxset(*values(temp_obj, QU.update_movie_set_obj)) self.set_boxset(*values(temp_obj, QU.update_movie_set_obj))
self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.update_parent_movie_obj)) self.jellyfin_db.update_parent_id(*values(temp_obj, QUEM.update_parent_movie_obj))
LOG.info("ADD to boxset [%s/%s] %s: %s to boxset", temp_obj['SetId'], temp_obj['MovieId'], temp_obj['Title'], temp_obj['Id']) LOG.debug("ADD to boxset [%s/%s] %s: %s to boxset", temp_obj['SetId'], temp_obj['MovieId'], temp_obj['Title'], temp_obj['Id'])
else: else:
obj['Current'].pop(temp_obj['Id']) obj['Current'].pop(temp_obj['Id'])
@ -299,7 +299,7 @@ class Movies(KodiDb):
LOG.debug("New resume point %s: %s", obj['Id'], obj['Resume']) LOG.debug("New resume point %s: %s", obj['Id'], obj['Resume'])
self.add_playstate(*values(obj, QU.add_bookmark_obj)) self.add_playstate(*values(obj, QU.add_bookmark_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA movie [%s/%s] %s: %s", obj['FileId'], obj['MovieId'], obj['Id'], obj['Title']) LOG.debug("USERDATA movie [%s/%s] %s: %s", obj['FileId'], obj['MovieId'], obj['Id'], obj['Title'])
@stop() @stop()
@jellyfin_item() @jellyfin_item()
@ -334,4 +334,4 @@ class Movies(KodiDb):
self.delete_boxset(*values(obj, QU.delete_set_obj)) self.delete_boxset(*values(obj, QU.delete_set_obj))
self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj)) self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj))
LOG.info("DELETE %s [%s/%s] %s", obj['Media'], obj['FileId'], obj['KodiId'], obj['Id']) LOG.debug("DELETE %s [%s/%s] %s", obj['Media'], obj['FileId'], obj['KodiId'], obj['Id'])

View file

@ -92,14 +92,14 @@ class Music(KodiDb):
''' '''
obj['ArtistId'] = self.get(*values(obj, QU.get_artist_obj)) obj['ArtistId'] = self.get(*values(obj, QU.get_artist_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_artist_obj)) self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_artist_obj))
LOG.info("ADD artist [%s] %s: %s", obj['ArtistId'], obj['Name'], obj['Id']) LOG.debug("ADD artist [%s] %s: %s", obj['ArtistId'], obj['Name'], obj['Id'])
def artist_update(self, obj): def artist_update(self, obj):
''' Update object to kodi. ''' Update object to kodi.
''' '''
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE artist [%s] %s: %s", obj['ArtistId'], obj['Name'], obj['Id']) LOG.debug("UPDATE artist [%s] %s: %s", obj['ArtistId'], obj['Name'], obj['Id'])
@stop() @stop()
@jellyfin_item() @jellyfin_item()
@ -154,14 +154,14 @@ class Music(KodiDb):
''' '''
obj['AlbumId'] = self.get_album(*values(obj, QU.get_album_obj)) obj['AlbumId'] = self.get_album(*values(obj, QU.get_album_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_album_obj)) self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_album_obj))
LOG.info("ADD album [%s] %s: %s", obj['AlbumId'], obj['Title'], obj['Id']) LOG.debug("ADD album [%s] %s: %s", obj['AlbumId'], obj['Title'], obj['Id'])
def album_update(self, obj): def album_update(self, obj):
''' Update object to kodi. ''' Update object to kodi.
''' '''
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE album [%s] %s: %s", obj['AlbumId'], obj['Title'], obj['Id']) LOG.debug("UPDATE album [%s] %s: %s", obj['AlbumId'], obj['Title'], obj['Id'])
def artist_discography(self, obj): def artist_discography(self, obj):
@ -312,7 +312,7 @@ class Music(KodiDb):
self.update_song(*values(obj, QU.update_song_obj)) self.update_song(*values(obj, QU.update_song_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE song [%s/%s/%s] %s: %s", obj['PathId'], obj['AlbumId'], obj['SongId'], obj['Id'], obj['Title']) LOG.debug("UPDATE song [%s/%s/%s] %s: %s", obj['PathId'], obj['AlbumId'], obj['SongId'], obj['Id'], obj['Title'])
def get_song_path_filename(self, obj, api): def get_song_path_filename(self, obj, api):
@ -426,7 +426,7 @@ class Music(KodiDb):
self.rate_song(*values(obj, QU.update_song_rating_obj)) self.rate_song(*values(obj, QU.update_song_rating_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA %s [%s] %s: %s", obj['Media'], obj['KodiId'], obj['Id'], obj['Title']) LOG.debug("USERDATA %s [%s] %s: %s", obj['Media'], obj['KodiId'], obj['Id'], obj['Title'])
@stop() @stop()
@jellyfin_item() @jellyfin_item()
@ -495,19 +495,19 @@ class Music(KodiDb):
self.artwork.delete(kodi_id, "artist") self.artwork.delete(kodi_id, "artist")
self.delete(kodi_id) self.delete(kodi_id)
LOG.info("DELETE artist [%s] %s", kodi_id, item_id) LOG.debug("DELETE artist [%s] %s", kodi_id, item_id)
def remove_album(self, kodi_id, item_id): def remove_album(self, kodi_id, item_id):
self.artwork.delete(kodi_id, "album") self.artwork.delete(kodi_id, "album")
self.delete_album(kodi_id) self.delete_album(kodi_id)
LOG.info("DELETE album [%s] %s", kodi_id, item_id) LOG.debug("DELETE album [%s] %s", kodi_id, item_id)
def remove_song(self, kodi_id, item_id): def remove_song(self, kodi_id, item_id):
self.artwork.delete(kodi_id, "song") self.artwork.delete(kodi_id, "song")
self.delete_song(kodi_id) self.delete_song(kodi_id)
LOG.info("DELETE song [%s] %s", kodi_id, item_id) LOG.debug("DELETE song [%s] %s", kodi_id, item_id)
@jellyfin_item() @jellyfin_item()
def get_child(self, item_id, e_item): def get_child(self, item_id, e_item):

View file

@ -141,7 +141,7 @@ class MusicVideos(KodiDb):
self.add(*values(obj, QU.add_musicvideo_obj)) self.add(*values(obj, QU.add_musicvideo_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_mvideo_obj)) self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_mvideo_obj))
LOG.info("ADD mvideo [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title']) LOG.debug("ADD mvideo [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title'])
def musicvideo_update(self, obj): def musicvideo_update(self, obj):
@ -149,7 +149,7 @@ class MusicVideos(KodiDb):
''' '''
self.update(*values(obj, QU.update_musicvideo_obj)) self.update(*values(obj, QU.update_musicvideo_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE mvideo [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title']) LOG.debug("UPDATE mvideo [%s/%s/%s] %s: %s", obj['PathId'], obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title'])
def get_path_filename(self, obj): def get_path_filename(self, obj):
@ -205,7 +205,7 @@ class MusicVideos(KodiDb):
self.add_playstate(*values(obj, QU.add_bookmark_obj)) self.add_playstate(*values(obj, QU.add_bookmark_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA mvideo [%s/%s] %s: %s", obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title']) LOG.debug("USERDATA mvideo [%s/%s] %s: %s", obj['FileId'], obj['MvideoId'], obj['Id'], obj['Title'])
@stop() @stop()
@jellyfin_item() @jellyfin_item()
@ -229,4 +229,4 @@ class MusicVideos(KodiDb):
self.remove_path(*values(obj, QU.delete_path_obj)) self.remove_path(*values(obj, QU.delete_path_obj))
self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj)) self.jellyfin_db.remove_item(*values(obj, QUEM.delete_item_obj))
LOG.info("DELETE musicvideo %s [%s/%s] %s", obj['MvideoId'], obj['PathId'], obj['FileId'], obj['Id']) LOG.debug("DELETE musicvideo %s [%s/%s] %s", obj['MvideoId'], obj['PathId'], obj['FileId'], obj['Id'])

View file

@ -164,7 +164,7 @@ class TVShows(KodiDb):
self.add(*values(obj, QU.add_tvshow_obj)) self.add(*values(obj, QU.add_tvshow_obj))
self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_tvshow_obj)) self.jellyfin_db.add_reference(*values(obj, QUEM.add_reference_tvshow_obj))
LOG.info("ADD tvshow [%s/%s/%s] %s: %s", obj['TopPathId'], obj['PathId'], obj['ShowId'], obj['Title'], obj['Id']) LOG.debug("ADD tvshow [%s/%s/%s] %s: %s", obj['TopPathId'], obj['PathId'], obj['ShowId'], obj['Title'], obj['Id'])
def tvshow_update(self, obj): def tvshow_update(self, obj):
@ -178,7 +178,7 @@ class TVShows(KodiDb):
self.update(*values(obj, QU.update_tvshow_obj)) self.update(*values(obj, QU.update_tvshow_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("UPDATE tvshow [%s/%s] %s: %s", obj['PathId'], obj['ShowId'], obj['Title'], obj['Id']) LOG.debug("UPDATE tvshow [%s/%s] %s: %s", obj['PathId'], obj['ShowId'], obj['Title'], obj['Id'])
def get_path_filename(self, obj): def get_path_filename(self, obj):
@ -230,7 +230,7 @@ class TVShows(KodiDb):
self.item_ids.append(obj['Id']) self.item_ids.append(obj['Id'])
self.artwork.add(obj['Artwork'], obj['SeasonId'], "season") self.artwork.add(obj['Artwork'], obj['SeasonId'], "season")
LOG.info("UPDATE season [%s/%s] %s: %s", obj['ShowId'], obj['SeasonId'], obj['Title'] or obj['Index'], obj['Id']) LOG.debug("UPDATE season [%s/%s] %s: %s", obj['ShowId'], obj['SeasonId'], obj['Title'] or obj['Index'], obj['Id'])
@stop() @stop()
@jellyfin_item() @jellyfin_item()
@ -480,7 +480,7 @@ class TVShows(KodiDb):
self.add_playstate(*values(temp_obj, QU.add_bookmark_obj)) self.add_playstate(*values(temp_obj, QU.add_bookmark_obj))
self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj)) self.jellyfin_db.update_reference(*values(obj, QUEM.update_reference_obj))
LOG.info("USERDATA %s [%s/%s] %s: %s", obj['Media'], obj['FileId'], obj['KodiId'], obj['Id'], obj['Title']) LOG.debug("USERDATA %s [%s/%s] %s: %s", obj['Media'], obj['FileId'], obj['KodiId'], obj['Id'], obj['Title'])
@stop() @stop()
@jellyfin_item() @jellyfin_item()
@ -577,13 +577,13 @@ class TVShows(KodiDb):
self.artwork.delete(kodi_id, "season") self.artwork.delete(kodi_id, "season")
self.delete_season(kodi_id) self.delete_season(kodi_id)
LOG.info("DELETE season [%s] %s", kodi_id, item_id) LOG.debug("DELETE season [%s] %s", kodi_id, item_id)
def remove_episode(self, kodi_id, file_id, item_id): def remove_episode(self, kodi_id, file_id, item_id):
self.artwork.delete(kodi_id, "episode") self.artwork.delete(kodi_id, "episode")
self.delete_episode(kodi_id, file_id) self.delete_episode(kodi_id, file_id)
LOG.info("DELETE episode [%s/%s] %s", file_id, kodi_id, item_id) LOG.debug("DELETE episode [%s/%s] %s", file_id, kodi_id, item_id)
@jellyfin_item() @jellyfin_item()
def get_child(self, item_id, e_item): def get_child(self, item_id, e_item):

View file

@ -0,0 +1,2 @@
msgid ""
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"

View file

@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Jellyfin for Kodi\n" "Project-Id-Version: Jellyfin for Kodi\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2019-09-23 10:13+0000\n" "PO-Revision-Date: 2020-01-12 10:17+0000\n"
"Last-Translator: pucherot <luis.puig@gmail.com>\n" "Last-Translator: dtorner <dtorner@gmail.com>\n"
"Language-Team: Spanish <https://translate.jellyfin.org/projects/jellyfin/" "Language-Team: Spanish <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/es/>\n" "jellyfin-kodi/es/>\n"
"Language: es\n" "Language: es\n"
@ -55,7 +55,7 @@ msgstr "Nombre de usuario"
msgctxt "#30091" msgctxt "#30091"
msgid "Confirm file deletion" msgid "Confirm file deletion"
msgstr "Conformar borrado de archivo" msgstr "Confirmar borrado de archivo"
msgctxt "#30114" msgctxt "#30114"
msgid "Offer delete after playback" msgid "Offer delete after playback"
@ -131,7 +131,7 @@ msgstr "Elementos aleatorios"
msgctxt "#30230" msgctxt "#30230"
msgid "Recommended Items" msgid "Recommended Items"
msgstr "Elementos recomentados" msgstr "Elementos recomendados"
msgctxt "#30235" msgctxt "#30235"
msgid "Interface" msgid "Interface"
@ -147,7 +147,7 @@ msgstr "Activar mensaje de bienvenida"
msgctxt "#30251" msgctxt "#30251"
msgid "Recently added Home Videos" msgid "Recently added Home Videos"
msgstr "Videos familiares añadidos recientemente" msgstr "Vídeos familiares añadidos recientemente"
msgctxt "#30252" msgctxt "#30252"
msgid "Recently added Photos" msgid "Recently added Photos"
@ -395,7 +395,7 @@ msgstr "Conectar"
msgctxt "#30617" msgctxt "#30617"
msgid "Server or port cannot be empty" msgid "Server or port cannot be empty"
msgstr "Servidor y puerto no pueden estar vacíos" msgstr "Servidor o puerto no pueden estar vacíos"
msgctxt "#33000" msgctxt "#33000"
msgid "Welcome" msgid "Welcome"
@ -423,7 +423,7 @@ msgstr "¿Borrar el archivo de Jellyfin?"
msgctxt "#33016" msgctxt "#33016"
msgid "Play trailers?" msgid "Play trailers?"
msgstr "¿Reporducir trailiers?" msgstr "¿Reproducir trailers?"
msgctxt "#33018" msgctxt "#33018"
msgid "Gathering boxsets" msgid "Gathering boxsets"
@ -506,7 +506,7 @@ msgstr "Eliminar usuario de la sesión"
msgctxt "#33074" msgctxt "#33074"
msgid "Are you sure you want to reset your local Kodi database?" msgid "Are you sure you want to reset your local Kodi database?"
msgstr "¿está seguro que desea restablecer la base de datos local de Kodi?" msgstr "¿está seguro de que desea restablecer la base de datos local de Kodi?"
msgctxt "#33086" msgctxt "#33086"
msgid "Remove all cached artwork?" msgid "Remove all cached artwork?"
@ -528,7 +528,7 @@ msgstr "Introducir el nombre de carpeta para la copia de seguridad"
msgctxt "#33090" msgctxt "#33090"
msgid "Replace existing backup?" msgid "Replace existing backup?"
msgstr "¿Remplazar la copia de seguridad ya existente?" msgstr "¿Reemplazar la copia de seguridad ya existente?"
msgctxt "#33091" msgctxt "#33091"
msgid "Created backup at:" msgid "Created backup at:"
@ -565,7 +565,7 @@ msgctxt "#33101"
msgid "Since you are using native playback mode with music enabled, do you want to import music rating from files?" msgid "Since you are using native playback mode with music enabled, do you want to import music rating from files?"
msgstr "" msgstr ""
"Puesto que estás utilizando el modo de reproducción nativa con música " "Puesto que estás utilizando el modo de reproducción nativa con música "
"habilitada, ¿desea importar la clasificación de música de los archivos?" "habilitada, ¿deseas importar la clasificación de música de los archivos?"
msgctxt "#33102" msgctxt "#33102"
msgid "Resume the previous sync?" msgid "Resume the previous sync?"
@ -614,16 +614,16 @@ msgstr "Reiniciar Kodi para que surta efecto."
msgctxt "#33111" msgctxt "#33111"
msgid "Reset the local database to apply the playback mode change." msgid "Reset the local database to apply the playback mode change."
msgstr "" msgstr ""
"Restabler la base de datos local para aplicar el cambio de modo de " "Restablecer la base de datos local para aplicar el cambio de modo de "
"reproducción." "reproducción."
msgctxt "#33112" msgctxt "#33112"
msgid "Applies to Native and Add-on playback mode" msgid "Applies to Native and Add-on playback mode"
msgstr "Aplicar al modo de reproducción Nativo y Add-on" msgstr "Aplica al modo de reproducción Nativo y Add-on"
msgctxt "#33113" msgctxt "#33113"
msgid "Applies to Add-on playback mode only" msgid "Applies to Add-on playback mode only"
msgstr "Aplicar solo al modo de reproducción de Add-on" msgstr "Aplica solo al modo de reproducción de Add-on"
msgctxt "#33114" msgctxt "#33114"
msgid "Enable external subtitles" msgid "Enable external subtitles"
@ -641,7 +641,7 @@ msgctxt "#33117"
msgid "Enable artwork caching? If not, Kodi will still cache your artwork at a slower pace." msgid "Enable artwork caching? If not, Kodi will still cache your artwork at a slower pace."
msgstr "" msgstr ""
"¿Activar la caché de imágenes? De lo contrario, Kodi seguirá almacenando en " "¿Activar la caché de imágenes? De lo contrario, Kodi seguirá almacenando en "
"caché las imágenes a un ritmo lento." "caché las imágenes a un ritmo más lento."
msgctxt "#33118" msgctxt "#33118"
msgid "You've change the playback mode. Kodi needs to be reset to apply the change, would you like to do this now?" msgid "You've change the playback mode. Kodi needs to be reset to apply the change, would you like to do this now?"
@ -658,7 +658,7 @@ msgstr ""
msgctxt "#33120" msgctxt "#33120"
msgid "Select the libraries to add" msgid "Select the libraries to add"
msgstr "Seleccionar las biblotecas a añadir" msgstr "Seleccionar las bibliotecas a añadir"
msgctxt "#33121" msgctxt "#33121"
msgid "All" msgid "All"
@ -666,11 +666,11 @@ msgstr "Todo"
msgctxt "#33122" msgctxt "#33122"
msgid "Restart Kodi to resume where you left off." msgid "Restart Kodi to resume where you left off."
msgstr "Reiniciar Kodi para reanudar donde lo dejaste." msgstr "Reinicia Kodi para reanudar donde lo dejaste."
msgctxt "#33123" msgctxt "#33123"
msgid "Sync library to Kodi" msgid "Sync library to Kodi"
msgstr "Sincronizar bibloteca con Kodi" msgstr "Sincronizar biblioteca con Kodi"
msgctxt "#33124" msgctxt "#33124"
msgid "Include people (slow)" msgid "Include people (slow)"
@ -748,7 +748,7 @@ msgstr "Algo salió mal. Inténtalo de nuevo más tarde."
msgctxt "#33143" msgctxt "#33143"
msgid "Enable the option to delete" msgid "Enable the option to delete"
msgstr "Habilitar la opción eliminar" msgstr "Habilitar la opción de eliminar"
msgctxt "#33144" msgctxt "#33144"
msgid "Removing library" msgid "Removing library"
@ -757,10 +757,10 @@ msgstr "Eliminando biblioteca"
msgctxt "#33145" msgctxt "#33145"
msgid "Please make sure your Samba (smb) share of your Jellyfin server is accessible to your Kodi installation and that you have path substitution configured on your server. Otherwise, Kodi may fail to locate your files." msgid "Please make sure your Samba (smb) share of your Jellyfin server is accessible to your Kodi installation and that you have path substitution configured on your server. Otherwise, Kodi may fail to locate your files."
msgstr "" msgstr ""
"Asegúrete que el acceso compartido Samba (smb) de su servidor Jellyfin sea " "Asegúrate de que el acceso compartido Samba (smb) de tu servidor Jellyfin "
"accesible desde instalación de Kodi y que tenga la sustitución de ruta " "sea accesible desde instalación de Kodi y de que tenga la sustitución de "
"configurada en su servidor. De lo contrario, Kodi puede no localizar sus " "ruta configurada en tu servidor. De lo contrario, Kodi puede no localizar "
"archivos." "tus archivos."
msgctxt "#33146" msgctxt "#33146"
msgid "Unable to connect to Jellyfin." msgid "Unable to connect to Jellyfin."
@ -768,11 +768,11 @@ msgstr "No se puede conectar a Jellyfin."
msgctxt "#33147" msgctxt "#33147"
msgid "Your access to Jellyfin is restricted." msgid "Your access to Jellyfin is restricted."
msgstr "Su acceso a Jellyfin está restringido." msgstr "Tu acceso a Jellyfin está restringido."
msgctxt "#33148" msgctxt "#33148"
msgid "Your access to this server is restricted." msgid "Your access to this server is restricted."
msgstr "Su acceso a este servidor está restringido." msgstr "Tu acceso a este servidor está restringido."
msgctxt "#33149" msgctxt "#33149"
msgid "Unable to connect to this server." msgid "Unable to connect to this server."
@ -785,8 +785,8 @@ msgstr "Actualizar la información del servidor"
msgctxt "#33151" msgctxt "#33151"
msgid "Reconnect to the same server that was previously loaded. If you want to use a different server, reset your local database, including your user information." msgid "Reconnect to the same server that was previously loaded. If you want to use a different server, reset your local database, including your user information."
msgstr "" msgstr ""
"Volver a conectarse al mismo servidor conectado anteriormente. Si desea " "Volver a conectarse al mismo servidor conectado anteriormente. Si deseas "
"utilizar un servidor diferente, restablezca la base de datos local, incluida " "utilizar un servidor diferente, restablece la base de datos local, incluida "
"la información de usuario." "la información de usuario."
msgctxt "#33152" msgctxt "#33152"
@ -795,7 +795,7 @@ msgstr "No se ha podido localizar TV Tunes en Kodi."
msgctxt "#33153" msgctxt "#33153"
msgid "Your Jellyfin theme media has been synced to Kodi" msgid "Your Jellyfin theme media has been synced to Kodi"
msgstr "Tu tema de medios de Jellyfin ha sido sincronizado con Kodi" msgstr "Tus temas de medios de Jellyfin han sido sincronizados con Kodi"
msgctxt "#33154" msgctxt "#33154"
msgid "Add libraries" msgid "Add libraries"
@ -805,8 +805,8 @@ msgctxt "#33155"
msgid "The currently applied patch for Jellyfin for Kodi is corrupted! Please post to the Jellyfin for Kodi forums if this issue persists. This will need to be fixed as soon as possible." msgid "The currently applied patch for Jellyfin for Kodi is corrupted! Please post to the Jellyfin for Kodi forums if this issue persists. This will need to be fixed as soon as possible."
msgstr "" msgstr ""
"¡El parche aplicado actualmente para Jellyfin para Kodi está dañado! Por " "¡El parche aplicado actualmente para Jellyfin para Kodi está dañado! Por "
"favor, comuníquelo en los foros Jellyfin para Kodi si este problema " "favor, comunícalo en los foros Jellyfin para Kodi si este problema persiste. "
"persiste. El problema será solucionado tan pronto como sea posible." "El problema será solucionado tan pronto como sea posible."
msgctxt "#33156" msgctxt "#33156"
msgid "A patch has been applied!" msgid "A patch has been applied!"
@ -826,7 +826,7 @@ msgstr "Activar la selección de audio/subtítulos"
msgctxt "#33160" msgctxt "#33160"
msgid "To avoid errors, please update Jellyfin for Kodi to version: " msgid "To avoid errors, please update Jellyfin for Kodi to version: "
msgstr "Para evitar errores, actualice Jellyfin para Kodi a la versión: " msgstr "Para evitar errores, actualiza Jellyfin para Kodi a la versión: "
msgctxt "#33162" msgctxt "#33162"
msgid "Reset the music library?" msgid "Reset the music library?"
@ -876,7 +876,7 @@ msgstr ""
msgctxt "#33173" msgctxt "#33173"
msgid "Forget about the previous sync? This is not recommended." msgid "Forget about the previous sync? This is not recommended."
msgstr "¿Olvídar la sincronización anterior? Esto no es recomentable." msgstr "¿Olvidar la sincronización anterior? Esto no es recomendable."
msgctxt "#33174" msgctxt "#33174"
msgid "Paging - download threads (default: 3)" msgid "Paging - download threads (default: 3)"
@ -946,7 +946,7 @@ msgstr "Reiniciar Jellyfin para Kodi"
msgctxt "#33193" msgctxt "#33193"
msgid "Restarting..." msgid "Restarting..."
msgstr "Reiniciar…" msgstr "Reiniciando…"
msgctxt "#33194" msgctxt "#33194"
msgid "Manage libraries" msgid "Manage libraries"
@ -963,5 +963,17 @@ msgstr "Opciones avanzadas"
msgctxt "#33197" msgctxt "#33197"
msgid "A sync is already running, please wait until it completes and try again." msgid "A sync is already running, please wait until it completes and try again."
msgstr "" msgstr ""
"Una sincronización ya se está ejecutando, por favor, espere hasta que se " "Una sincronización ya se está ejecutando, por favor, espera hasta que se "
"complete e inténtelo de nuevo." "complete e inténtalo de nuevo."
msgctxt "#33200"
msgid "Select the libraries to remove"
msgstr "Selecciona las bibliotecas que quieres eliminar"
msgctxt "#33199"
msgid "Select the libraries to repair"
msgstr "Selecciona las bibliotecas que quieres reparar"
msgctxt "#33198"
msgid "Select the libraries to update"
msgstr "Selecciona las bibliotecas que quieres actualizar"

View file

@ -9,8 +9,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Jellyfin for Kodi\n" "Project-Id-Version: Jellyfin for Kodi\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2020-01-05 17:16+0000\n" "PO-Revision-Date: 2020-01-12 10:16+0000\n"
"Last-Translator: Thoscellen <Thoscellen@gmail.com>\n" "Last-Translator: Philmo67 <philmo67@gmail.com>\n"
"Language-Team: French <https://translate.jellyfin.org/projects/jellyfin/" "Language-Team: French <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/fr/>\n" "jellyfin-kodi/fr/>\n"
"Language: fr_fr\n" "Language: fr_fr\n"
@ -574,7 +574,7 @@ msgid ""
" options > Enable Kodi Sync Queue." " options > Enable Kodi Sync Queue."
msgstr "" msgstr ""
"Installez le plugin serveur Kodi Sync Queue pour appliquer automatiquement " "Installez le plugin serveur Kodi Sync Queue pour appliquer automatiquement "
"les mises à jour de la bibliothèque Jellyfin au démarrage. Ce paramètre se " "les mises à jour de la médiathèque Jellyfin au démarrage. Ce paramètre se "
"trouve dans les paramètres complémentaires > options de synchronisation > " "trouve dans les paramètres complémentaires > options de synchronisation > "
"Activer Kodi Sync Queue." "Activer Kodi Sync Queue."
@ -931,7 +931,7 @@ msgstr "Oublier la synchronisation précédente ? Ceci n'est pas recommandé."
msgctxt "#33174" msgctxt "#33174"
msgid "Paging - download threads (default: 3)" msgid "Paging - download threads (default: 3)"
msgstr "" msgstr "Pagination - téléchargements simultanés (par défaut: 3)"
msgctxt "#33175" msgctxt "#33175"
msgid "" msgid ""
@ -979,7 +979,7 @@ msgstr "Activer cette option pour utiliser le mode cinéma"
msgctxt "#33184" msgctxt "#33184"
msgid "Remove libraries" msgid "Remove libraries"
msgstr "Supprimer les bibliothèques" msgstr "Supprimer les médiathèques"
msgctxt "#33185" msgctxt "#33185"
msgid "Enable sync during playback (may cause some lag)" msgid "Enable sync during playback (may cause some lag)"
@ -987,11 +987,14 @@ msgstr ""
"Activer la synchronisation durant la lecture (cela peut causer des " "Activer la synchronisation durant la lecture (cela peut causer des "
"ralentissements)" "ralentissements)"
#, fuzzy
msgctxt "#33186" msgctxt "#33186"
msgid "" msgid ""
"The Kodi Sync Queue speeds up the start up sync. Other syncs are triggered by" "The Kodi Sync Queue speeds up the start up sync. Other syncs are triggered by"
" server events." " server events."
msgstr "" msgstr ""
"Kodi Sync Queue accélère la synchronisation au démarrage. D'autres "
"synchronisations sont déclenchées par des événements sur le serveur."
msgctxt "#33191" msgctxt "#33191"
msgid "Restart Jellyfin for Kodi to apply this change?" msgid "Restart Jellyfin for Kodi to apply this change?"
@ -1016,18 +1019,17 @@ msgstr "Activer Jellyfin pour Kodi"
msgctxt "#33200" msgctxt "#33200"
msgid "Select the libraries to remove" msgid "Select the libraries to remove"
msgstr "Sélectionnez les bibliothèques à supprimer" msgstr "Sélectionnez les médiathèques à supprimer"
msgctxt "#33197" msgctxt "#33197"
msgid "A sync is already running, please wait until it completes and try again." msgid "A sync is already running, please wait until it completes and try again."
msgstr "" msgstr ""
"Une synchronisation est déjà en cours dexécution, veuillez de patienter " "Une synchronisation est déjà en cours dexécution, veuillez patienter jusqu"
"jusquà la fin et réessayer." "à la fin puis réessayer."
#, fuzzy
msgctxt "#33194" msgctxt "#33194"
msgid "Manage libraries" msgid "Manage libraries"
msgstr "Gérer les bibliothèques" msgstr "Gérer les médiathèques"
msgctxt "#30504" msgctxt "#30504"
msgid "Use alternate device name" msgid "Use alternate device name"
@ -1035,8 +1037,8 @@ msgstr "Utiliser un autre nom d'appareil"
msgctxt "#33199" msgctxt "#33199"
msgid "Select the libraries to repair" msgid "Select the libraries to repair"
msgstr "Sélectionnez les bibliothèque à réparer" msgstr "Sélectionnez les médiathèques à réparer"
msgctxt "#33198" msgctxt "#33198"
msgid "Select the libraries to update" msgid "Select the libraries to update"
msgstr "Sélectionnez les bibliothèques à actualiser" msgstr "Sélectionnez les médiathèques à actualiser"

View file

@ -6,8 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Jellyfin for Kodi\n" "Project-Id-Version: Jellyfin for Kodi\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2019-10-18 14:14+0000\n" "PO-Revision-Date: 2020-01-12 10:17+0000\n"
"Last-Translator: Marius Lindvall <marius@varden.info>\n" "Last-Translator: Alexander Brissman <esmorun@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://translate.jellyfin.org/projects/" "Language-Team: Norwegian Bokmål <https://translate.jellyfin.org/projects/"
"jellyfin/jellyfin-kodi/nb_NO/>\n" "jellyfin/jellyfin-kodi/nb_NO/>\n"
"Language: nb_NO\n" "Language: nb_NO\n"
@ -71,7 +71,7 @@ msgstr "For filmer"
msgctxt "#30157" msgctxt "#30157"
msgid "Enable enhanced artwork (i.e. cover art)" msgid "Enable enhanced artwork (i.e. cover art)"
msgstr "Aktiver forbedret metagrafikk (f.eks. platecover)" msgstr "Aktiver forbedrede omslagsbilder (f.eks. albumomslag)"
msgctxt "#30160" msgctxt "#30160"
msgid "Video quality" msgid "Video quality"
@ -243,7 +243,7 @@ msgstr "Avspillingsmodus"
msgctxt "#30512" msgctxt "#30512"
msgid "Enable artwork caching" msgid "Enable artwork caching"
msgstr "Aktiver mellomlagring av metagrafikk" msgstr "Aktiver mellomlagring av omslagsbilder"
msgctxt "#30515" msgctxt "#30515"
msgid "Paging - max items requested (default: 15)" msgid "Paging - max items requested (default: 15)"
@ -279,7 +279,7 @@ msgstr "Omkod H265/HEVC"
msgctxt "#30527" msgctxt "#30527"
msgid "Ignore specials in next episodes" msgid "Ignore specials in next episodes"
msgstr "Ignorer episoder i kommende episoder" msgstr "Ignorer spesialepisoder i kommende episoder"
msgctxt "#30528" msgctxt "#30528"
msgid "Permanent users" msgid "Permanent users"
@ -291,7 +291,7 @@ msgstr "Oppstartsforsinkelse (i sekunder)"
msgctxt "#30530" msgctxt "#30530"
msgid "Enable server restart message" msgid "Enable server restart message"
msgstr "Aktiver serveromstartsmelding" msgstr "Aktiver melding ved omstart av server"
msgctxt "#30531" msgctxt "#30531"
msgid "Enable new content" msgid "Enable new content"
@ -299,11 +299,11 @@ msgstr "Aktiver nytt innhold"
msgctxt "#30532" msgctxt "#30532"
msgid "Duration of the video library pop up" msgid "Duration of the video library pop up"
msgstr "Varighet av videobibliotekspopup" msgstr "Varighet for videobiblioteks-popup"
msgctxt "#30533" msgctxt "#30533"
msgid "Duration of the music library pop up" msgid "Duration of the music library pop up"
msgstr "Varighet av musikkbibliotekpopup" msgstr "Varighet for musikkbiblioteks-popup"
msgctxt "#30534" msgctxt "#30534"
msgid "Notifications (in seconds)" msgid "Notifications (in seconds)"
@ -509,11 +509,11 @@ msgstr "Er du sikker på at du vil nullstille den lokale Kodi-databasen?"
msgctxt "#33086" msgctxt "#33086"
msgid "Remove all cached artwork?" msgid "Remove all cached artwork?"
msgstr "Fjern all mellomlagret metagrafikk?" msgstr "Fjern alle mellomlagrede omslagsbilder?"
msgctxt "#33087" msgctxt "#33087"
msgid "Reset all Jellyfin add-on settings?" msgid "Reset all Jellyfin add-on settings?"
msgstr "Tilbakestill alle Jellyfin-tilleggsinnstillinger?" msgstr "Tilbakestill alle innstillinger for Jellyfin-utvidelsen?"
msgctxt "#33088" msgctxt "#33088"
msgid "Database reset has completed, Kodi will now restart to apply the changes." msgid "Database reset has completed, Kodi will now restart to apply the changes."
@ -554,9 +554,10 @@ msgstr "Oppdater samlebokser"
msgctxt "#33099" msgctxt "#33099"
msgid "Install the server plugin Kodi Sync Queue to automatically apply Jellyfin library updates at startup. This setting can be found in the add-on settings > sync options > Enable Kodi Sync Queue." msgid "Install the server plugin Kodi Sync Queue to automatically apply Jellyfin library updates at startup. This setting can be found in the add-on settings > sync options > Enable Kodi Sync Queue."
msgstr "" msgstr ""
"Installer serverpluginen Kodi Sync Queue for å automatisk hente oppdateringer " "Installer programtillegget Kodi Sync Queue på serveren for å oppdatere "
"i Jellyfin-bibliotekene ved oppstart. Denne innstillingen kan finnes i " "Jellyfin-bibliotekene automatisk ved oppstart. Aktiver også innstillingen i "
"tilleggsinnstillinger > synkroniseringsvalg > Aktiver Kodi Sync Queue." "Kodi under Utvidelser > Jellyfin > Innstillinger > Synkronisering > Aktiver "
"Kodi Sync Queue."
msgctxt "#33101" msgctxt "#33101"
msgid "Since you are using native playback mode with music enabled, do you want to import music rating from files?" msgid "Since you are using native playback mode with music enabled, do you want to import music rating from files?"
@ -571,8 +572,8 @@ msgstr "Gjenoppta forrige synkronisering?"
msgctxt "#33103" msgctxt "#33103"
msgid "Enable the webserver service in the Kodi settings to allow artwork caching." msgid "Enable the webserver service in the Kodi settings to allow artwork caching."
msgstr "" msgstr ""
"Aktiver webservertjenesten i Kodi-innstillinger for å tillate mellomlagring " "Tillat fjernkontroll via HTTP i innstillingene for Kodi for å tillate "
"av metagrafikk." "mellomlagring av omslagsbilder."
msgctxt "#33104" msgctxt "#33104"
msgid "Find more info in the github wiki/Create-and-restore-from-backup." msgid "Find more info in the github wiki/Create-and-restore-from-backup."
@ -628,13 +629,13 @@ msgstr "Juster for fjerntilkobling"
msgctxt "#33116" msgctxt "#33116"
msgid "Compress artwork (reduces quality)" msgid "Compress artwork (reduces quality)"
msgstr "Komprimer metagrafikk (reduserer kvaliteten)" msgstr "Komprimer omslagsbilder (reduserer kvaliteten)"
msgctxt "#33117" msgctxt "#33117"
msgid "Enable artwork caching? If not, Kodi will still cache your artwork at a slower pace." msgid "Enable artwork caching? If not, Kodi will still cache your artwork at a slower pace."
msgstr "" msgstr ""
"Aktiver mellomlagring av metagrafikk? Hvis ikke vil Kodi fortsatt " "Aktiver mellomlagring av omslagsbilder? Hvis ikke vil Kodi fortsatt "
"mellomlagre metagrafikk saktere." "mellomlagre omslagsbilder saktere."
msgctxt "#33118" msgctxt "#33118"
msgid "You've change the playback mode. Kodi needs to be reset to apply the change, would you like to do this now?" msgid "You've change the playback mode. Kodi needs to be reset to apply the change, would you like to do this now?"
@ -751,8 +752,8 @@ msgctxt "#33145"
msgid "Please make sure your Samba (smb) share of your Jellyfin server is accessible to your Kodi installation and that you have path substitution configured on your server. Otherwise, Kodi may fail to locate your files." msgid "Please make sure your Samba (smb) share of your Jellyfin server is accessible to your Kodi installation and that you have path substitution configured on your server. Otherwise, Kodi may fail to locate your files."
msgstr "" msgstr ""
"Vennligst påse at Samba (smb)-volumet på Jellyfin-serveren er tilgjengelig " "Vennligst påse at Samba (smb)-volumet på Jellyfin-serveren er tilgjengelig "
"for Kodi-installasjonen og at du har filbaneerstatning satt opp på serveren. " "for Kodi-installasjonen og at du har erstatning av filbaner satt opp på "
"Ellers kan det hende at Kodi ikke finner filene dine." "serveren. Ellers kan det hende at Kodi ikke finner filene dine."
msgctxt "#33146" msgctxt "#33146"
msgid "Unable to connect to Jellyfin." msgid "Unable to connect to Jellyfin."
@ -777,8 +778,8 @@ msgstr "Oppdater serverinformasjon"
msgctxt "#33151" msgctxt "#33151"
msgid "Reconnect to the same server that was previously loaded. If you want to use a different server, reset your local database, including your user information." msgid "Reconnect to the same server that was previously loaded. If you want to use a different server, reset your local database, including your user information."
msgstr "" msgstr ""
"Koble til samme server som tidligere var lastet inn. Hvis du vil bruke en " "Koble til samme server som tidligere. Hvis du vil bruke en annen server, "
"annen server, nullstill den lokale databasen, inkludert brukerinformasjon." "nullstill den lokale databasen, inkludert brukerinformasjon."
msgctxt "#33152" msgctxt "#33152"
msgid "Unable to locate TV Tunes in Kodi." msgid "Unable to locate TV Tunes in Kodi."
@ -921,7 +922,7 @@ msgstr "Aktiver synkronisering under avspilling (kan forårsake noe forsinkelse)
msgctxt "#33186" msgctxt "#33186"
msgid "The Kodi Sync Queue speeds up the start up sync. Other syncs are triggered by server events." msgid "The Kodi Sync Queue speeds up the start up sync. Other syncs are triggered by server events."
msgstr "" msgstr ""
"Kodi Sync Queue får oppstartssynkroniseringen til å gå raskere. Andre " "Kodi Sync Queue får synkroniseringen ved oppstart til å gå raskere. Andre "
"synkroniseringer startes av serverhendelser." "synkroniseringer startes av serverhendelser."
msgctxt "#33191" msgctxt "#33191"

View file

@ -0,0 +1,125 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-01-12 10:17+0000\n"
"Last-Translator: Slobodan Simić <slsimic@gmail.com>\n"
"Language-Team: Serbian <https://translate.jellyfin.org/projects/jellyfin/"
"jellyfin-kodi/sr/>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
msgctxt "#30252"
msgid "Recently added Photos"
msgstr "Недавно додате фотографије"
msgctxt "#30251"
msgid "Recently added Home Videos"
msgstr "Недавно додати кућни видео"
msgctxt "#30249"
msgid "Enable welcome message"
msgstr "Укључи поруку добродошлице"
msgctxt "#30239"
msgid "Reset local Kodi database"
msgstr "Ресетуј локалну Кодијеву базу"
msgctxt "#30235"
msgid "Interface"
msgstr "Сучеље"
msgctxt "#30230"
msgid "Recommended Items"
msgstr "Препоручене ставке"
msgctxt "#30229"
msgid "Random Items"
msgstr "Насумичне ставке"
msgctxt "#30189"
msgid "Unwatched Movies"
msgstr "Неодгледани филмови"
msgctxt "#30185"
msgid "Boxsets"
msgstr "Комплети"
msgctxt "#30182"
msgid "Favorite Episodes"
msgstr "Омиљене епизоде"
msgctxt "#30181"
msgid "Favorite Shows"
msgstr "Омиљене серије"
msgctxt "#30180"
msgid "Favorite Movies"
msgstr "Омиљени филмови"
msgctxt "#30179"
msgid "Next Episodes"
msgstr "Следеће епизоде"
msgctxt "#30170"
msgid "Recently Added TV Shows"
msgstr "Недавно додате ТВ серије"
msgctxt "#30160"
msgid "Video quality"
msgstr "Квалитет видеа"
msgctxt "#30116"
msgid "For Movies"
msgstr "за филмове"
msgctxt "#30115"
msgid "For Episodes"
msgstr "за епизоде"
msgctxt "#30114"
msgid "Offer delete after playback"
msgstr "Понуди брисање након пуштања"
msgctxt "#30091"
msgid "Confirm file deletion"
msgstr "Потврдите брисање"
msgctxt "#30024"
msgid "Username"
msgstr "Корисничко име"
msgctxt "#30022"
msgid "Advanced"
msgstr "Напредно"
msgctxt "#30016"
msgid "Device name"
msgstr "Назив уређаја"
msgctxt "#30004"
msgid "Log level"
msgstr "Ниво записника"
msgctxt "#30003"
msgid "Login method"
msgstr "Начин пријаве"
msgctxt "#30002"
msgid "Force HTTP playback"
msgstr "Присили ХТТП пуштање"
msgctxt "#30001"
msgid "Server name"
msgstr "Назив сервера"
msgctxt "#30000"
msgid "Server address"
msgstr "Адреса сервера"
msgctxt "#29999"
msgid "Jellyfin for Kodi"
msgstr "Џелифин за Кодија"