Merge branch 'develop' of https://github.com/MediaBrowser/Emby.Kodi into develop
This commit is contained in:
commit
6aab9df054
25 changed files with 2720 additions and 378 deletions
248
contextmenu.py
248
contextmenu.py
|
@ -1,7 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
###############################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import urlparse
|
import urlparse
|
||||||
|
@ -10,166 +11,165 @@ import xbmc
|
||||||
import xbmcaddon
|
import xbmcaddon
|
||||||
import xbmcgui
|
import xbmcgui
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
_addon = xbmcaddon.Addon(id='plugin.video.plexkodiconnect')
|
_addon = xbmcaddon.Addon(id='plugin.video.emby')
|
||||||
try:
|
_addon_path = _addon.getAddonInfo('path').decode('utf-8')
|
||||||
addon_path = _addon.getAddonInfo('path').decode('utf-8')
|
_base_resource = xbmc.translatePath(os.path.join(_addon_path, 'resources', 'lib')).decode('utf-8')
|
||||||
except TypeError:
|
sys.path.append(_base_resource)
|
||||||
addon_path = _addon.getAddonInfo('path').decode()
|
|
||||||
try:
|
|
||||||
base_resource = xbmc.translatePath(os.path.join(
|
|
||||||
addon_path,
|
|
||||||
'resources',
|
|
||||||
'lib')).decode('utf-8')
|
|
||||||
except TypeError:
|
|
||||||
base_resource = xbmc.translatePath(os.path.join(
|
|
||||||
addon_path,
|
|
||||||
'resources',
|
|
||||||
'lib')).decode()
|
|
||||||
sys.path.append(base_resource)
|
|
||||||
|
|
||||||
import utils
|
#################################################################################################
|
||||||
|
|
||||||
|
import api
|
||||||
import artwork
|
import artwork
|
||||||
import clientinfo
|
|
||||||
import downloadutils
|
import downloadutils
|
||||||
import librarysync
|
import librarysync
|
||||||
import read_embyserver as embyserver
|
import read_embyserver as embyserver
|
||||||
import embydb_functions as embydb
|
import embydb_functions as embydb
|
||||||
import kodidb_functions as kodidb
|
import kodidb_functions as kodidb
|
||||||
import musicutils as musicutils
|
import musicutils as musicutils
|
||||||
|
from utils import settings, language as lang, kodiSQL
|
||||||
|
|
||||||
import PlexFunctions as PF
|
#################################################################################################
|
||||||
import PlexAPI
|
|
||||||
|
|
||||||
|
import loghandler
|
||||||
|
|
||||||
def logMsg(msg, lvl=1):
|
loghandler.config()
|
||||||
utils.logMsg("%s %s" % ("PlexKodiConnect", "Contextmenu"), msg, lvl)
|
log = logging.getLogger("EMBY.contextmenu")
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
# Kodi contextmenu item to configure the emby settings
|
# Kodi contextmenu item to configure the emby settings
|
||||||
#for now used to set ratings but can later be used to sync individual items etc.
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
itemid = utils.tryDecode(xbmc.getInfoLabel("ListItem.DBID"))
|
|
||||||
itemtype = utils.tryDecode(xbmc.getInfoLabel("ListItem.DBTYPE"))
|
kodiId = xbmc.getInfoLabel('ListItem.DBID').decode('utf-8')
|
||||||
|
itemType = xbmc.getInfoLabel('ListItem.DBTYPE').decode('utf-8')
|
||||||
|
itemId = ""
|
||||||
|
|
||||||
|
if not itemType:
|
||||||
|
|
||||||
|
if xbmc.getCondVisibility("Container.Content(albums)"):
|
||||||
|
itemType = "album"
|
||||||
|
elif xbmc.getCondVisibility("Container.Content(artists)"):
|
||||||
|
itemType = "artist"
|
||||||
|
elif xbmc.getCondVisibility("Container.Content(songs)"):
|
||||||
|
itemType = "song"
|
||||||
|
elif xbmc.getCondVisibility("Container.Content(pictures)"):
|
||||||
|
itemType = "picture"
|
||||||
|
else:
|
||||||
|
log.info("ItemType is unknown.")
|
||||||
|
|
||||||
|
if (not kodiId or kodiId == "-1") and xbmc.getInfoLabel("ListItem.Property(embyid)"):
|
||||||
|
itemId = xbmc.getInfoLabel("ListItem.Property(embyid)")
|
||||||
|
|
||||||
|
elif kodiId and itemType:
|
||||||
|
embyconn = kodiSQL('emby')
|
||||||
|
embycursor = embyconn.cursor()
|
||||||
|
emby_db = embydb.Embydb_Functions(embycursor)
|
||||||
|
item = emby_db.getItem_byKodiId(kodiId, itemType)
|
||||||
|
embycursor.close()
|
||||||
|
try:
|
||||||
|
itemId = item[0]
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
log.info("Found ItemId: %s ItemType: %s" % (itemId, itemType))
|
||||||
|
if itemId:
|
||||||
|
|
||||||
|
dialog = xbmcgui.Dialog()
|
||||||
|
|
||||||
emby = embyserver.Read_EmbyServer()
|
emby = embyserver.Read_EmbyServer()
|
||||||
|
item = emby.getItem(itemId)
|
||||||
plexid = ""
|
API = api.API(item)
|
||||||
if not itemtype and xbmc.getCondVisibility("Container.Content(albums)"): itemtype = "album"
|
|
||||||
if not itemtype and xbmc.getCondVisibility("Container.Content(artists)"): itemtype = "artist"
|
|
||||||
if not itemtype and xbmc.getCondVisibility("Container.Content(songs)"): itemtype = "song"
|
|
||||||
if not itemtype and xbmc.getCondVisibility("Container.Content(pictures)"): itemtype = "picture"
|
|
||||||
|
|
||||||
if (not itemid or itemid == "-1") and xbmc.getInfoLabel("ListItem.Property(plexid)"):
|
|
||||||
plexid = xbmc.getInfoLabel("ListItem.Property(plexid)")
|
|
||||||
else:
|
|
||||||
with embydb.GetEmbyDB() as emby_db:
|
|
||||||
item = emby_db.getItem_byKodiId(itemid, itemtype)
|
|
||||||
if item:
|
|
||||||
plexid = item[0]
|
|
||||||
|
|
||||||
logMsg("Contextmenu opened for plexid: %s - itemtype: %s" %(plexid,itemtype))
|
|
||||||
|
|
||||||
if plexid:
|
|
||||||
item = PF.GetPlexMetadata(plexid)
|
|
||||||
if item is None or item == 401:
|
|
||||||
logMsg('Could not get item metadata for item %s' % plexid, -1)
|
|
||||||
return
|
|
||||||
API = PlexAPI.API(item[0])
|
|
||||||
userdata = API.getUserData()
|
userdata = API.getUserData()
|
||||||
likes = userdata['Likes']
|
likes = userdata['Likes']
|
||||||
favourite = userdata['Favorite']
|
favourite = userdata['Favorite']
|
||||||
|
|
||||||
options = []
|
options = []
|
||||||
if likes == True:
|
|
||||||
#clear like for the item
|
if favourite:
|
||||||
options.append(utils.language(30402))
|
|
||||||
if likes == False or likes == None:
|
|
||||||
#Like the item
|
|
||||||
options.append(utils.language(30403))
|
|
||||||
if likes == True or likes == None:
|
|
||||||
#Dislike the item
|
|
||||||
options.append(utils.language(30404))
|
|
||||||
if favourite == False:
|
|
||||||
#Add to emby favourites
|
|
||||||
options.append(utils.language(30405))
|
|
||||||
if favourite == True:
|
|
||||||
# Remove from emby favourites
|
# Remove from emby favourites
|
||||||
options.append(utils.language(30406))
|
options.append(lang(30406))
|
||||||
if itemtype == "song":
|
else:
|
||||||
|
# Add to emby favourites
|
||||||
|
options.append(lang(30405))
|
||||||
|
|
||||||
|
if itemType == "song":
|
||||||
# Set custom song rating
|
# Set custom song rating
|
||||||
options.append(utils.language(30407))
|
options.append(lang(30407))
|
||||||
|
|
||||||
#delete item
|
# Refresh item
|
||||||
options.append(utils.language(30409))
|
options.append(lang(30410))
|
||||||
|
# Delete item
|
||||||
|
options.append(lang(30409))
|
||||||
|
# Addon settings
|
||||||
|
options.append(lang(30408))
|
||||||
|
|
||||||
#addon settings
|
# Display select dialog and process results
|
||||||
options.append(utils.language(30408))
|
resp = xbmcgui.Dialog().select(lang(30401), options)
|
||||||
|
if resp > -1:
|
||||||
|
selected = options[resp]
|
||||||
|
|
||||||
#display select dialog and process results
|
if selected == lang(30410):
|
||||||
header = utils.language(30401)
|
# Refresh item
|
||||||
ret = xbmcgui.Dialog().select(header, options)
|
emby.refreshItem(itemId)
|
||||||
if ret != -1:
|
elif selected == lang(30405):
|
||||||
if options[ret] == utils.language(30402):
|
# Add favourite
|
||||||
emby.updateUserRating(plexid, deletelike=True)
|
emby.updateUserRating(itemId, favourite=True)
|
||||||
if options[ret] == utils.language(30403):
|
elif selected == lang(30406):
|
||||||
emby.updateUserRating(plexid, like=True)
|
# Delete favourite
|
||||||
if options[ret] == utils.language(30404):
|
emby.updateUserRating(itemId, favourite=False)
|
||||||
emby.updateUserRating(plexid, like=False)
|
elif selected == lang(30407):
|
||||||
if options[ret] == utils.language(30405):
|
# Update song rating
|
||||||
emby.updateUserRating(plexid, favourite=True)
|
kodiconn = kodiSQL('music')
|
||||||
if options[ret] == utils.language(30406):
|
|
||||||
emby.updateUserRating(plexid, favourite=False)
|
|
||||||
if options[ret] == utils.language(30407):
|
|
||||||
kodiconn = utils.kodiSQL('music')
|
|
||||||
kodicursor = kodiconn.cursor()
|
kodicursor = kodiconn.cursor()
|
||||||
query = ' '.join(("SELECT rating", "FROM song", "WHERE idSong = ?" ))
|
query = "SELECT rating FROM song WHERE idSong = ?"
|
||||||
kodicursor.execute(query, (itemid,))
|
kodicursor.execute(query, (kodiId,))
|
||||||
currentvalue = int(round(float(kodicursor.fetchone()[0]),0))
|
try:
|
||||||
newvalue = xbmcgui.Dialog().numeric(0, "Set custom song rating (0-5)", str(currentvalue))
|
value = kodicursor.fetchone()[0]
|
||||||
if newvalue:
|
current_value = int(round(float(value),0))
|
||||||
newvalue = int(newvalue)
|
except TypeError:
|
||||||
if newvalue > 5: newvalue = "5"
|
pass
|
||||||
if utils.settings('enableUpdateSongRating') == "true":
|
else:
|
||||||
musicutils.updateRatingToFile(newvalue, API.getFilePath())
|
new_value = dialog.numeric(0, lang(30411), str(current_value))
|
||||||
if utils.settings('enableExportSongRating') == "true":
|
if new_value > -1:
|
||||||
like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(newvalue)
|
|
||||||
emby.updateUserRating(plexid, like, favourite, deletelike)
|
new_value = int(new_value)
|
||||||
query = ' '.join(( "UPDATE song","SET rating = ?", "WHERE idSong = ?" ))
|
if new_value > 5:
|
||||||
kodicursor.execute(query, (newvalue,itemid,))
|
new_value = 5
|
||||||
|
|
||||||
|
if settings('enableUpdateSongRating') == "true":
|
||||||
|
musicutils.updateRatingToFile(new_value, API.getFilePath())
|
||||||
|
|
||||||
|
query = "UPDATE song SET rating = ? WHERE idSong = ?"
|
||||||
|
kodicursor.execute(query, (new_value, kodiId,))
|
||||||
kodiconn.commit()
|
kodiconn.commit()
|
||||||
|
|
||||||
if options[ret] == utils.language(30408):
|
'''if settings('enableExportSongRating') == "true":
|
||||||
#Open addon settings
|
like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(new_value)
|
||||||
xbmc.executebuiltin("Addon.OpenSettings(plugin.video.plexkodiconnect)")
|
emby.updateUserRating(itemId, like, favourite, deletelike)'''
|
||||||
|
finally:
|
||||||
|
kodicursor.close()
|
||||||
|
|
||||||
if options[ret] == utils.language(30409):
|
elif selected == lang(30408):
|
||||||
|
# Open addon settings
|
||||||
|
xbmc.executebuiltin("Addon.OpenSettings(plugin.video.emby)")
|
||||||
|
|
||||||
|
elif selected == lang(30409):
|
||||||
# delete item from the server
|
# delete item from the server
|
||||||
delete = True
|
delete = True
|
||||||
if utils.settings('skipContextMenu') != "true":
|
if settings('skipContextMenu') != "true":
|
||||||
resp = xbmcgui.Dialog().yesno(
|
resp = dialog.yesno(
|
||||||
heading="Confirm delete",
|
heading=lang(29999),
|
||||||
line1=("Delete file from Emby Server? This will "
|
line1=lang(33041))
|
||||||
"also delete the file(s) from disk!"))
|
|
||||||
if not resp:
|
if not resp:
|
||||||
logMsg("User skipped deletion for: %s." % plexid, 1)
|
log.info("User skipped deletion for: %s." % itemId)
|
||||||
delete = False
|
delete = False
|
||||||
|
|
||||||
if delete:
|
if delete:
|
||||||
import downloadutils
|
log.info("Deleting request: %s" % itemId)
|
||||||
doUtils = downloadutils.DownloadUtils()
|
emby.deleteItem(itemId)
|
||||||
url = "{server}/emby/Items/%s?format=json" % plexid
|
|
||||||
logMsg("Deleting request: %s" % plexid, 0)
|
|
||||||
doUtils.downloadUrl(url, action_type="DELETE")
|
|
||||||
|
|
||||||
'''if utils.settings('skipContextMenu') != "true":
|
|
||||||
if xbmcgui.Dialog().yesno(
|
|
||||||
heading="Confirm delete",
|
|
||||||
line1=("Delete file on Emby Server? This will "
|
|
||||||
"also delete the file(s) from disk!")):
|
|
||||||
import downloadutils
|
|
||||||
doUtils = downloadutils.DownloadUtils()
|
|
||||||
doUtils.downloadUrl("{server}/emby/Items/%s?format=json" % plexid, action_type="DELETE")'''
|
|
||||||
|
|
||||||
xbmc.sleep(500)
|
xbmc.sleep(500)
|
||||||
xbmc.executebuiltin("Container.Update")
|
xbmc.executebuiltin('Container.Refresh')
|
31
default.py
31
default.py
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import urlparse
|
import urlparse
|
||||||
|
@ -11,7 +12,10 @@ import xbmcaddon
|
||||||
import xbmcgui
|
import xbmcgui
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
_addon = xbmcaddon.Addon(id='plugin.video.emby')
|
||||||
|
_addon_path = _addon.getAddonInfo('path').decode('utf-8')
|
||||||
|
_base_resource = xbmc.translatePath(os.path.join(_addon_path, 'resources', 'lib')).decode('utf-8')
|
||||||
|
sys.path.append(_base_resource)
|
||||||
|
|
||||||
_addon = xbmcaddon.Addon(id='plugin.video.plexkodiconnect')
|
_addon = xbmcaddon.Addon(id='plugin.video.plexkodiconnect')
|
||||||
try:
|
try:
|
||||||
|
@ -28,26 +32,33 @@ except TypeError:
|
||||||
addon_path,
|
addon_path,
|
||||||
'resources',
|
'resources',
|
||||||
'lib')).decode()
|
'lib')).decode()
|
||||||
sys.path.append(base_resource)
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import entrypoint
|
import entrypoint
|
||||||
import utils
|
import utils
|
||||||
|
from utils import window, language as lang
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
enableProfiling = False
|
import loghandler
|
||||||
|
|
||||||
|
loghandler.config()
|
||||||
|
log = logging.getLogger("EMBY.default")
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
|
|
||||||
class Main:
|
class Main():
|
||||||
|
|
||||||
# MAIN ENTRY POINT
|
# MAIN ENTRY POINT
|
||||||
|
#@utils.profiling()
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Parse parameters
|
# Parse parameters
|
||||||
xbmc.log("PlexKodiConnect - Full sys.argv received: %s" % sys.argv)
|
xbmc.log("PlexKodiConnect - Full sys.argv received: %s" % sys.argv)
|
||||||
base_url = sys.argv[0]
|
base_url = sys.argv[0]
|
||||||
params = urlparse.parse_qs(sys.argv[2][1:])
|
params = urlparse.parse_qs(sys.argv[2][1:])
|
||||||
|
log.warn("Parameter string: %s" % sys.argv[2])
|
||||||
try:
|
try:
|
||||||
mode = params['mode'][0]
|
mode = params['mode'][0]
|
||||||
itemid = params.get('id', '')
|
itemid = params.get('id', '')
|
||||||
|
@ -93,6 +104,8 @@ class Main:
|
||||||
plexpath = sys.argv[2][1:]
|
plexpath = sys.argv[2][1:]
|
||||||
plexid = params.get('id', [""])[0]
|
plexid = params.get('id', [""])[0]
|
||||||
entrypoint.getExtraFanArt(plexid, plexpath)
|
entrypoint.getExtraFanArt(plexid, plexpath)
|
||||||
|
entrypoint.getVideoFiles(embyid, embypath)
|
||||||
|
return
|
||||||
|
|
||||||
# Called by e.g. 3rd party plugin video extras
|
# Called by e.g. 3rd party plugin video extras
|
||||||
if ("/Extras" in sys.argv[0] or "/VideoFiles" in sys.argv[0] or
|
if ("/Extras" in sys.argv[0] or "/VideoFiles" in sys.argv[0] or
|
||||||
|
@ -111,7 +124,7 @@ class Main:
|
||||||
limit = int(params['limit'][0])
|
limit = int(params['limit'][0])
|
||||||
modes[mode](itemid, limit)
|
modes[mode](itemid, limit)
|
||||||
|
|
||||||
elif mode in ["channels","getsubfolders"]:
|
elif mode in ("channels","getsubfolders"):
|
||||||
modes[mode](itemid)
|
modes[mode](itemid)
|
||||||
|
|
||||||
elif mode == "browsecontent":
|
elif mode == "browsecontent":
|
||||||
|
@ -164,7 +177,8 @@ class Main:
|
||||||
|
|
||||||
elif mode == "texturecache":
|
elif mode == "texturecache":
|
||||||
import artwork
|
import artwork
|
||||||
artwork.Artwork().FullTextureCacheSync()
|
artwork.Artwork().fullTextureCacheSync()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
entrypoint.doMainListing()
|
entrypoint.doMainListing()
|
||||||
|
|
||||||
|
@ -192,3 +206,8 @@ if ( __name__ == "__main__" ):
|
||||||
Main()
|
Main()
|
||||||
|
|
||||||
xbmc.log('plugin.video.plexkodiconnect stopped')
|
xbmc.log('plugin.video.plexkodiconnect stopped')
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
log.info('plugin.video.emby started')
|
||||||
|
Main()
|
||||||
|
log.info('plugin.video.emby stopped')
|
305
resources/language/Dutch/strings.xml
Normal file
305
resources/language/Dutch/strings.xml
Normal file
|
@ -0,0 +1,305 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<strings>
|
||||||
|
<!-- Add-on settings -->
|
||||||
|
<string id="29999">Emby voor Kodi</string>
|
||||||
|
<string id="30000">Primaire server adres</string>
|
||||||
|
<string id="30002">Afspelen vanaf HTTP in plaats van SMB</string>
|
||||||
|
<string id="30004">Log niveau</string>
|
||||||
|
<string id="30016">Apparaatnaam</string>
|
||||||
|
<string id="30022">Geavanceerd</string>
|
||||||
|
<string id="30024">Gebruikersnaam</string>
|
||||||
|
<string id="30030">Poortnummer</string>
|
||||||
|
<string id="30035">Aantal recente muziekalbums die getoond worden:</string>
|
||||||
|
<string id="30036">Aantal recente films die getoond worden:</string>
|
||||||
|
<string id="30037">Aantal recente TV-series die getoond worden:</string>
|
||||||
|
<string id="30042">Vernieuwen</string>
|
||||||
|
<string id="30043">Wissen</string>
|
||||||
|
<string id="30044">Ongeldige gebruikersnaam/wachtwoord</string>
|
||||||
|
<string id="30045">Gebruikersnaam niet gevonden</string>
|
||||||
|
<string id="30052">Wissen...</string>
|
||||||
|
<string id="30053">Wacht op server voor wissen</string>
|
||||||
|
<string id="30068">Sorteer op</string>
|
||||||
|
<string id="30069">Geen</string>
|
||||||
|
<string id="30070">Actie</string>
|
||||||
|
<string id="30071">Avontuur</string>
|
||||||
|
<string id="30072">Animatie</string>
|
||||||
|
<string id="30073">Misdaad</string>
|
||||||
|
<string id="30074">Comedy</string>
|
||||||
|
<string id="30075">Documentaire</string>
|
||||||
|
<string id="30076">Drama</string>
|
||||||
|
<string id="30077">Fantasie</string>
|
||||||
|
<string id="30078">Vreemdtalig</string>
|
||||||
|
<string id="30079">Geschiedenis</string>
|
||||||
|
<string id="30080">Horror</string>
|
||||||
|
<string id="30081">Muziek</string>
|
||||||
|
<string id="30082">Musical</string>
|
||||||
|
<string id="30083">Mysterie</string>
|
||||||
|
<string id="30084">Romantiek</string>
|
||||||
|
<string id="30085">Science Fiction</string>
|
||||||
|
<string id="30086">Kort</string>
|
||||||
|
<string id="30087">Spanning</string>
|
||||||
|
<string id="30088">Thriller</string>
|
||||||
|
<string id="30089">Western</string>
|
||||||
|
<string id="30090">Genre Filter</string>
|
||||||
|
<string id="30091">Bevestig bestandsverwijdering</string>
|
||||||
|
|
||||||
|
<string id="30093">Bekeken markeren</string>
|
||||||
|
<string id="30094">Onbekeken markeren</string>
|
||||||
|
<string id="30097">Sorteer op</string>
|
||||||
|
<string id="30098">Sorteer oplopend</string>
|
||||||
|
<string id="30099">Sorteer aflopend</string>
|
||||||
|
<!-- resume dialog -->
|
||||||
|
<string id="30105">Hervatten</string>
|
||||||
|
<string id="30106">Hervatten vanaf</string>
|
||||||
|
<string id="30107">Start vanaf begin</string>
|
||||||
|
<string id="30114">Toon verwijder mogelijkheid na het afspelen</string>
|
||||||
|
|
||||||
|
<string id="30115">Voor Afleveringen</string>
|
||||||
|
|
||||||
|
<string id="30116">Voor Films</string>
|
||||||
|
|
||||||
|
<string id="30118">Hervat-percentage toevoegen</string>
|
||||||
|
<string id="30119">Afleveringnummer toevoegen</string>
|
||||||
|
<string id="30120">Toon voortgang</string>
|
||||||
|
<string id="30121">Laden van content</string>
|
||||||
|
<string id="30122">Ontvang Data</string>
|
||||||
|
<string id="30125">Gereed</string>
|
||||||
|
<string id="30132">Waarschuwing</string>
|
||||||
|
|
||||||
|
<string id="30135">Fout</string>
|
||||||
|
<string id="30138">Zoeken</string>
|
||||||
|
<string id="30157">Activeer speciale afbeeldingen (bijv. CoverArt)</string>
|
||||||
|
|
||||||
|
<string id="30158">Metadata</string>
|
||||||
|
<string id="30159">Afbeeldingen</string>
|
||||||
|
<string id="30160">Video kwaliteit</string>
|
||||||
|
|
||||||
|
<string id="30165">Direct Afspelen</string>
|
||||||
|
|
||||||
|
<string id="30166">Transcoderen</string>
|
||||||
|
<string id="30167">Server Detectie Geslaagd</string>
|
||||||
|
<string id="30168">Gevonden server</string>
|
||||||
|
<string id="30169">Adres:</string>
|
||||||
|
<!-- Video nodes -->
|
||||||
|
<string id="30170">Onlangs toegevoegde TV-series</string>
|
||||||
|
<string id="30171">Niet afgekeken TV-series</string>
|
||||||
|
<string id="30172">Alle Muziek</string>
|
||||||
|
<string id="30173">Kanalen</string>
|
||||||
|
<string id="30174">Onlangs toegevoegde films</string>
|
||||||
|
<string id="30175">Onlangs toegevoegde afleveringen</string>
|
||||||
|
<string id="30176">Onlangs toegevoegde albums</string>
|
||||||
|
<string id="30177">Niet afgekeken films</string>
|
||||||
|
<string id="30178">Niet afgekeken afleveringen</string>
|
||||||
|
<string id="30179">Volgende (NextUp) afleveringen</string>
|
||||||
|
<string id="30180">Favoriete films</string>
|
||||||
|
<string id="30181">Favoriete TV-series</string>
|
||||||
|
|
||||||
|
<string id="30182">Favoriete afleveringen</string>
|
||||||
|
<string id="30183">Vaak afgespeelde albums</string>
|
||||||
|
<string id="30184">Binnenkort op TV</string>
|
||||||
|
<string id="30185">BoxSets</string>
|
||||||
|
<string id="30186">Trailers</string>
|
||||||
|
<string id="30187">Muziek video's</string>
|
||||||
|
<string id="30188">Foto's</string>
|
||||||
|
<string id="30189">Onbekeken films</string>
|
||||||
|
|
||||||
|
<string id="30190">Film Genres</string>
|
||||||
|
<string id="30191">Film Studio's</string>
|
||||||
|
<string id="30192">Film Acteurs</string>
|
||||||
|
<string id="30193">Onbekeken afleveringen</string>
|
||||||
|
<string id="30194">TV Genres</string>
|
||||||
|
<string id="30195">TV Netwerken</string>
|
||||||
|
<string id="30196">TV Acteurs</string>
|
||||||
|
<string id="30197">Afspeellijsten</string>
|
||||||
|
<string id="30199">Weergaven instellen</string>
|
||||||
|
<string id="30200">Selecteer gebruiker</string>
|
||||||
|
|
||||||
|
<string id="30204">Kan niet verbinden met server</string>
|
||||||
|
<string id="30207">Nummers</string>
|
||||||
|
<string id="30208">Albums</string>
|
||||||
|
<string id="30209">Album artiesten</string>
|
||||||
|
<string id="30210">Artiesten</string>
|
||||||
|
<string id="30211">Muziek Genres</string>
|
||||||
|
<string id="30220">Laatste</string>
|
||||||
|
<string id="30221">Bezig</string>
|
||||||
|
<string id="30222">Volgende (NextUp)</string>
|
||||||
|
<string id="30223">Gebruikersweergaven</string>
|
||||||
|
<string id="30224">Rapporteer Metrics</string>
|
||||||
|
<string id="30227">Willekeurige Films</string>
|
||||||
|
<string id="30228">Willekeurige Afleveringen</string>
|
||||||
|
<string id="30229">Willekeurige Items</string>
|
||||||
|
|
||||||
|
<string id="30230">Aanbevolen Items</string>
|
||||||
|
<string id="30235">Extra's</string>
|
||||||
|
|
||||||
|
<string id="30236">Synchroniseer Thema Muziek</string>
|
||||||
|
<string id="30237">Synchroniseer Extra Fanart</string>
|
||||||
|
<string id="30238">Synchroniseer Film Boxsets</string>
|
||||||
|
<string id="30239">Lokale Kodi database opnieuw instellen</string>
|
||||||
|
|
||||||
|
<string id="30243">Activeer HTTPS</string>
|
||||||
|
<string id="30245">Forceer Transcoderen van Codecs</string>
|
||||||
|
<string id="30249">Activeer server verbindings melding bij het opstarten</string>
|
||||||
|
<string id="30251">Onlangs bekeken Thuis Video's</string>
|
||||||
|
<string id="30252">Onlangs toegevoegde Foto's</string>
|
||||||
|
<string id="30253">Favoriete Home Video's</string>
|
||||||
|
<string id="30254">Favoriete Foto's</string>
|
||||||
|
<string id="30255">Favoriete Albums</string>
|
||||||
|
<string id="30256">Onlangs toegevoegde Muziek Video's</string>
|
||||||
|
<string id="30257">Niet afgekeken Muziek Video's</string>
|
||||||
|
<string id="30258">Onbekeken Muziek Video's</string>
|
||||||
|
|
||||||
|
<!-- Default views -->
|
||||||
|
<string id="30300">Actief</string>
|
||||||
|
<string id="30301">Herstel naar standaard</string>
|
||||||
|
<string id="30302">Films</string>
|
||||||
|
<string id="30303">BoxSets</string>
|
||||||
|
<string id="30304">Trailers</string>
|
||||||
|
<string id="30305">TV-series</string>
|
||||||
|
<string id="30306">Seizoenen</string>
|
||||||
|
<string id="30307">Afleveringen</string>
|
||||||
|
<string id="30308">Muziek - artiesten</string>
|
||||||
|
<string id="30309">Muziek - albums</string>
|
||||||
|
<string id="30310">Muziek Video's</string>
|
||||||
|
<string id="30311">Muziek - nummers</string>
|
||||||
|
<string id="30312">Kanalen</string>
|
||||||
|
<!-- contextmenu -->
|
||||||
|
<string id="30401">Emby opties</string>
|
||||||
|
<string id="30405">Toevoegen aan Emby favorieten</string>
|
||||||
|
<string id="30406">Verwijderen uit Emby favorieten</string>
|
||||||
|
<string id="30407">Instellen aangepaste waardering nummers</string>
|
||||||
|
<string id="30408">Emby addon instellingen</string>
|
||||||
|
<string id="30409">Verwijder item van de server</string>
|
||||||
|
<string id="30410">Dit item vernieuwen</string>
|
||||||
|
<string id="30411">Instellen aangepaste waardering voor nummers (0-5)</string>
|
||||||
|
<!-- add-on settings -->
|
||||||
|
<string id="30500">Controleer Host SSL Certificaat</string>
|
||||||
|
<string id="30501">Client SSL Certificaat</string>
|
||||||
|
<string id="30502">Gebruik alternatief adres</string>
|
||||||
|
<string id="30503">Alternatief Serveradres</string>
|
||||||
|
<string id="30504">Gebruik alternatieve apparaatnaam</string>
|
||||||
|
<string id="30505">[COLOR yellow]Probeer opnieuw in te loggen[/COLOR]</string>
|
||||||
|
<string id="30506">Synchronisatie Opties</string>
|
||||||
|
<string id="30507">Toon synchronisatie voortgang</string>
|
||||||
|
<string id="30508">Synchroniseer lege TV-series</string>
|
||||||
|
<string id="30509">Activeer Muziekbibliotheek</string>
|
||||||
|
<string id="30510">Direct Stream muziekbibliotheek</string>
|
||||||
|
<string id="30511">Afspeelmodus</string>
|
||||||
|
<string id="30512">Forceer afbeelding caching</string>
|
||||||
|
<string id="30513">Limiteer afbeelding cache threads (aanbevolen voor rpi)</string>
|
||||||
|
<string id="30514">Activeer \"fast startup\" (vereist server plugin)</string>
|
||||||
|
<string id="30515">Maximaal aantal items om tegelijk van de server op te vragen</string>
|
||||||
|
<string id="30516">Afspelen</string>
|
||||||
|
<string id="30517">Netwerkreferenties</string>
|
||||||
|
<string id="30518">Activeer Emby bioscoopmodus</string>
|
||||||
|
<string id="30519">Vragen om trailers af te spelen</string>
|
||||||
|
<string id="30520">Sla Emby verwijderings bevestiging over voor het contextmenu (Gebruik op eigen risico)</string>
|
||||||
|
<string id="30521">Spring terug op hervatten (in seconden)</string>
|
||||||
|
<string id="30522">Forceer transcoderen H265</string>
|
||||||
|
<string id="30523">Muziek metadata opties (niet compatibel met direct stream)</string>
|
||||||
|
<string id="30524">Importeer muziek lied waardering direct uit bestanden</string>
|
||||||
|
<string id="30525">Converteer muziek lied waardering naar Emby waardering</string>
|
||||||
|
<string id="30526">Toestaan dat waardeing in muziekbestanden worden bijgewerkt</string>
|
||||||
|
<string id="30527">Negeer specials in de volgende afleveringen</string>
|
||||||
|
<string id="30528">Gebruikers permanent toevoegen aan de sessie</string>
|
||||||
|
<string id="30529">Opstart vertraging (in seconden)</string>
|
||||||
|
<string id="30530">Activeer server herstart bericht</string>
|
||||||
|
<string id="30531">Activeer nieuwe inhoud notificatie</string>
|
||||||
|
<string id="30532">Duur van de videobibliotheek pop-up (in seconden)</string>
|
||||||
|
<string id="30533">Duur van de muziekbibliotheek pop-up (in seconden)</string>
|
||||||
|
<string id="30534">Server berichten</string>
|
||||||
|
<string id="30535">Genereer een nieuw apparaat Id</string>
|
||||||
|
<string id="30536">Sync als screensaver is uitgeschakeld</string>
|
||||||
|
<string id="30537">Forceer Transcoderen Hi10P</string>
|
||||||
|
<string id="30538">Uitgeschakeld</string>
|
||||||
|
<!-- service add-on -->
|
||||||
|
<string id="33000">Welkom</string>
|
||||||
|
<string id="33001">Fout bij maken van verbinding</string>
|
||||||
|
<string id="33002">De server is onbereikbaar</string>
|
||||||
|
<string id="33003">Server is online</string>
|
||||||
|
<string id="33004">items toegevoegd aan afspeellijst</string>
|
||||||
|
<string id="33005">items in de wachtrij voor afspeellijst</string>
|
||||||
|
<string id="33006">Server is opnieuw aan het opstarten</string>
|
||||||
|
<string id="33007">Toegang is ingeschakeld</string>
|
||||||
|
<string id="33008">Voer het wachtwoord in voor de gebruiker:</string>
|
||||||
|
<string id="33009">Foutieve gebruikersnaam of wachtwoord</string>
|
||||||
|
<string id="33010">Niet te vaak te authenticeren</string>
|
||||||
|
<string id="33011">Niet in staat om direct af te spelen</string>
|
||||||
|
<string id="33012">Direct afspelen is 3x mislukt. Afspelen vanaf HTTP Ingeschakeld.</string>
|
||||||
|
<string id="33013">Kies het audiokanaal</string>
|
||||||
|
<string id="33014">Kies de ondertiteling</string>
|
||||||
|
<string id="33015">Verwijder bestand van Emby server?</string>
|
||||||
|
<string id="33016">Trailers afspelen?</string>
|
||||||
|
<string id="33017">Verzamelen films van:</string>
|
||||||
|
<string id="33018">verzamelen boxsets</string>
|
||||||
|
<string id="33019">Verzamelen muziek-video's van:</string>
|
||||||
|
<string id="33020">Verzamelen TV-series van:</string>
|
||||||
|
<string id="33021">Verzamelen:</string>
|
||||||
|
<string id="33022">Gedetecteerd dat de database moet worden vernieuwd voor deze versie van Emby voor Kodi. Doorgaan?</string>
|
||||||
|
<string id="33023">Emby voor Kodi kan mogelijk niet correct werken tot de database is teruggezet.</string>
|
||||||
|
<string id="33024">Database synchronisatie proces geannuleerd. De huidige Kodi versie wordt niet ondersteund.</string>
|
||||||
|
<string id="33025">voltooid in:</string>
|
||||||
|
<string id="33026">Vergelijken van films uit:</string>
|
||||||
|
<string id="33027">Vergelijken van boxsets</string>
|
||||||
|
<string id="33028">Vergelijken van muziek-video's uit:</string>
|
||||||
|
<string id="33029">Vergelijken van TV-series uit:</string>
|
||||||
|
<string id="33030">Vergelijken van afleveringen uit:</string>
|
||||||
|
<string id="33031">Vergelijken:</string>
|
||||||
|
<string id="33032">Mislukt een nieuw apparaat Id te genereren. Zie je logs voor meer informatie.</string>
|
||||||
|
<string id="33033">Er is een nieuw apparaat Id gegenereerd. Kodi zal nu opnieuw opstarten.</string>
|
||||||
|
<string id="33034">Verder gaan met de volgende server?</string>
|
||||||
|
<string id="33035">LET OP! Als u de modus Native kiest, zullen bepaalde Emby functies ontbreken, zoals: Emby bioscoop-modus, directe afspeel/transcodeer opties en ouderlijk-toezicht planner.</string>
|
||||||
|
<string id="33036">Addon (Standaard)</string>
|
||||||
|
<string id="33037">Native (Directe paden)</string>
|
||||||
|
<string id="33038">Voeg netwerkreferenties toe aan Kodi om toegang tot uw content toe te staan? Belangrijk: Kodi moet opnieuw worden opgestart om de referenties te zien. Zij kunnen ook later worden toegevoegd.</string>
|
||||||
|
<string id="33039">Emby muziekbibliotheek uitschakelen?</string>
|
||||||
|
<string id="33040">Direct Stream de muziekbibliotheek? Selecteer deze optie als de muziekbibliotheek op afstand worden benaderd.</string>
|
||||||
|
<string id="33041">Bestand(en) van de Emby Server verwijderen? Dit zal de bestanden ook van de schijf verwijderen!</string>
|
||||||
|
<string id="33042">Het uitvoeren van de caching proces kan enige tijd duren. Toch verder gaan?</string>
|
||||||
|
<string id="33043">Afbeeldingen cache sync</string>
|
||||||
|
<string id="33044">Herstel bestaande afbeeldingen cache?</string>
|
||||||
|
<string id="33045">Bijwerken afbeeldingen cache:</string>
|
||||||
|
<string id="33046">Wachten op alle taken om af te sluiten:</string>
|
||||||
|
<string id="33047">Kodi kan bestand niet vinden:</string>
|
||||||
|
<string id="33048">Het kan nodig zijn om uw netwerkreferenties te controleren in de add-on-instellingen of gebruik de Emby padvervanging om je pad correct op te geven (Emby dashboard> Bibliotheek). Stop synchroniseren?</string>
|
||||||
|
<string id="33049">Toegevoegd:</string>
|
||||||
|
<string id="33050">Wanneer u zich te vaak foutief aanmeld, zal de Emby Server uw account blokkeren. Toch doorgaan?</string>
|
||||||
|
<string id="33051">Live TV-kanalen (experimenteel)</string>
|
||||||
|
<string id="33052">Live TV-opnames (experimenteel)</string>
|
||||||
|
<string id="33053">Instellingen</string>
|
||||||
|
<string id="33054">Gebruiker toevoegen aan sessie</string>
|
||||||
|
<string id="33055">Vernieuw Emby afspeellijsen/Video knooppunten</string>
|
||||||
|
<string id="33056">Handmatig synchroniseren</string>
|
||||||
|
<string id="33057">Reparatie lokale database (forceer-bijwerken van alle inhoud)</string>
|
||||||
|
<string id="33058">Lokale database herstellen</string>
|
||||||
|
<string id="33059">Cache alle afbeeldingen</string>
|
||||||
|
<string id="33060">Sync Emby Thema Media naar Kodi</string>
|
||||||
|
<string id="33061">Gebruiker toevoegen/verwijderen van de sessie</string>
|
||||||
|
<string id="33062">Gebruiker toevoegen</string>
|
||||||
|
<string id="33063">Gebruiker verwijderen</string>
|
||||||
|
<string id="33064">Gebruiker verwijderen van de sessie</string>
|
||||||
|
<string id="33065">Geslaagd!</string>
|
||||||
|
<string id="33066">Verwijderd uit de bekijken sessie:</string>
|
||||||
|
<string id="33067">Toegevoegd aan de bekijken sessie:</string>
|
||||||
|
<string id="33068">Niet in staat om gebruiker toe te voegen/verwijderen uit de sessie.</string>
|
||||||
|
<string id="33069">De taak is geslaagd</string>
|
||||||
|
<string id="33070">De taak is mislukt</string>
|
||||||
|
<string id="33071">Direct Stream</string>
|
||||||
|
<string id="33072">Afspeel methode voor uw thema's</string>
|
||||||
|
<string id="33073">Het instellingenbestand bestaat niet in TV-Tunes. Wijzig een instelling en voer de taak opnieuw uit.</string>
|
||||||
|
<string id="33074">Weet u zeker dat u uw lokale Kodi database opnieuw wilt instellen?</string>
|
||||||
|
<string id="33075">Wijzig/verwijder netwerkreferenties</string>
|
||||||
|
<string id="33076">Wijzig</string>
|
||||||
|
<string id="33077">Verwijder</string>
|
||||||
|
<string id="33078">Verwijderd:</string>
|
||||||
|
<string id="33079">Geef netwerk gebruikersnaam op:</string>
|
||||||
|
<string id="33080">Geeft netwerk wachtwoord op:</string>
|
||||||
|
<string id="33081">Netwerkreferenties toegevoegd voor:</string>
|
||||||
|
<string id="33082">Voer de servernaam of het IP-adres in, zoals aangegeven in uw Emby bibliotheek paden. Bijvoorbeeld, de naam van de server: \\\\SERVER-PC\\pad\\ is \"SERVER-PC\"</string>
|
||||||
|
<string id="33083">Wijzig de servernaam of IP-adres</string>
|
||||||
|
<string id="33084">Geef de servernaam of het IP-adres op</string>
|
||||||
|
<string id="33085">Kon de database niet opnieuw instellen. Probeer het nog eens.</string>
|
||||||
|
<string id="33086">Verwijder al gecachte afbeeldingen?</string>
|
||||||
|
<string id="33087">Alle Emby add-on-instellingen opnieuw instellen?</string>
|
||||||
|
<string id="33088">Database opnieuw instellen is voltooid, Kodi zal nu opnieuw opstarten om de wijzigingen toe te passen.</string>
|
||||||
|
</strings>
|
329
resources/language/French/strings.xml
Normal file
329
resources/language/French/strings.xml
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<strings>
|
||||||
|
<!-- Add-on settings -->
|
||||||
|
<string id="29999">Emby pour Kodi</string>
|
||||||
|
<string id="30000">Adresse principale du serveur</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30002">Lire avec HTTP à la place de SMB</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30004">Niveau de journalisation</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30016">Nom de l'appareil</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30022">Avancé</string>
|
||||||
|
<string id="30024">Nom d'utilisateur</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30030">Numéro de port</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30035">Nombre d'album de musique 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="30042">Actualiser</string>
|
||||||
|
<string id="30043">Supprimer</string>
|
||||||
|
<string id="30044">Nom d'utilisateur/Mot de passe incorrect</string>
|
||||||
|
<string id="30045">Nom d'utilisateur introuvable</string>
|
||||||
|
<string id="30052">Suppression</string>
|
||||||
|
<string id="30053">En attente du serveur pour la suppression</string>
|
||||||
|
<string id="30068">Trier par</string>
|
||||||
|
<string id="30069">Aucun</string>
|
||||||
|
<string id="30070">Action</string>
|
||||||
|
<string id="30071">Aventure</string>
|
||||||
|
<string id="30072">Animation</string>
|
||||||
|
<string id="30073">Crime</string>
|
||||||
|
<string id="30074">Comédie</string>
|
||||||
|
<string id="30075">Documentaire</string>
|
||||||
|
<string id="30076">Drame</string>
|
||||||
|
<string id="30077">Fantaisie</string>
|
||||||
|
<string id="30078">Étranger</string>
|
||||||
|
<string id="30079">Historique</string>
|
||||||
|
<string id="30080">Horreur</string>
|
||||||
|
<string id="30081">Musique</string>
|
||||||
|
<string id="30082">Musical</string>
|
||||||
|
<string id="30083">Mystère</string>
|
||||||
|
<string id="30084">Romance</string>
|
||||||
|
<string id="30085">Science Fiction</string>
|
||||||
|
<string id="30086">Court</string>
|
||||||
|
<string id="30087">Suspense</string>
|
||||||
|
<string id="30088">Thriller</string>
|
||||||
|
<string id="30089">Western</string>
|
||||||
|
<string id="30090">Filtre de Genre</string>
|
||||||
|
<string id="30091">Confirmer la suppression du fichier</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30093">Marquer comme lu</string>
|
||||||
|
<string id="30094">Marquer comme non vu</string>
|
||||||
|
<string id="30097">Trier par</string>
|
||||||
|
<string id="30098">Ordre de Trie décroissant</string>
|
||||||
|
<string id="30099">Ordre de Trie croissant</string>
|
||||||
|
<!-- resume dialog -->
|
||||||
|
<string id="30105">Reprendre</string>
|
||||||
|
<string id="30106">Reprendre à partir de</string>
|
||||||
|
<string id="30107">Lire depuis le début</string>
|
||||||
|
<string id="30114">Offrir la possibilité de supprimer après la lecture</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30115">Pour Épisodes</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30116">Pour Films</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30118">Ajouter un pourcentage de reprise</string>
|
||||||
|
<string id="30119">Ajouter Numéro Épisode</string>
|
||||||
|
<string id="30120">Afficher la progression du chargement</string>
|
||||||
|
<string id="30121">Chargement du contenu</string>
|
||||||
|
<string id="30122">Récupération des données</string>
|
||||||
|
<string id="30125">Fait</string>
|
||||||
|
<string id="30132">Avertissement</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30135">Erreur</string>
|
||||||
|
<string id="30138">Rechercher</string>
|
||||||
|
<string id="30157">Activer les images améliorées (eg Coverart)</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30158">Métadonnées</string>
|
||||||
|
<string id="30159">Artwork</string>
|
||||||
|
<string id="30160">Qualité vidéo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30165">Lecture directe</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30166">Transcodage</string>
|
||||||
|
<string id="30167">Détection du serveur Réussi</string>
|
||||||
|
<string id="30168">Serveur trouvé</string>
|
||||||
|
<string id="30169">Addresse:</string>
|
||||||
|
<!-- Video nodes -->
|
||||||
|
<string id="30170">Séries TV Récemment Ajouté</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30171">Séries TV En cours</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30172">Toute la musique</string>
|
||||||
|
<string id="30173">Chaînes</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30174">Films récemment ajoutés</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30175">Épisodes récemment ajoutés</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30176">Albums récemment ajoutés</string>
|
||||||
|
<string id="30177">Films en Cours</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30178">Épisodes en Cours</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30179">Prochain Épisodes</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30180">Films Favoris</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30181">Séries Favorites</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30182">Épisodes Favoris</string>
|
||||||
|
<string id="30183">Albums fréquemment joués</string>
|
||||||
|
<string id="30184">TV à venir</string>
|
||||||
|
<string id="30185">Collections</string>
|
||||||
|
<string id="30186">Bandes-annonces</string>
|
||||||
|
<string id="30187">Vidéo Clips</string>
|
||||||
|
<string id="30188">Photos</string>
|
||||||
|
<string id="30189">Films Non vu</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30190">Film Genres</string>
|
||||||
|
<string id="30191">Film Studios</string>
|
||||||
|
<string id="30192">Film Acteurs</string>
|
||||||
|
<string id="30193">Épisodes Non vu</string>
|
||||||
|
<string id="30194">TV Genres</string>
|
||||||
|
<string id="30195">TV Réseaux</string>
|
||||||
|
<string id="30196">TV Acteurs</string>
|
||||||
|
<string id="30197">Listes de lecture</string>
|
||||||
|
<string id="30199">Définir Vues</string>
|
||||||
|
<string id="30200">Sélectionner l'utilisateur</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30204">Impossible de se connecter au serveur</string>
|
||||||
|
<string id="30207">Chansons</string>
|
||||||
|
<string id="30208">Albums</string>
|
||||||
|
<string id="30209">Artiste de l'album</string>
|
||||||
|
<string id="30210">Artistes</string>
|
||||||
|
<string id="30211">Music Genres</string>
|
||||||
|
<string id="30220">Derniers</string>
|
||||||
|
<string id="30221">En cours</string>
|
||||||
|
<string id="30222">Prochain</string>
|
||||||
|
<string id="30223">Vues de l'utilisateur</string>
|
||||||
|
<string id="30224">Rapport Metrics</string>
|
||||||
|
<string id="30227">Films aléatoire</string>
|
||||||
|
<string id="30228">Épisodes aléatoire</string>
|
||||||
|
<string id="30229">Objets aléatoire</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30230">Élements recommandés</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30235">Extras</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30236">Sync Thème Musique</string>
|
||||||
|
<string id="30237">Sync Extra Fanart</string>
|
||||||
|
<string id="30238">Sync Saga Films</string>
|
||||||
|
<string id="30239">Réinitialiser la base de données locale de Kodi</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30243">Activer HTTPS</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30245">Forcer le transcodage Codecs</string>
|
||||||
|
<string id="30249">Activer le message de connexion au serveur pendant le démarrage</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30251">Vidéos personnel récemment ajoutés</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30252">Photos récemment ajoutés</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30253">Vidéos personnelles favorites</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30254">Photos favorites</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30255">Albums favoris</string>
|
||||||
|
<string id="30256">Vidéo Clips récemment ajoutés</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30257">Vidéo Clips en cours</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30258">Vidéo Clips non vu</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<!-- Default views -->
|
||||||
|
<string id="30300">Actif</string>
|
||||||
|
<string id="30301">Effacer les Paramètres</string>
|
||||||
|
<string id="30302">Films</string>
|
||||||
|
<string id="30303">Collections</string>
|
||||||
|
<string id="30304">Bandes-annonces</string>
|
||||||
|
<string id="30305">Séries</string>
|
||||||
|
<string id="30306">Saisons</string>
|
||||||
|
<string id="30307">Épisodes</string>
|
||||||
|
<string id="30308">Artistes musicaux</string>
|
||||||
|
<string id="30309">Albums de musique</string>
|
||||||
|
<string id="30310">Vidéo Clips</string>
|
||||||
|
<string id="30311">Pistes Musicales</string>
|
||||||
|
<string id="30312">Chaînes</string>
|
||||||
|
<!-- contextmenu -->
|
||||||
|
<string id="30401">Emby options</string>
|
||||||
|
<string id="30405">Ajouter aux favoris Emby</string>
|
||||||
|
<string id="30406">Supprimer des favoris Emby</string>
|
||||||
|
<string id="30407">Définir une note personnalisée de la chanson</string>
|
||||||
|
<string id="30408">Paramètres addon Emby</string>
|
||||||
|
<string id="30409">Supprimer un élément du serveur</string>
|
||||||
|
<string id="30410">Actualiser cet article</string>
|
||||||
|
<string id="30411">Définir une note personnalisée de la chanson (0-5)</string>
|
||||||
|
<!-- add-on settings -->
|
||||||
|
<string id="30500">Vérifier certificat SSL</string>
|
||||||
|
<string id="30501">Certificat SSL client</string>
|
||||||
|
<string id="30502">Utiliser une adresse alternative</string>
|
||||||
|
<string id="30503">Adresse du serveur alternatif</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="30506">Options de synchronisation</string>
|
||||||
|
<string id="30507">Afficher l'avancement de la synchro</string>
|
||||||
|
<string id="30508">Sync Séries TV vides</string>
|
||||||
|
<string id="30509">Activer la bibliothèque musicale</string>
|
||||||
|
<string id="30510">Direct stream bibliothèque musicale</string>
|
||||||
|
<string id="30511">Mode de lecture</string>
|
||||||
|
<string id="30512">Force mise en cache d'artwork</string>
|
||||||
|
<string id="30513">Limiter artwork en cache (recommandé pour rpi)</string>
|
||||||
|
<string id="30514">Activer le démarrage rapide (nécessite le plugin du serveur)</string>
|
||||||
|
<string id="30515">Nombre maximum d'éléments à demander à partir du serveur en une seule fois</string>
|
||||||
|
<string id="30516">Lecture</string>
|
||||||
|
<string id="30517">Identifiants réseau</string>
|
||||||
|
<string id="30518">Activer le mode cinéma</string>
|
||||||
|
<string id="30519">Demander à jouer des bandes annonces</string>
|
||||||
|
<string id="30520">Ne pas demander de confirmation de suppression pour le menu contextuel (utiliser à vos risques et périls)</string>
|
||||||
|
<string id="30521">Aller en arrière à la reprise (en secondes)</string>
|
||||||
|
<string id="30522">Force transcode H265</string>
|
||||||
|
<string id="30523">Options métadonnées musique (non compatibles avec direct stream)</string>
|
||||||
|
<string id="30524">Importation de la note de la chanson directement à partir des fichiers</string>
|
||||||
|
<string id="30525">Convertir la note du morceau pour Emby note</string>
|
||||||
|
<string id="30526">Autoriser les notes dans les fichiers des chansons à être mis à jour</string>
|
||||||
|
<string id="30527">Ignorer les spéciaux dans les épisodes suivants</string>
|
||||||
|
<string id="30528">Utilisateurs permanents à ajouter à la session</string>
|
||||||
|
<string id="30529">Délai de démarrage (en secondes)</string>
|
||||||
|
<string id="30530">Activer le message redémarrage du serveur</string>
|
||||||
|
<string id="30531">Activer une notification nouveau contenu</string>
|
||||||
|
<string id="30532">Durée de la fenêtre de la bibliothèque vidéo (en secondes)</string>
|
||||||
|
<string id="30533">Durée de la fenêtre de la bibliothèque musical (en secondes)</string>
|
||||||
|
<string id="30534">Messages du serveur</string>
|
||||||
|
<string id="30535">Générer un nouveau Id d'appareil</string>
|
||||||
|
<string id="30536">Sync si l'écran est désactivé</string>
|
||||||
|
<string id="30537">Force Transcode Hi10P</string>
|
||||||
|
<string id="30538">Désactivé</string>
|
||||||
|
<!-- service add-on -->
|
||||||
|
<string id="33000">Bienvenue</string>
|
||||||
|
<string id="33001">Erreur de connexion</string>
|
||||||
|
<string id="33002">Le Serveur est inaccessible</string>
|
||||||
|
<string id="33003">Le Serveur est en ligne</string>
|
||||||
|
<string id="33004">Éléments ajoutés à la liste de lecture</string>
|
||||||
|
<string id="33005">Éléments en file d'attente à la liste de lecture</string>
|
||||||
|
<string id="33006">Le serveur redémarre</string>
|
||||||
|
<string id="33007">L'accès est activé</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="33010">Échec de l'authentification de trop nombreuses fois</string>
|
||||||
|
<string id="33011">Lecture directe impossible</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="33014">Choisissez le flux de sous-titres</string>
|
||||||
|
<string id="33015">Supprimer le fichier de votre serveur Emby?</string>
|
||||||
|
<string id="33016">Lire bande-annonces ?</string>
|
||||||
|
<string id="33017">Récupération des films à partir de:</string>
|
||||||
|
<string id="33018">Récupération collections</string>
|
||||||
|
<string id="33019">Récupération des vidéo clips à partir de:</string>
|
||||||
|
<string id="33020">Récupération des séries Tv à partir de:</string>
|
||||||
|
<string id="33021">Récupération:</string>
|
||||||
|
<string id="33022">La base de données doit être créé pour cette version de Emby pour Kodi. Procéder ?</string>
|
||||||
|
<string id="33023">Emby pour Kodi peut ne pas fonctionner correctement jusqu'à ce que la base de données soit remise à zéro.</string>
|
||||||
|
<string id="33024">Annulation du processus de synchronisation de la base de données. La version actuelle de Kodi n’est pas prise en charge.</string>
|
||||||
|
<string id="33025">complété en:</string>
|
||||||
|
<string id="33026">Comparaison des films à partir de:</string>
|
||||||
|
<string id="33027">Comparaison des collections</string>
|
||||||
|
<string id="33028">Comparaison des vidéo clips à partir de:</string>
|
||||||
|
<string id="33029">Comparaison des séries tv à partir de:</string>
|
||||||
|
<string id="33030">Comparaison des épisodes à partir de:</string>
|
||||||
|
<string id="33031">Comparaison:</string>
|
||||||
|
<string id="33032">Impossible de générer un nouvel ID de périphérique. Consultez les fichiers journaux pour plus d'informations.</string>
|
||||||
|
<string id="33033">Un nouvel Id de périphérique a été généré. Kodi va redémarrer maintenant.</string>
|
||||||
|
<string id="33034">Procédez avec le serveur suivant ?</string>
|
||||||
|
<string id="33035">Avertissement ! Si vous choisissez le mode natif, certaines fonctionnalités de Emby seront manquantes, tels que: Emby mode cinéma, direct stream/transcode et planification d'accès parental.</string>
|
||||||
|
<string id="33036">Addon (Par défaut)</string>
|
||||||
|
<string id="33037">Natif (Chemins directs)</string>
|
||||||
|
<string id="33038">Ajouter les informations d'identification du réseau pour permettre l'accès à votre contenu Kodi ? Important: Kodi devra être redémarré pour voir les informations d'identification. Elles peuvent également être ajoutés à un moment ultérieur.</string>
|
||||||
|
<string id="33039">Désactiver bibliothèque musicale Emby?</string>
|
||||||
|
<string id="33040">Direct stream la bibliothèque musicale ? Sélectionnez cette option si la bibliothèque musicale sera accessible à distance.</string>
|
||||||
|
<string id="33041">Supprimer les fichiers de Emby Server ? Cela permettra également de supprimer les fichiers du disque !</string>
|
||||||
|
<string id="33042">L'exécution du processus de mise en cache peut prendre un certain temps.</string>
|
||||||
|
<string id="33043">Artwork cache sync</string>
|
||||||
|
<string id="33044">Réinitialiser le cache des artwork existant ?</string>
|
||||||
|
<string id="33045">Mise à jour du cache des artwork :</string>
|
||||||
|
<string id="33046">Attendre que tous les sujets aient quitter :</string>
|
||||||
|
<string id="33047">Kodi ne peut pas localiser le fichier:</string>
|
||||||
|
<string id="33048">Vous devrez peut-être vérifier vos informations d'identification de réseau dans les paramètres add-on ou utiliser la substitution de chemin Emby pour formater votre chemin correctement (Emby tableau de bord> bibliothèque). Arrêter la synchronisation ?</string>
|
||||||
|
<string id="33049">Ajoutée:</string>
|
||||||
|
<string id="33050">Si vous ne parvenez pas à vous connecter de trop nombreuses fois, le serveur Emby peut verrouiller votre compte. Continuer quand même ?</string>
|
||||||
|
<string id="33051">Chaînes TV en direct (expérimental)</string>
|
||||||
|
<string id="33052">Enregistrements TV en direct (expérimental)</string>
|
||||||
|
<string id="33053">Paramètres</string>
|
||||||
|
<string id="33054">Ajouter l'utilisateur à la session</string>
|
||||||
|
<string id="33055">Actualiser listes de lecture/nœuds vidéo d'Emby</string>
|
||||||
|
<string id="33056">Effectuer une sync manuelle</string>
|
||||||
|
<string id="33057">Réparer la base de données locale (force la mise à jour de tout le contenu)</string>
|
||||||
|
<string id="33058">Effectuer une réinitialisation de la base de données locale</string>
|
||||||
|
<string id="33059">Mettre en cache tout les artwork</string>
|
||||||
|
<string id="33060">Sync Emby Thème Media pour Kodi</string>
|
||||||
|
<string id="33061">Ajouter/Supprimer l'utilisateur de la session</string>
|
||||||
|
<string id="33062">Ajouter un utilisateur</string>
|
||||||
|
<string id="33063">Supprimer un utilisateur</string>
|
||||||
|
<string id="33064">Supprimer l'utilisateur de la session</string>
|
||||||
|
<string id="33065">Réussi !</string>
|
||||||
|
<string id="33066">Suppression de la session de visualisation:</string>
|
||||||
|
<string id="33067">Ajouté à la session de visualisation:</string>
|
||||||
|
<string id="33068">Impossible d'ajouter/supprimer l'utilisateur de la session.</string>
|
||||||
|
<string id="33069">La tâche a réussi</string>
|
||||||
|
<string id="33070">La tâche a échoué</string>
|
||||||
|
<string id="33071">Direct Stream</string>
|
||||||
|
<string id="33072">Méthode de lecture pour votre thèmes</string>
|
||||||
|
<string id="33073">Le fichier de paramètres n'existe pas dans Tunes TV. Modifier un paramètre et exécutez à nouveau la tâche.</string>
|
||||||
|
<string id="33074">Êtes-vous sûr de vouloir réinitialiser votre base de données locale Kodi ?</string>
|
||||||
|
<string id="33075">Modifier/Supprimer les informations d'identification du réseau</string>
|
||||||
|
<string id="33076">Modifier</string>
|
||||||
|
<string id="33077">Supprimer</string>
|
||||||
|
<string id="33078">Supprimé:</string>
|
||||||
|
<string id="33079">Entrer le nom d'utilisateur réseau</string>
|
||||||
|
<string id="33080">Entrer le mot de passe réseau</string>
|
||||||
|
<string id="33081">Ajouter des informations d'identification de réseau pour:</string>
|
||||||
|
<string id="33082">Entrez le nom du serveur ou l'adresse IP comme indiqué dans vos chemins de bibliothèque de Emby. Par exemple, le nom du serveur: \\\\SERVEUR-PC\\chemin\\ est \"SERVEUR-PC\"</string>
|
||||||
|
<string id="33083">Modifier le nom du serveur ou l'adresse IP</string>
|
||||||
|
<string id="33084">Entrer le nom du serveur ou l'adresse IP</string>
|
||||||
|
<string id="33085">Impossible de réinitialiser la base de données. Réessayer.</string>
|
||||||
|
<string id="33086">Supprimer toutes les artwork en cache?</string>
|
||||||
|
<string id="33087">Réinitialiser tous les réglages de l'addon Emby?</string>
|
||||||
|
<string id="33088">La réinitialisation de la base de données est terminée, Kodi va maintenant redémarrer pour appliquer les modifications.</string>
|
||||||
|
</strings>
|
329
resources/language/Portuguese/strings.xml
Normal file
329
resources/language/Portuguese/strings.xml
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<strings>
|
||||||
|
<!-- Add-on settings -->
|
||||||
|
<string id="29999">Emby for Kodi</string>
|
||||||
|
<string id="30000">Endereço do Servidor Primário</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30002">Reproduzir por HTTP ao invés de SMB</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30004">Nível do log</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30016">Nome do Dispositivo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30022">Avançado</string>
|
||||||
|
<string id="30024">Nome do usuário</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30030">Número da Porta</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30035">Número de Álbuns de Música recentes a exibir:</string>
|
||||||
|
<string id="30036">Número de Filmes recentes a exibir:</string>
|
||||||
|
<string id="30037">Número de episódios de TV recentes a exibir:</string>
|
||||||
|
<string id="30042">Atualizar</string>
|
||||||
|
<string id="30043">Excluir</string>
|
||||||
|
<string id="30044">Nome de usuário/Senha incorretos</string>
|
||||||
|
<string id="30045">Nome de usuário não encontrado</string>
|
||||||
|
<string id="30052">Excluindo</string>
|
||||||
|
<string id="30053">Aguardando pelo servidor para excluir</string>
|
||||||
|
<string id="30068">Classificar por</string>
|
||||||
|
<string id="30069">Nenhum</string>
|
||||||
|
<string id="30070">Ação</string>
|
||||||
|
<string id="30071">Aventura</string>
|
||||||
|
<string id="30072">Animação</string>
|
||||||
|
<string id="30073">Crime</string>
|
||||||
|
<string id="30074">Comédia</string>
|
||||||
|
<string id="30075">Documentário</string>
|
||||||
|
<string id="30076">Drama</string>
|
||||||
|
<string id="30077">Fantasia</string>
|
||||||
|
<string id="30078">Estrangeiro</string>
|
||||||
|
<string id="30079">História</string>
|
||||||
|
<string id="30080">Terror</string>
|
||||||
|
<string id="30081">Música</string>
|
||||||
|
<string id="30082">Musical</string>
|
||||||
|
<string id="30083">Mistério</string>
|
||||||
|
<string id="30084">Romance</string>
|
||||||
|
<string id="30085">Ficção Científica</string>
|
||||||
|
<string id="30086">Curta Metragem</string>
|
||||||
|
<string id="30087">Suspense</string>
|
||||||
|
<string id="30088">Suspense</string>
|
||||||
|
<string id="30089">Western</string>
|
||||||
|
<string id="30090">Filtro do Gênero</string>
|
||||||
|
<string id="30091">Confirmar exclusão do arquivo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30093">Marcar como assistido</string>
|
||||||
|
<string id="30094">Marcar como não-assistido</string>
|
||||||
|
<string id="30097">Classificar por</string>
|
||||||
|
<string id="30098">Classificar em Ordem Descendente</string>
|
||||||
|
<string id="30099">Classificar em Ordem Ascendente</string>
|
||||||
|
<!-- resume dialog -->
|
||||||
|
<string id="30105">Retomar</string>
|
||||||
|
<string id="30106">Retomar a partir de</string>
|
||||||
|
<string id="30107">Iniciar do começo</string>
|
||||||
|
<string id="30114">Disponibilizar exclusão depois da reprodução</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30115">Para Episódios</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30116">Para Filmes</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30118">Adicionar a Porcentagem para Retomar</string>
|
||||||
|
<string id="30119">Adicionar o Número do Episódio</string>
|
||||||
|
<string id="30120">Exibir Progresso do Carregamento</string>
|
||||||
|
<string id="30121">Carregando Conteúdo</string>
|
||||||
|
<string id="30122">Recuperando Dados</string>
|
||||||
|
<string id="30125">Feito</string>
|
||||||
|
<string id="30132">Aviso</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30135">Erro</string>
|
||||||
|
<string id="30138">Busca</string>
|
||||||
|
<string id="30157">Ativar Imagens Melhoradas (ex. Capa)</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30158">Metadados</string>
|
||||||
|
<string id="30159">Artwork</string>
|
||||||
|
<string id="30160">Qualidade do Vídeo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30165">Reprodução Direta</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30166">Transcodificação</string>
|
||||||
|
<string id="30167">Sucesso na Detecção do Servidor</string>
|
||||||
|
<string id="30168">Servidor Encontrado</string>
|
||||||
|
<string id="30169">Endereço:</string>
|
||||||
|
<!-- Video nodes -->
|
||||||
|
<string id="30170">Séries Recentemente Adicionadas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30171">Séries em Reprodução</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30172">Todas as Músicas</string>
|
||||||
|
<string id="30173">Canais</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30174">Filmes Recentemente Adicionados</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30175">Episódios Recentemente Adicionados</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30176">Álbuns Recentemente Adicionados</string>
|
||||||
|
<string id="30177">Filmes em Reprodução</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30178">Episódios em Reprodução</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30179">Próximos Episódios</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30180">Filmes Favoritos</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30181">Séries Favoritas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30182">Episódios Favoritos</string>
|
||||||
|
<string id="30183">Álbuns Mais Reproduzidos</string>
|
||||||
|
<string id="30184">Séries a Estrear</string>
|
||||||
|
<string id="30185">BoxSets</string>
|
||||||
|
<string id="30186">Trailers</string>
|
||||||
|
<string id="30187">Vídeos de Música</string>
|
||||||
|
<string id="30188">Fotos</string>
|
||||||
|
<string id="30189">Filmes Não-Assistidos</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30190">Gêneros do Filme</string>
|
||||||
|
<string id="30191">Estúdios do Filme</string>
|
||||||
|
<string id="30192">Atores do Filme</string>
|
||||||
|
<string id="30193">Episódios Não-Assistidos</string>
|
||||||
|
<string id="30194">Gêneros da Série</string>
|
||||||
|
<string id="30195">Redes de TV</string>
|
||||||
|
<string id="30196">Atores da Série</string>
|
||||||
|
<string id="30197">Listas de Reprodução</string>
|
||||||
|
<string id="30199">Definir Visualizações</string>
|
||||||
|
<string id="30200">Selecionar Usuário</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30204">Não foi possível conectar ao servidor</string>
|
||||||
|
<string id="30207">Músicas</string>
|
||||||
|
<string id="30208">Álbuns</string>
|
||||||
|
<string id="30209">Artistas do Álbum</string>
|
||||||
|
<string id="30210">Artistas</string>
|
||||||
|
<string id="30211">Gêneros da Música</string>
|
||||||
|
<string id="30220">Mais Recentes</string>
|
||||||
|
<string id="30221">Em Reprodução</string>
|
||||||
|
<string id="30222">Próxima</string>
|
||||||
|
<string id="30223">Visualizações do Usuário</string>
|
||||||
|
<string id="30224">Métricas do Relatório</string>
|
||||||
|
<string id="30227">Filmes Aleatórios</string>
|
||||||
|
<string id="30228">Episódios Aleatórios</string>
|
||||||
|
<string id="30229">Itens Aleatórios</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30230">Itens Recomendados</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30235">Extras</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30236">Sincronizar Música-Tema</string>
|
||||||
|
<string id="30237">Sincronizar Extra Fanart</string>
|
||||||
|
<string id="30238">Sincronizar Imagens de Coletâneas</string>
|
||||||
|
<string id="30239">Repor base de dados local do Kodi</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30243">Ativar HTTPS</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30245">Forçar Codecs de Transcodificação</string>
|
||||||
|
<string id="30249">Ativar mensagem de conexão do servidor ao iniciar</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30251">Vídeos Caseiros adicionados recentemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30252">Fotos adicionadas recentemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30253">Vídeos Caseiros Favoritos</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30254">Fotos Favoritas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30255">Álbuns Favoritos</string>
|
||||||
|
<string id="30256">Vídeos de Música adicionados recentemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30257">Vídeos de Música em Reprodução</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30258">Vídeos de Música não-assistidos</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<!-- Default views -->
|
||||||
|
<string id="30300">Ativo</string>
|
||||||
|
<string id="30301">Limpar Definições</string>
|
||||||
|
<string id="30302">Filmes</string>
|
||||||
|
<string id="30303">BoxSets</string>
|
||||||
|
<string id="30304">Trailers</string>
|
||||||
|
<string id="30305">Séries</string>
|
||||||
|
<string id="30306">Temporadas</string>
|
||||||
|
<string id="30307">Episódios</string>
|
||||||
|
<string id="30308">Artistas da Música</string>
|
||||||
|
<string id="30309">Álbuns de Música</string>
|
||||||
|
<string id="30310">Vídeos de Música</string>
|
||||||
|
<string id="30311">Trilhas de Música</string>
|
||||||
|
<string id="30312">Canais</string>
|
||||||
|
<!-- contextmenu -->
|
||||||
|
<string id="30401">Opções do Emby</string>
|
||||||
|
<string id="30405">Adicionar aos favoritos do Emby</string>
|
||||||
|
<string id="30406">Remover dos Favoritos do Emby</string>
|
||||||
|
<string id="30407">Definir a avaliação personalizada da música</string>
|
||||||
|
<string id="30408">Ajustes do addon do Emby</string>
|
||||||
|
<string id="30409">Excluir o item do servidor</string>
|
||||||
|
<string id="30410">Atualizar este item</string>
|
||||||
|
<string id="30411">Definir a avaliação personalizada da música (0-5)</string>
|
||||||
|
<!-- add-on settings -->
|
||||||
|
<string id="30500">Verificar o Certificado SSL do Servidor</string>
|
||||||
|
<string id="30501">Certificado SSL do cliente</string>
|
||||||
|
<string id="30502">Usar endereço alternativo</string>
|
||||||
|
<string id="30503">Endereço Alternativo do Servidor</string>
|
||||||
|
<string id="30504">Usar Nome alternativo do dispositivo</string>
|
||||||
|
<string id="30505">[COLOR yellow]Tentar Login Novamente[/COLOR]</string>
|
||||||
|
<string id="30506">Opções de Sincronização</string>
|
||||||
|
<string id="30507">Exibir progresso de sincronização</string>
|
||||||
|
<string id="30508">Sincronizar Séries de TV vazias</string>
|
||||||
|
<string id="30509">Ativar Biblioteca de Música</string>
|
||||||
|
<string id="30510">Stream direto da biblioteca de música</string>
|
||||||
|
<string id="30511">Modo de Reprodução</string>
|
||||||
|
<string id="30512">Forçar o caching de artwork</string>
|
||||||
|
<string id="30513">Limitar as threads de cache de artwork (recomendado para rpi)</string>
|
||||||
|
<string id="30514">Ativar inicialização rápida (é necessário o plugin do servidor)</string>
|
||||||
|
<string id="30515">Máximo de itens para solicitar ao servidor de uma única vez</string>
|
||||||
|
<string id="30516">Reprodução</string>
|
||||||
|
<string id="30517">Credenciais de rede</string>
|
||||||
|
<string id="30518">Ativar cinema mode do Emby</string>
|
||||||
|
<string id="30519">Confirmar a reprodução de trailers</string>
|
||||||
|
<string id="30520">Ignorar a confirmação de exclusão no Emby para o menú de contexto (use sob seu próprio risco)</string>
|
||||||
|
<string id="30521">intervalo para voltar na função retomar (em segundos)</string>
|
||||||
|
<string id="30522">Foçar transcodificação H265</string>
|
||||||
|
<string id="30523">Opções de metadados de música (não compatível com stream direto)</string>
|
||||||
|
<string id="30524">Importar avaliação da música diretamente dos arquivos</string>
|
||||||
|
<string id="30525">Converter a avaliação da música para a avaliação Emby.</string>
|
||||||
|
<string id="30526">Permitir que as avaliações nos arquivos de música sejam atualizadas</string>
|
||||||
|
<string id="30527">Ignorar especiais nos próximos episódios</string>
|
||||||
|
<string id="30528">Usuários permanentes para adicionar à sessão</string>
|
||||||
|
<string id="30529">Atraso na inicialização (em segundos)</string>
|
||||||
|
<string id="30530">Ativar mensagem de reinicialização do servidor</string>
|
||||||
|
<string id="30531">Ativar notificação de novo conteúdo</string>
|
||||||
|
<string id="30532">Duração do janela da biblioteca de vídeo (em segundos)</string>
|
||||||
|
<string id="30533">Duração da janela da biblioteca de música (em segundos)</string>
|
||||||
|
<string id="30534">Mensagens do servidor</string>
|
||||||
|
<string id="30535">Gerar um novo id do dispositivo</string>
|
||||||
|
<string id="30536">Sincronizar quando o protetor de tela está desativado</string>
|
||||||
|
<string id="30537">Forçar Transcodificação Hi10P</string>
|
||||||
|
<string id="30538">Desativado</string>
|
||||||
|
<!-- service add-on -->
|
||||||
|
<string id="33000">Bem vindo</string>
|
||||||
|
<string id="33001">Erro na conexão</string>
|
||||||
|
<string id="33002">Servidor não pode ser encontrado</string>
|
||||||
|
<string id="33003">Servidor está ativo</string>
|
||||||
|
<string id="33004">Itens adicionados à lista de reprodução</string>
|
||||||
|
<string id="33005">Itens enfileirados na lista de reprodução</string>
|
||||||
|
<string id="33006">Servidor está reiniciando</string>
|
||||||
|
<string id="33007">O acesso está ativo</string>
|
||||||
|
<string id="33008">Digite a senha do usuário:</string>
|
||||||
|
<string id="33009">Nome de usuário ou senha inválidos</string>
|
||||||
|
<string id="33010">Falha ao autenticar inúmeras vezes</string>
|
||||||
|
<string id="33011">Não é possível a reprodução direta</string>
|
||||||
|
<string id="33012">A reprodução direta falhou 3 vezes. Ative a reprodução por HTTP.</string>
|
||||||
|
<string id="33013">Escolha o stream de áudio</string>
|
||||||
|
<string id="33014">Escolha o stream de legendas</string>
|
||||||
|
<string id="33015">Excluir arquivo de seu Servidor Emby?</string>
|
||||||
|
<string id="33016">Reproduzir trailers?</string>
|
||||||
|
<string id="33017">Coletando filmes de:</string>
|
||||||
|
<string id="33018">Coletando boxsets</string>
|
||||||
|
<string id="33019">Coletando vídeos de música de:</string>
|
||||||
|
<string id="33020">Coletando séries de:</string>
|
||||||
|
<string id="33021">Coletando:</string>
|
||||||
|
<string id="33022">Foi detectado que a base de dados necessita ser recriada para esta versão do Emby for Kodi. Prosseguir?</string>
|
||||||
|
<string id="33023">O Emby for Kodi pode não funcionar corretamente até que a base de dados seja atualizada.</string>
|
||||||
|
<string id="33024">Cancelando o processo de sincronização da base de dados. A versão atual do Kodi não é suportada.</string>
|
||||||
|
<string id="33025">completa em:</string>
|
||||||
|
<string id="33026">Comparando filmes de:</string>
|
||||||
|
<string id="33027">Comparando coletâneas</string>
|
||||||
|
<string id="33028">Comparando vídeos clipes de:</string>
|
||||||
|
<string id="33029">Comparando séries de tv de:</string>
|
||||||
|
<string id="33030">Comparando episódios de:</string>
|
||||||
|
<string id="33031">Comparando:</string>
|
||||||
|
<string id="33032">Falha ao gerar um novo Id de dispositivo. Veja seus logs para mais informações.</string>
|
||||||
|
<string id="33033">Um novo Id de dispositivo foi gerado. Kodi irá reiniciar.</string>
|
||||||
|
<string id="33034">Prosseguir com o seguinte servidor?</string>
|
||||||
|
<string id="33035">Cuidado! Se escolher modo Nativo, certas funções do Emby serão perdidas, como: Emby cinema mode, opções de stream/transcodificação direta e agendamento de acesso pelos pais.</string>
|
||||||
|
<string id="33036">Addon (Padrão)</string>
|
||||||
|
<string id="33037">Nativo (Locais Diretos)</string>
|
||||||
|
<string id="33038">Adicionar credenciais de rede para permitir que o Kodi acesse seu conteúdo? Importante: Kodi precisará ser reiniciado para ver as credenciais. Elas também podem ser adicionadas mais tarde.</string>
|
||||||
|
<string id="33039">Desativar biblioteca de músicas do Emby?</string>
|
||||||
|
<string id="33040">Fazer stream direto da biblioteca de músicas? Selecione esta opção se a biblioteca de músicas for acessada remotamente.</string>
|
||||||
|
<string id="33041">Excluir arquivo(s) do Servidor Emby? Esta opção também excluirá o(s) arquivo(s) do disco!</string>
|
||||||
|
<string id="33042">Executar o processo de caching pode levar bastante tempo. Continuar assim mesmo?</string>
|
||||||
|
<string id="33043">Sincronização do cache de artwork</string>
|
||||||
|
<string id="33044">Limpar cache de artwork atual?</string>
|
||||||
|
<string id="33045">Atualizando o cache de artwork:</string>
|
||||||
|
<string id="33046">Aguardando que todos os processos terminem:</string>
|
||||||
|
<string id="33047">Kodi não pode localizar o arquivo:</string>
|
||||||
|
<string id="33048">Você precisa verificar suas credenciais de rede nos ajustes de add-on ou usar substituição de locais no Emby para formatar seu local corretamente (Painel Emby > biblioteca). Parar de sincronizar?</string>
|
||||||
|
<string id="33049">Adicionado:</string>
|
||||||
|
<string id="33050">Se falhar para entrar diversas vezes, o servidor Emby pode bloquear sua conta, Deseja prosseguir?</string>
|
||||||
|
<string id="33051">Canais de TV ao Vivo (experimental)</string>
|
||||||
|
<string id="33052">Gravações de TV ao Vivo (experimental)</string>
|
||||||
|
<string id="33053">Ajustes</string>
|
||||||
|
<string id="33054">Adicionar usuário à sessão</string>
|
||||||
|
<string id="33055">Atualizar nós de listas de reprodução/Vídeo</string>
|
||||||
|
<string id="33056">Executar sincronização manual</string>
|
||||||
|
<string id="33057">Reparar base de dados local (forçar atualização para todo o conteúdo)</string>
|
||||||
|
<string id="33058">Executar reset da base de dados local</string>
|
||||||
|
<string id="33059">Colocar toda artwork no cache</string>
|
||||||
|
<string id="33060">Sincronizar Mídia de Tema do Emby para o Kodi</string>
|
||||||
|
<string id="33061">Adicionar/Remover usuário da sessão</string>
|
||||||
|
<string id="33062">Adicionar usuário</string>
|
||||||
|
<string id="33063">Remover usuário</string>
|
||||||
|
<string id="33064">Remover usuário da sessão</string>
|
||||||
|
<string id="33065">Sucesso!</string>
|
||||||
|
<string id="33066">Removido da seguinte sessão:</string>
|
||||||
|
<string id="33067">Adicionado à seguinte sessão:</string>
|
||||||
|
<string id="33068">Não foi possível adicionar/remover usuário da sessão.</string>
|
||||||
|
<string id="33069">Sucesso na tarefa</string>
|
||||||
|
<string id="33070">Falha na tarefa</string>
|
||||||
|
<string id="33071">Stream Direto</string>
|
||||||
|
<string id="33072">Método de reprodução para seus temas</string>
|
||||||
|
<string id="33073">O arquivo de ajustes não existe na TV Tunes. Altere o ajuste e execute a tarefa novamente.</string>
|
||||||
|
<string id="33074">Deseja realmente resetar a base de dados local do Kodi?</string>
|
||||||
|
<string id="33075">Modificar/Remover as credenciais de rede</string>
|
||||||
|
<string id="33076">Modificar</string>
|
||||||
|
<string id="33077">Remover</string>
|
||||||
|
<string id="33078">Removido:</string>
|
||||||
|
<string id="33079">Digite o nome de usuário da rede</string>
|
||||||
|
<string id="33080">Digite a senha da rede</string>
|
||||||
|
<string id="33081">Credenciais de rede adicionadas para:</string>
|
||||||
|
<string id="33082">Digite o nome do servidor ou endereço IP como indicado nos locais de sua biblioteca do emby. Por exemplo, o nome do servidor \\\\SERVIDOR-PC\\local\\ é \"SERVIDOR-PC\"</string>
|
||||||
|
<string id="33083">Modificar o nome do servidor ou endereço IP</string>
|
||||||
|
<string id="33084">Digite o nome do servidor ou endereço IP</string>
|
||||||
|
<string id="33085">Não é possível resetar a base de dados. Tente novamente.</string>
|
||||||
|
<string id="33086">Remover toda artwork do cache?</string>
|
||||||
|
<string id="33087">Resetar todos os ajustes do add-on Emby?</string>
|
||||||
|
<string id="33088">O reset da base de dados foi concluída, Kodi irá reiniciar para aplicar as alterações.</string>
|
||||||
|
</strings>
|
329
resources/language/Russian/strings.xml
Normal file
329
resources/language/Russian/strings.xml
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<strings>
|
||||||
|
<!-- Add-on settings -->
|
||||||
|
<string id="29999">Emby для Kodi</string>
|
||||||
|
<string id="30000">Основной адрес сервера</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30002">Воспроизводить по HTTP вместо SMB</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30004">Уровень журналирования</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30016">Название устройства</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30022">Расширенное</string>
|
||||||
|
<string id="30024">Имя пользователя</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30030">Номер порта</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30035">Число последних музыкальных альбомов для просмотра:</string>
|
||||||
|
<string id="30036">Число последних фильмов для просмотра:</string>
|
||||||
|
<string id="30037">Число последних ТВ-эпизодов для просмотра:</string>
|
||||||
|
<string id="30042">Подновить</string>
|
||||||
|
<string id="30043">Удалить</string>
|
||||||
|
<string id="30044">Неверное Имя пользователя/Пароль</string>
|
||||||
|
<string id="30045">Имя пользователя не найдено</string>
|
||||||
|
<string id="30052">Удаляется</string>
|
||||||
|
<string id="30053">В ожидании удаления с сервера</string>
|
||||||
|
<string id="30068">Сортировать по</string>
|
||||||
|
<string id="30069">Никакой</string>
|
||||||
|
<string id="30070">Действие</string>
|
||||||
|
<string id="30071">Приключения</string>
|
||||||
|
<string id="30072">Анимация</string>
|
||||||
|
<string id="30073">Криминал</string>
|
||||||
|
<string id="30074">Комедия</string>
|
||||||
|
<string id="30075">Документалистика</string>
|
||||||
|
<string id="30076">Драма</string>
|
||||||
|
<string id="30077">Фэнтези</string>
|
||||||
|
<string id="30078">Иностранное</string>
|
||||||
|
<string id="30079">История</string>
|
||||||
|
<string id="30080">Ужасы</string>
|
||||||
|
<string id="30081">Музыка</string>
|
||||||
|
<string id="30082">Мюзикл</string>
|
||||||
|
<string id="30083">Детектив</string>
|
||||||
|
<string id="30084">Мелодрама</string>
|
||||||
|
<string id="30085">Научная фантастика</string>
|
||||||
|
<string id="30086">Короткометражное</string>
|
||||||
|
<string id="30087">Саспенс</string>
|
||||||
|
<string id="30088">Триллер</string>
|
||||||
|
<string id="30089">Вестерн</string>
|
||||||
|
<string id="30090">Фильтровать по жанрам</string>
|
||||||
|
<string id="30091">Подтверить удаление файла</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30093">Отметить как просмотренное</string>
|
||||||
|
<string id="30094">Отметить как непросмотренное</string>
|
||||||
|
<string id="30097">Сортировать по</string>
|
||||||
|
<string id="30098">Порядок сортировки по убыванию</string>
|
||||||
|
<string id="30099">Порядок сортировки по возрастанию</string>
|
||||||
|
<!-- resume dialog -->
|
||||||
|
<string id="30105">Возобновить</string>
|
||||||
|
<string id="30106">Возобн. с</string>
|
||||||
|
<string id="30107">Начать. с начала</string>
|
||||||
|
<string id="30114">Предлагать удаление после воспроизведения</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30115">Для эпизодов</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30116">Для фильмов</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30118">Добавить соотношение для возобновления</string>
|
||||||
|
<string id="30119">Добавить номер эпизода</string>
|
||||||
|
<string id="30120">Показывать индикатор загрузки</string>
|
||||||
|
<string id="30121">Загружается содержание</string>
|
||||||
|
<string id="30122">Получение данных</string>
|
||||||
|
<string id="30125">Готово</string>
|
||||||
|
<string id="30132">Предупреждение</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30135">Ошибка</string>
|
||||||
|
<string id="30138">Поиск</string>
|
||||||
|
<string id="30157">Включить улучшенные рисунки (нп., CoverArt)</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30158">Метаданные</string>
|
||||||
|
<string id="30159">Иллюстрация</string>
|
||||||
|
<string id="30160">Качество видео</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30165">Прямое воспроизведение</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30166">Перекодировка</string>
|
||||||
|
<string id="30167">Успешно обнаружен сервер</string>
|
||||||
|
<string id="30168">Найден сервер</string>
|
||||||
|
<string id="30169">Адрес:</string>
|
||||||
|
<!-- Video nodes -->
|
||||||
|
<string id="30170">Недавно добавленные ТВ-программы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30171">ТВ-программы в процессе</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30172">Вся музыка</string>
|
||||||
|
<string id="30173">Каналы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30174">Недавно добавленные фильмы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30175">Недавно добавленные эпизоды</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30176">Недавно добавленные альбомы</string>
|
||||||
|
<string id="30177">Фильмы в процессе</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30178">Эпизоды в процессе</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30179">Следующие эпизоды</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30180">Избранные фильмы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30181">Избранные ТВ-программы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30182">Избранные эпизоды</string>
|
||||||
|
<string id="30183">Часто воспроизводимые альбомы</string>
|
||||||
|
<string id="30184">Ожидаемое</string>
|
||||||
|
<string id="30185">Коллекции</string>
|
||||||
|
<string id="30186">Трейлеры</string>
|
||||||
|
<string id="30187">Муз-ые видео</string>
|
||||||
|
<string id="30188">Фотографии</string>
|
||||||
|
<string id="30189">Непросмотренные фильмы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30190">Киножанры</string>
|
||||||
|
<string id="30191">Киностудии</string>
|
||||||
|
<string id="30192">Киноактёры</string>
|
||||||
|
<string id="30193">Непросмотренные эпизоды</string>
|
||||||
|
<string id="30194">Тележанры</string>
|
||||||
|
<string id="30195">Телесети</string>
|
||||||
|
<string id="30196">Телеактёры</string>
|
||||||
|
<string id="30197">Плей-листы</string>
|
||||||
|
<string id="30199">Назначить виды</string>
|
||||||
|
<string id="30200">Выбрать пользователя</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30204">Не удалось подсоединиться к серверу</string>
|
||||||
|
<string id="30207">Композиции</string>
|
||||||
|
<string id="30208">Альбомы</string>
|
||||||
|
<string id="30209">Исполнители альбома</string>
|
||||||
|
<string id="30210">Исполнители</string>
|
||||||
|
<string id="30211">Музыкальные жанры</string>
|
||||||
|
<string id="30220">Последнее</string>
|
||||||
|
<string id="30221">Выполняется</string>
|
||||||
|
<string id="30222">Следующее</string>
|
||||||
|
<string id="30223">Пользовательские виды</string>
|
||||||
|
<string id="30224">Отчёт метрики</string>
|
||||||
|
<string id="30227">Случайные фильмы</string>
|
||||||
|
<string id="30228">Случайные эпизоды</string>
|
||||||
|
<string id="30229">Случайные элементы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30230">Предлагаемые элементы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30235">Допматериалы</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30236">Синхронизировать тематическую музыку</string>
|
||||||
|
<string id="30237">Синхронизировать дополнительные иллюстрации</string>
|
||||||
|
<string id="30238">Синхронизировать коллекции фильмов</string>
|
||||||
|
<string id="30239">Сбросить локальную базу данных Kodi</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30243">Включить HTTPS</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30245">Принудительно включить кодеки для перекодировки</string>
|
||||||
|
<string id="30249">Включать сообщение о подсоединении сервера при запуске</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30251">Недавно добавленные домашние видео</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30252">Недавно добавленные фотографии</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30253">Избранные домашние видео</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30254">Избранные фотографии</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30255">Избранные альбомы</string>
|
||||||
|
<string id="30256">Недавно добавленные музыкальные видео</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30257">Музыкальные видео в процессе</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30258">Непросмотренные домашние видео</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<!-- Default views -->
|
||||||
|
<string id="30300">Активно</string>
|
||||||
|
<string id="30301">Очистить параметры</string>
|
||||||
|
<string id="30302">Фильмы</string>
|
||||||
|
<string id="30303">Коллекции</string>
|
||||||
|
<string id="30304">Трейлеры</string>
|
||||||
|
<string id="30305">Сериалы</string>
|
||||||
|
<string id="30306">Сезоны</string>
|
||||||
|
<string id="30307">Эпизоды</string>
|
||||||
|
<string id="30308">Исп-ли музыки</string>
|
||||||
|
<string id="30309">Муз-ые альбомы</string>
|
||||||
|
<string id="30310">Муз-ые видео</string>
|
||||||
|
<string id="30311">Музыкальные дорожки</string>
|
||||||
|
<string id="30312">Каналы</string>
|
||||||
|
<!-- contextmenu -->
|
||||||
|
<string id="30401">Параметры Emby</string>
|
||||||
|
<string id="30405">Добавить в Избранное Emby</string>
|
||||||
|
<string id="30406">Изъять из Избранного Emby</string>
|
||||||
|
<string id="30407">Назначить произвольную возрастную категорию композиции</string>
|
||||||
|
<string id="30408">Параметры дополнения для Emby</string>
|
||||||
|
<string id="30409">Удалить элемент с сервера</string>
|
||||||
|
<string id="30410">Подновить данный элемент</string>
|
||||||
|
<string id="30411">Назначить произвольную возрастную категорию композиции (0-5)</string>
|
||||||
|
<!-- add-on settings -->
|
||||||
|
<string id="30500">Удостоверить SSL-сертификат хоста</string>
|
||||||
|
<string id="30501">SSL-сертификат клиента</string>
|
||||||
|
<string id="30502">Использовать альтернативный адрес</string>
|
||||||
|
<string id="30503">Альтернативный адрес сервера</string>
|
||||||
|
<string id="30504">Использовать альтернативное имя устройства</string>
|
||||||
|
<string id="30505">[COLOR yellow]Войти повторно[/COLOR]</string>
|
||||||
|
<string id="30506">Параметры синхронизации</string>
|
||||||
|
<string id="30507">Показать прогресс синхронизации</string>
|
||||||
|
<string id="30508">Синхронизировать пустые ТВ-программы</string>
|
||||||
|
<string id="30509">Включить медиатеку музыки</string>
|
||||||
|
<string id="30510">Прямая трансляция медиатеки музыки</string>
|
||||||
|
<string id="30511">Режим воспроизведения</string>
|
||||||
|
<string id="30512">Принудительно кэшировать иллюстрации</string>
|
||||||
|
<string id="30513">Предел ветвей кэша иллюстраций (рекомендуется для rpi)</string>
|
||||||
|
<string id="30514">Включить быстрый запуск (требуется плагин сервера)</string>
|
||||||
|
<string id="30515">Максимальное число элементов для запроса с сервера за раз</string>
|
||||||
|
<string id="30516">Воспроизведение</string>
|
||||||
|
<string id="30517">Сетевые учётные данные</string>
|
||||||
|
<string id="30518">Включить режим кинотеатра Emby</string>
|
||||||
|
<string id="30519">Запрашивать для воспроизведения трейлеров</string>
|
||||||
|
<string id="30520">Пропускать подтверждение удаления в Emby для контекстного меню (используйте на свой страх и риск)</string>
|
||||||
|
<string id="30521">Переход назад при возобновлении, с</string>
|
||||||
|
<string id="30522">Принудительно перекодировать H265</string>
|
||||||
|
<string id="30523">Параметры метаданных музыки (несовместимо с прямой трансляцией)</string>
|
||||||
|
<string id="30524">Импортировать оценку музыкальной композиции из файла</string>
|
||||||
|
<string id="30525">Преобразовать оценку музыкальной композиции в оценку Emby</string>
|
||||||
|
<string id="30526">Разрешить обновление оценки в файлах композиций</string>
|
||||||
|
<string id="30527">Игнорировать спецэпизоды среди следующих эпизодов</string>
|
||||||
|
<string id="30528">Постоянные пользователи для добавления в сессию</string>
|
||||||
|
<string id="30529">Задержка запуска, с</string>
|
||||||
|
<string id="30530">Включить сообщение о перезапуске сервера</string>
|
||||||
|
<string id="30531">Включить уведомление о новом содержании</string>
|
||||||
|
<string id="30532">Длительность показа всплывающего окна медиатеки видео, с</string>
|
||||||
|
<string id="30533">Длительность показа всплывающего окна медиатеки музыки, с</string>
|
||||||
|
<string id="30534">Сообщения сервера</string>
|
||||||
|
<string id="30535">Генерировать Id нового устройства</string>
|
||||||
|
<string id="30536">Синхронизировать, когда отключен хранитель экрана</string>
|
||||||
|
<string id="30537">Принудительно перекодировать Hi10P</string>
|
||||||
|
<string id="30538">Выключено</string>
|
||||||
|
<!-- service add-on -->
|
||||||
|
<string id="33000">Начало работы</string>
|
||||||
|
<string id="33001">Ошибка соединения</string>
|
||||||
|
<string id="33002">Сервер недостижим</string>
|
||||||
|
<string id="33003">Сервер в сети</string>
|
||||||
|
<string id="33004">Элементы, добавленные в плей-лист</string>
|
||||||
|
<string id="33005">Элементы в очереди в плей-листе</string>
|
||||||
|
<string id="33006">Сервер перезапускается</string>
|
||||||
|
<string id="33007">Доступ включён</string>
|
||||||
|
<string id="33008">Ввести пароль для пользователя:</string>
|
||||||
|
<string id="33009">Недопустимое имя пользователя или пароль.</string>
|
||||||
|
<string id="33010">Не удалось проверить подлинность слишком много раз</string>
|
||||||
|
<string id="33011">Прямое воспроизведение невозможно</string>
|
||||||
|
<string id="33012">Прямое воспроизведение не удалось 3 раза. Включено воспроизведение с HTTP.</string>
|
||||||
|
<string id="33013">Выбрать поток аудио</string>
|
||||||
|
<string id="33014">Выбрать поток субтитров</string>
|
||||||
|
<string id="33015">Удалить файл с вашего Emby Server?</string>
|
||||||
|
<string id="33016">Воспроизвести трейлеры?</string>
|
||||||
|
<string id="33017">Сбор фильмов с:</string>
|
||||||
|
<string id="33018">Сбор коллекций</string>
|
||||||
|
<string id="33019">Сбор музыкальных видео с:</string>
|
||||||
|
<string id="33020">Сбор ТВ-передач с:</string>
|
||||||
|
<string id="33021">Сбор:</string>
|
||||||
|
<string id="33022">Обнаружено, что базу данных необходимо пересоздать для данной версии Emby для Kodi. Приступить?</string>
|
||||||
|
<string id="33023">Emby для Kodi возможно не будет корректно работать до тех пор, пока базу данных не сбросят.</string>
|
||||||
|
<string id="33024">Процесс синхронизации базы данных отменён. Текущая версия Kodi не поддерживается.</string>
|
||||||
|
<string id="33025">выполнено в:</string>
|
||||||
|
<string id="33026">Сравниваются фильмы с:</string>
|
||||||
|
<string id="33027">Сравниваются коллекции</string>
|
||||||
|
<string id="33028">Сравниваются музыкальные видео с:</string>
|
||||||
|
<string id="33029">Сравниваются ТВ-передачи с:</string>
|
||||||
|
<string id="33030">Сравниваются ТВ-эпизоды с:</string>
|
||||||
|
<string id="33031">Сравниваются:</string>
|
||||||
|
<string id="33032">Генерирование Id нового устройства не удалось. Просмотрите ваши журналы для более подробной информации.</string>
|
||||||
|
<string id="33033">Было сгенерирован Id нового устройства. Kodi теперь перезапустится.</string>
|
||||||
|
<string id="33034">Приступить к следующему серверу?</string>
|
||||||
|
<string id="33035">Осторожно! Если вы выбрали режим Собственный, некоторые функции Emby будут отсутствовать, например, режим кинотеатра Emby, прямой трансляция / варианты перекодировки и расписание доступа.</string>
|
||||||
|
<string id="33036">Надстройка (по умолчанию)</string>
|
||||||
|
<string id="33037">Собственный (непосредственные пути)</string>
|
||||||
|
<string id="33038">Добавить сетевые учётные данные, чтобы разрешить доступ для Kodi к вашему содержанию? Важно: Чтобы увидеть учётные данные, необходимо перезапустить Kodi. Также они могут быть добавлены позднее.</string>
|
||||||
|
<string id="33039">Отключить музыкальную медиатеку Emby?</string>
|
||||||
|
<string id="33040">Транслировать напрямую музыкальную медиатеку? Выберите данный вариант, если будет удалённый доступ к музыкальной медиатеке.</string>
|
||||||
|
<string id="33041">Удалить файл(ы) с Emby Server? Файл(ы) будут удалены также с диска!</string>
|
||||||
|
<string id="33042">Работающий процесс кэширования может занять некоторое время. Продолжить по-любому?</string>
|
||||||
|
<string id="33043">Синхронизировать кэш иллюстраций</string>
|
||||||
|
<string id="33044">Сбросить кэш существующих иллюстраций?</string>
|
||||||
|
<string id="33045">Обновить кэш иллюстраций:</string>
|
||||||
|
<string id="33046">В ожидании для всех потоков, чтобы выйти:</string>
|
||||||
|
<string id="33047">Kodi не может обнаружить файл:</string>
|
||||||
|
<string id="33048">Вам может понадобиться проверить сетевые учётные данныев настройках надстройки или использовать подстановку путей в Emby, чтобы правильно форматировать свой путь (Инфопанель Emby > Медиатека). Остановить синхронизацию?</string>
|
||||||
|
<string id="33049">Добавлено:</string>
|
||||||
|
<string id="33050">Если вам не удалось войти слишком много раз, Emby server может заблокировать вашу учётную запись. Приступить по-любому?</string>
|
||||||
|
<string id="33051">Эфирные каналы (экспериментально)</string>
|
||||||
|
<string id="33052">Эфирные записи (экспериментально)</string>
|
||||||
|
<string id="33053">Параметры</string>
|
||||||
|
<string id="33054">Добавить пользователя к сеансу</string>
|
||||||
|
<string id="33055">Подновить узлы плей-листов/видео Emby</string>
|
||||||
|
<string id="33056">Выполнить ручную синхронизацию</string>
|
||||||
|
<string id="33057">Исправить локальную базу данных (принудительно обновить всё содержание)</string>
|
||||||
|
<string id="33058">Выполнить сброс локальной базы данных</string>
|
||||||
|
<string id="33059">Кэшировать все иллюстрации</string>
|
||||||
|
<string id="33060">Синхронизировать медиаданные темы Emby с Kodi</string>
|
||||||
|
<string id="33061">Добавить/Изъять пользователя из сеанса</string>
|
||||||
|
<string id="33062">Добавить пользователя</string>
|
||||||
|
<string id="33063">Изъять пользователя</string>
|
||||||
|
<string id="33064">Изъять пользователя из сеанса</string>
|
||||||
|
<string id="33065">Успешно!</string>
|
||||||
|
<string id="33066">Изъято из просматриваемого сеанса:</string>
|
||||||
|
<string id="33067">Добавлено в просматриваемый сеанс:</string>
|
||||||
|
<string id="33068">Невозможно добавить/изъять пользователя из сеанса.</string>
|
||||||
|
<string id="33069">Задача успешно выполнена</string>
|
||||||
|
<string id="33070">Задачу выполнить не удалось</string>
|
||||||
|
<string id="33071">Прямая трансляция</string>
|
||||||
|
<string id="33072">Метод воспроизведения для вашим тем</string>
|
||||||
|
<string id="33073">Файл параметров отсутствует в TV Tunes. Измените параметр и запустите задачу снова.</string>
|
||||||
|
<string id="33074">Вы действительно хотите выполнить сброс вашей локальной базы данных Kodi?</string>
|
||||||
|
<string id="33075">Изменить/Изъять сетевые учётные данные</string>
|
||||||
|
<string id="33076">Изменить</string>
|
||||||
|
<string id="33077">Изъять</string>
|
||||||
|
<string id="33078">Изъято:</string>
|
||||||
|
<string id="33079">Ввести сетевое имя пользователя</string>
|
||||||
|
<string id="33080">Ввести сетевой пароль</string>
|
||||||
|
<string id="33081">Добавлены сетевые учётные данные для:</string>
|
||||||
|
<string id="33082">Введите имя сервера или IP-адрес, как обозначено в путях в вашей медиатеке Emby. К примеру, имя сервера: \\\\SERVER-PC\\путь\\ является \"SERVER-PC\"</string>
|
||||||
|
<string id="33083">Изменить имя сервера или IP-адрес</string>
|
||||||
|
<string id="33084">Ввести имя сервера или IP-адрес</string>
|
||||||
|
<string id="33085">Не удалось сбросить базу данных. Повторите попытку.</string>
|
||||||
|
<string id="33086">Удалить все кэшированные иллюстрации?</string>
|
||||||
|
<string id="33087">Сбросить все параметры надстройки Emby?</string>
|
||||||
|
<string id="33088">Сброс базы данных завершён, Kodi теперь перезапустится, чтобы применить изменения.</string>
|
||||||
|
</strings>
|
329
resources/language/Spanish/strings.xml
Normal file
329
resources/language/Spanish/strings.xml
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<strings>
|
||||||
|
<!-- Add-on settings -->
|
||||||
|
<string id="29999">Emby para Kodi</string>
|
||||||
|
<string id="30000">Dirección Primaria del Servidor</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30002">Reproducir desde HTTP en vez de desde SMB</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30004">Nivel de bitácora</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30016">Nombre de Dispositivo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30022">Avanzado</string>
|
||||||
|
<string id="30024">Usuario</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30030">Puerto</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30035">Cantidad de Álbumes recientes a mostrar:</string>
|
||||||
|
<string id="30036">Cantidad de Películas recientes a mostrar:</string>
|
||||||
|
<string id="30037">Cantidad de Episodios recientes a mostrar:</string>
|
||||||
|
<string id="30042">Refrescar</string>
|
||||||
|
<string id="30043">Eliminar</string>
|
||||||
|
<string id="30044">Usuario/Contraseña incorrectos</string>
|
||||||
|
<string id="30045">Usuario no encontrado</string>
|
||||||
|
<string id="30052">Eliminando</string>
|
||||||
|
<string id="30053">Esperando a eliminación en servidor</string>
|
||||||
|
<string id="30068">Clasificar por</string>
|
||||||
|
<string id="30069">Ninguno</string>
|
||||||
|
<string id="30070">Acción</string>
|
||||||
|
<string id="30071">Aventuras</string>
|
||||||
|
<string id="30072">Animación</string>
|
||||||
|
<string id="30073">Crimen</string>
|
||||||
|
<string id="30074">Comedia</string>
|
||||||
|
<string id="30075">Documental</string>
|
||||||
|
<string id="30076">Drama</string>
|
||||||
|
<string id="30077">Fantasía</string>
|
||||||
|
<string id="30078">Extranjera</string>
|
||||||
|
<string id="30079">Historia</string>
|
||||||
|
<string id="30080">Horror</string>
|
||||||
|
<string id="30081">Música</string>
|
||||||
|
<string id="30082">Musical</string>
|
||||||
|
<string id="30083">Misterio</string>
|
||||||
|
<string id="30084">Romance</string>
|
||||||
|
<string id="30085">Ciencia Ficción</string>
|
||||||
|
<string id="30086">Corto</string>
|
||||||
|
<string id="30087">Suspenso</string>
|
||||||
|
<string id="30088">Thriller</string>
|
||||||
|
<string id="30089">Oeste</string>
|
||||||
|
<string id="30090">Filtro por Género</string>
|
||||||
|
<string id="30091">Confirmar eliminación de archivo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30093">Marcar como visto</string>
|
||||||
|
<string id="30094">Marcar como no visto</string>
|
||||||
|
<string id="30097">Clasificar por</string>
|
||||||
|
<string id="30098">Orden de clasificación Descendente</string>
|
||||||
|
<string id="30099">Orden de clasificación Ascendente</string>
|
||||||
|
<!-- resume dialog -->
|
||||||
|
<string id="30105">Reanudar</string>
|
||||||
|
<string id="30106">Reanudar desde</string>
|
||||||
|
<string id="30107">Iniciar desde el principio</string>
|
||||||
|
<string id="30114">Ofrecer eliminar luego de reproducción</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30115">Para Episodios</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30116">Para Películas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30118">Añadir porcentaje de reanudar</string>
|
||||||
|
<string id="30119">Añadir Número de Episodio</string>
|
||||||
|
<string id="30120">Mostrar Progreso de Carga</string>
|
||||||
|
<string id="30121">Cargando Contenido</string>
|
||||||
|
<string id="30122">Obteniendo Datos</string>
|
||||||
|
<string id="30125">Completado</string>
|
||||||
|
<string id="30132">Advertencia</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30135">Error</string>
|
||||||
|
<string id="30138">Buscar</string>
|
||||||
|
<string id="30157">Activar Imágenes Avanzadas (como CoverArt)</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30158">Metadatos</string>
|
||||||
|
<string id="30159">Arte</string>
|
||||||
|
<string id="30160">Calidad de Vídeo</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30165">Reproducción Directa</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30166">Transcodificando</string>
|
||||||
|
<string id="30167">Detección de Servidor Exitosa</string>
|
||||||
|
<string id="30168">Servidor Encontrado</string>
|
||||||
|
<string id="30169">Dirección:</string>
|
||||||
|
<!-- Video nodes -->
|
||||||
|
<string id="30170">Series de TV Añadidos Recientemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30171">Series de TV En Progreso</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30172">Toda la Música</string>
|
||||||
|
<string id="30173">Canales</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30174">Películas Añadidas Recientemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30175">Episodios Añadidos Recientemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30176">Álbumes Añadidos Recientemente</string>
|
||||||
|
<string id="30177">Películas En Progreso</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30178">Episodios En Progreso</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30179">Próximos Episodios</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30180">Películas Favoritas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30181">Series de TV Favoritas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30182">Episodios Favoritos</string>
|
||||||
|
<string id="30183">Álbumes Reproducidos Frecuentemente</string>
|
||||||
|
<string id="30184">Series a Estrenar Próximamente</string>
|
||||||
|
<string id="30185">Sagas</string>
|
||||||
|
<string id="30186">Tráilers</string>
|
||||||
|
<string id="30187">Videoclips</string>
|
||||||
|
<string id="30188">Fotos</string>
|
||||||
|
<string id="30189">Películas No Vistas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30190">Géneros de Películas</string>
|
||||||
|
<string id="30191">Estudios de Películas</string>
|
||||||
|
<string id="30192">Actores de Películas</string>
|
||||||
|
<string id="30193">Episodios No Vistos</string>
|
||||||
|
<string id="30194">Géneros de Series de TV</string>
|
||||||
|
<string id="30195">Cadenas de TV</string>
|
||||||
|
<string id="30196">Actores de Series</string>
|
||||||
|
<string id="30197">Listas de Reproducción</string>
|
||||||
|
<string id="30199">Establecer Vistas</string>
|
||||||
|
<string id="30200">Seleccionar Usuario</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30204">No se puede conectar con servidor</string>
|
||||||
|
<string id="30207">Canciones</string>
|
||||||
|
<string id="30208">Álbumes</string>
|
||||||
|
<string id="30209">Artistas de Álbumes</string>
|
||||||
|
<string id="30210">Artistas</string>
|
||||||
|
<string id="30211">Géneros Musicales</string>
|
||||||
|
<string id="30220">Últimos</string>
|
||||||
|
<string id="30221">En Progreso</string>
|
||||||
|
<string id="30222">NextUp</string>
|
||||||
|
<string id="30223">Vistas de Usuario</string>
|
||||||
|
<string id="30224">Reportar Métricas</string>
|
||||||
|
<string id="30227">Películas Aleatorias</string>
|
||||||
|
<string id="30228">Episodios Aleatorios</string>
|
||||||
|
<string id="30229">Ítems Aleatorios</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30230">Ítems Recomendados</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30235">Extras</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30236">Sincronizar Música de Tema</string>
|
||||||
|
<string id="30237">Sincronizar Extra Fanart</string>
|
||||||
|
<string id="30238">Sincronizar Sagas</string>
|
||||||
|
<string id="30239">Restablecer Base de datos local de Kodi</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30243">Activar HTTPS</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30245">Forzar Transcodificación de Códecs</string>
|
||||||
|
<string id="30249">Activar mensaje de conexión con servidor al inicio</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30251">Vídeos Caseros Añadidos Recientemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30252">Fotos Añadidas Recientemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30253">Vídeos Caseros Favoritos</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30254">Fotos Favoritas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30255">Álbumes Favoritos</string>
|
||||||
|
<string id="30256">Videoclips Añadidos Recientemente</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30257">Videoclips En Progreso</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30258">Videoclips No Vistos</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<!-- Default views -->
|
||||||
|
<string id="30300">Activo</string>
|
||||||
|
<string id="30301">Limpiar Configuración</string>
|
||||||
|
<string id="30302">Películas</string>
|
||||||
|
<string id="30303">Sagas</string>
|
||||||
|
<string id="30304">Tráilers</string>
|
||||||
|
<string id="30305">Series de TV</string>
|
||||||
|
<string id="30306">Temporadas</string>
|
||||||
|
<string id="30307">Episodios</string>
|
||||||
|
<string id="30308">Artistas de Música</string>
|
||||||
|
<string id="30309">Álbumes</string>
|
||||||
|
<string id="30310">Videoclips</string>
|
||||||
|
<string id="30311">Canciones</string>
|
||||||
|
<string id="30312">Canales</string>
|
||||||
|
<!-- contextmenu -->
|
||||||
|
<string id="30401">Opciones Emby</string>
|
||||||
|
<string id="30405">Añadir a favoritos de Emby</string>
|
||||||
|
<string id="30406">Eliminar de favoritos de Emby</string>
|
||||||
|
<string id="30407">Establecer valoración personalizada para canción</string>
|
||||||
|
<string id="30408">Ajustes de complemento Emby</string>
|
||||||
|
<string id="30409">Eliminar ítem del servidor</string>
|
||||||
|
<string id="30410">Refrescar este ítem</string>
|
||||||
|
<string id="30411">Establecer valoración personalizada de canción (0-5)</string>
|
||||||
|
<!-- add-on settings -->
|
||||||
|
<string id="30500">Verifica Certificado SSL del Host</string>
|
||||||
|
<string id="30501">Certificado SSL del Cliente</string>
|
||||||
|
<string id="30502">Usar dirección alterna</string>
|
||||||
|
<string id="30503">Dirección Alterna de Servidor</string>
|
||||||
|
<string id="30504">Usar Nombre alterno de dispositivo</string>
|
||||||
|
<string id="30505">[COLOR yellow]Reintentar acceso[/COLOR]</string>
|
||||||
|
<string id="30506">Opciones de Sincronización</string>
|
||||||
|
<string id="30507">Mostrar Progreso de sincronización</string>
|
||||||
|
<string id="30508">Sincronizar Series de TV vacías</string>
|
||||||
|
<string id="30509">Activar Discoteca</string>
|
||||||
|
<string id="30510">Transmitir directo la discoteca</string>
|
||||||
|
<string id="30511">Modo de Reproducción</string>
|
||||||
|
<string id="30512">Forzar Guardado local (caché) de Arte</string>
|
||||||
|
<string id="30513">Limitar hilos de guardado local de arte (recomendado para rpi)</string>
|
||||||
|
<string id="30514">Activar inicio rápido (requiere plugin en el servidor)</string>
|
||||||
|
<string id="30515">Cantidad máxima de ítems a solicitar al servidor al mismo tiempo</string>
|
||||||
|
<string id="30516">Reproducción</string>
|
||||||
|
<string id="30517">Credenciales de Red</string>
|
||||||
|
<string id="30518">Activar modo Emby cinema</string>
|
||||||
|
<string id="30519">Preguntar si reproducir tráilers</string>
|
||||||
|
<string id="30520">Obviar confirmación de eliminación de Emby en menú de contexto (usar a su propio riesgo)</string>
|
||||||
|
<string id="30521">Intervalo de Salto atrás al reanudar (en segundos)</string>
|
||||||
|
<string id="30522">Forzar transcodificar H.265</string>
|
||||||
|
<string id="30523">Opciones de metadatos de Música (no compatible con transmisión directa)</string>
|
||||||
|
<string id="30524">Importar valoración de canciones directamente desde archivos</string>
|
||||||
|
<string id="30525">Convertir valoración de canciones a valoración Emby</string>
|
||||||
|
<string id="30526">Permitir actualización de valoración de canciones en los archivos</string>
|
||||||
|
<string id="30527">Ignorar especiales en próximos episodios</string>
|
||||||
|
<string id="30528">Usuarios permanentes a incluir en la sesión</string>
|
||||||
|
<string id="30529">Retraso en Inicio (en segundos)</string>
|
||||||
|
<string id="30530">Activar mensaje de reinicio del servidor</string>
|
||||||
|
<string id="30531">Activar notificación de nuevo contenido</string>
|
||||||
|
<string id="30532">Duración del popup para la videoteca (en segundos)</string>
|
||||||
|
<string id="30533">Duración del popup para la discoteca (en segundos)</string>
|
||||||
|
<string id="30534">Mensajes del Servidor</string>
|
||||||
|
<string id="30535">Generar un nuevo Id de dispositivo</string>
|
||||||
|
<string id="30536">Sincronizar cuando salvapantallas esté desactivado</string>
|
||||||
|
<string id="30537">Forzar Transcodificación de Hi10P</string>
|
||||||
|
<string id="30538">Desactivado</string>
|
||||||
|
<!-- service add-on -->
|
||||||
|
<string id="33000">Bienvenido(a)</string>
|
||||||
|
<string id="33001">Error de conexión</string>
|
||||||
|
<string id="33002">Servidor no disponible</string>
|
||||||
|
<string id="33003">Servidor está en línea</string>
|
||||||
|
<string id="33004">Ítems añadidos a lista de reproducción</string>
|
||||||
|
<string id="33005">Ítems encolados a lista de reproducción</string>
|
||||||
|
<string id="33006">El servidor está reiniciando</string>
|
||||||
|
<string id="33007">Acceso está activo</string>
|
||||||
|
<string id="33008">Introduzca contraseña para usuario:</string>
|
||||||
|
<string id="33009">Usuario o contraseña inválidos</string>
|
||||||
|
<string id="33010">Demasiados fallos de autenticación</string>
|
||||||
|
<string id="33011">No es posible reproducción directa</string>
|
||||||
|
<string id="33012">Reproducción directa falló 3 veces. Activando reproducción desde HTTP.</string>
|
||||||
|
<string id="33013">Elegir pista de audio</string>
|
||||||
|
<string id="33014">Elegir pista de subtítulos</string>
|
||||||
|
<string id="33015">¿Elimiar archivo de sus servidor de Emby?</string>
|
||||||
|
<string id="33016">¿Reproducir tráilers?</string>
|
||||||
|
<string id="33017">Obteniendo películas desde:</string>
|
||||||
|
<string id="33018">Obteniendo sagas</string>
|
||||||
|
<string id="33019">Obteniendo videoclips desde:</string>
|
||||||
|
<string id="33020">Obteniendo series de tv desde:</string>
|
||||||
|
<string id="33021">Obteniendo:</string>
|
||||||
|
<string id="33022">Se detectó que la base de datos debe ser re-creada para esta versión de Emby para Kodi. ¿Proceder?</string>
|
||||||
|
<string id="33023">Emby para Kodi podría funcionar incorrectamente hasta que la base de datos sea restablecida.</string>
|
||||||
|
<string id="33024">Cancelando el proceso de sincronización de la base de datos. La versión actual de Kodi no está soportada.</string>
|
||||||
|
<string id="33025">completado en:</string>
|
||||||
|
<string id="33026">Comparando películas desde:</string>
|
||||||
|
<string id="33027">Comparando sagas</string>
|
||||||
|
<string id="33028">Comparando videoclips desde:</string>
|
||||||
|
<string id="33029">Comparando series de tv desde:</string>
|
||||||
|
<string id="33030">Comparando episodios desde:</string>
|
||||||
|
<string id="33031">Comparando:</string>
|
||||||
|
<string id="33032">Falló la generación de un nuevo Id de dispositivo. Ver sus bitácoras para más información.</string>
|
||||||
|
<string id="33033">Se ha generado un nuevo Id de dispositivo. Kodi reinicará ahora.</string>
|
||||||
|
<string id="33034">¿Proceder con el servidor a continuación?</string>
|
||||||
|
<string id="33035">¡Cuidado! Si selecciona modo Nativo, algunas funciones de Emby no estarán presentes, tales como: modo Emby cinema, opciones de reproducción directa/transcodificación y calendario de acceso parental.</string>
|
||||||
|
<string id="33036">Complemento (Predeterminado)</string>
|
||||||
|
<string id="33037">Nativo (Rutas Directas)</string>
|
||||||
|
<string id="33038">¿Añadir credenciales de red para permitir a Kodi acceder a su contenido? Importante: Kodi necesitará ser reiniciado para ver las credenciales. Las mismas también pueden añadirse en otro momento.</string>
|
||||||
|
<string id="33039">¿Desactivar la discoteca Emby?</string>
|
||||||
|
<string id="33040">¿Transmisión Directa de la discoteca? Seleccione esta opción si habrá acceso remoto a la discoteca.</string>
|
||||||
|
<string id="33041">¿Eliminar archivo(s) del servidor Emby? ¡Esto también eliminará el(los) archivo(s) de su disco!</string>
|
||||||
|
<string id="33042">La ejecución del proceso de guardado local en caché pueder tomar un tiempo. ¿Continuar?</string>
|
||||||
|
<string id="33043">Sincronización de caché de Arte</string>
|
||||||
|
<string id="33044">¿Restablecer caché de Arte existente?</string>
|
||||||
|
<string id="33045">Actualizando caché de arte:</string>
|
||||||
|
<string id="33046">Esperando a que todos los hilos terminen:</string>
|
||||||
|
<string id="33047">Kodi no puede localizar el archivo:</string>
|
||||||
|
<string id="33048">Puede que necesite verificar sus credenciales de red en los ajustes del complemento, o utilizar la sustitución de rutas Emby para formatear correctamente su ruta (Cuadro de Mando Emby > Biblioteca). ¿Detener la sincronización?</string>
|
||||||
|
<string id="33049">Añadido:</string>
|
||||||
|
<string id="33050">Si falla demasiadas veces en iniciar la sesión, el servidor Emby puede bloquear su cuenta. ¿Proceder de todos modos?</string>
|
||||||
|
<string id="33051">Canales de TV En Vivo (experimental)</string>
|
||||||
|
<string id="33052">Grabaciones de TV En Vivo (experimental)</string>
|
||||||
|
<string id="33053">Ajustes</string>
|
||||||
|
<string id="33054">Incluir usuario en la sesión</string>
|
||||||
|
<string id="33055">Refrescar listas de reproducción/nodos de Vídeo Emby</string>
|
||||||
|
<string id="33056">Realizar sincronización manual</string>
|
||||||
|
<string id="33057">Reparar la abse de datos local (forzar la actualización de todo el contenido)</string>
|
||||||
|
<string id="33058">Realizar restablecimiento de base de datos local</string>
|
||||||
|
<string id="33059">Guardar localmente en caché todo el arte</string>
|
||||||
|
<string id="33060">Sincronizar Media de temas Emby con Kodi</string>
|
||||||
|
<string id="33061">Incluir/Eliminar usuarios de la sesión</string>
|
||||||
|
<string id="33062">Incluir usuario</string>
|
||||||
|
<string id="33063">Eliminar usuario</string>
|
||||||
|
<string id="33064">Eliminar usuario de la sesión</string>
|
||||||
|
<string id="33065">¡Éxito!</string>
|
||||||
|
<string id="33066">Eliminado de la sesión:</string>
|
||||||
|
<string id="33067">Incluido en la sesión:</string>
|
||||||
|
<string id="33068">No fue posible incluir/eliminar usuario de la sesión</string>
|
||||||
|
<string id="33069">La tarea completó exitosamente</string>
|
||||||
|
<string id="33070">La tarea falló</string>
|
||||||
|
<string id="33071">Transmisión Directa</string>
|
||||||
|
<string id="33072">Método de reproducción para sus temas</string>
|
||||||
|
<string id="33073">El archivo de configuración no existe en TV Tunes. Cambie un ajuste y ejecute la tarea de nuevo.</string>
|
||||||
|
<string id="33074">¿Está seguro(a) que quiere restablecer su base de datos local de Kodi?</string>
|
||||||
|
<string id="33075">Modificar/Eliminar credenciales de red</string>
|
||||||
|
<string id="33076">Modificar</string>
|
||||||
|
<string id="33077">Eliminar</string>
|
||||||
|
<string id="33078">Eliminadas:</string>
|
||||||
|
<string id="33079">Introduzca el usuario de red</string>
|
||||||
|
<string id="33080">Introduzca la contraseña de red</string>
|
||||||
|
<string id="33081">Se añadieron credenciales de red para:</string>
|
||||||
|
<string id="33082">Introduzca el nombre del servidor o la dirección IP según se indica en sus rutas de biblioteca Emby. Por ejemplo, el nombre de servidor en la ruta \\\\SERVER-PC\\path\\ es \"SERVER-PC\"</string>
|
||||||
|
<string id="33083">Modificar el nombre de servidor o la dirección IP</string>
|
||||||
|
<string id="33084">Introduzca el nombre del servidor o la dirección IP</string>
|
||||||
|
<string id="33085">No pudo restablecerse la base de datos. Intente nuevamente.</string>
|
||||||
|
<string id="33086">¿Remover todo el arte del caché?</string>
|
||||||
|
<string id="33087">¿Restablecer todos los ajustes del complemento Emby?</string>
|
||||||
|
<string id="33088">Restablecimiento de la base de datos completado. Kodi reiniciará ahora para aplicar los cambios.</string>
|
||||||
|
</strings>
|
330
resources/language/Swedish/strings.xml
Normal file
330
resources/language/Swedish/strings.xml
Normal file
|
@ -0,0 +1,330 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
|
<strings>
|
||||||
|
<!-- Add-on settings -->
|
||||||
|
<string id="29999">Emby för Kodi</string>
|
||||||
|
<string id="30000">Primär serveradress</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30002">Spela upp ifrån HTTP istället för SMB</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30004">Lognivå</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30016">Enhetsnamn</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30022">Avancerat</string>
|
||||||
|
<string id="30024">Användarnamn</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30030">Portnummer</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30035">Antal nya album som ska visas:</string>
|
||||||
|
<string id="30036">Antal nya filmer som ska visas:</string>
|
||||||
|
<string id="30037">Antal nya TV-avsnitt som ska visas:</string>
|
||||||
|
<string id="30042">Uppdatera</string>
|
||||||
|
<string id="30043">Ta bort</string>
|
||||||
|
<string id="30044">Ogiltigt Användarnamn/Lösenord</string>
|
||||||
|
<string id="30045">Användarnamn kunde inte hittas</string>
|
||||||
|
<string id="30052">Tar bort</string>
|
||||||
|
<string id="30053">Väntar på server för borttagning</string>
|
||||||
|
<string id="30068">Sortera efter</string>
|
||||||
|
<string id="30069">Ingen</string>
|
||||||
|
<string id="30070">Action</string>
|
||||||
|
<string id="30071">Äventyr</string>
|
||||||
|
<string id="30072">Animaterat</string>
|
||||||
|
<string id="30073">Brott</string>
|
||||||
|
<string id="30074">Komedi</string>
|
||||||
|
<string id="30075">Dokumentär</string>
|
||||||
|
<string id="30076">Drama</string>
|
||||||
|
<string id="30077">Fantasi</string>
|
||||||
|
<string id="30078">Internationell</string>
|
||||||
|
<string id="30079">Historia</string>
|
||||||
|
<string id="30080">Skräck</string>
|
||||||
|
<string id="30081">Musik</string>
|
||||||
|
<string id="30082">Musikal</string>
|
||||||
|
<string id="30083">Mystisk</string>
|
||||||
|
<string id="30084">Romantik</string>
|
||||||
|
<string id="30085">Science Fiction</string>
|
||||||
|
<string id="30086">Kort</string>
|
||||||
|
<string id="30087">Spänning</string>
|
||||||
|
<string id="30088">Thriller</string>
|
||||||
|
<string id="30089">Västern</string>
|
||||||
|
<string id="30090">Genrefilter</string>
|
||||||
|
<string id="30091">Bekräfta borttagning utav fil?</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30093">Markera som visad</string>
|
||||||
|
<string id="30094">Markera som ej visad</string>
|
||||||
|
<string id="30097">Sortera efter</string>
|
||||||
|
<string id="30098">Fallande sortering</string>
|
||||||
|
<string id="30099">Stigande sortering</string>
|
||||||
|
<!-- resume dialog -->
|
||||||
|
<string id="30105">Fortsätt</string>
|
||||||
|
<string id="30106">Fortsätt från</string>
|
||||||
|
<string id="30107">Starta från början</string>
|
||||||
|
<string id="30114">Erbjud borttagning efter uppspelning</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30115">För avsnitt</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30116">För filmer</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30118">Lägg till fortsättningsprocent</string>
|
||||||
|
<string id="30119">Lägg till avsnittsnummer</string>
|
||||||
|
<string id="30120">Visa förloppsmätare</string>
|
||||||
|
<string id="30121">Laddar innehåll</string>
|
||||||
|
<string id="30122">Hämtar data</string>
|
||||||
|
<string id="30125">Klart</string>
|
||||||
|
<string id="30132">Varning</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30135">Fel</string>
|
||||||
|
<string id="30138">Sök</string>
|
||||||
|
<string id="30157">Aktivera förbättrade bilder (t.ex CoverArt)</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30158">Metadata</string>
|
||||||
|
<string id="30159">Bilder</string>
|
||||||
|
<string id="30160">Videokvalitet</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30165">Direktuppspelning</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30166">Omkodning</string>
|
||||||
|
<string id="30167">Serversökning lyckades</string>
|
||||||
|
<string id="30168">Hittade server</string>
|
||||||
|
<string id="30169">Adress:</string>
|
||||||
|
<!-- Video nodes -->
|
||||||
|
<string id="30170">Nyligen tillagda serier</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30171">Pågående serier</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30172">All musik</string>
|
||||||
|
<string id="30173">Kanaler</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30174">Nyligen tillagda filmer</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30175">Nyligen tillagda avsnitt</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30176">Nyligen tillagda album</string>
|
||||||
|
<string id="30177">Pågående filmer</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30178">Pågående avsnitt</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30179">Nästa avsnitt</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30180">Favoritfilmer</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30181">Favoritserier</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30182">Favoritavsnitt</string>
|
||||||
|
<string id="30183">Ofta spelade album</string>
|
||||||
|
<string id="30184">Kommande TV</string>
|
||||||
|
<string id="30185">Samlingar</string>
|
||||||
|
<string id="30186">Trailers</string>
|
||||||
|
<string id="30187">Musikvideor</string>
|
||||||
|
<string id="30188">Foton</string>
|
||||||
|
<string id="30189">Osedda filmer</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30190">Filmgenrer</string>
|
||||||
|
<string id="30191">Filmstudior</string>
|
||||||
|
<string id="30192">Filmskådespelare</string>
|
||||||
|
<string id="30193">Osedda avsnitt</string>
|
||||||
|
<string id="30194">TV-genrer</string>
|
||||||
|
<string id="30195">TV-bolag</string>
|
||||||
|
<string id="30196">TV-skådespelare</string>
|
||||||
|
<string id="30197">Spellistor</string>
|
||||||
|
<string id="30199">Ställ in Vyer</string>
|
||||||
|
<string id="30200">Välj användare</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30204">Kan inte koppla till servern</string>
|
||||||
|
<string id="30207">Låtar</string>
|
||||||
|
<string id="30208">Album</string>
|
||||||
|
<string id="30209">Albumartister</string>
|
||||||
|
<string id="30210">Artister</string>
|
||||||
|
<string id="30211">Musikgenrer</string>
|
||||||
|
<string id="30220">Senaste</string>
|
||||||
|
<string id="30221">Pågående</string>
|
||||||
|
<string id="30222">Nästa</string>
|
||||||
|
<string id="30223">Användarvyer</string>
|
||||||
|
<string id="30224">Rapportera Statistik</string>
|
||||||
|
<string id="30227">Slumpade filmer</string>
|
||||||
|
<string id="30228">Slumpade avsnitt</string>
|
||||||
|
<string id="30229">Slumpade objekt</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30230">Rekommenderade objekt</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30235">Extramaterial</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30236">Synkronisera musiktema</string>
|
||||||
|
<string id="30237">Synkronisera extra fanart</string>
|
||||||
|
<string id="30238">Synkronisera filmsamlingar</string>
|
||||||
|
<string id="30239">Återställ lokal Kodi-databas</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30243">Aktivera HTTPS</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30245">Tvinga Omkodingskodecs</string>
|
||||||
|
<string id="30249">Emby Server uppkopplingsmeddelande vid uppstart</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30251">Nyligen tillagda hemvideor</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30252">Nyligen tillagda foton</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30253">Favorithemvideor</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30254">Favoritfoton</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30255">Favoritalbum</string>
|
||||||
|
<string id="30256">Nyligen tillagda musikvideor</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30257">Pågående musikvideor</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<string id="30258">Osedda musikvideor</string>
|
||||||
|
<!-- Verified -->
|
||||||
|
<!-- Default views -->
|
||||||
|
<string id="30300">Aktiv</string>
|
||||||
|
<string id="30301">Återställ inställningar</string>
|
||||||
|
<string id="30302">Filmer</string>
|
||||||
|
<string id="30303">Samlingar</string>
|
||||||
|
<string id="30304">Trailers</string>
|
||||||
|
<string id="30305">Serier</string>
|
||||||
|
<string id="30306">Säsonger</string>
|
||||||
|
<string id="30307">Avsnitt</string>
|
||||||
|
<string id="30308">Musikartister</string>
|
||||||
|
<string id="30309">Musikalbum</string>
|
||||||
|
<string id="30310">Musikvideor</string>
|
||||||
|
<string id="30311">Låtar</string>
|
||||||
|
<string id="30312">Kanaler</string>
|
||||||
|
<!-- contextmenu -->
|
||||||
|
<string id="30401">Emby-inställningar</string>
|
||||||
|
<string id="30405">Lägg till Emby-favoriter</string>
|
||||||
|
<string id="30406">Ta bort från Emby-favoriter</string>
|
||||||
|
<string id="30407">Sätt anpassat betyg för låt</string>
|
||||||
|
<string id="30408">Emby tilläggsinställningar</string>
|
||||||
|
<string id="30409">Ta bort objekt från servern</string>
|
||||||
|
<string id="30410">Uppdatera detta objekt</string>
|
||||||
|
<string id="30411">Sätt betyg på låt (0-5)</string>
|
||||||
|
<!-- add-on settings -->
|
||||||
|
<string id="30500">Kontrollera värdens ssl-certifikat</string>
|
||||||
|
<string id="30501">Klientens ssl-certifikat</string>
|
||||||
|
<string id="30502">Använd alternativ adress</string>
|
||||||
|
<string id="30503">Alternativ serveraddress</string>
|
||||||
|
<string id="30504">Använd alternativt enhetsnamn</string>
|
||||||
|
<string id="30505">[COLOR yellow]Försök logga in igen[/COLOR]</string>
|
||||||
|
<string id="30506">Synkroniseringsalternativ</string>
|
||||||
|
<string id="30507">Visa förloppsmätare vid synkronisering</string>
|
||||||
|
<string id="30508">Synkronisera tomma serier</string>
|
||||||
|
<string id="30509">Aktivera musikbibliotek</string>
|
||||||
|
<string id="30510">Direktströmma musikbibliotek</string>
|
||||||
|
<string id="30511">Uppspelningsläge</string>
|
||||||
|
<string id="30512">Tvinga cachning av bilder</string>
|
||||||
|
<string id="30513">Begränsa bild cache trådar (rekommenderas för rpi)</string>
|
||||||
|
<string id="30514">Aktivera snabb upstart (kräver servertillägg)</string>
|
||||||
|
<string id="30515">Masximalt antal objekt att begära från servern samtidigt</string>
|
||||||
|
<string id="30516">Uppspelning</string>
|
||||||
|
<string id="30517">Nätverks inlogg</string>
|
||||||
|
<string id="30518">Aktivera Emby biografläge</string>
|
||||||
|
<string id="30519">Fråga för att spela upp trailers</string>
|
||||||
|
<string id="30520">Dölj Embys borttagningsbekräftelse i kontextmenyn(använd på egen risk)</string>
|
||||||
|
<string id="30521">Gå tillbaka vid återupptagen uppspelning (sekunder)</string>
|
||||||
|
<string id="30522">Tvinga omkodning av H265</string>
|
||||||
|
<string id="30523">Musik metadata alternativ (ej kompatibel med direktströmning)</string>
|
||||||
|
<string id="30524">Importera låtbetyg direkt från filer</string>
|
||||||
|
<string id="30525">Konvertera låtbetyg till Emby-betyg</string>
|
||||||
|
<string id="30526">Tillåt uppdatering av låtbetyg i filer</string>
|
||||||
|
<string id="30527">Ignorera specialavsnitt i nästa avsnitt</string>
|
||||||
|
<string id="30528">Permanenta användare att lägga till sessionen</string>
|
||||||
|
<string id="30529">Uppstartsfördröjning (sekunder)</string>
|
||||||
|
<string id="30530">Aktivera meddelande vid omstart av servern</string>
|
||||||
|
<string id="30531">Aktivera meddelande vid nytt innehåll</string>
|
||||||
|
<string id="30532">Fördröjning av pop-up för videobiblioteket (i sekunder)</string>
|
||||||
|
<string id="30533">Fördröjning av pop-up för musikbiblioteket (i sekunder)</string>
|
||||||
|
<string id="30534">Servermeddelanden</string>
|
||||||
|
<string id="30535">Generera nytt enhetsID</string>
|
||||||
|
<string id="30536">"Synka när skärmsläckare är inaktiverad
|
||||||
|
"</string>
|
||||||
|
<string id="30537">Tvinga omkodning av Hi10P</string>
|
||||||
|
<string id="30538">Inaktiverad</string>
|
||||||
|
<!-- service add-on -->
|
||||||
|
<string id="33000">Välkommen</string>
|
||||||
|
<string id="33001">Fel vid uppkoppling</string>
|
||||||
|
<string id="33002">Kan inte nå servern</string>
|
||||||
|
<string id="33003">Servern är uppkopplad</string>
|
||||||
|
<string id="33004">objekt tillagda till spellista</string>
|
||||||
|
<string id="33005">objekt köade till spellista</string>
|
||||||
|
<string id="33006">Serverns startar om</string>
|
||||||
|
<string id="33007">Åtkomst är aktiverad</string>
|
||||||
|
<string id="33008">Skriv in lösenord för användare:</string>
|
||||||
|
<string id="33009">Ogiltigt användarnamn eller lösenord</string>
|
||||||
|
<string id="33010">Misslyckades att autentisera för många gånger</string>
|
||||||
|
<string id="33011">Kan inte direktspela</string>
|
||||||
|
<string id="33012">Direktspelning misslyckades tre gånger. Spelar upp från HTTP.</string>
|
||||||
|
<string id="33013">Välj ljudspår</string>
|
||||||
|
<string id="33014">Välj ström för undertext</string>
|
||||||
|
<string id="33015">Ta bort filen från din Emby server?</string>
|
||||||
|
<string id="33016">Spela trailers?</string>
|
||||||
|
<string id="33017">Hämtar filmer från:</string>
|
||||||
|
<string id="33018">Hämtar samlingar</string>
|
||||||
|
<string id="33019">Hämtar musikvideos från:</string>
|
||||||
|
<string id="33020">Hämtar TV-serier från:</string>
|
||||||
|
<string id="33021">Hämtar:</string>
|
||||||
|
<string id="33022">Databasen behöver återskapas för den här versionen av Emby för Kodi. Fortsätt?</string>
|
||||||
|
<string id="33023">Emby för Kodi kan tappa funktion tills databasen har återställts.</string>
|
||||||
|
<string id="33024">Avbryter synkroniseringen av databasen. Nuvarande versionen av Kodi stöds inte.</string>
|
||||||
|
<string id="33025">färdig på:</string>
|
||||||
|
<string id="33026">Jämför filmer från:</string>
|
||||||
|
<string id="33027">Jämför samlingar</string>
|
||||||
|
<string id="33028">Jämför musikvideor från:</string>
|
||||||
|
<string id="33029">Jämför TV-serier från:</string>
|
||||||
|
<string id="33030">Jämför avsnitt från:</string>
|
||||||
|
<string id="33031">Jämför:</string>
|
||||||
|
<string id="33032">Kunde inte generera ett nytt enhetsID. Se i loggarna för mer information.</string>
|
||||||
|
<string id="33033">Ett nytt enhetsID har genererats. Kodi kommer nu starta om.</string>
|
||||||
|
<string id="33034">Fortsätt med följande server?</string>
|
||||||
|
<string id="33035">OBS! Om du väljer 'Native'-läget så tappar du vissa funktioner i Emby, som; Emby bioläge, direktströmning/omkodning och schema för föräldralås.</string>
|
||||||
|
<string id="33036">Tillägg (Standard)</string>
|
||||||
|
<string id="33037">Native (Direkta Sökvägar)</string>
|
||||||
|
<string id="33038">Lägg till nätverksuppgifter för att ge Kodi åtkomst till ditt innehåll? Viktigt: Kodi kommer behöva startas om för att se uppgifterna. Dom kan också läggas till vid ett senare tillfälle.</string>
|
||||||
|
<string id="33039">Inaktivera Emby musikbibliotek?</string>
|
||||||
|
<string id="33040">Direktströmma musikbiblioteket? Välj det här alternativet om musikbiblioteket inte finns tillgängligt lokalt.</string>
|
||||||
|
<string id="33041">Ta bort fil(er) från Emby Server? Det här tar också bort ifrån disk!</string>
|
||||||
|
<string id="33042">Caching processen kan ta lite tid. Fortsätt ändå?</string>
|
||||||
|
<string id="33043">Cachesynk för bilder</string>
|
||||||
|
<string id="33044">Återställ nuvarande bildcache</string>
|
||||||
|
<string id="33045">Uppdaterar bildcache:</string>
|
||||||
|
<string id="33046">Väntar på alla trådar att avslutas:</string>
|
||||||
|
<string id="33047">Kodi kan inte hitta filen:</string>
|
||||||
|
<string id="33048">Du kan behöva verifiera dina nätverksuppgifter i addon-inställningarna eller använda Emby sökvägsersättning för att formatera din sökväg korrekt(Emby dashboard > bibliotek). Stoppa synkronisering?</string>
|
||||||
|
<string id="33049">Tillagd:</string>
|
||||||
|
<string id="33050">Om du misslyckas att logga in för många gånger, kan Emby server låsa ner ditt konto. Fortsätt ändå?</string>
|
||||||
|
<string id="33051">Live TV Kanaler (experimentellt)</string>
|
||||||
|
<string id="33052">Live TV Inspelningar (experimentellt)</string>
|
||||||
|
<string id="33053">Inställningar</string>
|
||||||
|
<string id="33054">Lägg till användare för sessionen</string>
|
||||||
|
<string id="33055">Uppdatera Emby spellistor/Videonoder</string>
|
||||||
|
<string id="33056">Kör manuell synk</string>
|
||||||
|
<string id="33057">Reparera lokala databasen (tvinga uppdatering av allt innehåll)</string>
|
||||||
|
<string id="33058">Återställ lokala databasen</string>
|
||||||
|
<string id="33059">Förlagra alla bilder</string>
|
||||||
|
<string id="33060">Synka Emby Tema till Kodi</string>
|
||||||
|
<string id="33061">Lägg till/Ta bort användare från sessionen</string>
|
||||||
|
<string id="33062">Lägg till användare</string>
|
||||||
|
<string id="33063">Ta bort användare</string>
|
||||||
|
<string id="33064">Ta bort användare från sessionen</string>
|
||||||
|
<string id="33065">Lyckades!</string>
|
||||||
|
<string id="33066">Borttagen från sessionen:</string>
|
||||||
|
<string id="33067">Tillagd till sessionen:</string>
|
||||||
|
<string id="33068">Kan inte lägga till/ta bort användaren från sessionen</string>
|
||||||
|
<string id="33069">Uppgiften lyckades</string>
|
||||||
|
<string id="33070">Uppgiften misslyckades</string>
|
||||||
|
<string id="33071">Direktströmma</string>
|
||||||
|
<string id="33072">Uppspelningsmetod för dina teman</string>
|
||||||
|
<string id="33073">Inställningsfilen finns inte i TVTunes. Ändra en inställning och kör sen uppgiften igen.</string>
|
||||||
|
<string id="33074">Är du säker på att du vill återställa din lokala Kodi databas?</string>
|
||||||
|
<string id="33075">Ändra/Ta bort nätverksuppgifter</string>
|
||||||
|
<string id="33076">Ändra</string>
|
||||||
|
<string id="33077">Ta bort</string>
|
||||||
|
<string id="33078">Borttagen:</string>
|
||||||
|
<string id="33079">Ange användarnamn för nätverk</string>
|
||||||
|
<string id="33080">Ange nätverkslösenordet</string>
|
||||||
|
<string id="33081">Lade till nätverksinlogg för:</string>
|
||||||
|
<string id="33082">Ange servernamn eller IP-adress efter din emby bibliotekssökvägar. T.ex. servernamnet: \\\\SERVER-PC\\sökväg blir \"SERVER-PC\"</string>
|
||||||
|
<string id="33083">Ändra servernamnet eller IP-adressen</string>
|
||||||
|
<string id="33084">Ange servernamnet eller IP-adressen</string>
|
||||||
|
<string id="33085">Kunde inte återställa databasen. Försök igen.</string>
|
||||||
|
<string id="33086">Ta bort alla förlagrade bilder?</string>
|
||||||
|
<string id="33087">Återställ alla Emby tilläggsinställningar?</string>
|
||||||
|
<string id="33088">Databasen har återställts, Kodi kommer nu att starta om för att verkställa ändringarna.</string>
|
||||||
|
</strings>
|
|
@ -3,6 +3,7 @@
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
import requests
|
import requests
|
||||||
import os
|
import os
|
||||||
import urllib
|
import urllib
|
||||||
|
@ -12,14 +13,18 @@ import xbmc
|
||||||
import xbmcgui
|
import xbmcgui
|
||||||
import xbmcvfs
|
import xbmcvfs
|
||||||
|
|
||||||
import utils
|
|
||||||
import image_cache_thread
|
import image_cache_thread
|
||||||
|
from utils import window, settings, language as lang, kodiSQL
|
||||||
|
|
||||||
# Disable annoying requests warnings
|
# Disable annoying requests warnings
|
||||||
import requests.packages.urllib3
|
import requests.packages.urllib3
|
||||||
requests.packages.urllib3.disable_warnings()
|
requests.packages.urllib3.disable_warnings()
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
|
||||||
@utils.logging
|
@utils.logging
|
||||||
|
@ -32,12 +37,13 @@ class Artwork():
|
||||||
imageCacheThreads = []
|
imageCacheThreads = []
|
||||||
imageCacheLimitThreads = 0
|
imageCacheLimitThreads = 0
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
self.enableTextureCache = utils.settings('enableTextureCache') == "true"
|
self.enableTextureCache = settings('enableTextureCache') == "true"
|
||||||
self.imageCacheLimitThreads = int(utils.settings("imageCacheLimit"))
|
self.imageCacheLimitThreads = int(settings('imageCacheLimit'))
|
||||||
self.imageCacheLimitThreads = int(self.imageCacheLimitThreads * 5)
|
self.imageCacheLimitThreads = int(self.imageCacheLimitThreads * 5)
|
||||||
utils.logMsg("Using Image Cache Thread Count: " + str(self.imageCacheLimitThreads), 1)
|
log.info("Using Image Cache Thread Count: %s" % self.imageCacheLimitThreads)
|
||||||
|
|
||||||
if not self.xbmc_port and self.enableTextureCache:
|
if not self.xbmc_port and self.enableTextureCache:
|
||||||
self.setKodiWebServerDetails()
|
self.setKodiWebServerDetails()
|
||||||
|
@ -123,7 +129,7 @@ class Artwork():
|
||||||
result = json.loads(result)
|
result = json.loads(result)
|
||||||
try:
|
try:
|
||||||
self.xbmc_port = result['result']['value']
|
self.xbmc_port = result['result']['value']
|
||||||
except TypeError:
|
except (TypeError, KeyError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
web_user = {
|
web_user = {
|
||||||
|
@ -160,7 +166,7 @@ class Artwork():
|
||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def FullTextureCacheSync(self):
|
def fullTextureCacheSync(self):
|
||||||
# This method will sync all Kodi artwork to textures13.db
|
# This method will sync all Kodi artwork to textures13.db
|
||||||
# and cache them locally. This takes diskspace!
|
# and cache them locally. This takes diskspace!
|
||||||
import xbmcaddon
|
import xbmcaddon
|
||||||
|
@ -170,7 +176,7 @@ class Artwork():
|
||||||
"Image Texture Cache", string(39250)):
|
"Image Texture Cache", string(39250)):
|
||||||
return
|
return
|
||||||
|
|
||||||
self.logMsg("Doing Image Cache Sync", 1)
|
log.info("Doing Image Cache Sync")
|
||||||
|
|
||||||
dialog = xbmcgui.DialogProgress()
|
dialog = xbmcgui.DialogProgress()
|
||||||
dialog.create("PlexKodiConnect", "Image Cache Sync")
|
dialog.create("PlexKodiConnect", "Image Cache Sync")
|
||||||
|
@ -196,100 +202,107 @@ class Artwork():
|
||||||
file))
|
file))
|
||||||
|
|
||||||
# remove all existing data from texture DB
|
# remove all existing data from texture DB
|
||||||
textureconnection = utils.kodiSQL('texture')
|
connection = kodiSQL('texture')
|
||||||
texturecursor = textureconnection.cursor()
|
cursor = connection.cursor()
|
||||||
texturecursor.execute('SELECT tbl_name FROM sqlite_master WHERE type="table"')
|
cursor.execute('SELECT tbl_name FROM sqlite_master WHERE type="table"')
|
||||||
rows = texturecursor.fetchall()
|
rows = cursor.fetchall()
|
||||||
for row in rows:
|
for row in rows:
|
||||||
tableName = row[0]
|
tableName = row[0]
|
||||||
if(tableName != "version"):
|
if tableName != "version":
|
||||||
texturecursor.execute("DELETE FROM " + tableName)
|
cursor.execute("DELETE FROM " + tableName)
|
||||||
textureconnection.commit()
|
connection.commit()
|
||||||
texturecursor.close()
|
cursor.close()
|
||||||
|
|
||||||
# Cache all entries in video DB
|
# Cache all entries in video DB
|
||||||
connection = utils.kodiSQL('video')
|
connection = kodiSQL('video')
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
cursor.execute("SELECT url FROM art WHERE media_type != 'actor'") # dont include actors
|
cursor.execute("SELECT url FROM art WHERE media_type != 'actor'") # dont include actors
|
||||||
result = cursor.fetchall()
|
result = cursor.fetchall()
|
||||||
total = len(result)
|
total = len(result)
|
||||||
count = 1
|
log.info("Image cache sync about to process %s images" % total)
|
||||||
percentage = 0
|
|
||||||
self.logMsg("Image cache sync about to process " + str(total) + " images", 1)
|
|
||||||
for url in result:
|
|
||||||
if dialog.iscanceled():
|
|
||||||
break
|
|
||||||
percentage = int((float(count) / float(total))*100)
|
|
||||||
textMessage = str(count) + " of " + str(total) + " (" + str(len(self.imageCacheThreads)) + ")"
|
|
||||||
dialog.update(percentage, "Updating Image Cache: " + textMessage)
|
|
||||||
self.CacheTexture(url[0])
|
|
||||||
count += 1
|
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
for url in result:
|
||||||
|
|
||||||
|
if pdialog.iscanceled():
|
||||||
|
break
|
||||||
|
|
||||||
|
percentage = int((float(count) / float(total))*100)
|
||||||
|
message = "%s of %s (%s)" % (count, total, self.imageCacheThreads)
|
||||||
|
pdialog.update(percentage, "%s %s" % (lang(33045), message))
|
||||||
|
self.cacheTexture(url[0])
|
||||||
|
count += 1
|
||||||
|
|
||||||
# Cache all entries in music DB
|
# Cache all entries in music DB
|
||||||
connection = utils.kodiSQL('music')
|
connection = kodiSQL('music')
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
cursor.execute("SELECT url FROM art")
|
cursor.execute("SELECT url FROM art")
|
||||||
result = cursor.fetchall()
|
result = cursor.fetchall()
|
||||||
total = len(result)
|
total = len(result)
|
||||||
count = 1
|
log.info("Image cache sync about to process %s images" % total)
|
||||||
percentage = 0
|
|
||||||
self.logMsg("Image cache sync about to process " + str(total) + " images", 1)
|
|
||||||
for url in result:
|
|
||||||
if dialog.iscanceled():
|
|
||||||
break
|
|
||||||
percentage = int((float(count) / float(total))*100)
|
|
||||||
textMessage = str(count) + " of " + str(total)
|
|
||||||
dialog.update(percentage, "Updating Image Cache: " + textMessage)
|
|
||||||
self.CacheTexture(url[0])
|
|
||||||
count += 1
|
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
||||||
dialog.update(100, "Waiting for all threads to exit: " + str(len(self.imageCacheThreads)))
|
count = 0
|
||||||
self.logMsg("Waiting for all threads to exit", 1)
|
for url in result:
|
||||||
while len(self.imageCacheThreads) > 0:
|
|
||||||
|
if pdialog.iscanceled():
|
||||||
|
break
|
||||||
|
|
||||||
|
percentage = int((float(count) / float(total))*100)
|
||||||
|
message = "%s of %s" % (count, total)
|
||||||
|
pdialog.update(percentage, "%s %s" % (lang(33045), message))
|
||||||
|
self.cacheTexture(url[0])
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
pdialog.update(100, "%s %s" % (lang(33046), len(self.imageCacheThreads)))
|
||||||
|
log.info("Waiting for all threads to exit")
|
||||||
|
|
||||||
|
while len(self.imageCacheThreads):
|
||||||
for thread in self.imageCacheThreads:
|
for thread in self.imageCacheThreads:
|
||||||
if thread.isFinished:
|
if thread.is_finished:
|
||||||
self.imageCacheThreads.remove(thread)
|
self.imageCacheThreads.remove(thread)
|
||||||
dialog.update(100, "Waiting for all threads to exit: " + str(len(self.imageCacheThreads)))
|
pdialog.update(100, "%s %s" % (lang(33046), len(self.imageCacheThreads)))
|
||||||
self.logMsg("Waiting for all threads to exit: " + str(len(self.imageCacheThreads)), 1)
|
log.info("Waiting for all threads to exit: %s" % len(self.imageCacheThreads))
|
||||||
xbmc.sleep(500)
|
xbmc.sleep(500)
|
||||||
|
|
||||||
dialog.close()
|
pdialog.close()
|
||||||
|
|
||||||
def addWorkerImageCacheThread(self, urlToAdd):
|
def addWorkerImageCacheThread(self, url):
|
||||||
|
|
||||||
while(True):
|
while True:
|
||||||
# removed finished
|
# removed finished
|
||||||
for thread in self.imageCacheThreads:
|
for thread in self.imageCacheThreads:
|
||||||
if thread.isFinished:
|
if thread.is_finished:
|
||||||
self.imageCacheThreads.remove(thread)
|
self.imageCacheThreads.remove(thread)
|
||||||
|
|
||||||
# add a new thread or wait and retry if we hit our limit
|
# add a new thread or wait and retry if we hit our limit
|
||||||
if(len(self.imageCacheThreads) < self.imageCacheLimitThreads):
|
if len(self.imageCacheThreads) < self.imageCacheLimitThreads:
|
||||||
newThread = image_cache_thread.image_cache_thread()
|
newThread = image_cache_thread.ImageCacheThread()
|
||||||
newThread.setUrl(self.double_urlencode(urlToAdd))
|
newThread.set_url(self.double_urlencode(url))
|
||||||
newThread.setHost(self.xbmc_host, self.xbmc_port)
|
newThread.set_host(self.xbmc_host, self.xbmc_port)
|
||||||
newThread.setAuth(self.xbmc_username, self.xbmc_password)
|
newThread.set_auth(self.xbmc_username, self.xbmc_password)
|
||||||
newThread.start()
|
newThread.start()
|
||||||
self.imageCacheThreads.append(newThread)
|
self.imageCacheThreads.append(newThread)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.logMsg("Waiting for empty queue spot: " + str(len(self.imageCacheThreads)), 2)
|
log.info("Waiting for empty queue spot: %s" % len(self.imageCacheThreads))
|
||||||
xbmc.sleep(50)
|
xbmc.sleep(50)
|
||||||
|
|
||||||
|
def cacheTexture(self, url):
|
||||||
def CacheTexture(self, url):
|
|
||||||
# Cache a single image url to the texture cache
|
# Cache a single image url to the texture cache
|
||||||
if url and self.enableTextureCache:
|
if url and self.enableTextureCache:
|
||||||
if(self.imageCacheLimitThreads == 0 or self.imageCacheLimitThreads == None):
|
self.logMsg("Processing: %s" % url, 2)
|
||||||
|
|
||||||
|
log.debug("Processing: %s" % url)
|
||||||
|
|
||||||
|
if not self.imageCacheLimitThreads:
|
||||||
# Add image to texture cache by simply calling it at the http endpoint
|
# Add image to texture cache by simply calling it at the http endpoint
|
||||||
|
|
||||||
url = self.double_urlencode(url)
|
url = self.double_urlencode(url)
|
||||||
try: # Extreme short timeouts so we will have a exception.
|
try: # Extreme short timeouts so we will have a exception.
|
||||||
response = requests.head(
|
response = requests.head(
|
||||||
url=(
|
url=("http://%s:%s/image/image://%s"
|
||||||
"http://%s:%s/image/image://%s"
|
|
||||||
% (self.xbmc_host, self.xbmc_port, url)),
|
% (self.xbmc_host, self.xbmc_port, url)),
|
||||||
auth=(self.xbmc_username, self.xbmc_password),
|
auth=(self.xbmc_username, self.xbmc_password),
|
||||||
timeout=(0.01, 0.01))
|
timeout=(0.01, 0.01))
|
||||||
|
@ -398,7 +411,7 @@ class Artwork():
|
||||||
|
|
||||||
except TypeError: # Add the artwork
|
except TypeError: # Add the artwork
|
||||||
cacheimage = True
|
cacheimage = True
|
||||||
self.logMsg("Adding Art Link for kodiId: %s (%s)" % (kodiId, imageUrl), 2)
|
log.debug("Adding Art Link for kodiId: %s (%s)" % (kodiId, imageUrl))
|
||||||
|
|
||||||
query = (
|
query = (
|
||||||
'''
|
'''
|
||||||
|
@ -419,9 +432,8 @@ class Artwork():
|
||||||
# Delete current entry before updating with the new one
|
# Delete current entry before updating with the new one
|
||||||
self.deleteCachedArtwork(url)
|
self.deleteCachedArtwork(url)
|
||||||
|
|
||||||
self.logMsg(
|
log.info("Updating Art url for %s kodiId: %s (%s) -> (%s)"
|
||||||
"Updating Art url for %s kodiId: %s (%s) -> (%s)"
|
% (imageType, kodiId, url, imageUrl))
|
||||||
% (imageType, kodiId, url, imageUrl), 1)
|
|
||||||
|
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
|
||||||
|
@ -435,9 +447,9 @@ class Artwork():
|
||||||
|
|
||||||
# Cache fanart and poster in Kodi texture cache
|
# Cache fanart and poster in Kodi texture cache
|
||||||
if cacheimage:
|
if cacheimage:
|
||||||
self.CacheTexture(imageUrl)
|
self.cacheTexture(imageUrl)
|
||||||
|
|
||||||
def deleteArtwork(self, kodiid, mediatype, cursor):
|
def deleteArtwork(self, kodiId, mediaType, cursor):
|
||||||
|
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
|
||||||
|
@ -446,18 +458,18 @@ class Artwork():
|
||||||
"WHERE media_id = ?",
|
"WHERE media_id = ?",
|
||||||
"AND media_type = ?"
|
"AND media_type = ?"
|
||||||
))
|
))
|
||||||
cursor.execute(query, (kodiid, mediatype,))
|
cursor.execute(query, (kodiId, mediaType,))
|
||||||
rows = cursor.fetchall()
|
rows = cursor.fetchall()
|
||||||
for row in rows:
|
for row in rows:
|
||||||
|
|
||||||
url = row[0]
|
url = row[0]
|
||||||
imagetype = row[1]
|
imageType = row[1]
|
||||||
if imagetype in ("poster", "fanart"):
|
if imageType in ("poster", "fanart"):
|
||||||
self.deleteCachedArtwork(url)
|
self.deleteCachedArtwork(url)
|
||||||
|
|
||||||
def deleteCachedArtwork(self, url):
|
def deleteCachedArtwork(self, url):
|
||||||
# Only necessary to remove and apply a new backdrop or poster
|
# Only necessary to remove and apply a new backdrop or poster
|
||||||
connection = utils.kodiSQL('texture')
|
connection = kodiSQL('texture')
|
||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -465,22 +477,22 @@ class Artwork():
|
||||||
cachedurl = cursor.fetchone()[0]
|
cachedurl = cursor.fetchone()[0]
|
||||||
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
self.logMsg("Could not find cached url.", 1)
|
log.info("Could not find cached url.")
|
||||||
|
|
||||||
except OperationalError:
|
except OperationalError:
|
||||||
self.logMsg("Database is locked. Skip deletion process.", 1)
|
log.info("Database is locked. Skip deletion process.")
|
||||||
|
|
||||||
else: # Delete thumbnail as well as the entry
|
else: # Delete thumbnail as well as the entry
|
||||||
thumbnails = utils.tryDecode(
|
thumbnails = utils.tryDecode(
|
||||||
xbmc.translatePath("special://thumbnails/%s" % cachedurl))
|
xbmc.translatePath("special://thumbnails/%s" % cachedurl))
|
||||||
self.logMsg("Deleting cached thumbnail: %s" % thumbnails, 1)
|
log.info("Deleting cached thumbnail: %s" % thumbnails)
|
||||||
xbmcvfs.delete(thumbnails)
|
xbmcvfs.delete(thumbnails)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cursor.execute("DELETE FROM texture WHERE url = ?", (url,))
|
cursor.execute("DELETE FROM texture WHERE url = ?", (url,))
|
||||||
connection.commit()
|
connection.commit()
|
||||||
except OperationalError:
|
except OperationalError:
|
||||||
self.logMsg("Issue deleting url from cache. Skipping.", 2)
|
log.debug("Issue deleting url from cache. Skipping.")
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
@ -503,10 +515,10 @@ class Artwork():
|
||||||
|
|
||||||
return people
|
return people
|
||||||
|
|
||||||
def getUserArtwork(self, itemid, itemtype):
|
def getUserArtwork(self, itemId, itemType):
|
||||||
# Load user information set by UserClient
|
# Load user information set by UserClient
|
||||||
image = ("%s/emby/Users/%s/Images/%s?Format=original"
|
image = ("%s/emby/Users/%s/Images/%s?Format=original"
|
||||||
% (self.server, itemid, itemtype))
|
% (self.server, itemId, itemType))
|
||||||
return image
|
return image
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
import xbmc
|
import xbmc
|
||||||
|
|
|
@ -6,8 +6,8 @@ import json
|
||||||
import requests
|
import requests
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import utils
|
|
||||||
import clientinfo
|
import clientinfo
|
||||||
|
from utils import window
|
||||||
|
|
||||||
##################################################################################################
|
##################################################################################################
|
||||||
|
|
||||||
|
@ -15,7 +15,8 @@ import clientinfo
|
||||||
from requests.packages.urllib3.exceptions import InsecureRequestWarning, InsecurePlatformWarning
|
from requests.packages.urllib3.exceptions import InsecureRequestWarning, InsecurePlatformWarning
|
||||||
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
|
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
|
||||||
requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)
|
requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)
|
||||||
#logging.getLogger('requests').setLevel(logging.WARNING)
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
##################################################################################################
|
##################################################################################################
|
||||||
|
|
||||||
|
@ -25,7 +26,6 @@ class ConnectUtils():
|
||||||
# Borg - multiple instances, shared state
|
# Borg - multiple instances, shared state
|
||||||
_shared_state = {}
|
_shared_state = {}
|
||||||
clientInfo = clientinfo.ClientInfo()
|
clientInfo = clientinfo.ClientInfo()
|
||||||
addonName = clientInfo.getAddonName()
|
|
||||||
|
|
||||||
# Requests session
|
# Requests session
|
||||||
c = None
|
c = None
|
||||||
|
@ -36,26 +36,21 @@ class ConnectUtils():
|
||||||
|
|
||||||
self.__dict__ = self._shared_state
|
self.__dict__ = self._shared_state
|
||||||
|
|
||||||
def logMsg(self, msg, lvl=1):
|
|
||||||
|
|
||||||
className = self.__class__.__name__
|
|
||||||
utils.logMsg("%s %s" % (self.addonName, className), msg, lvl)
|
|
||||||
|
|
||||||
|
|
||||||
def setUserId(self, userId):
|
def setUserId(self, userId):
|
||||||
# Reserved for userclient only
|
# Reserved for userclient only
|
||||||
self.userId = userId
|
self.userId = userId
|
||||||
self.logMsg("Set connect userId: %s" % userId, 2)
|
log.debug("Set connect userId: %s" % userId)
|
||||||
|
|
||||||
def setServer(self, server):
|
def setServer(self, server):
|
||||||
# Reserved for userclient only
|
# Reserved for userclient only
|
||||||
self.server = server
|
self.server = server
|
||||||
self.logMsg("Set connect server: %s" % server, 2)
|
log.debug("Set connect server: %s" % server)
|
||||||
|
|
||||||
def setToken(self, token):
|
def setToken(self, token):
|
||||||
# Reserved for userclient only
|
# Reserved for userclient only
|
||||||
self.token = token
|
self.token = token
|
||||||
self.logMsg("Set connect token: %s" % token, 2)
|
log.debug("Set connect token: %s" % token)
|
||||||
|
|
||||||
|
|
||||||
def startSession(self):
|
def startSession(self):
|
||||||
|
@ -73,7 +68,7 @@ class ConnectUtils():
|
||||||
if self.sslclient is not None:
|
if self.sslclient is not None:
|
||||||
verify = self.sslclient
|
verify = self.sslclient
|
||||||
except:
|
except:
|
||||||
self.logMsg("Could not load SSL settings.", 1)
|
log.info("Could not load SSL settings.")
|
||||||
|
|
||||||
# Start session
|
# Start session
|
||||||
self.c = requests.Session()
|
self.c = requests.Session()
|
||||||
|
@ -83,13 +78,13 @@ class ConnectUtils():
|
||||||
self.c.mount("http://", requests.adapters.HTTPAdapter(max_retries=1))
|
self.c.mount("http://", requests.adapters.HTTPAdapter(max_retries=1))
|
||||||
self.c.mount("https://", requests.adapters.HTTPAdapter(max_retries=1))
|
self.c.mount("https://", requests.adapters.HTTPAdapter(max_retries=1))
|
||||||
|
|
||||||
self.logMsg("Requests session started on: %s" % self.server, 1)
|
log.info("Requests session started on: %s" % self.server)
|
||||||
|
|
||||||
def stopSession(self):
|
def stopSession(self):
|
||||||
try:
|
try:
|
||||||
self.c.close()
|
self.c.close()
|
||||||
except Exception as e:
|
except Exception:
|
||||||
self.logMsg("Requests session could not be terminated: %s" % e, 1)
|
log.warn("Requests session could not be terminated")
|
||||||
|
|
||||||
def getHeader(self, authenticate=True):
|
def getHeader(self, authenticate=True):
|
||||||
|
|
||||||
|
@ -103,7 +98,7 @@ class ConnectUtils():
|
||||||
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||||
'Accept': "application/json"
|
'Accept': "application/json"
|
||||||
}
|
}
|
||||||
self.logMsg("Header: %s" % header, 1)
|
log.info("Header: %s" % header)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
token = self.token
|
token = self.token
|
||||||
|
@ -115,17 +110,17 @@ class ConnectUtils():
|
||||||
'X-Application': "Kodi/%s" % version,
|
'X-Application': "Kodi/%s" % version,
|
||||||
'X-Connect-UserToken': token
|
'X-Connect-UserToken': token
|
||||||
}
|
}
|
||||||
self.logMsg("Header: %s" % header, 1)
|
log.info("Header: %s" % header)
|
||||||
|
|
||||||
return header
|
return header
|
||||||
|
|
||||||
def doUrl(self, url, data=None, postBody=None, rtype="GET",
|
def doUrl(self, url, data=None, postBody=None, rtype="GET",
|
||||||
parameters=None, authenticate=True, timeout=None):
|
parameters=None, authenticate=True, timeout=None):
|
||||||
|
|
||||||
window = utils.window
|
log.debug("=== ENTER connectUrl ===")
|
||||||
|
|
||||||
self.logMsg("=== ENTER connectUrl ===", 2)
|
|
||||||
default_link = ""
|
default_link = ""
|
||||||
|
|
||||||
if timeout is None:
|
if timeout is None:
|
||||||
timeout = self.timeout
|
timeout = self.timeout
|
||||||
|
|
||||||
|
@ -209,25 +204,25 @@ class ConnectUtils():
|
||||||
verify=verifyssl)
|
verify=verifyssl)
|
||||||
|
|
||||||
##### THE RESPONSE #####
|
##### THE RESPONSE #####
|
||||||
self.logMsg(r.url, 1)
|
log.info(r.url)
|
||||||
self.logMsg(r, 1)
|
log.info(r)
|
||||||
|
|
||||||
if r.status_code == 204:
|
if r.status_code == 204:
|
||||||
# No body in the response
|
# No body in the response
|
||||||
self.logMsg("====== 204 Success ======", 1)
|
log.info("====== 204 Success ======")
|
||||||
|
|
||||||
elif r.status_code == requests.codes.ok:
|
elif r.status_code == requests.codes.ok:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# UNICODE - JSON object
|
# UNICODE - JSON object
|
||||||
r = r.json()
|
r = r.json()
|
||||||
self.logMsg("====== 200 Success ======", 1)
|
log.info("====== 200 Success ======")
|
||||||
self.logMsg("Response: %s" % r, 1)
|
log.info("Response: %s" % r)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
except:
|
except:
|
||||||
if r.headers.get('content-type') != "text/html":
|
if r.headers.get('content-type') != "text/html":
|
||||||
self.logMsg("Unable to convert the response for: %s" % url, 1)
|
log.info("Unable to convert the response for: %s" % url)
|
||||||
else:
|
else:
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
|
||||||
|
@ -238,8 +233,7 @@ class ConnectUtils():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
except requests.exceptions.ConnectTimeout as e:
|
except requests.exceptions.ConnectTimeout as e:
|
||||||
self.logMsg("Server timeout at: %s" % url, 0)
|
log.warn("Server timeout at: %s" % url)
|
||||||
self.logMsg(e, 1)
|
|
||||||
|
|
||||||
except requests.exceptions.HTTPError as e:
|
except requests.exceptions.HTTPError as e:
|
||||||
|
|
||||||
|
@ -255,11 +249,9 @@ class ConnectUtils():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
except requests.exceptions.SSLError as e:
|
except requests.exceptions.SSLError as e:
|
||||||
self.logMsg("Invalid SSL certificate for: %s" % url, 0)
|
log.warn("Invalid SSL certificate for: %s" % url)
|
||||||
self.logMsg(e, 1)
|
|
||||||
|
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
self.logMsg("Unknown error connecting to: %s" % url, 0)
|
log.warn("Unknown error connecting to: %s" % url)
|
||||||
self.logMsg(e, 1)
|
|
||||||
|
|
||||||
return default_link
|
return default_link
|
1
resources/lib/dialog/__init__.py
Normal file
1
resources/lib/dialog/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Dummy file to make this directory a package.
|
76
resources/lib/dialog/loginconnect.py
Normal file
76
resources/lib/dialog/loginconnect.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
import xbmcgui
|
||||||
|
import xbmcaddon
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
addon = xbmcaddon.Addon('plugin.video.emby')
|
||||||
|
|
||||||
|
ACTION_BACK = 92
|
||||||
|
SIGN_IN = 200
|
||||||
|
REMIND_LATER = 201
|
||||||
|
|
||||||
|
|
||||||
|
class LoginConnect(xbmcgui.WindowXMLDialog):
|
||||||
|
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
||||||
|
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def __add_editcontrol(self, x, y, height, width, password=0):
|
||||||
|
|
||||||
|
media = os.path.join(addon.getAddonInfo('path'), 'resources', 'skins', 'default', 'media')
|
||||||
|
control = xbmcgui.ControlEdit(0,0,0,0,
|
||||||
|
label="User",
|
||||||
|
font="font10",
|
||||||
|
textColor="ff464646",
|
||||||
|
focusTexture=os.path.join(media, "button-focus.png"),
|
||||||
|
noFocusTexture=os.path.join(media, "button-focus.png"),
|
||||||
|
isPassword=password)
|
||||||
|
|
||||||
|
control.setPosition(x,y)
|
||||||
|
control.setHeight(height)
|
||||||
|
control.setWidth(width)
|
||||||
|
|
||||||
|
self.addControl(control)
|
||||||
|
return control
|
||||||
|
|
||||||
|
def onInit(self):
|
||||||
|
|
||||||
|
self.user_field = self.__add_editcontrol(685,385,40,500)
|
||||||
|
self.setFocus(self.user_field)
|
||||||
|
self.password_field = self.__add_editcontrol(685,470,40,500, password=1)
|
||||||
|
self.signin_button = self.getControl(SIGN_IN)
|
||||||
|
self.remind_button = self.getControl(REMIND_LATER)
|
||||||
|
|
||||||
|
self.user_field.controlUp(self.remind_button)
|
||||||
|
self.user_field.controlDown(self.password_field)
|
||||||
|
self.password_field.controlUp(self.user_field)
|
||||||
|
self.password_field.controlDown(self.signin_button)
|
||||||
|
self.signin_button.controlUp(self.password_field)
|
||||||
|
self.remind_button.controlDown(self.user_field)
|
||||||
|
|
||||||
|
def onClick(self, control):
|
||||||
|
|
||||||
|
if control == SIGN_IN:
|
||||||
|
# Sign in to emby connect
|
||||||
|
self.user = self.user_field.getText()
|
||||||
|
__password = self.password_field.getText()
|
||||||
|
|
||||||
|
### REVIEW ONCE CONNECT MODULE IS MADE
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
elif control == REMIND_LATER:
|
||||||
|
# Remind me later
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def onAction(self, action):
|
||||||
|
|
||||||
|
if action == ACTION_BACK:
|
||||||
|
self.close()
|
|
@ -3,6 +3,12 @@
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
from utils import logging, kodiSQL
|
from utils import logging, kodiSQL
|
||||||
|
import logging
|
||||||
|
from sqlite3 import OperationalError
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,55 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
import threading
|
import threading
|
||||||
import utils
|
|
||||||
import xbmc
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
# Disable annoying requests warnings
|
# Disable annoying requests warnings
|
||||||
import requests.packages.urllib3
|
import requests.packages.urllib3
|
||||||
requests.packages.urllib3.disable_warnings()
|
requests.packages.urllib3.disable_warnings()
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
|
|
||||||
@utils.logging
|
@utils.logging
|
||||||
class image_cache_thread(threading.Thread):
|
class ImageCacheThread(threading.Thread):
|
||||||
|
|
||||||
urlToProcess = None
|
url_to_process = None
|
||||||
isFinished = False
|
is_finished = False
|
||||||
|
|
||||||
xbmc_host = ""
|
xbmc_host = ""
|
||||||
xbmc_port = ""
|
xbmc_port = ""
|
||||||
xbmc_username = ""
|
xbmc_username = ""
|
||||||
xbmc_password = ""
|
xbmc_password = ""
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.monitor = xbmc.Monitor()
|
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
|
|
||||||
def setUrl(self, url):
|
|
||||||
self.urlToProcess = url
|
|
||||||
|
|
||||||
def setHost(self, host, port):
|
def set_url(self, url):
|
||||||
|
|
||||||
|
self.url_to_process = url
|
||||||
|
|
||||||
|
def set_host(self, host, port):
|
||||||
|
|
||||||
self.xbmc_host = host
|
self.xbmc_host = host
|
||||||
self.xbmc_port = port
|
self.xbmc_port = port
|
||||||
|
|
||||||
def setAuth(self, user, pwd):
|
def set_auth(self, username, password):
|
||||||
self.xbmc_username = user
|
|
||||||
self.xbmc_password = pwd
|
self.xbmc_username = username
|
||||||
|
self.xbmc_password = password
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
|
||||||
self.logMsg("Image Caching Thread Processing : " + self.urlToProcess, 2)
|
log.debug("Image Caching Thread Processing: %s", self.url_to_process)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = requests.head(
|
response = requests.head(
|
||||||
|
@ -46,9 +59,8 @@ class image_cache_thread(threading.Thread):
|
||||||
auth=(self.xbmc_username, self.xbmc_password),
|
auth=(self.xbmc_username, self.xbmc_password),
|
||||||
timeout=(5, 5))
|
timeout=(5, 5))
|
||||||
# We don't need the result
|
# We don't need the result
|
||||||
except: pass
|
except Exception:
|
||||||
|
pass
|
||||||
self.logMsg("Image Caching Thread Exited", 2)
|
|
||||||
|
|
||||||
self.isFinished = True
|
|
||||||
|
|
||||||
|
log.debug("Image Caching Thread Exited")
|
||||||
|
self.is_finished = True
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
import xbmc
|
import xbmc
|
||||||
from ntpath import dirname
|
from ntpath import dirname
|
||||||
|
|
||||||
|
@ -31,11 +33,13 @@ class GetKodiDB():
|
||||||
self.kodiconn = kodiSQL(self.itemType)
|
self.kodiconn = kodiSQL(self.itemType)
|
||||||
self.emby_db = Kodidb_Functions(self.kodiconn.cursor())
|
self.emby_db = Kodidb_Functions(self.kodiconn.cursor())
|
||||||
return self.emby_db
|
return self.emby_db
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
def __exit__(self, type, value, traceback):
|
def __exit__(self, type, value, traceback):
|
||||||
self.kodiconn.commit()
|
self.kodiconn.commit()
|
||||||
self.kodiconn.close()
|
self.kodiconn.close()
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
@logging
|
@logging
|
||||||
class Kodidb_Functions():
|
class Kodidb_Functions():
|
||||||
|
@ -48,7 +52,6 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
self.clientInfo = clientinfo.ClientInfo()
|
self.clientInfo = clientinfo.ClientInfo()
|
||||||
self.artwork = artwork.Artwork()
|
self.artwork = artwork.Artwork()
|
||||||
|
|
||||||
def pathHack(self):
|
def pathHack(self):
|
||||||
"""
|
"""
|
||||||
Use with Kodi video DB
|
Use with Kodi video DB
|
||||||
|
@ -232,7 +235,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO country(country_id, name) values(?, ?)"
|
query = "INSERT INTO country(country_id, name) values(?, ?)"
|
||||||
self.cursor.execute(query, (country_id, country))
|
self.cursor.execute(query, (country_id, country))
|
||||||
self.logMsg("Add country to media, processing: %s" % country, 2)
|
log.debug("Add country to media, processing: %s" % country)
|
||||||
|
|
||||||
finally: # Assign country to content
|
finally: # Assign country to content
|
||||||
query = (
|
query = (
|
||||||
|
@ -266,7 +269,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO country(idCountry, strCountry) values(?, ?)"
|
query = "INSERT INTO country(idCountry, strCountry) values(?, ?)"
|
||||||
self.cursor.execute(query, (idCountry, country))
|
self.cursor.execute(query, (idCountry, country))
|
||||||
self.logMsg("Add country to media, processing: %s" % country, 2)
|
log.debug("Add country to media, processing: %s" % country)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Only movies have a country field
|
# Only movies have a country field
|
||||||
|
@ -311,7 +314,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO actor(actor_id, name) values(?, ?)"
|
query = "INSERT INTO actor(actor_id, name) values(?, ?)"
|
||||||
self.cursor.execute(query, (actorid, name))
|
self.cursor.execute(query, (actorid, name))
|
||||||
self.logMsg("Add people to media, processing: %s" % name, 2)
|
log.debug("Add people to media, processing: %s" % name)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Link person to content
|
# Link person to content
|
||||||
|
@ -381,7 +384,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO actors(idActor, strActor) values(?, ?)"
|
query = "INSERT INTO actors(idActor, strActor) values(?, ?)"
|
||||||
self.cursor.execute(query, (actorid, name))
|
self.cursor.execute(query, (actorid, name))
|
||||||
self.logMsg("Add people to media, processing: %s" % name, 2)
|
log.debug("Add people to media, processing: %s" % name)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Link person to content
|
# Link person to content
|
||||||
|
@ -541,7 +544,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO genre(genre_id, name) values(?, ?)"
|
query = "INSERT INTO genre(genre_id, name) values(?, ?)"
|
||||||
self.cursor.execute(query, (genre_id, genre))
|
self.cursor.execute(query, (genre_id, genre))
|
||||||
self.logMsg("Add Genres to media, processing: %s" % genre, 2)
|
log.debug("Add Genres to media, processing: %s" % genre)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Assign genre to item
|
# Assign genre to item
|
||||||
|
@ -586,7 +589,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO genre(idGenre, strGenre) values(?, ?)"
|
query = "INSERT INTO genre(idGenre, strGenre) values(?, ?)"
|
||||||
self.cursor.execute(query, (idGenre, genre))
|
self.cursor.execute(query, (idGenre, genre))
|
||||||
self.logMsg("Add Genres to media, processing: %s" % genre, 2)
|
log.debug("Add Genres to media, processing: %s" % genre)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Assign genre to item
|
# Assign genre to item
|
||||||
|
@ -645,7 +648,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO studio(studio_id, name) values(?, ?)"
|
query = "INSERT INTO studio(studio_id, name) values(?, ?)"
|
||||||
self.cursor.execute(query, (studioid, studio))
|
self.cursor.execute(query, (studioid, studio))
|
||||||
self.logMsg("Add Studios to media, processing: %s" % studio, 2)
|
log.debug("Add Studios to media, processing: %s" % studio)
|
||||||
|
|
||||||
finally: # Assign studio to item
|
finally: # Assign studio to item
|
||||||
query = (
|
query = (
|
||||||
|
@ -676,7 +679,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO studio(idstudio, strstudio) values(?, ?)"
|
query = "INSERT INTO studio(idstudio, strstudio) values(?, ?)"
|
||||||
self.cursor.execute(query, (studioid, studio))
|
self.cursor.execute(query, (studioid, studio))
|
||||||
self.logMsg("Add Studios to media, processing: %s" % studio, 2)
|
log.debug("Add Studios to media, processing: %s" % studio)
|
||||||
|
|
||||||
finally: # Assign studio to item
|
finally: # Assign studio to item
|
||||||
if "movie" in mediatype:
|
if "movie" in mediatype:
|
||||||
|
@ -966,7 +969,7 @@ class Kodidb_Functions():
|
||||||
self.cursor.execute(query, (kodiid, mediatype))
|
self.cursor.execute(query, (kodiid, mediatype))
|
||||||
|
|
||||||
# Add tags
|
# Add tags
|
||||||
self.logMsg("Adding Tags: %s" % tags, 2)
|
log.debug("Adding Tags: %s" % tags)
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
self.addTag(kodiid, tag, mediatype)
|
self.addTag(kodiid, tag, mediatype)
|
||||||
|
|
||||||
|
@ -988,7 +991,7 @@ class Kodidb_Functions():
|
||||||
except TypeError:
|
except TypeError:
|
||||||
# Create the tag, because it does not exist
|
# Create the tag, because it does not exist
|
||||||
tag_id = self.createTag(tag)
|
tag_id = self.createTag(tag)
|
||||||
self.logMsg("Adding tag: %s" % tag, 2)
|
log.debug("Adding tag: %s" % tag)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Assign tag to item
|
# Assign tag to item
|
||||||
|
@ -1017,7 +1020,7 @@ class Kodidb_Functions():
|
||||||
except TypeError:
|
except TypeError:
|
||||||
# Create the tag
|
# Create the tag
|
||||||
tag_id = self.createTag(tag)
|
tag_id = self.createTag(tag)
|
||||||
self.logMsg("Adding tag: %s" % tag, 2)
|
log.debug("Adding tag: %s" % tag)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Assign tag to item
|
# Assign tag to item
|
||||||
|
@ -1053,7 +1056,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO tag(tag_id, name) values(?, ?)"
|
query = "INSERT INTO tag(tag_id, name) values(?, ?)"
|
||||||
self.cursor.execute(query, (tag_id, name))
|
self.cursor.execute(query, (tag_id, name))
|
||||||
self.logMsg("Create tag_id: %s name: %s" % (tag_id, name), 2)
|
log.debug("Create tag_id: %s name: %s" % (tag_id, name))
|
||||||
else:
|
else:
|
||||||
# Kodi Helix
|
# Kodi Helix
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
@ -1073,13 +1076,13 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
query = "INSERT INTO tag(idTag, strTag) values(?, ?)"
|
query = "INSERT INTO tag(idTag, strTag) values(?, ?)"
|
||||||
self.cursor.execute(query, (tag_id, name))
|
self.cursor.execute(query, (tag_id, name))
|
||||||
self.logMsg("Create idTag: %s name: %s" % (tag_id, name), 2)
|
log.debug("Create idTag: %s name: %s" % (tag_id, name))
|
||||||
|
|
||||||
return tag_id
|
return tag_id
|
||||||
|
|
||||||
def updateTag(self, oldtag, newtag, kodiid, mediatype):
|
def updateTag(self, oldtag, newtag, kodiid, mediatype):
|
||||||
|
|
||||||
self.logMsg("Updating: %s with %s for %s: %s" % (oldtag, newtag, mediatype, kodiid), 2)
|
log.debug("Updating: %s with %s for %s: %s" % (oldtag, newtag, mediatype, kodiid))
|
||||||
|
|
||||||
if self.kodiversion in (15, 16, 17):
|
if self.kodiversion in (15, 16, 17):
|
||||||
# Kodi Isengard, Jarvis, Krypton
|
# Kodi Isengard, Jarvis, Krypton
|
||||||
|
@ -1096,7 +1099,6 @@ class Kodidb_Functions():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# The new tag we are going to apply already exists for this item
|
# The new tag we are going to apply already exists for this item
|
||||||
# delete current tag instead
|
# delete current tag instead
|
||||||
self.logMsg("Exception: %s" % e, 1)
|
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
|
||||||
"DELETE FROM tag_link",
|
"DELETE FROM tag_link",
|
||||||
|
@ -1120,7 +1122,6 @@ class Kodidb_Functions():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# The new tag we are going to apply already exists for this item
|
# The new tag we are going to apply already exists for this item
|
||||||
# delete current tag instead
|
# delete current tag instead
|
||||||
self.logMsg("Exception: %s" % e, 1)
|
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
|
||||||
"DELETE FROM taglinks",
|
"DELETE FROM taglinks",
|
||||||
|
@ -1192,7 +1193,7 @@ class Kodidb_Functions():
|
||||||
|
|
||||||
def createBoxset(self, boxsetname):
|
def createBoxset(self, boxsetname):
|
||||||
|
|
||||||
self.logMsg("Adding boxset: %s" % boxsetname, 2)
|
log.debug("Adding boxset: %s" % boxsetname)
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
|
||||||
"SELECT idSet",
|
"SELECT idSet",
|
||||||
|
|
74
resources/lib/loghandler.py
Normal file
74
resources/lib/loghandler.py
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import xbmc
|
||||||
|
|
||||||
|
from utils import window
|
||||||
|
|
||||||
|
##################################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
def config():
|
||||||
|
|
||||||
|
logger = logging.getLogger('EMBY')
|
||||||
|
logger.addHandler(LogHandler())
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
|
class LogHandler(logging.StreamHandler):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
|
||||||
|
logging.StreamHandler.__init__(self)
|
||||||
|
self.setFormatter(MyFormatter())
|
||||||
|
|
||||||
|
def emit(self, record):
|
||||||
|
|
||||||
|
if self._get_log_level(record.levelno):
|
||||||
|
try:
|
||||||
|
xbmc.log(self.format(record), level=xbmc.LOGNOTICE)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
xbmc.log(self.format(record).encode('utf-8'), level=xbmc.LOGNOTICE)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _get_log_level(cls, level):
|
||||||
|
|
||||||
|
levels = {
|
||||||
|
logging.ERROR: 0,
|
||||||
|
logging.WARNING: 0,
|
||||||
|
logging.INFO: 1,
|
||||||
|
logging.DEBUG: 2
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
log_level = int(window('emby_logLevel'))
|
||||||
|
except ValueError:
|
||||||
|
log_level = 0
|
||||||
|
|
||||||
|
return log_level >= levels[level]
|
||||||
|
|
||||||
|
|
||||||
|
class MyFormatter(logging.Formatter):
|
||||||
|
|
||||||
|
def __init__(self, fmt="%(name)s -> %(message)s"):
|
||||||
|
|
||||||
|
logging.Formatter.__init__(self, fmt)
|
||||||
|
|
||||||
|
def format(self, record):
|
||||||
|
|
||||||
|
# Save the original format configured by the user
|
||||||
|
# when the logger formatter was instantiated
|
||||||
|
format_orig = self._fmt
|
||||||
|
|
||||||
|
# Replace the original format with one customized by logging level
|
||||||
|
if record.levelno in (logging.DEBUG, logging.ERROR):
|
||||||
|
self._fmt = '%(name)s -> %(levelname)s:: %(message)s'
|
||||||
|
|
||||||
|
# Call the original formatter class to do the grunt work
|
||||||
|
result = logging.Formatter.format(self, record)
|
||||||
|
|
||||||
|
# Restore the original format configured by the user
|
||||||
|
self._fmt = format_orig
|
||||||
|
|
||||||
|
return result
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import xbmc
|
import xbmc
|
||||||
|
@ -12,20 +13,21 @@ from mutagen.id3 import ID3
|
||||||
from mutagen import id3
|
from mutagen import id3
|
||||||
|
|
||||||
import read_embyserver as embyserver
|
import read_embyserver as embyserver
|
||||||
import utils
|
from utils import window
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
# Helper for the music library, intended to fix missing song ID3 tags on Emby
|
# Helper for the music library, intended to fix missing song ID3 tags on Emby
|
||||||
|
|
||||||
def logMsg(msg, lvl=1):
|
|
||||||
utils.logMsg("%s %s" % ("Emby", "musictools"), msg, lvl)
|
|
||||||
|
|
||||||
def getRealFileName(filename, isTemp=False):
|
def getRealFileName(filename, isTemp=False):
|
||||||
#get the filename path accessible by python if possible...
|
#get the filename path accessible by python if possible...
|
||||||
|
|
||||||
if not xbmcvfs.exists(filename):
|
if not xbmcvfs.exists(filename):
|
||||||
logMsg( "File does not exist! %s" %(filename), 0)
|
log.warn("File does not exist! %s" % filename)
|
||||||
return (False, "")
|
return (False, "")
|
||||||
|
|
||||||
#if we use os.path method on older python versions (sunch as some android builds), we need to pass arguments as string
|
#if we use os.path method on older python versions (sunch as some android builds), we need to pass arguments as string
|
||||||
|
@ -181,7 +183,7 @@ def getSongTags(file):
|
||||||
hasEmbeddedCover = False
|
hasEmbeddedCover = False
|
||||||
|
|
||||||
isTemp,filename = getRealFileName(file)
|
isTemp,filename = getRealFileName(file)
|
||||||
logMsg( "getting song ID3 tags for " + filename)
|
log.info( "getting song ID3 tags for " + filename)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
###### FLAC FILES #############
|
###### FLAC FILES #############
|
||||||
|
@ -215,14 +217,14 @@ def getSongTags(file):
|
||||||
#POPM rating is 0-255 and needs to be converted to 0-5 range
|
#POPM rating is 0-255 and needs to be converted to 0-5 range
|
||||||
if rating > 5: rating = (rating / 255) * 5
|
if rating > 5: rating = (rating / 255) * 5
|
||||||
else:
|
else:
|
||||||
logMsg( "Not supported fileformat or unable to access file: %s" %(filename))
|
log.info( "Not supported fileformat or unable to access file: %s" %(filename))
|
||||||
|
|
||||||
#the rating must be a round value
|
#the rating must be a round value
|
||||||
rating = int(round(rating,0))
|
rating = int(round(rating,0))
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
#file in use ?
|
#file in use ?
|
||||||
utils.logMsg("Exception in getSongTags", str(e),0)
|
log.error("Exception in getSongTags %s" % e)
|
||||||
rating = None
|
rating = None
|
||||||
|
|
||||||
#remove tempfile if needed....
|
#remove tempfile if needed....
|
||||||
|
@ -244,7 +246,7 @@ def updateRatingToFile(rating, file):
|
||||||
xbmcvfs.copy(file, tempfile)
|
xbmcvfs.copy(file, tempfile)
|
||||||
tempfile = utils.tryDecode(xbmc.translatePath(tempfile))
|
tempfile = utils.tryDecode(xbmc.translatePath(tempfile))
|
||||||
|
|
||||||
logMsg( "setting song rating: %s for filename: %s - using tempfile: %s" %(rating,file,tempfile))
|
log.info( "setting song rating: %s for filename: %s - using tempfile: %s" %(rating,file,tempfile))
|
||||||
|
|
||||||
if not tempfile:
|
if not tempfile:
|
||||||
return
|
return
|
||||||
|
@ -261,7 +263,7 @@ def updateRatingToFile(rating, file):
|
||||||
audio.add(id3.POPM(email="Windows Media Player 9 Series", rating=calcrating, count=1))
|
audio.add(id3.POPM(email="Windows Media Player 9 Series", rating=calcrating, count=1))
|
||||||
audio.save()
|
audio.save()
|
||||||
else:
|
else:
|
||||||
logMsg( "Not supported fileformat: %s" %(tempfile))
|
log.info( "Not supported fileformat: %s" %(tempfile))
|
||||||
|
|
||||||
#once we have succesfully written the flags we move the temp file to destination, otherwise not proceeding and just delete the temp
|
#once we have succesfully written the flags we move the temp file to destination, otherwise not proceeding and just delete the temp
|
||||||
#safety check: we check the file size of the temp file before proceeding with overwite of original file
|
#safety check: we check the file size of the temp file before proceeding with overwite of original file
|
||||||
|
@ -272,14 +274,14 @@ def updateRatingToFile(rating, file):
|
||||||
xbmcvfs.delete(file)
|
xbmcvfs.delete(file)
|
||||||
xbmcvfs.copy(tempfile,file)
|
xbmcvfs.copy(tempfile,file)
|
||||||
else:
|
else:
|
||||||
logMsg( "Checksum mismatch for filename: %s - using tempfile: %s - not proceeding with file overwite!" %(rating,file,tempfile))
|
log.info( "Checksum mismatch for filename: %s - using tempfile: %s - not proceeding with file overwite!" %(rating,file,tempfile))
|
||||||
|
|
||||||
#always delete the tempfile
|
#always delete the tempfile
|
||||||
xbmcvfs.delete(tempfile)
|
xbmcvfs.delete(tempfile)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
#file in use ?
|
#file in use ?
|
||||||
logMsg("Exception in updateRatingToFile %s" %e,0)
|
log.error("Exception in updateRatingToFile %s" % e)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,17 @@
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
import xbmc
|
import xbmc
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
import downloadutils
|
import downloadutils
|
||||||
|
from utils import window, settings, kodiSQL
|
||||||
|
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
@utils.logging
|
@utils.logging
|
||||||
class Read_EmbyServer():
|
class Read_EmbyServer():
|
||||||
|
@ -26,7 +30,6 @@ class Read_EmbyServer():
|
||||||
# Split up list in pieces of size. Will generate a list of lists
|
# Split up list in pieces of size. Will generate a list of lists
|
||||||
return [itemlist[i:i+size] for i in range(0, len(itemlist), size)]
|
return [itemlist[i:i+size] for i in range(0, len(itemlist), size)]
|
||||||
|
|
||||||
|
|
||||||
def getItem(self, itemid):
|
def getItem(self, itemid):
|
||||||
# This will return the full item
|
# This will return the full item
|
||||||
item = {}
|
item = {}
|
||||||
|
@ -49,7 +52,8 @@ class Read_EmbyServer():
|
||||||
'Ids': ",".join(itemlist),
|
'Ids': ",".join(itemlist),
|
||||||
'Fields': "Etag"
|
'Fields': "Etag"
|
||||||
}
|
}
|
||||||
result = self.doUtils("{server}/emby/Users/{UserId}/Items?&format=json", parameters=params)
|
url = "{server}/emby/Users/{UserId}/Items?&format=json"
|
||||||
|
result = self.doUtils(url, parameters=params)
|
||||||
if result:
|
if result:
|
||||||
items.extend(result['Items'])
|
items.extend(result['Items'])
|
||||||
|
|
||||||
|
@ -75,7 +79,8 @@ class Read_EmbyServer():
|
||||||
"MediaSources,VoteCount"
|
"MediaSources,VoteCount"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
result = self.doUtils("{server}/emby/Users/{UserId}/Items?format=json", parameters=params)
|
url = "{server}/emby/Users/{UserId}/Items?format=json"
|
||||||
|
result = self.doUtils(url, parameters=params)
|
||||||
if result:
|
if result:
|
||||||
items.extend(result['Items'])
|
items.extend(result['Items'])
|
||||||
|
|
||||||
|
@ -85,14 +90,15 @@ class Read_EmbyServer():
|
||||||
# Returns ancestors using plexid
|
# Returns ancestors using plexid
|
||||||
viewId = None
|
viewId = None
|
||||||
|
|
||||||
for view in self.doUtils("{server}/emby/Items/%s/Ancestors?UserId={UserId}&format=json" % itemid):
|
url = "{server}/emby/Items/%s/Ancestors?UserId={UserId}&format=json" % itemid
|
||||||
|
for view in self.doUtils(url):
|
||||||
|
|
||||||
if view['Type'] == "CollectionFolder":
|
if view['Type'] == "CollectionFolder":
|
||||||
# Found view
|
# Found view
|
||||||
viewId = view['Id']
|
viewId = view['Id']
|
||||||
|
|
||||||
# Compare to view table in emby database
|
# Compare to view table in emby database
|
||||||
emby = utils.kodiSQL('emby')
|
emby = kodiSQL('emby')
|
||||||
cursor_emby = emby.cursor()
|
cursor_emby = emby.cursor()
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
|
|
||||||
|
@ -113,7 +119,8 @@ class Read_EmbyServer():
|
||||||
|
|
||||||
return [viewName, viewId, mediatype]
|
return [viewName, viewId, mediatype]
|
||||||
|
|
||||||
def getFilteredSection(self, parentid, itemtype=None, sortby="SortName", recursive=True, limit=None, sortorder="Ascending", filter=""):
|
def getFilteredSection(self, parentid, itemtype=None, sortby="SortName", recursive=True,
|
||||||
|
limit=None, sortorder="Ascending", filter_type=""):
|
||||||
params = {
|
params = {
|
||||||
|
|
||||||
'ParentId': parentid,
|
'ParentId': parentid,
|
||||||
|
@ -126,39 +133,54 @@ class Read_EmbyServer():
|
||||||
'SortBy': sortby,
|
'SortBy': sortby,
|
||||||
'SortOrder': sortorder,
|
'SortOrder': sortorder,
|
||||||
'Filters': filter,
|
'Filters': filter,
|
||||||
'Fields': ( "Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,"
|
'Fields': (
|
||||||
|
|
||||||
|
"Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,"
|
||||||
"CommunityRating,OfficialRating,CumulativeRunTimeTicks,"
|
"CommunityRating,OfficialRating,CumulativeRunTimeTicks,"
|
||||||
"Metascore,AirTime,DateCreated,MediaStreams,People,Overview,"
|
"Metascore,AirTime,DateCreated,MediaStreams,People,Overview,"
|
||||||
"CriticRating,CriticRatingSummary,Etag,ShortOverview,ProductionLocations,"
|
"CriticRating,CriticRatingSummary,Etag,ShortOverview,ProductionLocations,"
|
||||||
"Tags,ProviderIds,ParentId,RemoteTrailers,SpecialEpisodeNumbers")
|
"Tags,ProviderIds,ParentId,RemoteTrailers,SpecialEpisodeNumbers"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
return self.doUtils("{server}/emby/Users/{UserId}/Items?format=json", parameters=params)
|
return self.doUtils("{server}/emby/Users/{UserId}/Items?format=json", parameters=params)
|
||||||
|
|
||||||
def getTvChannels(self):
|
def getTvChannels(self):
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
|
|
||||||
'EnableImages': True,
|
'EnableImages': True,
|
||||||
'Fields': ( "Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,"
|
'Fields': (
|
||||||
|
|
||||||
|
"Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,"
|
||||||
"CommunityRating,OfficialRating,CumulativeRunTimeTicks,"
|
"CommunityRating,OfficialRating,CumulativeRunTimeTicks,"
|
||||||
"Metascore,AirTime,DateCreated,MediaStreams,People,Overview,"
|
"Metascore,AirTime,DateCreated,MediaStreams,People,Overview,"
|
||||||
"CriticRating,CriticRatingSummary,Etag,ShortOverview,ProductionLocations,"
|
"CriticRating,CriticRatingSummary,Etag,ShortOverview,ProductionLocations,"
|
||||||
"Tags,ProviderIds,ParentId,RemoteTrailers,SpecialEpisodeNumbers")
|
"Tags,ProviderIds,ParentId,RemoteTrailers,SpecialEpisodeNumbers"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
return self.doUtils("{server}/emby/LiveTv/Channels/?userid={UserId}&format=json", parameters=params)
|
url = "{server}/emby/LiveTv/Channels/?userid={UserId}&format=json"
|
||||||
|
return self.doUtils(url, parameters=params)
|
||||||
|
|
||||||
def getTvRecordings(self, groupid):
|
def getTvRecordings(self, groupid):
|
||||||
if groupid == "root": groupid = ""
|
|
||||||
|
if groupid == "root":
|
||||||
|
groupid = ""
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
|
|
||||||
'GroupId': groupid,
|
'GroupId': groupid,
|
||||||
'EnableImages': True,
|
'EnableImages': True,
|
||||||
'Fields': ( "Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,"
|
'Fields': (
|
||||||
|
|
||||||
|
"Path,Genres,SortName,Studios,Writer,ProductionYear,Taglines,"
|
||||||
"CommunityRating,OfficialRating,CumulativeRunTimeTicks,"
|
"CommunityRating,OfficialRating,CumulativeRunTimeTicks,"
|
||||||
"Metascore,AirTime,DateCreated,MediaStreams,People,Overview,"
|
"Metascore,AirTime,DateCreated,MediaStreams,People,Overview,"
|
||||||
"CriticRating,CriticRatingSummary,Etag,ShortOverview,ProductionLocations,"
|
"CriticRating,CriticRatingSummary,Etag,ShortOverview,ProductionLocations,"
|
||||||
"Tags,ProviderIds,ParentId,RemoteTrailers,SpecialEpisodeNumbers")
|
"Tags,ProviderIds,ParentId,RemoteTrailers,SpecialEpisodeNumbers"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
return self.doUtils("{server}/emby/LiveTv/Recordings/?userid={UserId}&format=json", parameters=params)
|
url = "{server}/emby/LiveTv/Recordings/?userid={UserId}&format=json"
|
||||||
|
return self.doUtils(url, parameters=params)
|
||||||
|
|
||||||
def getSection(self, parentid, itemtype=None, sortby="SortName", basic=False, dialog=None):
|
def getSection(self, parentid, itemtype=None, sortby="SortName", basic=False, dialog=None):
|
||||||
|
|
||||||
|
@ -186,7 +208,7 @@ class Read_EmbyServer():
|
||||||
items['TotalRecordCount'] = total
|
items['TotalRecordCount'] = total
|
||||||
|
|
||||||
except TypeError: # Failed to retrieve
|
except TypeError: # Failed to retrieve
|
||||||
self.logMsg("%s:%s Failed to retrieve the server response." % (url, params), 2)
|
log.debug("%s:%s Failed to retrieve the server response." % (url, params))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
index = 0
|
index = 0
|
||||||
|
@ -228,27 +250,27 @@ class Read_EmbyServer():
|
||||||
# Something happened to the connection
|
# Something happened to the connection
|
||||||
if not throttled:
|
if not throttled:
|
||||||
throttled = True
|
throttled = True
|
||||||
self.logMsg("Throttle activated.", 1)
|
log.info("Throttle activated.")
|
||||||
|
|
||||||
if jump == highestjump:
|
if jump == highestjump:
|
||||||
# We already tried with the highestjump, but it failed. Reset value.
|
# We already tried with the highestjump, but it failed. Reset value.
|
||||||
self.logMsg("Reset highest value.", 1)
|
log.info("Reset highest value.")
|
||||||
highestjump = 0
|
highestjump = 0
|
||||||
|
|
||||||
# Lower the number by half
|
# Lower the number by half
|
||||||
if highestjump:
|
if highestjump:
|
||||||
throttled = False
|
throttled = False
|
||||||
jump = highestjump
|
jump = highestjump
|
||||||
self.logMsg("Throttle deactivated.", 1)
|
log.info("Throttle deactivated.")
|
||||||
else:
|
else:
|
||||||
jump = int(jump/4)
|
jump = int(jump/4)
|
||||||
self.logMsg("Set jump limit to recover: %s" % jump, 2)
|
log.debug("Set jump limit to recover: %s" % jump)
|
||||||
|
|
||||||
retry = 0
|
retry = 0
|
||||||
while utils.window('plex_online') != "true":
|
while utils.window('plex_online') != "true":
|
||||||
# Wait server to come back online
|
# Wait server to come back online
|
||||||
if retry == 5:
|
if retry == 5:
|
||||||
self.logMsg("Unable to reconnect to server. Abort process.", 1)
|
log.info("Unable to reconnect to server. Abort process.")
|
||||||
return items
|
return items
|
||||||
|
|
||||||
retry += 1
|
retry += 1
|
||||||
|
@ -276,7 +298,7 @@ class Read_EmbyServer():
|
||||||
increment = 10
|
increment = 10
|
||||||
|
|
||||||
jump += increment
|
jump += increment
|
||||||
self.logMsg("Increase jump limit to: %s" % jump, 1)
|
log.info("Increase jump limit to: %s" % jump)
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def getViews(self, mediatype="", root=False, sortedlist=False):
|
def getViews(self, mediatype="", root=False, sortedlist=False):
|
||||||
|
@ -293,7 +315,7 @@ class Read_EmbyServer():
|
||||||
try:
|
try:
|
||||||
items = result['Items']
|
items = result['Items']
|
||||||
except TypeError:
|
except TypeError:
|
||||||
self.logMsg("Error retrieving views for type: %s" % mediatype, 2)
|
log.debug("Error retrieving views for type: %s" % mediatype)
|
||||||
else:
|
else:
|
||||||
for item in items:
|
for item in items:
|
||||||
|
|
||||||
|
@ -362,15 +384,18 @@ class Read_EmbyServer():
|
||||||
return belongs
|
return belongs
|
||||||
|
|
||||||
def getMovies(self, parentId, basic=False, dialog=None):
|
def getMovies(self, parentId, basic=False, dialog=None):
|
||||||
|
|
||||||
return self.getSection(parentId, "Movie", basic=basic, dialog=dialog)
|
return self.getSection(parentId, "Movie", basic=basic, dialog=dialog)
|
||||||
|
|
||||||
def getBoxset(self, dialog=None):
|
def getBoxset(self, dialog=None):
|
||||||
|
|
||||||
return self.getSection(None, "BoxSet", dialog=dialog)
|
return self.getSection(None, "BoxSet", dialog=dialog)
|
||||||
|
|
||||||
def getMovies_byBoxset(self, boxsetid):
|
def getMovies_byBoxset(self, boxsetid):
|
||||||
return self.getSection(boxsetid, "Movie")
|
return self.getSection(boxsetid, "Movie")
|
||||||
|
|
||||||
def getMusicVideos(self, parentId, basic=False, dialog=None):
|
def getMusicVideos(self, parentId, basic=False, dialog=None):
|
||||||
|
|
||||||
return self.getSection(parentId, "MusicVideo", basic=basic, dialog=dialog)
|
return self.getSection(parentId, "MusicVideo", basic=basic, dialog=dialog)
|
||||||
|
|
||||||
def getHomeVideos(self, parentId):
|
def getHomeVideos(self, parentId):
|
||||||
|
@ -378,6 +403,7 @@ class Read_EmbyServer():
|
||||||
return self.getSection(parentId, "Video")
|
return self.getSection(parentId, "Video")
|
||||||
|
|
||||||
def getShows(self, parentId, basic=False, dialog=None):
|
def getShows(self, parentId, basic=False, dialog=None):
|
||||||
|
|
||||||
return self.getSection(parentId, "Series", basic=basic, dialog=dialog)
|
return self.getSection(parentId, "Series", basic=basic, dialog=dialog)
|
||||||
|
|
||||||
def getSeasons(self, showId):
|
def getSeasons(self, showId):
|
||||||
|
@ -393,7 +419,8 @@ class Read_EmbyServer():
|
||||||
'IsVirtualUnaired': False,
|
'IsVirtualUnaired': False,
|
||||||
'Fields': "Etag"
|
'Fields': "Etag"
|
||||||
}
|
}
|
||||||
result = self.doUtils("{server}/emby/Shows/%s/Seasons?UserId={UserId}&format=json" % showId, parameters=params)
|
url = "{server}/emby/Shows/%s/Seasons?UserId={UserId}&format=json" % showId
|
||||||
|
result = self.doUtils(url, parameters=params)
|
||||||
if result:
|
if result:
|
||||||
items = result
|
items = result
|
||||||
|
|
||||||
|
@ -411,7 +438,6 @@ class Read_EmbyServer():
|
||||||
|
|
||||||
return self.getSection(seasonId, "Episode")
|
return self.getSection(seasonId, "Episode")
|
||||||
|
|
||||||
|
|
||||||
def getArtists(self, dialog=None):
|
def getArtists(self, dialog=None):
|
||||||
|
|
||||||
items = {
|
items = {
|
||||||
|
@ -433,7 +459,7 @@ class Read_EmbyServer():
|
||||||
items['TotalRecordCount'] = total
|
items['TotalRecordCount'] = total
|
||||||
|
|
||||||
except TypeError: # Failed to retrieve
|
except TypeError: # Failed to retrieve
|
||||||
self.logMsg("%s:%s Failed to retrieve the server response." % (url, params), 2)
|
log.debug("%s:%s Failed to retrieve the server response." % (url, params))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
index = 1
|
index = 1
|
||||||
|
@ -467,17 +493,20 @@ class Read_EmbyServer():
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def getAlbums(self, basic=False, dialog=None):
|
def getAlbums(self, basic=False, dialog=None):
|
||||||
|
|
||||||
return self.getSection(None, "MusicAlbum", sortby="DateCreated", basic=basic, dialog=dialog)
|
return self.getSection(None, "MusicAlbum", sortby="DateCreated", basic=basic, dialog=dialog)
|
||||||
|
|
||||||
def getAlbumsbyArtist(self, artistId):
|
def getAlbumsbyArtist(self, artistId):
|
||||||
|
|
||||||
return self.getSection(artistId, "MusicAlbum", sortby="DateCreated")
|
return self.getSection(artistId, "MusicAlbum", sortby="DateCreated")
|
||||||
|
|
||||||
def getSongs(self, basic=False, dialog=None):
|
def getSongs(self, basic=False, dialog=None):
|
||||||
|
|
||||||
return self.getSection(None, "Audio", basic=basic, dialog=dialog)
|
return self.getSection(None, "Audio", basic=basic, dialog=dialog)
|
||||||
|
|
||||||
def getSongsbyAlbum(self, albumId):
|
def getSongsbyAlbum(self, albumId):
|
||||||
return self.getSection(albumId, "Audio")
|
|
||||||
|
|
||||||
|
return self.getSection(albumId, "Audio")
|
||||||
|
|
||||||
def getAdditionalParts(self, itemId):
|
def getAdditionalParts(self, itemId):
|
||||||
|
|
||||||
|
@ -486,8 +515,8 @@ class Read_EmbyServer():
|
||||||
'Items': [],
|
'Items': [],
|
||||||
'TotalRecordCount': 0
|
'TotalRecordCount': 0
|
||||||
}
|
}
|
||||||
|
url = "{server}/emby/Videos/%s/AdditionalParts?UserId={UserId}&format=json" % itemId
|
||||||
result = self.doUtils("{server}/emby/Videos/%s/AdditionalParts?UserId={UserId}&format=json" % itemId)
|
result = self.doUtils(url)
|
||||||
if result:
|
if result:
|
||||||
items = result
|
items = result
|
||||||
|
|
||||||
|
@ -507,23 +536,36 @@ class Read_EmbyServer():
|
||||||
|
|
||||||
return sorted_items
|
return sorted_items
|
||||||
|
|
||||||
def updateUserRating(self, itemid, like=None, favourite=None, deletelike=False):
|
def updateUserRating(self, itemid, favourite=None):
|
||||||
# Updates the user rating to Emby
|
# Updates the user rating to Emby
|
||||||
|
doUtils = self.doUtils
|
||||||
|
|
||||||
if favourite:
|
if favourite:
|
||||||
self.doUtils("{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid, action_type="POST")
|
url = "{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid
|
||||||
elif favourite == False:
|
doUtils(url, action_type="POST")
|
||||||
self.doUtils("{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid, action_type="DELETE")
|
elif not favourite:
|
||||||
|
url = "{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid
|
||||||
if not deletelike and like:
|
doUtils(url, action_type="DELETE")
|
||||||
self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?Likes=true&format=json" % itemid, action_type="POST")
|
|
||||||
elif not deletelike and like is False:
|
|
||||||
self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?Likes=false&format=json" % itemid, action_type="POST")
|
|
||||||
elif deletelike:
|
|
||||||
self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?format=json" % itemid, action_type="DELETE")
|
|
||||||
else:
|
else:
|
||||||
self.logMsg("Error processing user rating.", 1)
|
log.info("Error processing user rating.")
|
||||||
|
|
||||||
self.logMsg("Update user rating to emby for itemid: %s "
|
log.info("Update user rating to emby for itemid: %s | favourite: %s" % (itemid, favourite))
|
||||||
"| like: %s | favourite: %s | deletelike: %s"
|
|
||||||
% (itemid, like, favourite, deletelike), 1)
|
def refreshItem(self, itemid):
|
||||||
|
|
||||||
|
url = "{server}/emby/Items/%s/Refresh?format=json" % itemid
|
||||||
|
params = {
|
||||||
|
|
||||||
|
'Recursive': True,
|
||||||
|
'ImageRefreshMode': "FullRefresh",
|
||||||
|
'MetadataRefreshMode': "FullRefresh",
|
||||||
|
'ReplaceAllImages': False,
|
||||||
|
'ReplaceAllMetadata': True
|
||||||
|
|
||||||
|
}
|
||||||
|
self.doUtils(url, postBody=params, action_type="POST")
|
||||||
|
|
||||||
|
def deleteItem(self, itemid):
|
||||||
|
|
||||||
|
url = "{server}/emby/Items/%s?format=json" % itemid
|
||||||
|
self.doUtils(url, action_type="DELETE")
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
import logging
|
||||||
import shutil
|
import shutil
|
||||||
import xml.etree.ElementTree as etree
|
import xml.etree.ElementTree as etree
|
||||||
|
|
||||||
|
@ -9,8 +10,13 @@ import xbmc
|
||||||
import xbmcvfs
|
import xbmcvfs
|
||||||
|
|
||||||
import utils
|
import utils
|
||||||
|
from utils import window, language as lang
|
||||||
|
|
||||||
###############################################################################
|
#################################################################################################
|
||||||
|
|
||||||
|
log = logging.getLogger("EMBY."+__name__)
|
||||||
|
|
||||||
|
#################################################################################################
|
||||||
|
|
||||||
|
|
||||||
@utils.logging
|
@utils.logging
|
||||||
|
@ -53,8 +59,6 @@ class VideoNodes(object):
|
||||||
}
|
}
|
||||||
mediatype = mediatypes[mediatype]
|
mediatype = mediatypes[mediatype]
|
||||||
|
|
||||||
window = utils.window
|
|
||||||
|
|
||||||
if viewtype == "mixed":
|
if viewtype == "mixed":
|
||||||
dirname = "%s-%s" % (viewid, mediatype)
|
dirname = "%s-%s" % (viewid, mediatype)
|
||||||
else:
|
else:
|
||||||
|
@ -88,8 +92,7 @@ class VideoNodes(object):
|
||||||
xbmcvfs.delete(utils.tryEncode(
|
xbmcvfs.delete(utils.tryEncode(
|
||||||
(nodepath + utils.tryDecode(file))))
|
(nodepath + utils.tryDecode(file))))
|
||||||
|
|
||||||
self.logMsg("Sucessfully removed videonode: %s."
|
log.info("Sucessfully removed videonode: %s." % tagname)
|
||||||
% tagname, 1)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# Create index entry
|
# Create index entry
|
||||||
|
@ -210,7 +213,7 @@ class VideoNodes(object):
|
||||||
# Get label
|
# Get label
|
||||||
stringid = nodes[node]
|
stringid = nodes[node]
|
||||||
if node != "1":
|
if node != "1":
|
||||||
label = utils.language(stringid)
|
label = lang(stringid)
|
||||||
if not label:
|
if not label:
|
||||||
label = xbmc.getLocalizedString(stringid)
|
label = xbmc.getLocalizedString(stringid)
|
||||||
else:
|
else:
|
||||||
|
@ -366,8 +369,6 @@ class VideoNodes(object):
|
||||||
|
|
||||||
def singleNode(self, indexnumber, tagname, mediatype, itemtype):
|
def singleNode(self, indexnumber, tagname, mediatype, itemtype):
|
||||||
|
|
||||||
window = utils.window
|
|
||||||
|
|
||||||
tagname = utils.tryEncode(tagname)
|
tagname = utils.tryEncode(tagname)
|
||||||
cleantagname = utils.normalize_nodes(tagname)
|
cleantagname = utils.normalize_nodes(tagname)
|
||||||
nodepath = utils.tryDecode(xbmc.translatePath(
|
nodepath = utils.tryDecode(xbmc.translatePath(
|
||||||
|
@ -396,7 +397,7 @@ class VideoNodes(object):
|
||||||
'Favorite tvshows': 30181,
|
'Favorite tvshows': 30181,
|
||||||
'channels': 30173
|
'channels': 30173
|
||||||
}
|
}
|
||||||
label = utils.language(labels[tagname])
|
label = lang(labels[tagname])
|
||||||
embynode = "Plex.nodes.%s" % indexnumber
|
embynode = "Plex.nodes.%s" % indexnumber
|
||||||
window('%s.title' % embynode, value=label)
|
window('%s.title' % embynode, value=label)
|
||||||
window('%s.path' % embynode, value=windowpath)
|
window('%s.path' % embynode, value=windowpath)
|
||||||
|
@ -423,9 +424,7 @@ class VideoNodes(object):
|
||||||
|
|
||||||
def clearProperties(self):
|
def clearProperties(self):
|
||||||
|
|
||||||
window = utils.window
|
log.info("Clearing nodes properties.")
|
||||||
|
|
||||||
self.logMsg("Clearing nodes properties.", 1)
|
|
||||||
plexprops = window('Plex.nodes.total')
|
plexprops = window('Plex.nodes.total')
|
||||||
propnames = [
|
propnames = [
|
||||||
|
|
||||||
|
|
153
resources/skins/default/1080i/script-emby-connect-login.xml
Normal file
153
resources/skins/default/1080i/script-emby-connect-login.xml
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<window>
|
||||||
|
<defaultcontrol always="false">200</defaultcontrol>
|
||||||
|
<zorder>0</zorder>
|
||||||
|
<include>dialogeffect</include>
|
||||||
|
<controls>
|
||||||
|
<control type="image">
|
||||||
|
<description>Background fade</description>
|
||||||
|
<width>100%</width>
|
||||||
|
<height>100%</height>
|
||||||
|
<texture>emby-bg-fade.png</texture>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="group">
|
||||||
|
<width>600</width>
|
||||||
|
<left>33%</left>
|
||||||
|
<top>15%</top>
|
||||||
|
<control type="image">
|
||||||
|
<description>Background box</description>
|
||||||
|
<texture border="6" colordiffuse="ff111111">box.png</texture>
|
||||||
|
<width>600</width>
|
||||||
|
<height>700</height>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="image">
|
||||||
|
<description>Emby logo</description>
|
||||||
|
<texture>logo-white.png</texture>
|
||||||
|
<width>160</width>
|
||||||
|
<height>49</height>
|
||||||
|
<top>20</top>
|
||||||
|
<left>25</left>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="group">
|
||||||
|
<width>500</width>
|
||||||
|
<left>50</left>
|
||||||
|
<control type="label">
|
||||||
|
<description>Sign in emby connect</description>
|
||||||
|
<label>$ADDON[plugin.video.emby 30600]</label>
|
||||||
|
<textcolor>white</textcolor>
|
||||||
|
<font>font12</font>
|
||||||
|
<aligny>top</aligny>
|
||||||
|
<top>115</top>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="group">
|
||||||
|
<top>190</top>
|
||||||
|
<control type="label">
|
||||||
|
<description>Username email</description>
|
||||||
|
<label>$ADDON[plugin.video.emby 30601]</label>
|
||||||
|
<textcolor>ffa6a6a6</textcolor>
|
||||||
|
<font>font10</font>
|
||||||
|
<aligny>top</aligny>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="image">
|
||||||
|
<description>separator</description>
|
||||||
|
<width>102%</width>
|
||||||
|
<height>0.5</height>
|
||||||
|
<top>66</top>
|
||||||
|
<left>-10</left>
|
||||||
|
<texture colordiffuse="ff222222" border="90,3,90,3">separator.png</texture>
|
||||||
|
</control>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="group">
|
||||||
|
<description>Password</description>
|
||||||
|
<top>275</top>
|
||||||
|
<control type="label">
|
||||||
|
<description>Password label</description>
|
||||||
|
<label>$ADDON[plugin.video.emby 30602]</label>
|
||||||
|
<textcolor>ffa6a6a6</textcolor>
|
||||||
|
<font>font10</font>
|
||||||
|
<aligny>top</aligny>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="image">
|
||||||
|
<description>separator</description>
|
||||||
|
<width>102%</width>
|
||||||
|
<height>0.5</height>
|
||||||
|
<top>66</top>
|
||||||
|
<left>-10</left>
|
||||||
|
<texture colordiffuse="ff222222" border="90,3,90,3">separator.png</texture>
|
||||||
|
</control>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="group">
|
||||||
|
<description>Buttons</description>
|
||||||
|
<top>385</top>
|
||||||
|
<control type="button" id="200">
|
||||||
|
<description>Sign in</description>
|
||||||
|
<texturenofocus border="5" colordiffuse="green">box.png</texturenofocus>
|
||||||
|
<texturefocus border="5" colordiffuse="green">box.png</texturefocus>
|
||||||
|
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30605][/B][/UPPERCASE]</label>
|
||||||
|
<font>font10</font>
|
||||||
|
<align>center</align>
|
||||||
|
<width>100%</width>
|
||||||
|
<height>50</height>
|
||||||
|
<ondown>201</ondown>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="button" id="201">
|
||||||
|
<description>Later</description>
|
||||||
|
<texturenofocus border="5" colordiffuse="ff464646">box.png</texturenofocus>
|
||||||
|
<texturefocus border="5" colordiffuse="ff464646">box.png</texturefocus>
|
||||||
|
<label>[UPPERCASE][B]$ADDON[plugin.video.emby 30606][/B][/UPPERCASE]</label>
|
||||||
|
<font>font10</font>
|
||||||
|
<align>center</align>
|
||||||
|
<width>100%</width>
|
||||||
|
<height>50</height>
|
||||||
|
<top>55</top>
|
||||||
|
<onup>200</onup>
|
||||||
|
</control>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="group">
|
||||||
|
<description>Disclaimer</description>
|
||||||
|
<top>510</top>
|
||||||
|
<control type="label">
|
||||||
|
<description>Disclaimer label</description>
|
||||||
|
<label>$ADDON[plugin.video.emby 30603]</label>
|
||||||
|
<font>font10</font>
|
||||||
|
<textcolor>ff464646</textcolor>
|
||||||
|
<wrapmultiline>true</wrapmultiline>
|
||||||
|
<aligny>top</aligny>
|
||||||
|
<width>340</width>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="image">
|
||||||
|
<description>qrcode</description>
|
||||||
|
<texture>qrcode_disclaimer.png</texture>
|
||||||
|
<width>140</width>
|
||||||
|
<height>140</height>
|
||||||
|
<top>10</top>
|
||||||
|
<left>360</left>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
<control type="label">
|
||||||
|
<description>Scan me</description>
|
||||||
|
<label>[UPPERCASE]$ADDON[plugin.video.emby 30604][/UPPERCASE]</label>
|
||||||
|
<font>font12</font>
|
||||||
|
<textcolor>green</textcolor>
|
||||||
|
<align>right</align>
|
||||||
|
<aligny>top</aligny>
|
||||||
|
<top>120</top>
|
||||||
|
<right>160</right>
|
||||||
|
</control>
|
||||||
|
</control>
|
||||||
|
</control>
|
||||||
|
</control>
|
||||||
|
|
||||||
|
</controls>
|
||||||
|
</window>
|
BIN
resources/skins/default/media/button-focus.png
Normal file
BIN
resources/skins/default/media/button-focus.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1,023 B |
BIN
resources/skins/default/media/emby-bg-fade.png
Normal file
BIN
resources/skins/default/media/emby-bg-fade.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 194 B |
BIN
resources/skins/default/media/logo-white.png
Normal file
BIN
resources/skins/default/media/logo-white.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2 KiB |
BIN
resources/skins/default/media/qrcode_disclaimer.png
Normal file
BIN
resources/skins/default/media/qrcode_disclaimer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
Loading…
Reference in a new issue