source_data_SessionDataTransformer.bs
import "pkg:/source/utils/misc.bs"
' Transforms the user's server-side Configuration and Policy to content nodes (called by user.Login)
class SessionDataTransformer
sub new()
end sub
' Transform user configuration to JellyfinUserConfiguration content node
' Configuration is SERVER-AUTHORITATIVE and should never be loaded from registry
function transformUserConfiguration(configData as object) as object
config = CreateObject("roSGNode", "JellyfinUserConfiguration")
if not isValid(configData)
return config
end if
' Audio Settings
config.audioLanguagePreference = configData.AudioLanguagePreference ?? ""
config.playDefaultAudioTrack = configData.PlayDefaultAudioTrack ?? true
config.rememberAudioSelections = configData.RememberAudioSelections ?? false
' Subtitle Settings
config.subtitleMode = configData.SubtitleMode ?? "Default"
config.subtitleLanguagePreference = configData.SubtitleLanguagePreference ?? ""
config.rememberSubtitleSelections = configData.RememberSubtitleSelections ?? false
' Display Settings
config.displayMissingEpisodes = configData.DisplayMissingEpisodes ?? false
config.displayCollectionsView = configData.DisplayCollectionsView ?? false
config.hidePlayedInLatest = configData.HidePlayedInLatest ?? true
config.useEpisodeImagesInNextUpAndResume = configData.useEpisodeImagesInNextUpAndResume ?? false
' Playback Settings
config.enableNextEpisodeAutoPlay = configData.EnableNextEpisodeAutoPlay ?? false
' View Organization
config.orderedViews = configData.OrderedViews ?? []
config.latestItemsExcludes = configData.LatestItemsExcludes ?? []
config.myMediaExcludes = configData.MyMediaExcludes ?? []
config.groupedFolders = configData.GroupedFolders ?? []
' Other Settings
config.castReceiverId = configData.CastReceiverId ?? ""
config.enableLocalPassword = configData.EnableLocalPassword ?? false
#if debug
config.rawConfigData = configData
#end if
return config
end function
' Transform user policy to JellyfinUserPolicy content node
' Policy is SERVER-AUTHORITATIVE and should never be loaded from registry
function transformUserPolicy(policyData as object) as object
policy = CreateObject("roSGNode", "JellyfinUserPolicy")
if not isValid(policyData)
return policy
end if
' User Status
policy.isAdministrator = policyData.IsAdministrator ?? false
policy.isDisabled = policyData.IsDisabled ?? false
policy.isHidden = policyData.IsHidden ?? false
' Authentication Settings
policy.authenticationProviderId = policyData.AuthenticationProviderId ?? ""
policy.passwordResetProviderId = policyData.PasswordResetProviderId ?? ""
policy.invalidLoginAttemptCount = policyData.InvalidLoginAttemptCount ?? 0
policy.loginAttemptsBeforeLockout = policyData.LoginAttemptsBeforeLockout ?? - 1
' Media Playback Permissions
policy.enableMediaPlayback = policyData.EnableMediaPlayback ?? true
policy.enableAudioPlaybackTranscoding = policyData.EnableAudioPlaybackTranscoding ?? true
policy.enableVideoPlaybackTranscoding = policyData.EnableVideoPlaybackTranscoding ?? true
policy.enablePlaybackRemuxing = policyData.EnablePlaybackRemuxing ?? true
policy.forceRemoteSourceTranscoding = policyData.ForceRemoteSourceTranscoding ?? false
' Content Access Permissions
policy.enableAllFolders = policyData.EnableAllFolders ?? false
policy.enabledFolders = policyData.EnabledFolders ?? []
policy.enableContentDownloading = policyData.EnableContentDownloading ?? true
policy.enableContentDeletion = policyData.EnableContentDeletion ?? false
policy.enableContentDeletionFromFolders = policyData.EnableContentDeletionFromFolders ?? []
' Live TV Permissions
policy.enableLiveTvAccess = policyData.EnableLiveTvAccess ?? true
policy.enableLiveTvManagement = policyData.EnableLiveTvManagement ?? false
' Channel Permissions
policy.enableAllChannels = policyData.EnableAllChannels ?? false
policy.enabledChannels = policyData.EnabledChannels ?? []
policy.blockedChannels = policyData.BlockedChannels ?? []
' Device Permissions
policy.enableAllDevices = policyData.EnableAllDevices ?? true
policy.enabledDevices = policyData.EnabledDevices ?? []
policy.maxActiveSessions = policyData.MaxActiveSessions ?? 0
' Remote Access Permissions
policy.enableRemoteAccess = policyData.EnableRemoteAccess ?? true
policy.enableRemoteControlOfOtherUsers = policyData.EnableRemoteControlOfOtherUsers ?? false
policy.enableSharedDeviceControl = policyData.EnableSharedDeviceControl ?? true
policy.remoteClientBitrateLimit = policyData.RemoteClientBitrateLimit ?? 0
' Content Management Permissions
policy.enableCollectionManagement = policyData.EnableCollectionManagement ?? false
policy.enableSubtitleManagement = policyData.EnableSubtitleManagement ?? false
policy.enableLyricManagement = policyData.EnableLyricManagement ?? false
' Sharing and Sync Permissions
policy.enablePublicSharing = policyData.EnablePublicSharing ?? true
policy.enableSyncTranscoding = policyData.EnableSyncTranscoding ?? true
policy.enableMediaConversion = policyData.EnableMediaConversion ?? true
' User Preferences
policy.enableUserPreferenceAccess = policyData.EnableUserPreferenceAccess ?? true
' Content Filtering
policy.blockedMediaFolders = policyData.BlockedMediaFolders ?? []
policy.blockedTags = policyData.BlockedTags ?? []
policy.allowedTags = policyData.AllowedTags ?? []
policy.blockUnratedItems = policyData.BlockUnratedItems ?? []
' Access Schedules
policy.accessSchedules = policyData.AccessSchedules ?? []
' Sync Play
policy.syncPlayAccess = policyData.SyncPlayAccess ?? "CreateAndJoinGroups"
#if debug
policy.rawPolicyData = policyData
#end if
return policy
end function
end class