Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reimplement native mode to function client side #938

Merged
merged 5 commits into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@
be8333a80c2650c75444281a9b720da438b2b6d0
# Change indentation of XML and JSON files
7c0e986bd283c764cc16f0c756a03a04e4073ad0
# Tool: black
df4994bef23a1f7175d47ff4632084e153d6077f
12 changes: 11 additions & 1 deletion jellyfin_kodi/entrypoint/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@
JSONRPC,
LazyLogger,
)
from ..helper.utils import JsonDebugPrinter, translate_path, kodi_version
from ..helper.utils import (
JsonDebugPrinter,
translate_path,
kodi_version,
path_replacements,
)
from ..jellyfin import Jellyfin

#################################################################################################
Expand Down Expand Up @@ -167,6 +172,8 @@ def __init__(self):
get_themes(api_client)
elif mode == "managelibs":
manage_libraries()
elif mode == "managepaths":
path_replacements()
elif mode == "backup":
backup()
elif mode == "restartservice":
Expand Down Expand Up @@ -278,6 +285,9 @@ def listing():
)

directory(translate(33194), "plugin://plugin.video.jellyfin/?mode=managelibs", True)
directory(
translate(33203), "plugin://plugin.video.jellyfin/?mode=managepaths", True
)
directory(translate(33134), "plugin://plugin.video.jellyfin/?mode=addserver", False)
directory(translate(33054), "plugin://plugin.video.jellyfin/?mode=adduser", False)
directory(translate(5), "plugin://plugin.video.jellyfin/?mode=settings", False)
Expand Down
17 changes: 17 additions & 0 deletions jellyfin_kodi/helper/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
##################################################################################################

from . import settings, LazyLogger
from .utils import translate_path
import json

##################################################################################################

Expand All @@ -20,6 +22,16 @@ def __init__(self, item, server=None):
self.item = item
self.server = server

addon_data = translate_path(
"special://profile/addon_data/plugin.video.jellyfin/data.json"
)
try:
with open(addon_data, "rb") as infile:
data = json.load(infile)
self.path_data = data["Servers"][0].get("paths", {})
except Exception as e:
LOG.warning("Addon appears to not be configured yet: {}".format(e))

def get_playcount(self, played, playcount):
"""Convert Jellyfin played/playcount into
the Kodi equivalent. The playcount is tied to the watch status.
Expand Down Expand Up @@ -229,6 +241,11 @@ def get_file_path(self, path=None):
protocol = path.split("://")[0]
path = path.replace(protocol, protocol.lower())

# Loop through configured path replacements searching for a match
for local_path in self.path_data.keys():
if local_path in path:
path = path.replace(local_path, self.path_data[local_path])

return path

def get_user_artwork(self, user_id):
Expand Down
42 changes: 42 additions & 0 deletions jellyfin_kodi/helper/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -482,10 +482,52 @@ def set_addon_mode():

if value:
dialog("ok", "{jellyfin}", translate(33145))
path_replacements()

LOG.info("Add-on playback: %s", settings("useDirectPaths") == "0")


def path_replacements():
# UI to display and manage path replacements for native mode
from ..database import get_credentials, save_credentials

# Retrieve existing stored paths
credentials = get_credentials()
if credentials["Servers"]:
paths = credentials["Servers"][0].get("paths", {})
else:
paths = {}
selected_path = 1

# 0 is Finish, -1 is Cancel
while selected_path not in [0, -1]:
replace_paths = [f"{x} : {paths[x]}" for x in paths.keys()]
# Insert a "Finish" entry first, and an "Add" entry second
replace_paths.insert(0, translate(33204))
replace_paths.insert(1, translate(33205))
selected_path = dialog("select", translate(33203), replace_paths)
if selected_path == 1:
# Add a new path replacement
remote_path = dialog("input", translate(33206))
local_path = dialog("input", translate(33207))
if remote_path and local_path:
paths[remote_path] = local_path
elif selected_path > 1:
# Edit an existing path replacement
edit_remote_path = list(paths.keys())[selected_path - 2]
edit_local_path = paths[edit_remote_path]
# Deleting the existing path
del paths[edit_remote_path]
# Prepopulate the text box with the existing value
remote_path = dialog("input", translate(33206), defaultt=edit_remote_path)
local_path = dialog("input", translate(33207), defaultt=edit_local_path)
if remote_path and local_path:
paths[remote_path] = local_path

credentials["Servers"][0]["paths"] = paths
save_credentials(credentials)


class JsonDebugPrinter(object):
"""Helper class to defer converting data to JSON until it is needed.
See: https://github.com/jellyfin/jellyfin-kodi/pull/193
Expand Down
20 changes: 20 additions & 0 deletions resources/language/resource.language.en_gb/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -996,3 +996,23 @@ msgstr "Max artwork resolution"
msgctxt "#33202"
msgid "Transcode H265/HEVC RExt"
msgstr "Transcode H265/HEVC RExt"

msgctxt "#33203"
msgid "Manage path replacements"
msgstr "Manage path replacements"

msgctxt "#33204"
msgid "Finish"
msgstr "Finish"

msgctxt "#33205"
msgid "New Path Replacement"
msgstr "New Path Replacement"

msgctxt "#33206"
msgid "Remote Path"
msgstr "Remote Path"

msgctxt "#33207"
msgid "Local Path"
msgstr "Local Path"
20 changes: 20 additions & 0 deletions resources/language/resource.language.en_us/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -1004,3 +1004,23 @@ msgstr "Max stream bitrate"
msgctxt "#33202"
msgid "Transcode H265/HEVC RExt"
msgstr "Transcode H265/HEVC RExt"

msgctxt "#33203"
msgid "Manage path replacements"
msgstr "Manage path replacements"

msgctxt "#33204"
msgid "Finish"
msgstr "Finish"

msgctxt "#33205"
msgid "New Path Replacement"
msgstr "New Path Replacement"

msgctxt "#33206"
msgid "Remote Path"
msgstr "Remote Path"

msgctxt "#33207"
msgid "Local Path"
msgstr "Local Path"