webclient

package
v0.3.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 14, 2026 License: GPL-3.0 Imports: 18 Imported by: 0

Documentation

Overview

Package webclient provides the official Jellyfin Web build that the native Jellyfin apps (Android, iOS/iPadOS, Desktop, webOS, Xbox) load from <server>/web/. Nothing is bundled: the pinned .deb is downloaded from repo.jellyfin.org when Jellyfin is turned on and cached under the data directory.

Index

Constants

View Source
const (
	Version = "12.4"
	URL     = "https://repo.jellyfin.org/files/server/debian/stable/v12.4/amd64/jellyfin-web_12.4%2Bdeb13_all.deb"
	SHA256  = "30561fda7e4ec2f48cfc86119b7bdf7f9fe319ebdc22069a5096ba4999198b64"
	Size    = 32062514
)

Pinned artifact. One place, so an upgrade is a single edit. The URL is the stable Debian pool path; repo.jellyfin.org redirects it to a mirror, so the downloader must follow redirects (HTTPS only).

Variables

This section is empty.

Functions

func AdaptSubtitles

func AdaptSubtitles(name string, raw []byte) ([]byte, error)

AdaptSubtitles adds an explicit progressive-text capability and a reader for it to the pinned client. Changes are made in memory, leaving the verified upstream install intact. Exact anchors fail closed on an upstream upgrade.

func Extract

func Extract(r io.ReaderAt, dstDir string) error

Extract unpacks the Jellyfin Web files from a .deb read at the start of r into dstDir. It reads only the "data.tar.xz" member and refuses anything outside the web prefix. dstDir must already exist.

func SubtitleAdapterAsset

func SubtitleAdapterAsset(name string) bool

Types

type Installer

type Installer struct {
	// Dir is the install root: Dir/Version holds the extracted files, and a
	// ".complete" marker beside it records the verified version and sha.
	Dir string
	// HTTP downloads the artifact. It should go through Ether's egress when a
	// client is available to the caller; nil falls back to a plain client.
	HTTP *http.Client

	// Overridable in tests; they default to the pinned constants.
	URL    string
	SHA256 string
	Size   int64
	// contains filtered or unexported fields
}

Installer fetches, verifies and caches the pinned Jellyfin Web build. The zero value is unusable; construct with New.

func New

func New(dir string, httpClient *http.Client) *Installer

VerifyState proves the pinned artifact is trustworthy and reports whether a file's sha256 matches. It is used by the extractor and by tests.

func (*Installer) Begin

func (in *Installer) Begin() (Status, error)

Begin starts the first install in the background if none is present or running, and reports the current state. It never blocks on the download, so a request handler can answer a "preparing" page while it runs. Concurrent calls share one download.

func (*Installer) Ensure

func (in *Installer) Ensure(ctx context.Context) (string, error)

Ensure returns the directory holding the extracted build, installing it on first use. Concurrent callers share a single download. After a failure the error is remembered for backoffDelay; callers within that window receive the same error without another attempt.

func (*Installer) State

func (in *Installer) State() (Status, error)

State reports the current status without starting any work. Err is non-nil only for StatusFailed and carries owner-facing text.

type Status

type Status int

Status is the observable state of the local install.

const (
	// StatusReady means a verified install is present.
	StatusReady Status = iota
	// StatusDownloading means the first download is in progress.
	StatusDownloading
	// StatusFailed means the last download or extraction failed.
	StatusFailed
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL