Compare commits
45 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 577181bb73 | |||
| f0649bf2b5 | |||
| b630801150 | |||
| 99d57fa1f9 | |||
| f7ccef89ef | |||
| d90af02d8b | |||
| 4429451454 | |||
| 313b413fc5 | |||
| 30d0e8641e | |||
| b18b8e0094 | |||
| 66ae5ee093 | |||
| 426dcf964f | |||
| ce58b6993f | |||
| f51e5c3c28 | |||
| e966b5bfa2 | |||
| 9e7e542585 | |||
| 10bb432a14 | |||
| e6b00afc27 | |||
| 60ebe928b0 | |||
| 2482e56fdc | |||
| 290fa837b3 | |||
| 0344163cd5 | |||
| 3a0efadebb | |||
| 8c2ffe006c | |||
| ebf82b8218 | |||
| d9a18d41e3 | |||
| c6e9cc92e8 | |||
| 3ed7b231cc | |||
| 7d26333ce0 | |||
| d9210dcaef | |||
| 0cda25e07a | |||
| be07844e38 | |||
| 5484614cc1 | |||
| 7e67edd64a | |||
| 8ce871a9f7 | |||
| 3acb61d605 | |||
| c621458704 | |||
| aaac00f69a | |||
| afea46a9e1 | |||
| fb64a2e6fe | |||
| a029490fe8 | |||
| 4a057ba83c | |||
| ef6ba710e2 | |||
| 4179ca8ada | |||
| fcbcccaeb9 |
21
CHANGELOG.md
21
CHANGELOG.md
@ -1,5 +1,26 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v2.0.8
|
||||||
|
Released 29th November 2017 (by Heruwar)
|
||||||
|
* Fixes a security issue where the password is sent as plaintext in the URL query parameters when methods from libsonic_extas are used.
|
||||||
|
Also adds Subsonic hex encoding when using legacy auth.
|
||||||
|
* Adds support for URL paths like https://hostname.com/subsonic as requested in Github issue #17 and also encountered in some of the reports (#14 and #5)
|
||||||
|
* Fixes an error when the password only contains digits, which simpleplugin converts to a Long, which later fails when libsonic tries to salt the password expecting a string.
|
||||||
|
|
||||||
|
## v2.0.7
|
||||||
|
Released 18 April 2017
|
||||||
|
* Added Search (by silascutler)
|
||||||
|
|
||||||
|
## v2.0.6
|
||||||
|
Released 14 January 2017
|
||||||
|
* Upgrade to simpleplugin 2.1.0
|
||||||
|
* Browse/Library menus (file structure vs ID3 tags)
|
||||||
|
* Added multilanguage support
|
||||||
|
|
||||||
|
## v2.0.5
|
||||||
|
Released 15 October 2016
|
||||||
|
* Fixed images when listing entries
|
||||||
|
|
||||||
## v2.0.4
|
## v2.0.4
|
||||||
Released 5 October 2016
|
Released 5 October 2016
|
||||||
* Cache (permanently) starred items so we can know everywhere if an item is starred or not without querying it
|
* Cache (permanently) starred items so we can know everywhere if an item is starred or not without querying it
|
||||||
|
|||||||
20
addon.xml
20
addon.xml
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<addon id="plugin.audio.subsonic" name="Subsonic" version="2.0.4" provider-name="BasilFX,grosbouff,lrusak">
|
<addon id="plugin.audio.subsonic" name="Subsonic" version="2.0.8" provider-name="BasilFX,grosbouff,silascutler,Heruwar">
|
||||||
<requires>
|
<requires>
|
||||||
<import addon="xbmc.python" version="2.14.0"/>
|
<import addon="xbmc.python" version="2.14.0"/>
|
||||||
<import addon="script.module.dateutil" version="2.4.2"/>
|
<import addon="script.module.dateutil" version="2.4.2"/>
|
||||||
@ -9,6 +9,8 @@
|
|||||||
</extension>
|
</extension>
|
||||||
<extension point="xbmc.addon.metadata">
|
<extension point="xbmc.addon.metadata">
|
||||||
<summary lang="en">Subsonic music addon for Kodi.</summary>
|
<summary lang="en">Subsonic music addon for Kodi.</summary>
|
||||||
|
<summary lang="fr">Extension Subsonic pour Kodi.</summary>
|
||||||
|
<summary lang="de">Subsonic Musik Addon für Kodi.</summary>
|
||||||
<description lang="en">
|
<description lang="en">
|
||||||
Stream, star and download your tunes, directly to Kodi !
|
Stream, star and download your tunes, directly to Kodi !
|
||||||
For feature requests / issues:
|
For feature requests / issues:
|
||||||
@ -16,8 +18,22 @@
|
|||||||
Contributions are welcome:
|
Contributions are welcome:
|
||||||
https://github.com/gordielachance/plugin.audio.subsonic
|
https://github.com/gordielachance/plugin.audio.subsonic
|
||||||
</description>
|
</description>
|
||||||
|
<description lang="fr">
|
||||||
|
Jouez, marquez vos favoris et téléchargez votre musique, directement dans Kodi !
|
||||||
|
Pour les demandes et problèmes :
|
||||||
|
https://github.com/gordielachance/plugin.audio.subsonic/issues
|
||||||
|
Les contributions sont les bienvenues :
|
||||||
|
https://github.com/gordielachance/plugin.audio.subsonic
|
||||||
|
</description>
|
||||||
|
<description lang="de">
|
||||||
|
Streame, bewerte und downloade deine Medien direkt in Kodi !
|
||||||
|
Für neue Eigentschaften oder Fehler:
|
||||||
|
https://github.com/gordielachance/plugin.audio.subsonic/issues
|
||||||
|
Beihilfe ist Willkommen:
|
||||||
|
https://github.com/gordielachance/plugin.audio.subsonic
|
||||||
|
</description>
|
||||||
<disclaimer lang="en"></disclaimer>
|
<disclaimer lang="en"></disclaimer>
|
||||||
<language>en</language>
|
<language>multi</language>
|
||||||
<platform>all</platform>
|
<platform>all</platform>
|
||||||
<license>MIT</license>
|
<license>MIT</license>
|
||||||
<forum></forum>
|
<forum></forum>
|
||||||
|
|||||||
@ -60,10 +60,11 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
# Pick a default port
|
# Pick a default port
|
||||||
host = "%s://%s" % (scheme, parts.hostname)
|
host = "%s://%s" % (scheme, parts.hostname)
|
||||||
port = parts.port or {"http": 80, "https": 443}[scheme]
|
port = parts.port or {"http": 80, "https": 443}[scheme]
|
||||||
|
path = parts.path.rstrip('/') + '/rest'
|
||||||
|
|
||||||
# Invoke original constructor
|
# Invoke original constructor
|
||||||
super(SubsonicClient, self).__init__(
|
super(SubsonicClient, self).__init__(
|
||||||
host, username, password, port=port, appName='Kodi', apiVersion=apiversion, insecure=insecure, legacyAuth=legacyauth)
|
host, username, password, port=port, serverPath=path, appName='Kodi', apiVersion=apiversion, insecure=insecure, legacyAuth=legacyauth)
|
||||||
|
|
||||||
def getIndexes(self, *args, **kwargs):
|
def getIndexes(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
@ -140,6 +141,7 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def getArtists(self, *args, **kwargs):
|
def getArtists(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
(ID3 tags)
|
||||||
Improve the getArtists method. Ensures IDs are integers.
|
Improve the getArtists method. Ensures IDs are integers.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -162,6 +164,7 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def getArtist(self, *args, **kwargs):
|
def getArtist(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
(ID3 tags)
|
||||||
Improve the getArtist method. Ensures IDs are integers.
|
Improve the getArtist method. Ensures IDs are integers.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -209,6 +212,7 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def getAlbum(self, *args, **kwargs):
|
def getAlbum(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
(ID3 tags)
|
||||||
Improve the getAlbum method. Ensures the IDs are real integers.
|
Improve the getAlbum method. Ensures the IDs are real integers.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -289,31 +293,25 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
parts = list(urlparse.urlparse(
|
parts = list(urlparse.urlparse(
|
||||||
args[0].get_full_url() + "?" + args[0].data))
|
args[0].get_full_url() + "?" + args[0].data))
|
||||||
parts[4] = dict(urlparse.parse_qsl(parts[4]))
|
parts[4] = dict(urlparse.parse_qsl(parts[4]))
|
||||||
parts[4].update({"u": self.username, "p": self.password})
|
if self._legacyAuth:
|
||||||
|
parts[4].update({"u": self.username, "p": 'enc:%s' % self._hexEnc(self._rawPass)})
|
||||||
parts[4] = urllib.urlencode(parts[4])
|
parts[4] = urllib.urlencode(parts[4])
|
||||||
|
|
||||||
return urlparse.urlunparse(parts)
|
return urlparse.urlunparse(parts)
|
||||||
else:
|
else:
|
||||||
return super(SubsonicClient, self)._doBinReq(*args, **kwargs)
|
return super(SubsonicClient, self)._doBinReq(*args, **kwargs)
|
||||||
|
|
||||||
def walk_index(self):
|
def walk_index(self, folder_id=None):
|
||||||
"""
|
"""
|
||||||
Request Subsonic's index and iterate each item.
|
Request Subsonic's index and iterate each item.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
response = self.getIndexes()
|
response = self.getIndexes(folder_id)
|
||||||
|
|
||||||
for index in response["indexes"]["index"]:
|
for index in response["indexes"]["index"]:
|
||||||
for index in index["artist"]:
|
for artist in index["artist"]:
|
||||||
for item in self.walk_directory(index["id"]):
|
yield artist
|
||||||
yield item
|
|
||||||
|
|
||||||
for child in response["indexes"]["child"]:
|
|
||||||
if child.get("isDir"):
|
|
||||||
for child in self.walk_directory(child["id"]):
|
|
||||||
yield child
|
|
||||||
else:
|
|
||||||
yield child
|
|
||||||
|
|
||||||
def walk_playlists(self):
|
def walk_playlists(self):
|
||||||
"""
|
"""
|
||||||
@ -335,6 +333,12 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
for child in response["playlist"]["entry"]:
|
for child in response["playlist"]["entry"]:
|
||||||
yield child
|
yield child
|
||||||
|
|
||||||
|
def walk_folders(self):
|
||||||
|
response = self.getMusicFolders()
|
||||||
|
|
||||||
|
for child in response["musicFolders"]["musicFolder"]:
|
||||||
|
yield child
|
||||||
|
|
||||||
def walk_directory(self, directory_id):
|
def walk_directory(self, directory_id):
|
||||||
"""
|
"""
|
||||||
Request a Subsonic music directory and iterate over each item.
|
Request a Subsonic music directory and iterate over each item.
|
||||||
@ -361,6 +365,7 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def walk_artists(self):
|
def walk_artists(self):
|
||||||
"""
|
"""
|
||||||
|
(ID3 tags)
|
||||||
Request all artists and iterate over each item.
|
Request all artists and iterate over each item.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -372,6 +377,7 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def walk_genres(self):
|
def walk_genres(self):
|
||||||
"""
|
"""
|
||||||
|
(ID3 tags)
|
||||||
Request all genres and iterate over each item.
|
Request all genres and iterate over each item.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -382,6 +388,7 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def walk_albums(self, ltype, size=None, fromYear=None,toYear=None, genre=None, offset=None):
|
def walk_albums(self, ltype, size=None, fromYear=None,toYear=None, genre=None, offset=None):
|
||||||
"""
|
"""
|
||||||
|
(ID3 tags)
|
||||||
Request all albums for a given genre and iterate over each album.
|
Request all albums for a given genre and iterate over each album.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -403,7 +410,8 @@ class SubsonicClient(libsonic.Connection):
|
|||||||
|
|
||||||
def walk_album(self, album_id):
|
def walk_album(self, album_id):
|
||||||
"""
|
"""
|
||||||
Request an alum and iterate over each item.
|
(ID3 tags)
|
||||||
|
Request an album and iterate over each item.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
response = self.getAlbum(album_id)
|
response = self.getAlbum(album_id)
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
#v2.0.1
|
#v2.1.0
|
||||||
#https://github.com/romanvm/script.module.simpleplugin/releases
|
#https://github.com/romanvm/script.module.simpleplugin/releases
|
||||||
|
|
||||||
from simpleplugin import *
|
from simpleplugin import *
|
||||||
@ -267,6 +267,16 @@ class Addon(object):
|
|||||||
"""
|
"""
|
||||||
return self._configdir
|
return self._configdir
|
||||||
|
|
||||||
|
@property
|
||||||
|
def version(self):
|
||||||
|
"""
|
||||||
|
Addon version
|
||||||
|
|
||||||
|
:return: addon version
|
||||||
|
:rtype: str
|
||||||
|
"""
|
||||||
|
return self._addon.getAddonInfo('version')
|
||||||
|
|
||||||
def get_localized_string(self, id_):
|
def get_localized_string(self, id_):
|
||||||
"""
|
"""
|
||||||
Get localized UI string
|
Get localized UI string
|
||||||
@ -274,7 +284,7 @@ class Addon(object):
|
|||||||
:param id_: UI string ID
|
:param id_: UI string ID
|
||||||
:type id_: int
|
:type id_: int
|
||||||
:return: UI string in the current language
|
:return: UI string in the current language
|
||||||
:rtype: unicode
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
return self._addon.getLocalizedString(id_).encode('utf-8')
|
return self._addon.getLocalizedString(id_).encode('utf-8')
|
||||||
|
|
||||||
@ -327,7 +337,7 @@ class Addon(object):
|
|||||||
value = str(value)
|
value = str(value)
|
||||||
self._addon.setSetting(id_, value)
|
self._addon.setSetting(id_, value)
|
||||||
|
|
||||||
def log(self, message, level=0):
|
def log(self, message, level=xbmc.LOGDEBUG):
|
||||||
"""
|
"""
|
||||||
Add message to Kodi log starting with Addon ID
|
Add message to Kodi log starting with Addon ID
|
||||||
|
|
||||||
@ -339,7 +349,7 @@ class Addon(object):
|
|||||||
"""
|
"""
|
||||||
if isinstance(message, unicode):
|
if isinstance(message, unicode):
|
||||||
message = message.encode('utf-8')
|
message = message.encode('utf-8')
|
||||||
xbmc.log('{0}: {1}'.format(self.id, message), level)
|
xbmc.log('{0} [v.{1}]: {2}'.format(self.id, self.version, message), level)
|
||||||
|
|
||||||
def log_notice(self, message):
|
def log_notice(self, message):
|
||||||
"""
|
"""
|
||||||
@ -879,7 +889,6 @@ class Plugin(Addon):
|
|||||||
self.log_debug('Creating listing from {0}'.format(str(context)))
|
self.log_debug('Creating listing from {0}'.format(str(context)))
|
||||||
if context.content is not None:
|
if context.content is not None:
|
||||||
xbmcplugin.setContent(self._handle, context.content) # This must be at the beginning
|
xbmcplugin.setContent(self._handle, context.content) # This must be at the beginning
|
||||||
listing = []
|
|
||||||
for item in context.listing:
|
for item in context.listing:
|
||||||
is_folder = item.get('is_folder', True)
|
is_folder = item.get('is_folder', True)
|
||||||
if item.get('list_item') is not None:
|
if item.get('list_item') is not None:
|
||||||
@ -889,8 +898,7 @@ class Plugin(Addon):
|
|||||||
if item.get('is_playable'):
|
if item.get('is_playable'):
|
||||||
list_item.setProperty('IsPlayable', 'true')
|
list_item.setProperty('IsPlayable', 'true')
|
||||||
is_folder = False
|
is_folder = False
|
||||||
listing.append((item['url'], list_item, is_folder))
|
xbmcplugin.addDirectoryItem(self._handle, item['url'], list_item, is_folder)
|
||||||
xbmcplugin.addDirectoryItems(self._handle, listing, len(listing))
|
|
||||||
if context.sort_methods is not None:
|
if context.sort_methods is not None:
|
||||||
[xbmcplugin.addSortMethod(self._handle, method) for method in context.sort_methods]
|
[xbmcplugin.addSortMethod(self._handle, method) for method in context.sort_methods]
|
||||||
xbmcplugin.endOfDirectory(self._handle,
|
xbmcplugin.endOfDirectory(self._handle,
|
||||||
|
|||||||
160
resources/language/English/strings.po
Normal file
160
resources/language/English/strings.po
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
# XBMC Media Center language file
|
||||||
|
# Addon Name: Subsonic
|
||||||
|
# Addon id: plugin.audio.subsonic
|
||||||
|
# Addon Provider:
|
||||||
|
# Addon Translate: Moshkopp
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
|
||||||
|
msgctxt "#30000"
|
||||||
|
msgid "General"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30001"
|
||||||
|
msgid "Server"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30002"
|
||||||
|
msgid "Server URL"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30003"
|
||||||
|
msgid "Username"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30004"
|
||||||
|
msgid "Password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30005"
|
||||||
|
msgid "Display"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30006"
|
||||||
|
msgid "Albums per page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30007"
|
||||||
|
msgid "Tracks per page (ignored in albums & playlists)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30008"
|
||||||
|
msgid "Download"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30009"
|
||||||
|
msgid "Download folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30010"
|
||||||
|
msgid "Streaming"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30011"
|
||||||
|
msgid "Transcode format"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30012"
|
||||||
|
msgid "Bitrate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30013"
|
||||||
|
msgid "Advanced Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30014"
|
||||||
|
msgid "API version"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30016"
|
||||||
|
msgid "Allow self signed certificates"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30017"
|
||||||
|
msgid "Cache (in minutes)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30018"
|
||||||
|
msgid "Cache datas time"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30019"
|
||||||
|
msgid "Library"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30020"
|
||||||
|
msgid "Albums"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30021"
|
||||||
|
msgid "Tracks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30022"
|
||||||
|
msgid "Playlists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30023"
|
||||||
|
msgid "Newest albums"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30024"
|
||||||
|
msgid "Most played albums"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30025"
|
||||||
|
msgid "Recently played albums"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30026"
|
||||||
|
msgid "Random albums"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30029"
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
|
||||||
|
msgctxt "#30030"
|
||||||
|
msgid "Back to Menu"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30031"
|
||||||
|
msgid "Item has been unstarred."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30032"
|
||||||
|
msgid "Item has been starred!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30033"
|
||||||
|
msgid "Star on Subsonic"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30034"
|
||||||
|
msgid "Unstar on Subsonic"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30035"
|
||||||
|
msgid "Download"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30036"
|
||||||
|
msgid "Starred tracks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30037"
|
||||||
|
msgid "Random tracks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30038"
|
||||||
|
msgid "Browse"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgctxt "#30039"
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
|
||||||
160
resources/language/French/strings.po
Normal file
160
resources/language/French/strings.po
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
# XBMC Media Center language file
|
||||||
|
# Addon Name: Subsonic
|
||||||
|
# Addon id: plugin.audio.subsonic
|
||||||
|
# Addon Provider:
|
||||||
|
# Addon Translate: Gordie
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
|
||||||
|
msgctxt "#30000"
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Général"
|
||||||
|
|
||||||
|
msgctxt "#30001"
|
||||||
|
msgid "Server"
|
||||||
|
msgstr "Serveur"
|
||||||
|
|
||||||
|
msgctxt "#30002"
|
||||||
|
msgid "Server URL"
|
||||||
|
msgstr "URL du serveur"
|
||||||
|
|
||||||
|
msgctxt "#30003"
|
||||||
|
msgid "Username"
|
||||||
|
msgstr "Nom d'utilisateur"
|
||||||
|
|
||||||
|
msgctxt "#30004"
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Mot de passe"
|
||||||
|
|
||||||
|
msgctxt "#30005"
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Affichage"
|
||||||
|
|
||||||
|
msgctxt "#30006"
|
||||||
|
msgid "Albums per page"
|
||||||
|
msgstr "Albums par page"
|
||||||
|
|
||||||
|
msgctxt "#30007"
|
||||||
|
msgid "Tracks per page (ignored in albums & playlists)"
|
||||||
|
msgstr "Pistes par page (ignoré dans les albums & listes de lecture)"
|
||||||
|
|
||||||
|
msgctxt "#30008"
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Télécharger"
|
||||||
|
|
||||||
|
msgctxt "#30009"
|
||||||
|
msgid "Download folder"
|
||||||
|
msgstr "Répertoire de téléchargement"
|
||||||
|
|
||||||
|
msgctxt "#30010"
|
||||||
|
msgid "Streaming"
|
||||||
|
msgstr "Diffusion"
|
||||||
|
|
||||||
|
msgctxt "#30011"
|
||||||
|
msgid "Transcode format"
|
||||||
|
msgstr "Format de transcodage"
|
||||||
|
|
||||||
|
msgctxt "#30012"
|
||||||
|
msgid "Bitrate"
|
||||||
|
msgstr "Bitrate"
|
||||||
|
|
||||||
|
msgctxt "#30013"
|
||||||
|
msgid "Advanced Settings"
|
||||||
|
msgstr "Paramètres avancés"
|
||||||
|
|
||||||
|
msgctxt "#30014"
|
||||||
|
msgid "API version"
|
||||||
|
msgstr "Version de l'API"
|
||||||
|
|
||||||
|
msgctxt "#30016"
|
||||||
|
msgid "Allow self signed certificates"
|
||||||
|
msgstr "Autoriser les certificats auto-signés"
|
||||||
|
|
||||||
|
msgctxt "#30017"
|
||||||
|
msgid "Cache (in minutes)"
|
||||||
|
msgstr "Cache (en minutes)"
|
||||||
|
|
||||||
|
msgctxt "#30018"
|
||||||
|
msgid "Cache datas time"
|
||||||
|
msgstr "Durée du cache pour les données"
|
||||||
|
|
||||||
|
msgctxt "#30019"
|
||||||
|
msgid "Library"
|
||||||
|
msgstr "Bibliothèque"
|
||||||
|
|
||||||
|
msgctxt "#30020"
|
||||||
|
msgid "Albums"
|
||||||
|
msgstr "Albums"
|
||||||
|
|
||||||
|
msgctxt "#30021"
|
||||||
|
msgid "Tracks"
|
||||||
|
msgstr "Pistes"
|
||||||
|
|
||||||
|
msgctxt "#30022"
|
||||||
|
msgid "Playlists"
|
||||||
|
msgstr "Playlists"
|
||||||
|
|
||||||
|
msgctxt "#30023"
|
||||||
|
msgid "Newest albums"
|
||||||
|
msgstr "Nouveaux albums"
|
||||||
|
|
||||||
|
msgctxt "#30024"
|
||||||
|
msgid "Most played albums"
|
||||||
|
msgstr "Albums les plus joués"
|
||||||
|
|
||||||
|
msgctxt "#30025"
|
||||||
|
msgid "Recently played albums"
|
||||||
|
msgstr "Albums joués récemment"
|
||||||
|
|
||||||
|
msgctxt "#30026"
|
||||||
|
msgid "Random albums"
|
||||||
|
msgstr "Albums au hasard"
|
||||||
|
|
||||||
|
msgctxt "#30029"
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "Page suivante"
|
||||||
|
|
||||||
|
msgctxt "#30030"
|
||||||
|
msgid "Back to Menu"
|
||||||
|
msgstr "Retour au menu"
|
||||||
|
|
||||||
|
msgctxt "#30031"
|
||||||
|
msgid "Item has been unstarred."
|
||||||
|
msgstr "Cet élément a été retiré des favoris"
|
||||||
|
|
||||||
|
msgctxt "#30032"
|
||||||
|
msgid "Item has been starred!"
|
||||||
|
msgstr "Cet élément a été ajouté aux favoris !"
|
||||||
|
|
||||||
|
msgctxt "#30033"
|
||||||
|
msgid "Star on Subsonic"
|
||||||
|
msgstr "Ajouter aux favoris Subsonic"
|
||||||
|
|
||||||
|
msgctxt "#30034"
|
||||||
|
msgid "Unstar on Subsonic"
|
||||||
|
msgstr "Retirer des favoris Subsonic"
|
||||||
|
|
||||||
|
msgctxt "#30035"
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Télécharger"
|
||||||
|
|
||||||
|
msgctxt "#30036"
|
||||||
|
msgid "Starred tracks"
|
||||||
|
msgstr "Pistes favorites"
|
||||||
|
|
||||||
|
msgctxt "#30037"
|
||||||
|
msgid "Random tracks"
|
||||||
|
msgstr "Pistes au hasard"
|
||||||
|
|
||||||
|
msgctxt "#30038"
|
||||||
|
msgid "Browse"
|
||||||
|
msgstr "Parcourir"
|
||||||
|
|
||||||
|
|
||||||
|
msgctxt "#30039"
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Rechercher"
|
||||||
|
|
||||||
|
|
||||||
157
resources/language/German/strings.po
Normal file
157
resources/language/German/strings.po
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
# XBMC Media Center language file
|
||||||
|
# Addon Name: Subsonic
|
||||||
|
# Addon id: plugin.audio.subsonic
|
||||||
|
# Addon Provider:
|
||||||
|
# Addon Translate: Moshkopp
|
||||||
|
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
|
||||||
|
msgctxt "#30000"
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Allgemein"
|
||||||
|
|
||||||
|
msgctxt "#30001"
|
||||||
|
msgid "Server"
|
||||||
|
msgstr "Server"
|
||||||
|
|
||||||
|
msgctxt "#30002"
|
||||||
|
msgid "Server URL"
|
||||||
|
msgstr "Serveradresse"
|
||||||
|
|
||||||
|
msgctxt "#30003"
|
||||||
|
msgid "Username"
|
||||||
|
msgstr "Benutzername"
|
||||||
|
|
||||||
|
msgctxt "#30004"
|
||||||
|
msgid "Password"
|
||||||
|
msgstr "Passwort"
|
||||||
|
|
||||||
|
msgctxt "#30005"
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Anzeige"
|
||||||
|
|
||||||
|
msgctxt "#30006"
|
||||||
|
msgid "Albums per page"
|
||||||
|
msgstr "Alben pro Seite"
|
||||||
|
|
||||||
|
msgctxt "#30007"
|
||||||
|
msgid "Tracks per page (ignored in albums & playlists)"
|
||||||
|
msgstr "Lieder pro Seite (wird in Alben und Playlisten ignoriert)"
|
||||||
|
|
||||||
|
msgctxt "#30008"
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Download"
|
||||||
|
|
||||||
|
msgctxt "#30009"
|
||||||
|
msgid "Download folder"
|
||||||
|
msgstr "Download Verzeichnis"
|
||||||
|
|
||||||
|
msgctxt "#30010"
|
||||||
|
msgid "Streaming"
|
||||||
|
msgstr "Übertragung"
|
||||||
|
|
||||||
|
msgctxt "#30011"
|
||||||
|
msgid "Transcode format"
|
||||||
|
msgstr "Umwandlungs Format"
|
||||||
|
|
||||||
|
msgctxt "#30012"
|
||||||
|
msgid "Bitrate"
|
||||||
|
msgstr "Bitrate"
|
||||||
|
|
||||||
|
msgctxt "#30013"
|
||||||
|
msgid "Advanced Settings"
|
||||||
|
msgstr "Erweitert"
|
||||||
|
|
||||||
|
msgctxt "#30014"
|
||||||
|
msgid "API version"
|
||||||
|
msgstr "API Version"
|
||||||
|
|
||||||
|
msgctxt "#30016"
|
||||||
|
msgid "Allow self signed certificates"
|
||||||
|
msgstr "Erlaube eigensignierte Zertifikate"
|
||||||
|
|
||||||
|
msgctxt "#30017"
|
||||||
|
msgid "Cache (in minutes)"
|
||||||
|
msgstr "Speicher (in Minuten)"
|
||||||
|
|
||||||
|
msgctxt "#30018"
|
||||||
|
msgid "Cache datas time"
|
||||||
|
msgstr "Speicher Daten Zeit"
|
||||||
|
|
||||||
|
msgctxt "#30019"
|
||||||
|
msgid "Library"
|
||||||
|
msgstr "Bibliothek"
|
||||||
|
|
||||||
|
msgctxt "#30020"
|
||||||
|
msgid "Albums"
|
||||||
|
msgstr "Alben"
|
||||||
|
|
||||||
|
msgctxt "#30021"
|
||||||
|
msgid "Tracks"
|
||||||
|
msgstr "Lieder"
|
||||||
|
|
||||||
|
msgctxt "#30022"
|
||||||
|
msgid "Playlists"
|
||||||
|
msgstr "Playlisten"
|
||||||
|
|
||||||
|
msgctxt "#30023"
|
||||||
|
msgid "Newest albums"
|
||||||
|
msgstr "Neueste Alben"
|
||||||
|
|
||||||
|
msgctxt "#30024"
|
||||||
|
msgid "Most played albums"
|
||||||
|
msgstr "Häufig gehörte Alben"
|
||||||
|
|
||||||
|
msgctxt "#30025"
|
||||||
|
msgid "Recently played albums"
|
||||||
|
msgstr "Zuletzt gehörte Alben"
|
||||||
|
|
||||||
|
msgctxt "#30026"
|
||||||
|
msgid "Random albums"
|
||||||
|
msgstr "Zufällige Alben"
|
||||||
|
|
||||||
|
msgctxt "#30029"
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "Nächste Seite"
|
||||||
|
|
||||||
|
msgctxt "#30030"
|
||||||
|
msgid "Back to Menu"
|
||||||
|
msgstr "Hauptmenü"
|
||||||
|
|
||||||
|
msgctxt "#30031"
|
||||||
|
msgid "Item has been unstarred."
|
||||||
|
msgstr "Bewertung entfernt"
|
||||||
|
|
||||||
|
msgctxt "#30032"
|
||||||
|
msgid "Item has been starred!"
|
||||||
|
msgstr "Bewertung hinzugefügt"
|
||||||
|
|
||||||
|
msgctxt "#30033"
|
||||||
|
msgid "Star on Subsonic"
|
||||||
|
msgstr "Bewerten auf Subsonic"
|
||||||
|
|
||||||
|
msgctxt "#30034"
|
||||||
|
msgid "Unstar on Subsonic"
|
||||||
|
msgstr "Löschen auf Subsonic"
|
||||||
|
|
||||||
|
msgctxt "#30035"
|
||||||
|
msgid "Download"
|
||||||
|
msgstr "Herunterladen"
|
||||||
|
|
||||||
|
msgctxt "#30036"
|
||||||
|
msgid "Starred tracks"
|
||||||
|
msgstr "Lieblings lieder"
|
||||||
|
|
||||||
|
msgctxt "#30037"
|
||||||
|
msgid "Random tracks"
|
||||||
|
msgstr "Zufällig lieder"
|
||||||
|
|
||||||
|
msgctxt "#30038"
|
||||||
|
msgid "Browse"
|
||||||
|
msgstr "Durchsuchen"
|
||||||
|
|
||||||
|
msgctxt "#30039"
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Suche"
|
||||||
@ -1,27 +1,28 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
<settings>
|
<settings>
|
||||||
<!-- GENERAL -->
|
<!-- GENERAL -->
|
||||||
<category label="General">
|
<category label="30000">
|
||||||
<setting label="Server" type="lsep" />
|
<setting label="30001" type="lsep" />
|
||||||
<setting id="subsonic_url" type="text" label="Server URL" default="http://demo.subsonic.org"/>
|
<setting label="30002" id="subsonic_url" type="text" default="http://demo.subsonic.org"/>
|
||||||
<setting id="username" type="text" label="Username" default="guest3"/>
|
<setting label="30003" id="username" type="text" default="guest3"/>
|
||||||
<setting id="password" type="text" option="hidden" label="Password" default="guest"/>
|
<setting label="30004" id="password" type="text" option="hidden" default="guest"/>
|
||||||
<setting label="Display" type="lsep" />
|
<setting label="30005" type="lsep" />
|
||||||
<setting id="albums_per_page" type="labelenum" label="Albums per page" default="50" values="10|25|50|100|250|500"/>
|
<setting label="30006" id="albums_per_page" type="labelenum" default="50" values="10|25|50|100|250|500"/>
|
||||||
<setting id="tracks_per_page" type="labelenum" label="Tracks per page (ignored in albums & playlists)" default="100" values="10|25|50|100|250|500"/>
|
<setting label="30007" id="tracks_per_page" type="labelenum" default="100" values="10|25|50|100|250|500"/>
|
||||||
<setting label="Download" type="lsep" />
|
<setting label="30008" type="lsep" />
|
||||||
<setting id="download_folder" type="folder" label="Download folder" source="auto" option="writeable"/>
|
<setting label="30009" id="download_folder" type="folder" source="auto" option="writeable"/>
|
||||||
<setting label="Streaming" type="lsep" />
|
<setting label="30010" type="lsep" />
|
||||||
<setting id="transcode_format_streaming" type="labelenum" label="Transcode format" values="mp3|raw|flv|ogg"/>
|
<setting label="30011" id="transcode_format_streaming" type="labelenum" values="mp3|raw|flv|ogg"/>
|
||||||
<setting id="bitrate_streaming" type="labelenum" label="Bitrate" values="320|256|224|192|160|128|112|96|80|64|56|48|40|32"/>
|
<setting label="30012" id="bitrate_streaming" type="labelenum" values="320|256|224|192|160|128|112|96|80|64|56|48|40|32"/>
|
||||||
</category>
|
</category>
|
||||||
|
|
||||||
<!-- ADVANCED -->
|
<!-- ADVANCED -->
|
||||||
<category label="Advanced Settings">
|
<category label="30013">
|
||||||
<setting label="Server" type="lsep" />
|
<setting label="30001" type="lsep" />
|
||||||
<setting id="apiversion" type="labelenum" label="API version" values="1.11.0|1.12.0|1.13.0|1.14.0" default="1.13.0"/>
|
<setting label="30014" id="apiversion" type="labelenum" values="1.11.0|1.12.0|1.13.0|1.14.0" default="1.13.0"/>
|
||||||
<setting id="insecure" type="bool" label="Allow self signed certificates" default="false" />
|
<setting label="30016" id="insecure" type="bool" default="false" />
|
||||||
<setting label="Cache (in minutes) - not yet implemented" type="lsep" />
|
<setting label="30017" type="lsep" />
|
||||||
<setting id="cachetime" type="labelenum" label="Cache datas time" default="5" values="1|5|15|30|60|120|180|720|1440"/>
|
<setting label="30018" id="cachetime" type="labelenum" default="15" values="1|5|15|30|60|120|180|720|1440"/>
|
||||||
|
|
||||||
</category>
|
</category>
|
||||||
</settings>
|
</settings>
|
||||||
|
|||||||
Reference in New Issue
Block a user