Some checks failed
release / build-release (push) Has been cancelled
- IChannel: creators -> sub-channels -> video posts (public listing API, search mapped) - IRequiresMediaInfoCallback -> signed proxy URLs; stream controller rewrites HLS so the AES-128 key is fetched server-side with the session cookie, segments stay on the CDN - delivery/info cached per token lifetime and throttled (~2/min) - config page: paste sails.sid + validate, extra creators, quality, search test - scripts/package.sh -> plugin folder + zip + md5 + manifest.json; Gitea release workflow - research docs, HAR analysis (HAR itself gitignored), install-pi5.sh Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
65 lines
2.8 KiB
C#
65 lines
2.8 KiB
C#
using MediaBrowser.Model.Plugins;
|
|
|
|
namespace Jellyfin.Plugin.Floatplane.Configuration;
|
|
|
|
/// <summary>
|
|
/// Plugin settings. Serialised to XML by Jellyfin
|
|
/// (<c>plugins/configurations/Floatplane.xml</c>), so keep properties simple and public.
|
|
/// </summary>
|
|
public class PluginConfiguration : BasePluginConfiguration
|
|
{
|
|
/// <summary>
|
|
/// Value of the <c>sails.sid</c> cookie copied from a logged-in browser session.
|
|
/// Floatplane's password login needs a Cloudflare Turnstile token, which a server
|
|
/// cannot obtain, so the session is pasted in. Needed for playback; browsing is public.
|
|
/// </summary>
|
|
public string SessionCookie { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Username reported by Floatplane the last time the cookie was validated (display only).
|
|
/// </summary>
|
|
public string SessionUsername { get; set; } = string.Empty;
|
|
|
|
/// <summary>
|
|
/// Comma-separated creator url-names (e.g. <c>linustechtips</c>) to show in addition to
|
|
/// (or, when not logged in, instead of) the account's subscriptions.
|
|
/// </summary>
|
|
public string ExtraCreators { get; set; } = string.Empty;
|
|
|
|
/// <summary>Preferred quality level name: 360, 480, 720, 1080 or 2160.</summary>
|
|
public string PreferredQuality { get; set; } = "1080";
|
|
|
|
/// <summary>Highest level offered as a version at all (keeps 4K out of the list by default).</summary>
|
|
public int MaxHeight { get; set; } = 1080;
|
|
|
|
/// <summary>How many posts (newest first) are listed per Floatplane channel.</summary>
|
|
public int MaxPostsPerChannel { get; set; } = 100;
|
|
|
|
/// <summary>Show posts the account cannot access (higher tier) as locked items.</summary>
|
|
public bool ShowLockedPosts { get; set; }
|
|
|
|
/// <summary>
|
|
/// Also offer a progressive MP4 version (Floatplane "download" delivery). Experimental:
|
|
/// the download URLs have not been verified to play with the signed token alone.
|
|
/// </summary>
|
|
public bool EnableMp4Sources { get; set; }
|
|
|
|
/// <summary>
|
|
/// Base URL the server's own ffmpeg uses to reach the plugin's stream proxy, e.g.
|
|
/// <c>http://127.0.0.1:8096</c>. Empty = Jellyfin's local API url.
|
|
/// </summary>
|
|
public string ProxyBaseUrl { get; set; } = string.Empty;
|
|
|
|
/// <summary>Budget for <c>/api/v3/delivery/info</c> calls (Floatplane rate-limits ≈2/min).</summary>
|
|
public int DeliveryCallsPerMinute { get; set; } = 2;
|
|
|
|
/// <summary>How long listings are cached inside the plugin before Floatplane is asked again.</summary>
|
|
public int CatalogCacheMinutes { get; set; } = 30;
|
|
|
|
/// <summary>Hours between automatic catalogue refreshes (scheduled task).</summary>
|
|
public int SyncIntervalHours { get; set; } = 6;
|
|
|
|
/// <summary>Report watch progress back to Floatplane (not implemented yet).</summary>
|
|
public bool SyncProgressToFloatplane { get; set; }
|
|
}
|