# Pull Request Template

## Branch
- [x] I branched off beta (not master) to develop this feature/fix

## Description

NixOS Shell added by @Confused-Engineer #321 
Merged capability calls to prevent unexpected connection error #318 
CustomWGT Path cleared after installation #320 

---

## Type of Change

- [x] Bug fix (non-breaking change)
- [x] New feature (non-breaking change)
- [x] Documentation update

---

## Checklist

- [x] My code follows the existing project structure and style  
- [x] I have tested my changes manually  
- [x] I have added necessary documentation (if applicable)  
- [x] I have verified that the installer still works with the underlying
CLI
This commit is contained in:
Patrick
2026-04-11 20:16:44 +02:00
committed by GitHub
5 changed files with 96 additions and 16 deletions

View File

@@ -84,7 +84,7 @@ namespace Jellyfin2Samsung.Helpers
// ----- Application-scoped settings (readonly at runtime) -----
public string ReleasesUrl { get; set; } = "https://api.github.com/repos/jeppevinkel/jellyfin-tizen-builds/releases";
public string AuthorEndpoint { get; set; } = "https://dev.tizen.samsung.com/apis/v2/authors";
public string AppVersion { get; set; } = "v2.2.0.6";
public string AppVersion { get; set; } = "v2.2.0.7";
public string TizenSdb { get; set; } = "https://api.github.com/repos/PatrickSt1991/tizen-sdb/releases";
public string JellyfinAvRelease { get; set; } = "https://api.github.com/repos/PatrickSt1991/tizen-jellyfin-avplay/releases";
public string JellyfinAvReleaseFork { get; set; } = "https://api.github.com/repos/asamahy/tizen-jellyfin-avplay/releases";

View File

@@ -383,8 +383,7 @@ namespace Jellyfin2Samsung.Services
if (string.IsNullOrEmpty(tvDuid))
return null;
string tizenOs = await FetchTizenOsAsync(tvIpAddress);
string sdkToolPath = await FetchSdkPathAsync(tvIpAddress);
var (tizenOs, sdkToolPath) = await FetchCapabilitiesAsync(tvIpAddress);
if (string.IsNullOrEmpty(tizenOs))
tizenOs = Constants.Defaults.TizenOsVersion;
@@ -658,18 +657,17 @@ namespace Jellyfin2Samsung.Services
return output.Output.Split('\n', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault()?.Trim() ?? string.Empty;
}
private async Task<string> FetchTizenOsAsync(string tvIpAddress)
private async Task<(string tizenOs, string sdkToolPath)> FetchCapabilitiesAsync(string tvIpAddress)
{
var output = await _processHelper.RunCommandAsync(TizenSdbPath!, $"capability {tvIpAddress}");
var match = RegexPatterns.TizenCapability.PlatformVersion.Match(output.Output);
return match.Success ? match.Groups[1].Value.Trim() : string.Empty;
}
private async Task<string> FetchSdkPathAsync(string tvIpAddress)
{
var output = await _processHelper.RunCommandAsync(TizenSdbPath!, $"capability {tvIpAddress}");
var match = RegexPatterns.TizenCapability.SdkToolPath.Match(output.Output);
return match.Success ? match.Groups[1].Value.Trim() : Constants.Defaults.SdkToolPath;
var versionMatch = RegexPatterns.TizenCapability.PlatformVersion.Match(output.Output);
string tizenOs = versionMatch.Success ? versionMatch.Groups[1].Value.Trim() : string.Empty;
var pathMatch = RegexPatterns.TizenCapability.SdkToolPath.Match(output.Output);
string sdkToolPath = pathMatch.Success ? pathMatch.Groups[1].Value.Trim() : Constants.Defaults.SdkToolPath;
return (tizenOs, sdkToolPath);
}
private async Task<string> GetTvDuidAsync(string tvIpAddress)

View File

@@ -481,8 +481,7 @@ namespace Jellyfin2Samsung.ViewModels
if (!AppSettings.Default.KeepWGTFile)
_packageHelper.CleanupDownloadedPackage(customPath);
AppSettings.Default.CustomWgtPath = string.Empty;
AppSettings.Default.Save();
CustomWgtPath = string.Empty;
}
else
{

View File

@@ -31,8 +31,8 @@
| Channel | Version | Notes |
|------------|---------------------------------------------------------------------|------------------------------|
| **Stable** | [v2.2.0.4](https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer/releases/tag/v2.2.0.4) | Recommended for most users |
| **Beta** | [v2.2.0.6-beta](https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer/releases/tag/v2.2.0.6-beta) | Includes new features |
| **Stable** | [v2.2.0.6](https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer/releases/tag/v2.2.0.6) | Recommended for most users |
| **Beta** | [v2.2.0.7-beta](https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer/releases/tag/v2.2.0.7-beta) | Includes new features |
<!-- versions:end -->
@@ -56,6 +56,8 @@ Thats it. No manual certificate handling required in most cases.
🎥 Full walkthrough:
https://www.youtube.com/watch?v=_8mSV5pW-ic
**NixOS:** Clone the [`Samsung2Jellyfin` branch](https://github.com/Jellyfin2Samsung/Samsung-Jellyfin-Installer.git) and run `nix-shell` — the shell environment will automatically build and launch the tool.
---
## 📚 Documentation

81
shell.nix Normal file
View File

@@ -0,0 +1,81 @@
{ pkgs ? import <nixpkgs> {} }:
let
krb5WithUnversionedLib = pkgs.runCommand "krb5-unversioned-so" {} ''
mkdir -p $out/lib
ln -s ${pkgs.krb5}/lib/libgssapi_krb5.so.2 $out/lib/libgssapi_krb5.so
'';
# FHS environment that provides /lib, /lib64, /usr/lib etc.
# so dynamically linked binaries (TizenSdb, .NET native bits) just work.
fhs = pkgs.buildFHSEnv {
name = "jellyfin2samsung-fhs";
targetPkgs = p: with p; [
# Build and Run
dotnet-sdk_8
patchelf
file
stdenv.cc.cc.lib
openssl
icu
zlib
libgcc.lib
krb5
krb5WithUnversionedLib
# Fonts and Rendering
fontconfig
freetype
libGL
# X11 tools
xorg.libX11
xorg.libICE
xorg.libSM
xorg.libXext
xorg.libXcursor
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXinerama
xorg.libXcomposite
xorg.libXdamage
xorg.libXfixes
xorg.libXtst
# Some other packages that may be needed if not installed system wide
nmap
iproute2
curl
wget
xdg-utils
];
runScript = pkgs.writeShellScript "jellyfin2samsung-entry" ''
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_NOLOGO=1
dotnet publish Jellyfin2Samsung-CrossOS/Jellyfin2Samsung.csproj \
-c Release \
-r linux-x64 \
--self-contained true \
-p:PublishSingleFile=false \
-p:PublishTrimmed=false
Jellyfin2Samsung-CrossOS/bin/Release/net8.0/linux-x64/publish/Jellyfin2Samsung
'';
};
in
pkgs.mkShell {
name = "jellyfin2samsung";
buildInputs = [
fhs
];
shellHook = ''
jellyfin2samsung-fhs
'';
}