├── .gitattributes ├── .gitignore ├── BDInfo ├── BDInfo.csproj ├── BDInfoSettings.cs ├── BDROM.cs ├── LanguageCodes.cs ├── Properties │ └── AssemblyInfo.cs ├── ReadMe.txt ├── TSCodecAC3.cs ├── TSCodecAVC.cs ├── TSCodecDTS.cs ├── TSCodecDTSHD.cs ├── TSCodecLPCM.cs ├── TSCodecMPEG2.cs ├── TSCodecMVC.cs ├── TSCodecTrueHD.cs ├── TSCodecVC1.cs ├── TSInterleavedFile.cs ├── TSPlaylistFile.cs ├── TSStream.cs ├── TSStreamBuffer.cs ├── TSStreamClip.cs ├── TSStreamClipFile.cs └── TSStreamFile.cs ├── CONTRIBUTORS.md ├── DvdLib ├── BigEndianBinaryReader.cs ├── DvdLib.csproj ├── Ifo │ ├── AudioAttributes.cs │ ├── Cell.cs │ ├── CellPlaybackInfo.cs │ ├── CellPositionInfo.cs │ ├── Chapter.cs │ ├── Dvd.cs │ ├── DvdTime.cs │ ├── PgcCommandTable.cs │ ├── Program.cs │ ├── ProgramChain.cs │ ├── Title.cs │ ├── UserOperation.cs │ └── VideoAttributes.cs └── Properties │ └── AssemblyInfo.cs ├── Emby.Dlna ├── Api │ ├── DlnaServerService.cs │ └── DlnaService.cs ├── Common │ ├── Argument.cs │ ├── DeviceIcon.cs │ ├── DeviceService.cs │ ├── ServiceAction.cs │ └── StateVariable.cs ├── Configuration │ └── DlnaOptions.cs ├── ConfigurationExtension.cs ├── ConnectionManager │ ├── ConnectionManager.cs │ ├── ConnectionManagerXmlBuilder.cs │ ├── ControlHandler.cs │ └── ServiceActionListBuilder.cs ├── ContentDirectory │ ├── ContentDirectory.cs │ ├── ContentDirectoryXmlBuilder.cs │ ├── ControlHandler.cs │ └── ServiceActionListBuilder.cs ├── ControlRequest.cs ├── ControlResponse.cs ├── Didl │ ├── DidlBuilder.cs │ ├── Filter.cs │ └── StringWriterWithEncoding.cs ├── DlnaManager.cs ├── Emby.Dlna.csproj ├── EventSubscriptionResponse.cs ├── Eventing │ ├── EventManager.cs │ └── EventSubscription.cs ├── IConnectionManager.cs ├── IContentDirectory.cs ├── IEventManager.cs ├── IMediaReceiverRegistrar.cs ├── IUpnpService.cs ├── Images │ ├── logo120.jpg │ ├── logo120.png │ ├── logo240.jpg │ ├── logo240.png │ ├── logo48.jpg │ ├── logo48.png │ ├── people48.jpg │ ├── people48.png │ ├── people480.jpg │ └── people480.png ├── Main │ └── DlnaEntryPoint.cs ├── MediaReceiverRegistrar │ ├── ControlHandler.cs │ ├── MediaReceiverRegistrar.cs │ ├── MediaReceiverRegistrarXmlBuilder.cs │ └── ServiceActionListBuilder.cs ├── PlayTo │ ├── CurrentIdEventArgs.cs │ ├── Device.cs │ ├── DeviceInfo.cs │ ├── PlayToController.cs │ ├── PlayToManager.cs │ ├── PlaybackProgressEventArgs.cs │ ├── PlaybackStartEventArgs.cs │ ├── PlaybackStoppedEventArgs.cs │ ├── PlaylistItem.cs │ ├── PlaylistItemFactory.cs │ ├── SsdpHttpClient.cs │ ├── TRANSPORTSTATE.cs │ ├── TransportCommands.cs │ ├── TransportStateEventArgs.cs │ ├── UpnpContainer.cs │ ├── uBaseObject.cs │ ├── uParser.cs │ ├── uParserObject.cs │ └── uPnpNamespaces.cs ├── Profiles │ ├── DefaultProfile.cs │ ├── DenonAvrProfile.cs │ ├── DirectTvProfile.cs │ ├── DishHopperJoeyProfile.cs │ ├── Foobar2000Profile.cs │ ├── LgTvProfile.cs │ ├── LinksysDMA2100Profile.cs │ ├── MarantzProfile.cs │ ├── MediaMonkeyProfile.cs │ ├── PanasonicVieraProfile.cs │ ├── PopcornHourProfile.cs │ ├── SamsungSmartTvProfile.cs │ ├── SharpSmartTvProfile.cs │ ├── SonyBlurayPlayer2013.cs │ ├── SonyBlurayPlayer2014.cs │ ├── SonyBlurayPlayer2015.cs │ ├── SonyBlurayPlayer2016.cs │ ├── SonyBlurayPlayerProfile.cs │ ├── SonyBravia2010Profile.cs │ ├── SonyBravia2011Profile.cs │ ├── SonyBravia2012Profile.cs │ ├── SonyBravia2013Profile.cs │ ├── SonyBravia2014Profile.cs │ ├── SonyPs3Profile.cs │ ├── SonyPs4Profile.cs │ ├── WdtvLiveProfile.cs │ ├── XboxOneProfile.cs │ └── Xml │ │ ├── Default.xml │ │ ├── Denon AVR.xml │ │ ├── DirecTV HD-DVR.xml │ │ ├── Dish Hopper-Joey.xml │ │ ├── LG Smart TV.xml │ │ ├── Linksys DMA2100.xml │ │ ├── Marantz.xml │ │ ├── MediaMonkey.xml │ │ ├── Panasonic Viera.xml │ │ ├── Popcorn Hour.xml │ │ ├── Samsung Smart TV.xml │ │ ├── Sharp Smart TV.xml │ │ ├── Sony Blu-ray Player 2013.xml │ │ ├── Sony Blu-ray Player 2014.xml │ │ ├── Sony Blu-ray Player 2015.xml │ │ ├── Sony Blu-ray Player 2016.xml │ │ ├── Sony Blu-ray Player.xml │ │ ├── Sony Bravia (2010).xml │ │ ├── Sony Bravia (2011).xml │ │ ├── Sony Bravia (2012).xml │ │ ├── Sony Bravia (2013).xml │ │ ├── Sony Bravia (2014).xml │ │ ├── Sony PlayStation 3.xml │ │ ├── Sony PlayStation 4.xml │ │ ├── WDTV Live.xml │ │ ├── Xbox One.xml │ │ └── foobar2000.xml ├── Properties │ └── AssemblyInfo.cs ├── Server │ └── DescriptionXmlBuilder.cs ├── Service │ ├── BaseControlHandler.cs │ ├── BaseService.cs │ ├── ControlErrorHandler.cs │ └── ServiceXmlBuilder.cs └── Ssdp │ ├── DeviceDiscovery.cs │ └── Extensions.cs ├── Emby.Drawing.ImageMagick ├── Emby.Drawing.ImageMagick.csproj ├── ImageHelpers.cs ├── ImageMagickEncoder.cs ├── PercentPlayedDrawer.cs ├── PlayedIndicatorDrawer.cs ├── Properties │ └── AssemblyInfo.cs ├── StripCollageBuilder.cs ├── UnplayedCountIndicator.cs └── fonts │ └── robotoregular.ttf ├── Emby.Drawing.Skia ├── Emby.Drawing.Skia.csproj ├── PercentPlayedDrawer.cs ├── PlayedIndicatorDrawer.cs ├── Properties │ └── AssemblyInfo.cs ├── SkiaEncoder.cs ├── StripCollageBuilder.cs └── UnplayedCountIndicator.cs ├── Emby.Drawing ├── Common │ └── ImageHeader.cs ├── Emby.Drawing.csproj ├── ImageProcessor.cs ├── NullImageEncoder.cs └── Properties │ └── AssemblyInfo.cs ├── Emby.Notifications ├── Api │ └── NotificationsService.cs ├── CoreNotificationTypes.cs ├── Emby.Notifications.csproj ├── NotificationConfigurationFactory.cs ├── NotificationManager.cs ├── Notifications.cs └── Properties │ └── AssemblyInfo.cs ├── Emby.Photos ├── Emby.Photos.csproj ├── PhotoProvider.cs └── Properties │ └── AssemblyInfo.cs ├── Emby.Server.Implementations ├── Activity │ ├── ActivityLogEntryPoint.cs │ ├── ActivityManager.cs │ └── ActivityRepository.cs ├── AppBase │ ├── BaseApplicationPaths.cs │ ├── BaseConfigurationManager.cs │ └── ConfigurationHelper.cs ├── ApplicationHost.cs ├── Archiving │ └── ZipClient.cs ├── Branding │ └── BrandingConfigurationFactory.cs ├── Browser │ └── BrowserLauncher.cs ├── Channels │ ├── ChannelDynamicMediaSourceProvider.cs │ ├── ChannelImageProvider.cs │ ├── ChannelManager.cs │ ├── ChannelPostScanTask.cs │ └── RefreshChannelsScheduledTask.cs ├── Collections │ ├── CollectionImageProvider.cs │ └── CollectionManager.cs ├── Configuration │ └── ServerConfigurationManager.cs ├── Cryptography │ └── CryptographyProvider.cs ├── Data │ ├── BaseSqliteRepository.cs │ ├── CleanDatabaseScheduledTask.cs │ ├── ManagedConnection.cs │ ├── SqliteDisplayPreferencesRepository.cs │ ├── SqliteExtensions.cs │ ├── SqliteItemRepository.cs │ ├── SqliteUserDataRepository.cs │ ├── SqliteUserRepository.cs │ └── TypeMapper.cs ├── Devices │ ├── DeviceId.cs │ └── DeviceManager.cs ├── Diagnostics │ ├── CommonProcess.cs │ └── ProcessFactory.cs ├── Dto │ └── DtoService.cs ├── Emby.Server.Implementations.csproj ├── EntryPoints │ ├── AutomaticRestartEntryPoint.cs │ ├── ExternalPortForwarding.cs │ ├── KeepServerAwake.cs │ ├── LibraryChangedNotifier.cs │ ├── RecordingNotifier.cs │ ├── RefreshUsersMetadata.cs │ ├── ServerEventNotifier.cs │ ├── StartupWizard.cs │ ├── SystemEvents.cs │ ├── UdpServerEntryPoint.cs │ ├── UsageEntryPoint.cs │ ├── UsageReporter.cs │ └── UserDataChangeNotifier.cs ├── EnvironmentInfo │ └── EnvironmentInfo.cs ├── FFMpeg │ ├── FFMpegInfo.cs │ ├── FFMpegInstallInfo.cs │ └── FFMpegLoader.cs ├── HttpClientManager │ ├── HttpClientInfo.cs │ └── HttpClientManager.cs ├── HttpServer │ ├── FileWriter.cs │ ├── HttpListenerHost.cs │ ├── HttpResultFactory.cs │ ├── IHttpListener.cs │ ├── LoggerUtils.cs │ ├── RangeRequestWriter.cs │ ├── ResponseFilter.cs │ ├── Security │ │ ├── AuthService.cs │ │ ├── AuthorizationContext.cs │ │ └── SessionContext.cs │ ├── StreamWriter.cs │ └── WebSocketConnection.cs ├── IO │ ├── ExtendedFileSystemInfo.cs │ ├── FileRefresher.cs │ ├── IsoManager.cs │ ├── LibraryMonitor.cs │ ├── ManagedFileSystem.cs │ ├── MbLinkShortcutHandler.cs │ ├── SharpCifs │ │ ├── Config.cs │ │ ├── Dcerpc │ │ │ ├── DcerpcBind.cs │ │ │ ├── DcerpcBinding.cs │ │ │ ├── DcerpcConstants.cs │ │ │ ├── DcerpcError.cs │ │ │ ├── DcerpcException.cs │ │ │ ├── DcerpcHandle.cs │ │ │ ├── DcerpcMessage.cs │ │ │ ├── DcerpcPipeHandle.cs │ │ │ ├── DcerpcSecurityProvider.cs │ │ │ ├── Msrpc │ │ │ │ ├── LsaPolicyHandle.cs │ │ │ │ ├── LsarSidArrayX.cs │ │ │ │ ├── Lsarpc.cs │ │ │ │ ├── MsrpcDfsRootEnum.cs │ │ │ │ ├── MsrpcEnumerateAliasesInDomain.cs │ │ │ │ ├── MsrpcGetMembersInAlias.cs │ │ │ │ ├── MsrpcLookupSids.cs │ │ │ │ ├── MsrpcLsarOpenPolicy2.cs │ │ │ │ ├── MsrpcQueryInformationPolicy.cs │ │ │ │ ├── MsrpcSamrConnect2.cs │ │ │ │ ├── MsrpcSamrConnect4.cs │ │ │ │ ├── MsrpcSamrOpenAlias.cs │ │ │ │ ├── MsrpcSamrOpenDomain.cs │ │ │ │ ├── MsrpcShareEnum.cs │ │ │ │ ├── MsrpcShareGetInfo.cs │ │ │ │ ├── Netdfs.cs │ │ │ │ ├── Samr.cs │ │ │ │ ├── SamrAliasHandle.cs │ │ │ │ ├── SamrDomainHandle.cs │ │ │ │ ├── SamrPolicyHandle.cs │ │ │ │ └── Srvsvc.cs │ │ │ ├── Ndr │ │ │ │ ├── NdrBuffer.cs │ │ │ │ ├── NdrException.cs │ │ │ │ ├── NdrHyper.cs │ │ │ │ ├── NdrLong.cs │ │ │ │ ├── NdrObject.cs │ │ │ │ ├── NdrShort.cs │ │ │ │ └── NdrSmall.cs │ │ │ ├── Rpc.cs │ │ │ ├── UUID.cs │ │ │ └── UnicodeString.cs │ │ ├── Netbios │ │ │ ├── Lmhosts.cs │ │ │ ├── Name.cs │ │ │ ├── NameQueryRequest.cs │ │ │ ├── NameQueryResponse.cs │ │ │ ├── NameServiceClient.cs │ │ │ ├── NameServicePacket.cs │ │ │ ├── NbtAddress.cs │ │ │ ├── NbtException.cs │ │ │ ├── NodeStatusRequest.cs │ │ │ ├── NodeStatusResponse.cs │ │ │ ├── SessionRequestPacket.cs │ │ │ ├── SessionRetargetResponsePacket.cs │ │ │ └── SessionServicePacket.cs │ │ ├── Ntlmssp │ │ │ ├── NtlmFlags.cs │ │ │ ├── NtlmMessage.cs │ │ │ ├── Type1Message.cs │ │ │ ├── Type2Message.cs │ │ │ └── Type3Message.cs │ │ ├── Smb │ │ │ ├── ACE.cs │ │ │ ├── AllocInfo.cs │ │ │ ├── AndXServerMessageBlock.cs │ │ │ ├── BufferCache.cs │ │ │ ├── Dfs.cs │ │ │ ├── DfsReferral.cs │ │ │ ├── DosError.cs │ │ │ ├── DosFileFilter.cs │ │ │ ├── FileEntry.cs │ │ │ ├── IInfo.cs │ │ │ ├── NetServerEnum2.cs │ │ │ ├── NetServerEnum2Response.cs │ │ │ ├── NetShareEnum.cs │ │ │ ├── NetShareEnumResponse.cs │ │ │ ├── NtStatus.cs │ │ │ ├── NtTransQuerySecurityDesc.cs │ │ │ ├── NtTransQuerySecurityDescResponse.cs │ │ │ ├── NtlmAuthenticator.cs │ │ │ ├── NtlmChallenge.cs │ │ │ ├── NtlmContext.cs │ │ │ ├── NtlmPasswordAuthentication.cs │ │ │ ├── Principal.cs │ │ │ ├── SID.cs │ │ │ ├── SecurityDescriptor.cs │ │ │ ├── ServerMessageBlock.cs │ │ │ ├── SigningDigest.cs │ │ │ ├── SmbAuthException.cs │ │ │ ├── SmbComBlankResponse.cs │ │ │ ├── SmbComClose.cs │ │ │ ├── SmbComCreateDirectory.cs │ │ │ ├── SmbComDelete.cs │ │ │ ├── SmbComDeleteDirectory.cs │ │ │ ├── SmbComFindClose2.cs │ │ │ ├── SmbComLogoffAndX.cs │ │ │ ├── SmbComNTCreateAndX.cs │ │ │ ├── SmbComNTCreateAndXResponse.cs │ │ │ ├── SmbComNegotiate.cs │ │ │ ├── SmbComNegotiateResponse.cs │ │ │ ├── SmbComNtTransaction.cs │ │ │ ├── SmbComNtTransactionResponse.cs │ │ │ ├── SmbComOpenAndX.cs │ │ │ ├── SmbComOpenAndXResponse.cs │ │ │ ├── SmbComQueryInformation.cs │ │ │ ├── SmbComQueryInformationResponse.cs │ │ │ ├── SmbComReadAndX.cs │ │ │ ├── SmbComReadAndXResponse.cs │ │ │ ├── SmbComRename.cs │ │ │ ├── SmbComSessionSetupAndX.cs │ │ │ ├── SmbComSessionSetupAndXResponse.cs │ │ │ ├── SmbComTransaction.cs │ │ │ ├── SmbComTransactionResponse.cs │ │ │ ├── SmbComTreeConnectAndX.cs │ │ │ ├── SmbComTreeConnectAndXResponse.cs │ │ │ ├── SmbComTreeDisconnect.cs │ │ │ ├── SmbComWrite.cs │ │ │ ├── SmbComWriteAndX.cs │ │ │ ├── SmbComWriteAndXResponse.cs │ │ │ ├── SmbComWriteResponse.cs │ │ │ ├── SmbConstants.cs │ │ │ ├── SmbException.cs │ │ │ ├── SmbFile.cs │ │ │ ├── SmbFileExtensions.cs │ │ │ ├── SmbFileFilter.cs │ │ │ ├── SmbFileInputStream.cs │ │ │ ├── SmbFileOutputStream.cs │ │ │ ├── SmbFilenameFilter.cs │ │ │ ├── SmbNamedPipe.cs │ │ │ ├── SmbRandomAccessFile.cs │ │ │ ├── SmbSession.cs │ │ │ ├── SmbShareInfo.cs │ │ │ ├── SmbTransport.cs │ │ │ ├── SmbTree.cs │ │ │ ├── Trans2FindFirst2.cs │ │ │ ├── Trans2FindFirst2Response.cs │ │ │ ├── Trans2FindNext2.cs │ │ │ ├── Trans2GetDfsReferral.cs │ │ │ ├── Trans2GetDfsReferralResponse.cs │ │ │ ├── Trans2QueryFSInformation.cs │ │ │ ├── Trans2QueryFSInformationResponse.cs │ │ │ ├── Trans2QueryPathInformation.cs │ │ │ ├── Trans2QueryPathInformationResponse.cs │ │ │ ├── Trans2SetFileInformation.cs │ │ │ ├── Trans2SetFileInformationResponse.cs │ │ │ ├── TransCallNamedPipe.cs │ │ │ ├── TransCallNamedPipeResponse.cs │ │ │ ├── TransPeekNamedPipe.cs │ │ │ ├── TransPeekNamedPipeResponse.cs │ │ │ ├── TransTransactNamedPipe.cs │ │ │ ├── TransTransactNamedPipeResponse.cs │ │ │ ├── TransWaitNamedPipe.cs │ │ │ ├── TransWaitNamedPipeResponse.cs │ │ │ ├── TransactNamedPipeInputStream.cs │ │ │ ├── TransactNamedPipeOutputStream.cs │ │ │ └── WinError.cs │ │ ├── UniAddress.cs │ │ └── Util │ │ │ ├── Base64.cs │ │ │ ├── DES.cs │ │ │ ├── Encdec.cs │ │ │ ├── HMACT64.cs │ │ │ ├── Hexdump.cs │ │ │ ├── LogStream.cs │ │ │ ├── MD4.cs │ │ │ ├── RC4.cs │ │ │ ├── Sharpen │ │ │ ├── AbstractMap.cs │ │ │ ├── Arrays.cs │ │ │ ├── BufferedReader.cs │ │ │ ├── BufferedWriter.cs │ │ │ ├── CharBuffer.cs │ │ │ ├── CharSequence.cs │ │ │ ├── Collections.cs │ │ │ ├── ConcurrentHashMap.cs │ │ │ ├── DateFormat.cs │ │ │ ├── EnumeratorWrapper.cs │ │ │ ├── Exceptions.cs │ │ │ ├── Extensions.cs │ │ │ ├── FileInputStream.cs │ │ │ ├── FileOutputStream.cs │ │ │ ├── FilePath.cs │ │ │ ├── FileReader.cs │ │ │ ├── FileWriter.cs │ │ │ ├── FilterInputStream.cs │ │ │ ├── FilterOutputStream.cs │ │ │ ├── Hashtable.cs │ │ │ ├── HttpURLConnection.cs │ │ │ ├── ICallable.cs │ │ │ ├── IConcurrentMap.cs │ │ │ ├── IExecutor.cs │ │ │ ├── IFilenameFilter.cs │ │ │ ├── IFuture.cs │ │ │ ├── IPrivilegedAction.cs │ │ │ ├── IRunnable.cs │ │ │ ├── InputStream.cs │ │ │ ├── InputStreamReader.cs │ │ │ ├── Iterator.cs │ │ │ ├── LinkageError.cs │ │ │ ├── MD5.cs │ │ │ ├── MD5Managed.cs │ │ │ ├── Matcher.cs │ │ │ ├── MessageDigest.cs │ │ │ ├── NetworkStream.cs │ │ │ ├── ObjectInputStream.cs │ │ │ ├── ObjectOutputStream.cs │ │ │ ├── OutputStream.cs │ │ │ ├── OutputStreamWriter.cs │ │ │ ├── PipedInputStream.cs │ │ │ ├── PipedOutputStream.cs │ │ │ ├── PrintWriter.cs │ │ │ ├── Properties.cs │ │ │ ├── RandomAccessFile.cs │ │ │ ├── ReentrantLock.cs │ │ │ ├── Reference.cs │ │ │ ├── Runtime.cs │ │ │ ├── SimpleDateFormat.cs │ │ │ ├── SocketEx.cs │ │ │ ├── StringTokenizer.cs │ │ │ ├── SynchronizedList.cs │ │ │ ├── Thread.cs │ │ │ ├── ThreadFactory.cs │ │ │ ├── ThreadPoolExecutor.cs │ │ │ └── WrappedSystemStream.cs │ │ │ └── Transport │ │ │ ├── Request.cs │ │ │ ├── Response.cs │ │ │ ├── Transport.cs │ │ │ └── TransportException.cs │ ├── SharpCifsFileSystem.cs │ ├── StreamHelper.cs │ └── ThrottledStream.cs ├── Images │ └── BaseDynamicImageProvider.cs ├── Library │ ├── CoreResolutionIgnoreRule.cs │ ├── DefaultAuthenticationProvider.cs │ ├── ExclusiveLiveStream.cs │ ├── LibraryManager.cs │ ├── LiveStreamHelper.cs │ ├── MediaSourceManager.cs │ ├── MediaStreamSelector.cs │ ├── MusicManager.cs │ ├── PathExtensions.cs │ ├── ResolverHelper.cs │ ├── Resolvers │ │ ├── Audio │ │ │ ├── AudioResolver.cs │ │ │ ├── MusicAlbumResolver.cs │ │ │ └── MusicArtistResolver.cs │ │ ├── BaseVideoResolver.cs │ │ ├── Books │ │ │ └── BookResolver.cs │ │ ├── FolderResolver.cs │ │ ├── ItemResolver.cs │ │ ├── Movies │ │ │ ├── BoxSetResolver.cs │ │ │ └── MovieResolver.cs │ │ ├── PhotoAlbumResolver.cs │ │ ├── PhotoResolver.cs │ │ ├── PlaylistResolver.cs │ │ ├── SpecialFolderResolver.cs │ │ ├── TV │ │ │ ├── EpisodeResolver.cs │ │ │ ├── SeasonResolver.cs │ │ │ └── SeriesResolver.cs │ │ └── VideoResolver.cs │ ├── SearchEngine.cs │ ├── UserDataManager.cs │ ├── UserManager.cs │ ├── UserViewManager.cs │ └── Validators │ │ ├── ArtistsPostScanTask.cs │ │ ├── ArtistsValidator.cs │ │ ├── GameGenresPostScanTask.cs │ │ ├── GameGenresValidator.cs │ │ ├── GenresPostScanTask.cs │ │ ├── GenresValidator.cs │ │ ├── MusicGenresPostScanTask.cs │ │ ├── MusicGenresValidator.cs │ │ ├── PeopleValidator.cs │ │ ├── StudiosPostScanTask.cs │ │ └── StudiosValidator.cs ├── LiveTv │ ├── EmbyTV │ │ ├── DirectRecorder.cs │ │ ├── EmbyTV.cs │ │ ├── EncodedRecorder.cs │ │ ├── EntryPoint.cs │ │ ├── IRecorder.cs │ │ ├── ItemDataProvider.cs │ │ ├── RecordingHelper.cs │ │ ├── SeriesTimerManager.cs │ │ └── TimerManager.cs │ ├── Listings │ │ └── SchedulesDirect.cs │ ├── LiveTvConfigurationFactory.cs │ ├── LiveTvDtoService.cs │ ├── LiveTvManager.cs │ ├── LiveTvMediaSourceProvider.cs │ ├── RefreshChannelsScheduledTask.cs │ └── TunerHosts │ │ ├── BaseTunerHost.cs │ │ ├── HdHomerun │ │ ├── HdHomerunHost.cs │ │ ├── HdHomerunManager.cs │ │ └── HdHomerunUdpStream.cs │ │ ├── LiveStream.cs │ │ ├── M3UTunerHost.cs │ │ ├── M3uParser.cs │ │ └── SharedHttpStream.cs ├── Localization │ ├── Core │ │ ├── ar.json │ │ ├── bg-BG.json │ │ ├── ca.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de.json │ │ ├── el.json │ │ ├── en-GB.json │ │ ├── en-US.json │ │ ├── es-AR.json │ │ ├── es-MX.json │ │ ├── es.json │ │ ├── fa.json │ │ ├── fr-CA.json │ │ ├── fr.json │ │ ├── gsw.json │ │ ├── he.json │ │ ├── hr.json │ │ ├── hu.json │ │ ├── it.json │ │ ├── kk.json │ │ ├── ko.json │ │ ├── lt-LT.json │ │ ├── ms.json │ │ ├── nb.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt-BR.json │ │ ├── pt-PT.json │ │ ├── ru.json │ │ ├── sk.json │ │ ├── sl-SI.json │ │ ├── sv.json │ │ ├── tr.json │ │ ├── zh-CN.json │ │ └── zh-HK.json │ ├── LocalizationManager.cs │ ├── Ratings │ │ ├── br.txt │ │ ├── ca.txt │ │ ├── co.txt │ │ ├── dk.txt │ │ ├── es.txt │ │ ├── fr.txt │ │ ├── gb.txt │ │ ├── ie.txt │ │ ├── jp.txt │ │ ├── kz.txt │ │ ├── mx.txt │ │ ├── nl.txt │ │ ├── nz.txt │ │ ├── ro.txt │ │ ├── uk.txt │ │ └── us.txt │ ├── TextLocalizer.cs │ ├── countries.json │ └── iso6392.txt ├── Logging │ ├── ConsoleLogger.cs │ ├── SimpleLogManager.cs │ └── UnhandledExceptionWriter.cs ├── MediaEncoder │ └── EncodingManager.cs ├── Net │ ├── DisposableManagedObjectBase.cs │ ├── IWebSocket.cs │ ├── SocketFactory.cs │ ├── UdpSocket.cs │ └── WebSocketConnectEventArgs.cs ├── Networking │ ├── IPNetwork │ │ ├── BigIntegerExt.cs │ │ ├── IPAddressCollection.cs │ │ ├── IPNetwork.cs │ │ ├── IPNetworkCollection.cs │ │ └── LICENSE.txt │ └── NetworkManager.cs ├── News │ ├── NewsEntryPoint.cs │ └── NewsService.cs ├── Playlists │ ├── ManualPlaylistsFolder.cs │ ├── PlaylistImageProvider.cs │ └── PlaylistManager.cs ├── Properties │ └── AssemblyInfo.cs ├── Reflection │ └── AssemblyInfo.cs ├── ResourceFileManager.cs ├── ScheduledTasks │ ├── ChapterImagesTask.cs │ ├── DailyTrigger.cs │ ├── IntervalTrigger.cs │ ├── PeopleValidationTask.cs │ ├── PluginUpdateTask.cs │ ├── RefreshMediaLibraryTask.cs │ ├── ScheduledTaskWorker.cs │ ├── StartupTrigger.cs │ ├── SystemEventTrigger.cs │ ├── SystemUpdateTask.cs │ ├── TaskManager.cs │ ├── Tasks │ │ ├── DeleteCacheFileTask.cs │ │ ├── DeleteLogFileTask.cs │ │ └── ReloadLoggerFileTask.cs │ └── WeeklyTrigger.cs ├── Security │ ├── AuthenticationRepository.cs │ ├── EncryptionManager.cs │ ├── MBLicenseFile.cs │ ├── PluginSecurityManager.cs │ └── RegRecord.cs ├── Serialization │ ├── JsonSerializer.cs │ └── XmlSerializer.cs ├── ServerApplicationPaths.cs ├── Services │ ├── HttpResult.cs │ ├── RequestHelper.cs │ ├── ResponseHelper.cs │ ├── ServiceController.cs │ ├── ServiceExec.cs │ ├── ServiceHandler.cs │ ├── ServiceMethod.cs │ ├── ServicePath.cs │ ├── StringMapTypeDeserializer.cs │ └── UrlExtensions.cs ├── Session │ ├── FirebaseSessionController.cs │ ├── HttpSessionController.cs │ ├── SessionManager.cs │ ├── SessionWebSocketListener.cs │ └── WebSocketController.cs ├── Sorting │ ├── AiredEpisodeOrderComparer.cs │ ├── AlbumArtistComparer.cs │ ├── AlbumComparer.cs │ ├── AlphanumComparator.cs │ ├── ArtistComparer.cs │ ├── CommunityRatingComparer.cs │ ├── CriticRatingComparer.cs │ ├── DateCreatedComparer.cs │ ├── DateLastMediaAddedComparer.cs │ ├── DatePlayedComparer.cs │ ├── GameSystemComparer.cs │ ├── IsFavoriteOrLikeComparer.cs │ ├── IsFolderComparer.cs │ ├── IsPlayedComparer.cs │ ├── IsUnplayedComparer.cs │ ├── NameComparer.cs │ ├── OfficialRatingComparer.cs │ ├── PlayCountComparer.cs │ ├── PlayersComparer.cs │ ├── PremiereDateComparer.cs │ ├── ProductionYearComparer.cs │ ├── RandomComparer.cs │ ├── RuntimeComparer.cs │ ├── SeriesSortNameComparer.cs │ ├── SortNameComparer.cs │ ├── StartDateComparer.cs │ └── StudioComparer.cs ├── StartupOptions.cs ├── SystemEvents.cs ├── TV │ └── TVSeriesManager.cs ├── TextEncoding │ ├── NLangDetect │ │ ├── Detector.cs │ │ ├── DetectorFactory.cs │ │ ├── ErrorCode.cs │ │ ├── Extensions │ │ │ ├── CharExtensions.cs │ │ │ ├── RandomExtensions.cs │ │ │ ├── StringExtensions.cs │ │ │ └── UnicodeBlock.cs │ │ ├── GenProfile.cs │ │ ├── InternalException.cs │ │ ├── Language.cs │ │ ├── LanguageDetector.cs │ │ ├── NLangDetectException.cs │ │ ├── ProbVector.cs │ │ ├── Profiles │ │ │ ├── afr │ │ │ ├── ara │ │ │ ├── ben │ │ │ ├── bul │ │ │ ├── ces │ │ │ ├── dan │ │ │ ├── deu │ │ │ ├── ell │ │ │ ├── eng │ │ │ ├── est │ │ │ ├── fas │ │ │ ├── fin │ │ │ ├── fra │ │ │ ├── guj │ │ │ ├── heb │ │ │ ├── hin │ │ │ ├── hrv │ │ │ ├── hun │ │ │ ├── ind │ │ │ ├── ita │ │ │ ├── jpn │ │ │ ├── kan │ │ │ ├── kor │ │ │ ├── lav │ │ │ ├── lit │ │ │ ├── mal │ │ │ ├── mar │ │ │ ├── mkd │ │ │ ├── nep │ │ │ ├── nld │ │ │ ├── nor │ │ │ ├── pan │ │ │ ├── pol │ │ │ ├── por │ │ │ ├── ron │ │ │ ├── rus │ │ │ ├── slk │ │ │ ├── slv │ │ │ ├── som │ │ │ ├── spa │ │ │ ├── sqi │ │ │ ├── swa │ │ │ ├── swe │ │ │ ├── tam │ │ │ ├── tel │ │ │ ├── tgl │ │ │ ├── tha │ │ │ ├── tur │ │ │ ├── ukr │ │ │ ├── urd │ │ │ ├── vie │ │ │ ├── zh-cn │ │ │ └── zh-tw │ │ └── Utils │ │ │ ├── LangProfile.cs │ │ │ ├── Messages.cs │ │ │ ├── NGram.cs │ │ │ ├── TagExtractor.cs │ │ │ └── messages.properties │ ├── TextEncoding.cs │ ├── TextEncodingDetect.cs │ └── UniversalDetector │ │ ├── CharsetDetector.cs │ │ ├── Core │ │ ├── Big5Prober.cs │ │ ├── BitPackage.cs │ │ ├── CharDistributionAnalyser.cs │ │ ├── CharsetProber.cs │ │ ├── Charsets.cs │ │ ├── CodingStateMachine.cs │ │ ├── EUCJPProber.cs │ │ ├── EUCKRProber.cs │ │ ├── EUCTWProber.cs │ │ ├── EscCharsetProber.cs │ │ ├── EscSM.cs │ │ ├── GB18030Prober.cs │ │ ├── HebrewProber.cs │ │ ├── JapaneseContextAnalyser.cs │ │ ├── LangBulgarianModel.cs │ │ ├── LangCyrillicModel.cs │ │ ├── LangGreekModel.cs │ │ ├── LangHebrewModel.cs │ │ ├── LangHungarianModel.cs │ │ ├── LangThaiModel.cs │ │ ├── Latin1Prober.cs │ │ ├── MBCSGroupProber.cs │ │ ├── MBCSSM.cs │ │ ├── SBCSGroupProber.cs │ │ ├── SBCharsetProber.cs │ │ ├── SJISProber.cs │ │ ├── SMModel.cs │ │ ├── SequenceModel.cs │ │ ├── UTF8Prober.cs │ │ └── UniversalDetector.cs │ │ ├── DetectionConfidence.cs │ │ └── ICharsetDetector.cs ├── Threading │ ├── CommonTimer.cs │ └── TimerFactory.cs ├── Udp │ └── UdpServer.cs ├── Updates │ └── InstallationManager.cs ├── UserViews │ ├── CollectionFolderImageProvider.cs │ ├── DynamicImageProvider.cs │ └── FolderImageProvider.cs ├── Xml │ └── XmlReaderSettingsFactory.cs ├── app.config └── values.txt ├── LICENSE.md ├── Makefile ├── MediaBrowser.Api ├── ApiEntryPoint.cs ├── BaseApiService.cs ├── BrandingService.cs ├── ChannelService.cs ├── ConfigurationService.cs ├── Devices │ └── DeviceService.cs ├── DisplayPreferencesService.cs ├── EnvironmentService.cs ├── FilterService.cs ├── GamesService.cs ├── IHasDtoOptions.cs ├── IHasItemFields.cs ├── Images │ ├── ImageByNameService.cs │ ├── ImageRequest.cs │ ├── ImageService.cs │ └── RemoteImageService.cs ├── ItemLookupService.cs ├── ItemRefreshService.cs ├── ItemUpdateService.cs ├── Library │ ├── LibraryService.cs │ └── LibraryStructureService.cs ├── LiveTv │ ├── LiveTvService.cs │ └── ProgressiveFileCopier.cs ├── LocalizationService.cs ├── MediaBrowser.Api.csproj ├── Movies │ ├── CollectionService.cs │ ├── MoviesService.cs │ └── TrailersService.cs ├── Music │ ├── AlbumsService.cs │ └── InstantMixService.cs ├── NewsService.cs ├── PackageService.cs ├── PlaylistService.cs ├── PluginService.cs ├── Properties │ └── AssemblyInfo.cs ├── ScheduledTasks │ ├── ScheduledTaskService.cs │ └── ScheduledTasksWebSocketListener.cs ├── SearchService.cs ├── Session │ ├── SessionInfoWebSocketListener.cs │ └── SessionsService.cs ├── SimilarItemsHelper.cs ├── StartupWizardService.cs ├── Subtitles │ └── SubtitleService.cs ├── SuggestionsService.cs ├── System │ ├── ActivityLogService.cs │ ├── ActivityLogWebSocketListener.cs │ └── SystemService.cs ├── TvShowsService.cs ├── UserLibrary │ ├── ArtistsService.cs │ ├── BaseItemsByNameService.cs │ ├── BaseItemsRequest.cs │ ├── GameGenresService.cs │ ├── GenresService.cs │ ├── ItemsService.cs │ ├── MusicGenresService.cs │ ├── PersonsService.cs │ ├── StudiosService.cs │ ├── UserLibraryService.cs │ ├── UserViewsService.cs │ └── YearsService.cs ├── UserService.cs └── VideosService.cs ├── MediaBrowser.LocalMetadata ├── BaseXmlProvider.cs ├── Images │ ├── CollectionFolderImageProvider.cs │ ├── EpisodeLocalImageProvider.cs │ ├── InternalMetadataFolderImageProvider.cs │ └── LocalImageProvider.cs ├── MediaBrowser.LocalMetadata.csproj ├── Parsers │ ├── BaseItemXmlParser.cs │ ├── BoxSetXmlParser.cs │ ├── GameSystemXmlParser.cs │ ├── GameXmlParser.cs │ └── PlaylistXmlParser.cs ├── Properties │ └── AssemblyInfo.cs ├── Providers │ ├── BoxSetXmlProvider.cs │ ├── GameSystemXmlProvider.cs │ ├── GameXmlProvider.cs │ └── PlaylistXmlProvider.cs └── Savers │ ├── BaseXmlSaver.cs │ ├── BoxSetXmlSaver.cs │ ├── GameSystemXmlSaver.cs │ ├── GameXmlSaver.cs │ ├── PersonXmlSaver.cs │ └── PlaylistXmlSaver.cs ├── MediaBrowser.Providers ├── Books │ ├── AudioBookMetadataService.cs │ └── BookMetadataService.cs ├── BoxSets │ ├── BoxSetMetadataService.cs │ ├── MovieDbBoxSetImageProvider.cs │ └── MovieDbBoxSetProvider.cs ├── Channels │ └── ChannelMetadataService.cs ├── Chapters │ └── ChapterManager.cs ├── Folders │ ├── CollectionFolderMetadataService.cs │ ├── FolderMetadataService.cs │ └── UserViewMetadataService.cs ├── GameGenres │ └── GameGenreMetadataService.cs ├── Games │ ├── GameMetadataService.cs │ └── GameSystemMetadataService.cs ├── Genres │ └── GenreMetadataService.cs ├── LiveTv │ └── ProgramMetadataService.cs ├── Manager │ ├── GenericPriorityQueue.cs │ ├── GenericPriorityQueueNode.cs │ ├── IFixedSizePriorityQueue.cs │ ├── IPriorityQueue.cs │ ├── ImageSaver.cs │ ├── ItemImageProvider.cs │ ├── MetadataService.cs │ ├── ProviderManager.cs │ ├── ProviderUtils.cs │ └── SimplePriorityQueue.cs ├── MediaBrowser.Providers.csproj ├── MediaInfo │ ├── AudioImageProvider.cs │ ├── FFProbeAudioInfo.cs │ ├── FFProbeProvider.cs │ ├── FFProbeVideoInfo.cs │ ├── SubtitleDownloader.cs │ ├── SubtitleResolver.cs │ ├── SubtitleScheduledTask.cs │ └── VideoImageProvider.cs ├── Movies │ ├── FanartMovieImageProvider.cs │ ├── GenericMovieDbInfo.cs │ ├── MovieDbImageProvider.cs │ ├── MovieDbProvider.cs │ ├── MovieDbSearch.cs │ ├── MovieDbTrailerProvider.cs │ ├── MovieExternalIds.cs │ ├── MovieMetadataService.cs │ └── TmdbSettings.cs ├── Music │ ├── AlbumMetadataService.cs │ ├── ArtistMetadataService.cs │ ├── AudioDbAlbumImageProvider.cs │ ├── AudioDbAlbumProvider.cs │ ├── AudioDbArtistImageProvider.cs │ ├── AudioDbArtistProvider.cs │ ├── AudioDbExternalIds.cs │ ├── AudioMetadataService.cs │ ├── Extensions.cs │ ├── FanArtAlbumProvider.cs │ ├── FanArtArtistProvider.cs │ ├── MovieDbMusicVideoProvider.cs │ ├── MusicBrainzAlbumProvider.cs │ ├── MusicBrainzArtistProvider.cs │ ├── MusicExternalIds.cs │ └── MusicVideoMetadataService.cs ├── MusicGenres │ └── MusicGenreMetadataService.cs ├── Omdb │ ├── OmdbImageProvider.cs │ ├── OmdbItemProvider.cs │ └── OmdbProvider.cs ├── People │ ├── MovieDbPersonImageProvider.cs │ ├── MovieDbPersonProvider.cs │ ├── PersonMetadataService.cs │ └── TvdbPersonImageProvider.cs ├── Photos │ ├── PhotoAlbumMetadataService.cs │ └── PhotoMetadataService.cs ├── Playlists │ ├── PlaylistItemsProvider.cs │ └── PlaylistMetadataService.cs ├── Properties │ └── AssemblyInfo.cs ├── Studios │ ├── StudioMetadataService.cs │ └── StudiosImageProvider.cs ├── Subtitles │ └── SubtitleManager.cs ├── TV │ ├── DummySeasonProvider.cs │ ├── EpisodeMetadataService.cs │ ├── FanArt │ │ ├── FanArtSeasonProvider.cs │ │ └── FanartSeriesProvider.cs │ ├── MissingEpisodeProvider.cs │ ├── Omdb │ │ └── OmdbEpisodeProvider.cs │ ├── SeasonMetadataService.cs │ ├── SeriesMetadataService.cs │ ├── TheMovieDb │ │ ├── MovieDbEpisodeImageProvider.cs │ │ ├── MovieDbEpisodeProvider.cs │ │ ├── MovieDbProviderBase.cs │ │ ├── MovieDbSeasonProvider.cs │ │ ├── MovieDbSeriesImageProvider.cs │ │ └── MovieDbSeriesProvider.cs │ ├── TheTVDB │ │ ├── TvdbEpisodeImageProvider.cs │ │ ├── TvdbEpisodeProvider.cs │ │ ├── TvdbPrescanTask.cs │ │ ├── TvdbSeasonImageProvider.cs │ │ ├── TvdbSeriesImageProvider.cs │ │ └── TvdbSeriesProvider.cs │ └── TvExternalIds.cs ├── Users │ └── UserMetadataService.cs ├── Videos │ └── VideoMetadataService.cs ├── Years │ └── YearMetadataService.cs └── app.config ├── MediaBrowser.WebDashboard ├── Api │ ├── ConfigurationPageInfo.cs │ ├── DashboardService.cs │ └── PackageCreator.cs ├── MediaBrowser.WebDashboard.csproj ├── Properties │ └── AssemblyInfo.cs ├── ServerEntryPoint.cs └── dashboard-ui │ ├── addplugin.html │ ├── appservices.html │ ├── bower_components │ ├── Sortable │ │ ├── Sortable.html │ │ ├── Sortable.min.js │ │ ├── index.html │ │ ├── jquery.binding.js │ │ ├── knockout-sortable.js │ │ ├── ng-sortable.js │ │ └── react-sortable-mixin.js │ ├── Swiper │ │ ├── dist │ │ │ ├── css │ │ │ │ └── swiper.min.css │ │ │ └── js │ │ │ │ └── swiper.min.js │ │ └── package.js │ ├── alameda │ │ └── alameda.js │ ├── document-register-element │ │ ├── basic.html │ │ └── build │ │ │ └── document-register-element.js │ ├── emby-apiclient │ │ ├── apiclient.js │ │ ├── apiclientex.js │ │ ├── appstorage-cache.js │ │ ├── appstorage-localstorage.js │ │ ├── appstorage-memory.js │ │ ├── cameraroll.js │ │ ├── connectionmanager.js │ │ ├── credentials.js │ │ ├── events.js │ │ ├── fileupload.js │ │ ├── localassetmanager.js │ │ ├── serverdiscovery.js │ │ ├── sync │ │ │ ├── contentuploader.js │ │ │ ├── filerepository.js │ │ │ ├── itemrepository.js │ │ │ ├── localsync.js │ │ │ ├── mediasync.js │ │ │ ├── multiserversync.js │ │ │ ├── serversync.js │ │ │ ├── transfermanager.js │ │ │ └── useractionrepository.js │ │ └── wakeonlan.js │ ├── emby-webcomponents │ │ ├── actionsheet │ │ │ ├── actionsheet.css │ │ │ └── actionsheet.js │ │ ├── alert │ │ │ ├── alert.js │ │ │ └── nativealert.js │ │ ├── alphanumericshortcuts │ │ │ └── alphanumericshortcuts.js │ │ ├── alphapicker │ │ │ ├── alphapicker.js │ │ │ └── style.css │ │ ├── appfooter │ │ │ ├── appfooter.css │ │ │ └── appfooter.js │ │ ├── appsettings.js │ │ ├── backdrop │ │ │ ├── backdrop.js │ │ │ └── style.css │ │ ├── browser.js │ │ ├── browserdeviceprofile.js │ │ ├── cardbuilder │ │ │ ├── card.css │ │ │ ├── cardbuilder.js │ │ │ ├── chaptercardbuilder.js │ │ │ ├── peoplecardbuilder.js │ │ │ └── roundcard.css │ │ ├── chromecast │ │ │ ├── chromecasthelpers.js │ │ │ └── chromecastplayer.js │ │ ├── clearbutton.css │ │ ├── collectioneditor │ │ │ └── collectioneditor.js │ │ ├── confirm │ │ │ ├── confirm.js │ │ │ └── nativeconfirm.js │ │ ├── datetime.js │ │ ├── deletehelper.js │ │ ├── dialog │ │ │ ├── dialog.js │ │ │ └── dialog.template.html │ │ ├── dialoghelper │ │ │ ├── dialoghelper.css │ │ │ └── dialoghelper.js │ │ ├── displaysettings │ │ │ ├── displaysettings.js │ │ │ └── displaysettings.template.html │ │ ├── dom.js │ │ ├── emby-button │ │ │ ├── emby-button.css │ │ │ ├── emby-button.js │ │ │ └── paper-icon-button-light.js │ │ ├── emby-checkbox │ │ │ ├── emby-checkbox.css │ │ │ └── emby-checkbox.js │ │ ├── emby-collapse │ │ │ ├── emby-collapse.css │ │ │ └── emby-collapse.js │ │ ├── emby-connect │ │ │ └── connecthelper.js │ │ ├── emby-input │ │ │ ├── emby-input.css │ │ │ └── emby-input.js │ │ ├── emby-itemrefreshindicator │ │ │ └── emby-itemrefreshindicator.js │ │ ├── emby-itemscontainer │ │ │ └── emby-itemscontainer.js │ │ ├── emby-progressring │ │ │ ├── emby-progressring.css │ │ │ ├── emby-progressring.js │ │ │ └── emby-progressring.template.html │ │ ├── emby-radio │ │ │ ├── emby-radio.css │ │ │ └── emby-radio.js │ │ ├── emby-scrollbuttons │ │ │ ├── emby-scrollbuttons.css │ │ │ └── emby-scrollbuttons.js │ │ ├── emby-scroller │ │ │ └── emby-scroller.js │ │ ├── emby-select │ │ │ ├── emby-select.css │ │ │ └── emby-select.js │ │ ├── emby-slider │ │ │ ├── emby-slider.css │ │ │ └── emby-slider.js │ │ ├── emby-tabs │ │ │ ├── emby-tabs.css │ │ │ └── emby-tabs.js │ │ ├── emby-textarea │ │ │ ├── emby-textarea.css │ │ │ └── emby-textarea.js │ │ ├── emby-toggle │ │ │ ├── emby-toggle.css │ │ │ └── emby-toggle.js │ │ ├── fetchhelper.js │ │ ├── filedownloader.js │ │ ├── filesystem.js │ │ ├── filtermenu │ │ │ ├── filtermenu.js │ │ │ └── filtermenu.template.html │ │ ├── flexstyles.css │ │ ├── flvjs │ │ │ └── flv.min.js │ │ ├── focusmanager.js │ │ ├── fonts │ │ │ ├── fonts.css │ │ │ ├── fonts.sized.css │ │ │ └── material-icons │ │ │ │ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff │ │ │ │ ├── flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 │ │ │ │ └── style.css │ │ ├── formdialog.css │ │ ├── fullscreen │ │ │ ├── fullscreen-dc.js │ │ │ └── fullscreenmanager.js │ │ ├── globalize.js │ │ ├── guide │ │ │ ├── guide-settings.js │ │ │ ├── guide-settings.template.html │ │ │ ├── guide.css │ │ │ ├── guide.js │ │ │ ├── programs.css │ │ │ └── tvguide.template.html │ │ ├── headroom │ │ │ ├── headroom.css │ │ │ └── headroom.js │ │ ├── homescreensettings │ │ │ ├── homescreensettings.js │ │ │ ├── homescreensettings.template.html │ │ │ ├── homescreensettingsdialog.js │ │ │ └── homescreensettingsdialog.template.html │ │ ├── homesections │ │ │ ├── homesections.css │ │ │ └── homesections.js │ │ ├── htmlaudioplayer │ │ │ └── plugin.js │ │ ├── htmlvideoplayer │ │ │ ├── htmlmediahelper.js │ │ │ ├── plugin.js │ │ │ └── style.css │ │ ├── imagedownloader │ │ │ ├── imagedownloader.js │ │ │ └── imagedownloader.template.html │ │ ├── imageeditor │ │ │ ├── imageeditor.css │ │ │ ├── imageeditor.js │ │ │ └── imageeditor.template.html │ │ ├── images │ │ │ ├── basicimagefetcher.js │ │ │ ├── imagehelper.js │ │ │ └── style.css │ │ ├── imageuploader │ │ │ ├── imageuploader.js │ │ │ ├── imageuploader.template.html │ │ │ └── style.css │ │ ├── indicators │ │ │ ├── indicators.css │ │ │ └── indicators.js │ │ ├── input │ │ │ ├── api.js │ │ │ ├── gamepadtokey.js │ │ │ └── mouse.js │ │ ├── inputmanager.js │ │ ├── itemcontextmenu.js │ │ ├── itemhelper.js │ │ ├── itemidentifier │ │ │ ├── itemidentifier.js │ │ │ └── itemidentifier.template.html │ │ ├── itemsrefresher.js │ │ ├── layoutmanager.js │ │ ├── lazyloader │ │ │ ├── lazyedgehack.css │ │ │ ├── lazyloader-intersectionobserver.js │ │ │ └── lazyloader-scroll.js │ │ ├── listview │ │ │ ├── listview.css │ │ │ └── listview.js │ │ ├── loading │ │ │ ├── loader2.gif │ │ │ ├── loading-legacy.css │ │ │ ├── loading-legacy.js │ │ │ ├── loading-lite.css │ │ │ └── loading-lite.js │ │ ├── loadingdialog │ │ │ └── loadingdialog.js │ │ ├── maintabsmanager.js │ │ ├── mediainfo │ │ │ ├── fresh.png │ │ │ ├── mediainfo.css │ │ │ ├── mediainfo.js │ │ │ └── rotten.png │ │ ├── metadataeditor │ │ │ ├── metadataeditor.js │ │ │ ├── metadataeditor.template.html │ │ │ ├── personeditor.js │ │ │ └── personeditor.template.html │ │ ├── multidownload.js │ │ ├── multiselect │ │ │ ├── multiselect.css │ │ │ └── multiselect.js │ │ ├── native-promise-only │ │ │ ├── lib │ │ │ │ └── npo.src.js │ │ │ └── test_adapter.js │ │ ├── notifications │ │ │ ├── badge.png │ │ │ ├── notificationicon.png │ │ │ └── notifications.js │ │ ├── nowplayingbar │ │ │ ├── nowplayingbar.css │ │ │ └── nowplayingbar.js │ │ ├── packagemanager.js │ │ ├── pagejs │ │ │ └── page.js │ │ ├── photoplayer │ │ │ └── plugin.js │ │ ├── playback │ │ │ ├── autoplaydetect.js │ │ │ ├── brightnessosd.js │ │ │ ├── experimentalwarnings.js │ │ │ ├── iconosd.css │ │ │ ├── mediasession.js │ │ │ ├── nowplayinghelper.js │ │ │ ├── playaccessvalidation.js │ │ │ ├── playbackmanager.js │ │ │ ├── playbackorientation.js │ │ │ ├── playbackvalidation.js │ │ │ ├── playerselection.js │ │ │ ├── playersettingsmenu.js │ │ │ ├── playmethodhelper.js │ │ │ ├── playqueuemanager.js │ │ │ ├── remotecontrolautoplay.js │ │ │ └── volumeosd.js │ │ ├── playbacksettings │ │ │ ├── playbacksettings.js │ │ │ └── playbacksettings.template.html │ │ ├── playerstats │ │ │ ├── playerstats.css │ │ │ └── playerstats.js │ │ ├── playlisteditor │ │ │ └── playlisteditor.js │ │ ├── playmenu.js │ │ ├── pluginmanager.js │ │ ├── polyfills │ │ │ ├── array.js │ │ │ ├── bind.js │ │ │ ├── objectassign.js │ │ │ └── raf.js │ │ ├── prompt │ │ │ ├── nativeprompt.js │ │ │ ├── prompt.js │ │ │ └── prompt.template.html │ │ ├── qualityoptions.js │ │ ├── recordingcreator │ │ │ ├── empty.png │ │ │ ├── recordingbutton.js │ │ │ ├── recordingcreator.css │ │ │ ├── recordingcreator.js │ │ │ ├── recordingcreator.template.html │ │ │ ├── recordingeditor.js │ │ │ ├── recordingeditor.template.html │ │ │ ├── recordingfields.css │ │ │ ├── recordingfields.js │ │ │ ├── recordingfields.template.html │ │ │ ├── recordinghelper.js │ │ │ ├── seriesrecordingeditor.js │ │ │ └── seriesrecordingeditor.template.html │ │ ├── refreshdialog │ │ │ └── refreshdialog.js │ │ ├── registrationservices │ │ │ └── registrationservices.js │ │ ├── require │ │ │ ├── requirecss.js │ │ │ └── requiretext.js │ │ ├── resize-observer-polyfill │ │ │ └── ResizeObserver.js │ │ ├── router.js │ │ ├── sanitizefilename.js │ │ ├── scroller │ │ │ └── smoothscroller.js │ │ ├── scrollhelper.js │ │ ├── scrollstyles.css │ │ ├── search │ │ │ ├── searchfields.css │ │ │ ├── searchfields.js │ │ │ ├── searchfields.template.html │ │ │ ├── searchresults.js │ │ │ └── searchresults.template.html │ │ ├── serverrestartdialog │ │ │ └── serverrestartdialog.js │ │ ├── serviceworker │ │ │ ├── notifications.js │ │ │ └── sync.js │ │ ├── sessionplayer.js │ │ ├── shell.js │ │ ├── shortcuts.js │ │ ├── skinmanager.js │ │ ├── slideshow │ │ │ ├── slideshow.js │ │ │ └── style.css │ │ ├── sortmenu │ │ │ ├── sortmenu.js │ │ │ └── sortmenu.template.html │ │ ├── staticbackdrops.js │ │ ├── strings │ │ │ ├── ar.json │ │ │ ├── be-by.json │ │ │ ├── bg-bg.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── el.json │ │ │ ├── en-gb.json │ │ │ ├── en-us.json │ │ │ ├── es-ar.json │ │ │ ├── es-mx.json │ │ │ ├── es.json │ │ │ ├── fi.json │ │ │ ├── fr-ca.json │ │ │ ├── fr.json │ │ │ ├── gsw.json │ │ │ ├── he.json │ │ │ ├── hr.json │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── kk.json │ │ │ ├── ko.json │ │ │ ├── lt-lt.json │ │ │ ├── ms.json │ │ │ ├── nb.json │ │ │ ├── nl.json │ │ │ ├── pl.json │ │ │ ├── pt-br.json │ │ │ ├── pt-pt.json │ │ │ ├── ro.json │ │ │ ├── ru.json │ │ │ ├── sk.json │ │ │ ├── sl-si.json │ │ │ ├── sv.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── vi.json │ │ │ ├── zh-cn.json │ │ │ ├── zh-hk.json │ │ │ └── zh-tw.json │ │ ├── subtitleeditor │ │ │ ├── subtitleeditor.css │ │ │ ├── subtitleeditor.js │ │ │ └── subtitleeditor.template.html │ │ ├── subtitlesettings │ │ │ ├── subtitleappearancehelper.js │ │ │ ├── subtitlesettings.js │ │ │ └── subtitlesettings.template.html │ │ ├── sync │ │ │ ├── emby-downloadbutton.js │ │ │ ├── sync.js │ │ │ ├── syncjobeditor.js │ │ │ └── syncjoblist.js │ │ ├── tabbedview │ │ │ ├── itemstab.js │ │ │ └── tabbedview.js │ │ ├── thememediaplayer.js │ │ ├── themes │ │ │ ├── appletv │ │ │ │ └── theme.css │ │ │ ├── blueradiance │ │ │ │ ├── bg.jpg │ │ │ │ └── theme.css │ │ │ ├── dark-green │ │ │ │ └── theme.css │ │ │ ├── dark-red │ │ │ │ └── theme.css │ │ │ ├── dark │ │ │ │ └── theme.css │ │ │ ├── halloween │ │ │ │ └── theme.css │ │ │ ├── light-blue │ │ │ │ └── theme.css │ │ │ ├── light-green │ │ │ │ └── theme.css │ │ │ ├── light-pink │ │ │ │ └── theme.css │ │ │ ├── light-purple │ │ │ │ └── theme.css │ │ │ ├── light-red │ │ │ │ └── theme.css │ │ │ ├── light │ │ │ │ └── theme.css │ │ │ ├── logodark.png │ │ │ ├── logowhite.png │ │ │ └── wmc │ │ │ │ └── theme.css │ │ ├── toast │ │ │ ├── toast.css │ │ │ └── toast.js │ │ ├── touchhelper.js │ │ ├── upnextdialog │ │ │ ├── upnextdialog.css │ │ │ └── upnextdialog.js │ │ ├── userdatabuttons │ │ │ ├── emby-playstatebutton.js │ │ │ ├── emby-ratingbutton.js │ │ │ ├── userdatabuttons.css │ │ │ └── userdatabuttons.js │ │ ├── usersettings │ │ │ ├── usersettings.js │ │ │ └── usersettingsbuilder.js │ │ ├── viewmanager │ │ │ ├── viewcontainer-lite.css │ │ │ ├── viewcontainer-lite.js │ │ │ └── viewmanager.js │ │ ├── viewsettings │ │ │ ├── viewsettings.js │ │ │ └── viewsettings.template.html │ │ ├── visibleinviewport.js │ │ └── youtubeplayer │ │ │ ├── plugin.js │ │ │ └── style.css │ ├── fetch │ │ └── fetch.js │ ├── hlsjs │ │ ├── dist │ │ │ └── hls.min.js │ │ └── hls.js.sublime-project │ ├── howlerjs │ │ └── dist │ │ │ └── howler.min.js │ ├── jquery │ │ └── dist │ │ │ └── jquery.slim.min.js │ ├── libjass │ │ ├── libjass.css │ │ └── libjass.min.js │ ├── query-string │ │ ├── index.js │ │ └── test.js │ ├── requirejs │ │ └── require.js │ └── webcomponentsjs │ │ └── webcomponents-lite.min.js │ ├── camerauploadsettings.html │ ├── components │ ├── accessschedule │ │ ├── accessschedule.js │ │ └── accessschedule.template.html │ ├── activitylog.js │ ├── apphost.js │ ├── categorysyncbuttons.js │ ├── channelmapper │ │ └── channelmapper.js │ ├── directorybrowser │ │ ├── directorybrowser.css │ │ └── directorybrowser.js │ ├── favoriteitems.js │ ├── filterdialog │ │ ├── filterdialog.js │ │ ├── filterdialog.template.html │ │ └── style.css │ ├── groupedcards.js │ ├── guestinviter │ │ ├── connectlink.js │ │ ├── connectlink.template.html │ │ ├── guestinviter.js │ │ └── guestinviter.template.html │ ├── humanedate.js │ ├── iap.js │ ├── imageoptionseditor │ │ ├── imageoptionseditor.js │ │ └── imageoptionseditor.template.html │ ├── libraryoptionseditor │ │ ├── libraryoptionseditor.js │ │ └── libraryoptionseditor.template.html │ ├── medialibrarycreator │ │ ├── medialibrarycreator.js │ │ └── medialibrarycreator.template.html │ ├── medialibraryeditor │ │ ├── medialibraryeditor.js │ │ └── medialibraryeditor.template.html │ ├── navdrawer │ │ ├── navdrawer.css │ │ └── navdrawer.js │ ├── remotecontrol.js │ ├── tunerpicker.js │ ├── tvproviders │ │ ├── schedulesdirect.js │ │ ├── schedulesdirect.template.html │ │ ├── xmltv.js │ │ └── xmltv.template.html │ └── viewcontainer-lite.js │ ├── connectlogin.html │ ├── css │ ├── dashboard.css │ ├── detailtable.css │ ├── images │ │ ├── ani_equalizer_white.gif │ │ ├── iossplash.png │ │ ├── logindefault.png │ │ ├── logoblack.png │ │ └── supporter │ │ │ ├── premiumflag.png │ │ │ ├── supporterbadge.png │ │ │ └── supporterflag.png │ ├── librarybrowser.css │ ├── livetv.css │ ├── metadataeditor.css │ ├── nowplaying.css │ ├── site.css │ └── videoosd.css │ ├── dashboard.html │ ├── dashboard │ ├── aboutpage.js │ ├── dashboardgeneral.js │ ├── dashboardhosting.js │ ├── devicesupload.js │ ├── librarydisplay.js │ ├── librarysettings.js │ ├── livetvtuner.js │ ├── logpage.js │ ├── serveractivity.js │ ├── wizardfinishpage.js │ ├── wizardremoteaccess.js │ ├── wizardsettings.js │ └── wizardstart.js │ ├── dashboardgeneral.html │ ├── dashboardhosting.html │ ├── devices │ ├── device.html │ ├── device.js │ ├── devices.html │ ├── devices.js │ └── ios │ │ └── ios.css │ ├── devicesupload.html │ ├── dlnaprofile.html │ ├── dlnaprofiles.html │ ├── dlnasettings.html │ ├── edititemmetadata.html │ ├── encodingsettings.html │ ├── favicon.ico │ ├── forgotpassword.html │ ├── forgotpasswordpin.html │ ├── home.html │ ├── home │ ├── favorites.js │ ├── home.js │ └── hometab.js │ ├── index.html │ ├── itemdetails.html │ ├── legacy │ ├── buttonenabled.js │ ├── dashboard.js │ ├── fnchecked.js │ └── selectmenu.js │ ├── library.html │ ├── librarydisplay.html │ ├── librarysettings.html │ ├── list │ ├── list.html │ └── list.js │ ├── livetv.html │ ├── livetvguideprovider.html │ ├── livetvsettings.html │ ├── livetvstatus.html │ ├── livetvtuner.html │ ├── log.html │ ├── login.html │ ├── managedownloads.html │ ├── manifest.json │ ├── metadataimages.html │ ├── metadatanfo.html │ ├── movies.html │ ├── music.html │ ├── mypreferencesdisplay.html │ ├── mypreferenceshome.html │ ├── mypreferenceslanguages.html │ ├── mypreferencesmenu.html │ ├── mypreferencessubtitles.html │ ├── myprofile.html │ ├── mysync.html │ ├── mysyncjob.html │ ├── mysyncsettings.html │ ├── notificationsetting.html │ ├── notificationsettings.html │ ├── nowplaying.html │ ├── playbackconfiguration.html │ ├── plugincatalog.html │ ├── plugins.html │ ├── robots.txt │ ├── scheduledtask.html │ ├── scheduledtasks.html │ ├── scripts │ ├── addpluginpage.js │ ├── apploader.js │ ├── appservices.js │ ├── autobackdrops.js │ ├── camerauploadsettings.js │ ├── connectlogin.js │ ├── dashboardpage.js │ ├── dlnaprofile.js │ ├── dlnaprofiles.js │ ├── dlnasettings.js │ ├── edititemmetadata.js │ ├── editorsidebar.js │ ├── encodingsettings.js │ ├── episodes.js │ ├── forgotpassword.js │ ├── forgotpasswordpin.js │ ├── itembynamedetailpage.js │ ├── itemdetailpage.js │ ├── librarybrowser.js │ ├── librarymenu.js │ ├── livetvchannels.js │ ├── livetvcomponents.js │ ├── livetvguide.js │ ├── livetvguideprovider.js │ ├── livetvrecordings.js │ ├── livetvschedule.js │ ├── livetvseriestimers.js │ ├── livetvsettings.js │ ├── livetvstatus.js │ ├── livetvsuggested.js │ ├── loginpage.js │ ├── managedownloads.js │ ├── medialibrarypage.js │ ├── metadataimagespage.js │ ├── metadatanfo.js │ ├── moviecollections.js │ ├── moviegenres.js │ ├── movies.js │ ├── moviesrecommended.js │ ├── movietrailers.js │ ├── musicalbums.js │ ├── musicartists.js │ ├── musicgenres.js │ ├── musicplaylists.js │ ├── musicrecommended.js │ ├── mypreferencescommon.js │ ├── mypreferencesdisplay.js │ ├── mypreferenceshome.js │ ├── mypreferenceslanguages.js │ ├── mypreferencessubtitles.js │ ├── myprofile.js │ ├── mysync.js │ ├── mysyncsettings.js │ ├── notificationsetting.js │ ├── notificationsettings.js │ ├── nowplayingpage.js │ ├── playbackconfiguration.js │ ├── playlistedit.js │ ├── playlists.js │ ├── plugincatalogpage.js │ ├── pluginspage.js │ ├── scheduledtaskpage.js │ ├── scheduledtaskspage.js │ ├── searchpage.js │ ├── searchtab.js │ ├── selectserver.js │ ├── serversecurity.js │ ├── site.js │ ├── songs.js │ ├── streamingsettings.js │ ├── supporterkeypage.js │ ├── syncactivity.js │ ├── syncsettings.js │ ├── taskbutton.js │ ├── themeloader.js │ ├── tvgenres.js │ ├── tvlatest.js │ ├── tvrecommended.js │ ├── tvshows.js │ ├── tvstudios.js │ ├── tvupcoming.js │ ├── useredit.js │ ├── userlibraryaccess.js │ ├── usernew.js │ ├── userparentalcontrol.js │ ├── userpassword.js │ ├── userpasswordpage.js │ ├── userprofilespage.js │ ├── videoosd.js │ ├── wizardagreement.js │ └── wizarduserpage.js │ ├── search.html │ ├── selectserver.html │ ├── serveractivity.html │ ├── serversecurity.html │ ├── serviceworker.js │ ├── streamingsettings.html │ ├── strings │ ├── ar.json │ ├── be-BY.json │ ├── bg-BG.json │ ├── ca.json │ ├── cs.json │ ├── da.json │ ├── de.json │ ├── el.json │ ├── en-GB.json │ ├── en-US.json │ ├── es-AR.json │ ├── es-MX.json │ ├── es.json │ ├── fa.json │ ├── fi.json │ ├── fr-CA.json │ ├── fr.json │ ├── gsw.json │ ├── he.json │ ├── hi-IN.json │ ├── hr.json │ ├── hu.json │ ├── id.json │ ├── is-IS.json │ ├── it.json │ ├── kk.json │ ├── ko.json │ ├── lt-LT.json │ ├── ms.json │ ├── nb.json │ ├── nl.json │ ├── no.json │ ├── pl.json │ ├── pt-BR.json │ ├── pt-PT.json │ ├── ro.json │ ├── ru.json │ ├── sk.json │ ├── sl-SI.json │ ├── sv.json │ ├── tr.json │ ├── uk.json │ ├── vi.json │ ├── zh-CN.json │ ├── zh-HK.json │ └── zh-TW.json │ ├── supporterkey.html │ ├── syncactivity.html │ ├── syncsettings.html │ ├── thirdparty │ └── jstree │ │ ├── jstree.js │ │ └── themes │ │ └── default │ │ ├── 32px.png │ │ ├── style.css │ │ └── throbber.gif │ ├── touchicon.png │ ├── touchicon114.png │ ├── touchicon144.png │ ├── touchicon72.png │ ├── tv.html │ ├── useredit.html │ ├── userlibraryaccess.html │ ├── usernew.html │ ├── userparentalcontrol.html │ ├── userpassword.html │ ├── userprofiles.html │ ├── videoosd.html │ ├── wizardagreement.html │ ├── wizardfinish.html │ ├── wizardlibrary.html │ ├── wizardremoteaccess.html │ ├── wizardsettings.html │ ├── wizardstart.html │ └── wizarduser.html ├── MediaBrowser.XbmcMetadata ├── Configuration │ └── NfoOptions.cs ├── EntryPoint.cs ├── MediaBrowser.XbmcMetadata.csproj ├── Parsers │ ├── BaseNfoParser.cs │ ├── EpisodeNfoParser.cs │ ├── MovieNfoParser.cs │ ├── SeasonNfoParser.cs │ └── SeriesNfoParser.cs ├── Properties │ └── AssemblyInfo.cs ├── Providers │ ├── AlbumNfoProvider.cs │ ├── ArtistNfoProvider.cs │ ├── BaseNfoProvider.cs │ ├── BaseVideoNfoProvider.cs │ ├── EpisodeNfoProvider.cs │ ├── MovieNfoProvider.cs │ ├── SeasonNfoProvider.cs │ └── SeriesNfoProvider.cs ├── Savers │ ├── AlbumNfoSaver.cs │ ├── ArtistNfoSaver.cs │ ├── BaseNfoSaver.cs │ ├── EpisodeNfoSaver.cs │ ├── MovieNfoSaver.cs │ ├── SeasonNfoSaver.cs │ └── SeriesNfoSaver.cs └── packages.config ├── MediaBrowser.sln ├── Mono.Nat ├── AbstractNatDevice.cs ├── Enums │ └── ProtocolType.cs ├── EventArgs │ └── DeviceEventArgs.cs ├── INatDevice.cs ├── ISearcher.cs ├── Mapping.cs ├── Mono.Nat.csproj ├── NatManager.cs ├── NatProtocol.cs ├── Pmp │ ├── PmpConstants.cs │ ├── PmpNatDevice.cs │ └── PmpSearcher.cs ├── Properties │ └── AssemblyInfo.cs └── Upnp │ ├── Messages │ ├── GetServicesMessage.cs │ ├── Requests │ │ └── CreatePortMappingMessage.cs │ └── UpnpMessage.cs │ ├── Searchers │ └── UpnpSearcher.cs │ └── UpnpNatDevice.cs ├── README.md ├── RSSDP ├── DeviceAvailableEventArgs.cs ├── DeviceEventArgs.cs ├── DeviceUnavailableEventArgs.cs ├── DiscoveredSsdpDevice.cs ├── DisposableManagedObjectBase.cs ├── HttpParserBase.cs ├── HttpRequestParser.cs ├── HttpResponseParser.cs ├── IEnumerableExtensions.cs ├── ISsdpCommunicationsServer.cs ├── ISsdpDeviceLocator.cs ├── ISsdpDevicePublisher.cs ├── Properties │ └── AssemblyInfo.cs ├── RSSDP.csproj ├── RequestReceivedEventArgs.cs ├── ResponseReceivedEventArgs.cs ├── SsdpCommunicationsServer.cs ├── SsdpConstants.cs ├── SsdpDevice.cs ├── SsdpDeviceLocator.cs ├── SsdpDevicePublisher.cs ├── SsdpEmbeddedDevice.cs └── SsdpRootDevice.cs ├── SharedVersion.cs ├── SocketHttpListener ├── ByteOrder.cs ├── CloseEventArgs.cs ├── CloseStatusCode.cs ├── CompressionMethod.cs ├── ErrorEventArgs.cs ├── Ext.cs ├── Fin.cs ├── HttpBase.cs ├── HttpResponse.cs ├── Mask.cs ├── MessageEventArgs.cs ├── Net │ ├── AuthenticationSchemeSelector.cs │ ├── AuthenticationTypes.cs │ ├── BoundaryType.cs │ ├── ChunkStream.cs │ ├── ChunkedInputStream.cs │ ├── CookieHelper.cs │ ├── EntitySendFormat.cs │ ├── HttpConnection.cs │ ├── HttpEndPointListener.cs │ ├── HttpEndPointManager.cs │ ├── HttpKnownHeaderNames.cs │ ├── HttpListener.cs │ ├── HttpListenerBasicIdentity.cs │ ├── HttpListenerContext.Managed.cs │ ├── HttpListenerContext.cs │ ├── HttpListenerPrefixCollection.cs │ ├── HttpListenerRequest.Managed.cs │ ├── HttpListenerRequest.cs │ ├── HttpListenerRequestUriBuilder.cs │ ├── HttpListenerResponse.Managed.cs │ ├── HttpListenerResponse.cs │ ├── HttpRequestStream.Managed.cs │ ├── HttpRequestStream.cs │ ├── HttpResponseStream.Managed.cs │ ├── HttpResponseStream.cs │ ├── HttpStatusCode.cs │ ├── HttpStatusDescription.cs │ ├── HttpStreamAsyncResult.cs │ ├── HttpVersion.cs │ ├── ListenerPrefix.cs │ ├── UriScheme.cs │ ├── WebHeaderCollection.cs │ ├── WebHeaderEncoding.cs │ └── WebSockets │ │ ├── HttpListenerWebSocketContext.cs │ │ ├── HttpWebSocket.Managed.cs │ │ ├── HttpWebSocket.cs │ │ ├── WebSocketCloseStatus.cs │ │ ├── WebSocketContext.cs │ │ └── WebSocketValidate.cs ├── Opcode.cs ├── PayloadData.cs ├── Primitives │ └── ITextEncoding.cs ├── Properties │ └── AssemblyInfo.cs ├── Rsv.cs ├── SocketHttpListener.csproj ├── SocketStream.cs ├── WebSocket.cs ├── WebSocketException.cs └── WebSocketFrame.cs └── ThirdParty ├── emby ├── Emby.Server.CinemaMode.dll ├── Emby.Server.Connect.dll ├── Emby.Server.MediaEncoding.dll └── Emby.Server.Sync.dll └── taglib └── TagLib.dll /.gitattributes: -------------------------------------------------------------------------------- 1 | /MediaBrowser.sln merge=ours 2 | /MediaBrowser.sln.GhostDoc.xml merge=ours 3 | /LICENSE.md merge=ours 4 | /README.md merge=ours 5 | /.gitignore merge=ours 6 | /Emby.Naming/ merge=ours 7 | /Emby.Server.Unix/ merge=ours 8 | /*/*.csproj merge=ours 9 | -------------------------------------------------------------------------------- /BDInfo/BDInfo.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | netcoreapp2.1 7 | false 8 | 9 | 10 | -------------------------------------------------------------------------------- /BDInfo/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("BDInfo")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("BDInfo")] 14 | [assembly: AssemblyCopyright("Copyright © 2016")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // 26 | // You can specify all the values or you can default the Build and Revision Numbers 27 | // by using the '*' as shown below: 28 | // [assembly: AssemblyVersion("1.0.*")] 29 | [assembly: AssemblyVersion("1.0.1")] -------------------------------------------------------------------------------- /BDInfo/ReadMe.txt: -------------------------------------------------------------------------------- 1 | The source is taken from the BDRom folder of this project: 2 | 3 | http://www.cinemasquid.com/blu-ray/tools/bdinfo 4 | 5 | BDInfoSettings was taken from the FormSettings class, and changed so that the settings all return defaults. -------------------------------------------------------------------------------- /DvdLib/BigEndianBinaryReader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.IO; 6 | 7 | namespace DvdLib 8 | { 9 | public class BigEndianBinaryReader : BinaryReader 10 | { 11 | public BigEndianBinaryReader(Stream input) 12 | : base(input) 13 | { 14 | } 15 | 16 | public override ushort ReadUInt16() 17 | { 18 | return BitConverter.ToUInt16(ReadAndReverseBytes(2), 0); 19 | } 20 | 21 | public override uint ReadUInt32() 22 | { 23 | return BitConverter.ToUInt32(ReadAndReverseBytes(4), 0); 24 | } 25 | 26 | private byte[] ReadAndReverseBytes(int count) 27 | { 28 | byte[] val = base.ReadBytes(count); 29 | Array.Reverse(val, 0, count); 30 | return val; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /DvdLib/DvdLib.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | netcoreapp2.1 7 | false 8 | 9 | 10 | -------------------------------------------------------------------------------- /DvdLib/Ifo/AudioAttributes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DvdLib.Ifo 7 | { 8 | public enum AudioCodec 9 | { 10 | AC3 = 0, 11 | MPEG1 = 2, 12 | MPEG2ext = 3, 13 | LPCM = 4, 14 | DTS = 6, 15 | } 16 | 17 | public enum ApplicationMode 18 | { 19 | Unspecified = 0, 20 | Karaoke = 1, 21 | Surround = 2, 22 | } 23 | 24 | public class AudioAttributes 25 | { 26 | public readonly AudioCodec Codec; 27 | public readonly bool MultichannelExtensionPresent; 28 | public readonly ApplicationMode Mode; 29 | public readonly byte QuantDRC; 30 | public readonly byte SampleRate; 31 | public readonly byte Channels; 32 | public readonly ushort LanguageCode; 33 | public readonly byte LanguageExtension; 34 | public readonly byte CodeExtension; 35 | } 36 | 37 | public class MultiChannelExtension 38 | { 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /DvdLib/Ifo/Cell.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.IO; 6 | 7 | namespace DvdLib.Ifo 8 | { 9 | public class Cell 10 | { 11 | public CellPlaybackInfo PlaybackInfo { get; private set; } 12 | public CellPositionInfo PositionInfo { get; private set; } 13 | 14 | internal void ParsePlayback(BinaryReader br) 15 | { 16 | PlaybackInfo = new CellPlaybackInfo(br); 17 | } 18 | 19 | internal void ParsePosition(BinaryReader br) 20 | { 21 | PositionInfo = new CellPositionInfo(br); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DvdLib/Ifo/CellPositionInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.IO; 6 | 7 | namespace DvdLib.Ifo 8 | { 9 | public class CellPositionInfo 10 | { 11 | public readonly ushort VOBId; 12 | public readonly byte CellId; 13 | 14 | internal CellPositionInfo(BinaryReader br) 15 | { 16 | VOBId = br.ReadUInt16(); 17 | br.ReadByte(); 18 | CellId = br.ReadByte(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DvdLib/Ifo/Chapter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DvdLib.Ifo 7 | { 8 | public class Chapter 9 | { 10 | public ushort ProgramChainNumber { get; private set; } 11 | public ushort ProgramNumber { get; private set; } 12 | public uint ChapterNumber { get; private set; } 13 | 14 | public Chapter(ushort pgcNum, ushort programNum, uint chapterNum) 15 | { 16 | ProgramChainNumber = pgcNum; 17 | ProgramNumber = programNum; 18 | ChapterNumber = chapterNum; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /DvdLib/Ifo/DvdTime.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DvdLib.Ifo 7 | { 8 | public class DvdTime 9 | { 10 | public readonly byte Hour, Minute, Second, Frames, FrameRate; 11 | 12 | public DvdTime(byte[] data) 13 | { 14 | Hour = GetBCDValue(data[0]); 15 | Minute = GetBCDValue(data[1]); 16 | Second = GetBCDValue(data[2]); 17 | Frames = GetBCDValue((byte)(data[3] & 0x3F)); 18 | 19 | if ((data[3] & 0x80) != 0) FrameRate = 30; 20 | else if ((data[3] & 0x40) != 0) FrameRate = 25; 21 | } 22 | 23 | private byte GetBCDValue(byte data) 24 | { 25 | return (byte)((((data & 0xF0) >> 4) * 10) + (data & 0x0F)); 26 | } 27 | 28 | public static explicit operator TimeSpan(DvdTime time) 29 | { 30 | int ms = (int)(((1.0 / (double)time.FrameRate) * time.Frames) * 1000.0); 31 | return new TimeSpan(0, time.Hour, time.Minute, time.Second, ms); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /DvdLib/Ifo/PgcCommandTable.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DvdLib.Ifo 7 | { 8 | public class ProgramChainCommandTable 9 | { 10 | public readonly ushort LastByteAddress; 11 | public readonly List PreCommands; 12 | public readonly List PostCommands; 13 | public readonly List CellCommands; 14 | } 15 | 16 | public class VirtualMachineCommand 17 | { 18 | public readonly byte[] Command; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DvdLib/Ifo/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DvdLib.Ifo 7 | { 8 | public class Program 9 | { 10 | public readonly List Cells; 11 | 12 | public Program(List cells) 13 | { 14 | Cells = cells; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Emby.Dlna/Common/Argument.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna.Common 3 | { 4 | public class Argument 5 | { 6 | public string Name { get; set; } 7 | 8 | public string Direction { get; set; } 9 | 10 | public string RelatedStateVariable { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Emby.Dlna/Common/DeviceIcon.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna.Common 3 | { 4 | public class DeviceIcon 5 | { 6 | public string Url { get; set; } 7 | 8 | public string MimeType { get; set; } 9 | 10 | public int Width { get; set; } 11 | 12 | public int Height { get; set; } 13 | 14 | public string Depth { get; set; } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("{0}x{1}", Height, Width); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Dlna/Common/DeviceService.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna.Common 3 | { 4 | public class DeviceService 5 | { 6 | public string ServiceType { get; set; } 7 | 8 | public string ServiceId { get; set; } 9 | 10 | public string ScpdUrl { get; set; } 11 | 12 | public string ControlUrl { get; set; } 13 | 14 | public string EventSubUrl { get; set; } 15 | 16 | public override string ToString() 17 | { 18 | return string.Format("{0}", ServiceId); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Dlna/Common/ServiceAction.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Emby.Dlna.Common 4 | { 5 | public class ServiceAction 6 | { 7 | public string Name { get; set; } 8 | 9 | public List ArgumentList { get; set; } 10 | 11 | public override string ToString() 12 | { 13 | return Name; 14 | } 15 | 16 | public ServiceAction() 17 | { 18 | ArgumentList = new List(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Dlna/Common/StateVariable.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System; 3 | 4 | namespace Emby.Dlna.Common 5 | { 6 | public class StateVariable 7 | { 8 | public string Name { get; set; } 9 | 10 | public string DataType { get; set; } 11 | 12 | public bool SendsEvents { get; set; } 13 | 14 | public string[] AllowedValues { get; set; } 15 | 16 | public override string ToString() 17 | { 18 | return Name; 19 | } 20 | 21 | public StateVariable() 22 | { 23 | AllowedValues = Array.Empty(); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Emby.Dlna/Configuration/DlnaOptions.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna.Configuration 3 | { 4 | public class DlnaOptions 5 | { 6 | public bool EnablePlayTo { get; set; } 7 | public bool EnableServer { get; set; } 8 | public bool EnableDebugLog { get; set; } 9 | public bool BlastAliveMessages { get; set; } 10 | public int ClientDiscoveryIntervalSeconds { get; set; } 11 | public int BlastAliveMessageIntervalSeconds { get; set; } 12 | public string DefaultUserId { get; set; } 13 | 14 | public DlnaOptions() 15 | { 16 | EnablePlayTo = true; 17 | EnableServer = true; 18 | BlastAliveMessages = true; 19 | ClientDiscoveryIntervalSeconds = 60; 20 | BlastAliveMessageIntervalSeconds = 1800; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Emby.Dlna/ConfigurationExtension.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Common.Configuration; 2 | using Emby.Dlna.Configuration; 3 | using System.Collections.Generic; 4 | 5 | namespace Emby.Dlna 6 | { 7 | public static class ConfigurationExtension 8 | { 9 | public static DlnaOptions GetDlnaConfiguration(this IConfigurationManager manager) 10 | { 11 | return manager.GetConfiguration("dlna"); 12 | } 13 | } 14 | 15 | public class DlnaConfigurationFactory : IConfigurationFactory 16 | { 17 | public IEnumerable GetConfigurations() 18 | { 19 | return new ConfigurationStore[] 20 | { 21 | new ConfigurationStore 22 | { 23 | Key = "dlna", 24 | ConfigurationType = typeof (DlnaOptions) 25 | } 26 | }; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Emby.Dlna/ControlRequest.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | 4 | namespace Emby.Dlna 5 | { 6 | public class ControlRequest 7 | { 8 | public IDictionary Headers { get; set; } 9 | 10 | public Stream InputXml { get; set; } 11 | 12 | public string TargetServerUuId { get; set; } 13 | 14 | public string RequestedUrl { get; set; } 15 | 16 | public ControlRequest() 17 | { 18 | Headers = new Dictionary(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Dlna/ControlResponse.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Emby.Dlna 4 | { 5 | public class ControlResponse 6 | { 7 | public IDictionary Headers { get; set; } 8 | 9 | public string Xml { get; set; } 10 | 11 | public bool IsSuccessful { get; set; } 12 | 13 | public ControlResponse() 14 | { 15 | Headers = new Dictionary(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Emby.Dlna/Didl/Filter.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Model.Extensions; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace Emby.Dlna.Didl 6 | { 7 | public class Filter 8 | { 9 | private readonly string[] _fields; 10 | private readonly bool _all; 11 | 12 | public Filter() 13 | : this("*") 14 | { 15 | 16 | } 17 | 18 | public Filter(string filter) 19 | { 20 | _all = StringHelper.EqualsIgnoreCase(filter, "*"); 21 | 22 | _fields = (filter ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 23 | } 24 | 25 | public bool Contains(string field) 26 | { 27 | // Don't bother with this. Some clients (media monkey) use the filter and then don't display very well when very little data comes back. 28 | return true; 29 | //return _all || ListHelper.ContainsIgnoreCase(_fields, field); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Emby.Dlna/EventSubscriptionResponse.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Emby.Dlna 4 | { 5 | public class EventSubscriptionResponse 6 | { 7 | public string Content { get; set; } 8 | public string ContentType { get; set; } 9 | 10 | public Dictionary Headers { get; set; } 11 | 12 | public EventSubscriptionResponse() 13 | { 14 | Headers = new Dictionary(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Emby.Dlna/Eventing/EventSubscription.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Dlna.Eventing 4 | { 5 | public class EventSubscription 6 | { 7 | public string Id { get; set; } 8 | public string CallbackUrl { get; set; } 9 | public string NotificationType { get; set; } 10 | 11 | public DateTime SubscriptionTime { get; set; } 12 | public int TimeoutSeconds { get; set; } 13 | 14 | public long TriggerCount { get; set; } 15 | 16 | public void IncrementTriggerCount() 17 | { 18 | if (TriggerCount == long.MaxValue) 19 | { 20 | TriggerCount = 0; 21 | } 22 | 23 | TriggerCount++; 24 | } 25 | 26 | public bool IsExpired 27 | { 28 | get 29 | { 30 | return SubscriptionTime.AddSeconds(TimeoutSeconds) >= DateTime.UtcNow; 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Emby.Dlna/IConnectionManager.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna 3 | { 4 | public interface IConnectionManager : IEventManager, IUpnpService 5 | { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Dlna/IContentDirectory.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna 3 | { 4 | public interface IContentDirectory : IEventManager, IUpnpService 5 | { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Dlna/IEventManager.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna 3 | { 4 | public interface IEventManager 5 | { 6 | /// 7 | /// Cancels the event subscription. 8 | /// 9 | /// The subscription identifier. 10 | EventSubscriptionResponse CancelEventSubscription(string subscriptionId); 11 | 12 | /// 13 | /// Renews the event subscription. 14 | /// 15 | EventSubscriptionResponse RenewEventSubscription(string subscriptionId, string notificationType, string requestedTimeoutString, string callbackUrl); 16 | 17 | /// 18 | /// Creates the event subscription. 19 | /// 20 | EventSubscriptionResponse CreateEventSubscription(string notificationType, string requestedTimeoutString, string callbackUrl); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Emby.Dlna/IMediaReceiverRegistrar.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Dlna 3 | { 4 | public interface IMediaReceiverRegistrar : IEventManager, IUpnpService 5 | { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Dlna/IUpnpService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Emby.Dlna 4 | { 5 | public interface IUpnpService 6 | { 7 | /// 8 | /// Gets the content directory XML. 9 | /// 10 | /// The headers. 11 | /// System.String. 12 | string GetServiceXml(IDictionary headers); 13 | 14 | /// 15 | /// Processes the control request. 16 | /// 17 | /// The request. 18 | /// ControlResponse. 19 | ControlResponse ProcessControlRequest(ControlRequest request); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Dlna/Images/logo120.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/logo120.jpg -------------------------------------------------------------------------------- /Emby.Dlna/Images/logo120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/logo120.png -------------------------------------------------------------------------------- /Emby.Dlna/Images/logo240.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/logo240.jpg -------------------------------------------------------------------------------- /Emby.Dlna/Images/logo240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/logo240.png -------------------------------------------------------------------------------- /Emby.Dlna/Images/logo48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/logo48.jpg -------------------------------------------------------------------------------- /Emby.Dlna/Images/logo48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/logo48.png -------------------------------------------------------------------------------- /Emby.Dlna/Images/people48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/people48.jpg -------------------------------------------------------------------------------- /Emby.Dlna/Images/people48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/people48.png -------------------------------------------------------------------------------- /Emby.Dlna/Images/people480.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/people480.jpg -------------------------------------------------------------------------------- /Emby.Dlna/Images/people480.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Dlna/Images/people480.png -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/CurrentIdEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class CurrentIdEventArgs : EventArgs 6 | { 7 | public string Id { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/PlaybackProgressEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class PlaybackProgressEventArgs : EventArgs 6 | { 7 | public uBaseObject MediaInfo { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/PlaybackStartEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class PlaybackStartEventArgs : EventArgs 6 | { 7 | public uBaseObject MediaInfo { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/PlaybackStoppedEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class PlaybackStoppedEventArgs : EventArgs 6 | { 7 | public uBaseObject MediaInfo { get; set; } 8 | } 9 | 10 | public class MediaChangedEventArgs : EventArgs 11 | { 12 | public uBaseObject OldMediaInfo { get; set; } 13 | public uBaseObject NewMediaInfo { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/PlaylistItem.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Model.Dlna; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class PlaylistItem 6 | { 7 | public string StreamUrl { get; set; } 8 | 9 | public string Didl { get; set; } 10 | 11 | public StreamInfo StreamInfo { get; set; } 12 | 13 | public DeviceProfile Profile { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/TRANSPORTSTATE.cs: -------------------------------------------------------------------------------- 1 | namespace Emby.Dlna.PlayTo 2 | { 3 | public enum TRANSPORTSTATE 4 | { 5 | STOPPED, 6 | PLAYING, 7 | TRANSITIONING, 8 | PAUSED_PLAYBACK, 9 | PAUSED 10 | } 11 | } -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/TransportStateEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class TransportStateEventArgs : EventArgs 6 | { 7 | public TRANSPORTSTATE State { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/UpnpContainer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Xml.Linq; 3 | using Emby.Dlna.Ssdp; 4 | 5 | namespace Emby.Dlna.PlayTo 6 | { 7 | public class UpnpContainer : uBaseObject 8 | { 9 | public static uBaseObject Create(XElement container) 10 | { 11 | if (container == null) 12 | { 13 | throw new ArgumentNullException("container"); 14 | } 15 | 16 | return new uBaseObject 17 | { 18 | Id = container.GetAttributeValue(uPnpNamespaces.Id), 19 | ParentId = container.GetAttributeValue(uPnpNamespaces.ParentId), 20 | Title = container.GetValue(uPnpNamespaces.title), 21 | IconUrl = container.GetValue(uPnpNamespaces.Artwork), 22 | UpnpClass = container.GetValue(uPnpNamespaces.uClass) 23 | }; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Emby.Dlna/PlayTo/uParserObject.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Linq; 2 | 3 | namespace Emby.Dlna.PlayTo 4 | { 5 | public class uParserObject 6 | { 7 | public XElement Element { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /Emby.Dlna/Profiles/DenonAvrProfile.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Model.Dlna; 2 | using System.Xml.Serialization; 3 | 4 | namespace Emby.Dlna.Profiles 5 | { 6 | [System.Xml.Serialization.XmlRoot("Profile")] 7 | public class DenonAvrProfile : DefaultProfile 8 | { 9 | public DenonAvrProfile() 10 | { 11 | Name = "Denon AVR"; 12 | 13 | SupportedMediaTypes = "Audio"; 14 | 15 | Identification = new DeviceIdentification 16 | { 17 | FriendlyName = @"Denon:\[AVR:.*", 18 | Manufacturer = "Denon" 19 | }; 20 | 21 | DirectPlayProfiles = new[] 22 | { 23 | new DirectPlayProfile 24 | { 25 | Container = "mp3,flac,m4a,wma", 26 | Type = DlnaProfileType.Audio 27 | }, 28 | }; 29 | 30 | ResponseProfiles = new ResponseProfile[] { }; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Dlna/Ssdp/Extensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Threading.Tasks; 4 | using System.Xml.Linq; 5 | 6 | namespace Emby.Dlna.Ssdp 7 | { 8 | public static class Extensions 9 | { 10 | public static string GetValue(this XElement container, XName name) 11 | { 12 | var node = container.Element(name); 13 | 14 | return node == null ? null : node.Value; 15 | } 16 | 17 | public static string GetAttributeValue(this XElement container, XName name) 18 | { 19 | var node = container.Attribute(name); 20 | 21 | return node == null ? null : node.Value; 22 | } 23 | 24 | public static string GetDescendantValue(this XElement container, XName name) 25 | { 26 | foreach (var node in container.Descendants(name)) 27 | { 28 | return node.Value; 29 | } 30 | 31 | return null; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Emby.Drawing.ImageMagick/Emby.Drawing.ImageMagick.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | netcoreapp2.1 4 | false 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Emby.Drawing.ImageMagick/fonts/robotoregular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Drawing.ImageMagick/fonts/robotoregular.ttf -------------------------------------------------------------------------------- /Emby.Drawing.Skia/Emby.Drawing.Skia.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | netcoreapp2.1 4 | false 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Emby.Drawing.Skia/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("Emby.Drawing.Skia")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("Emby.Drawing.Skia")] 14 | [assembly: AssemblyCopyright("Copyright © 2017")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | [assembly: NeutralResourcesLanguage("en")] 18 | 19 | // Version information for an assembly consists of the following four values: 20 | // 21 | // Major Version 22 | // Minor Version 23 | // Build Number 24 | // Revision 25 | // -------------------------------------------------------------------------------- /Emby.Drawing/Emby.Drawing.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | netcoreapp2.1 11 | false 12 | 13 | 14 | -------------------------------------------------------------------------------- /Emby.Notifications/Emby.Notifications.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | netcoreapp2.1 4 | false 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Emby.Notifications/NotificationConfigurationFactory.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Common.Configuration; 2 | using MediaBrowser.Model.Notifications; 3 | using System.Collections.Generic; 4 | 5 | namespace Emby.Notifications 6 | { 7 | public class NotificationConfigurationFactory : IConfigurationFactory 8 | { 9 | public IEnumerable GetConfigurations() 10 | { 11 | return new ConfigurationStore[] 12 | { 13 | new ConfigurationStore 14 | { 15 | Key = "notifications", 16 | ConfigurationType = typeof (NotificationOptions) 17 | } 18 | }; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Photos/Emby.Photos.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | ..\ThirdParty\taglib\TagLib.dll 9 | 10 | 11 | 12 | 13 | 14 | 15 | netcoreapp2.1 16 | false 17 | 18 | 19 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Branding/BrandingConfigurationFactory.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Common.Configuration; 2 | using MediaBrowser.Model.Branding; 3 | using System.Collections.Generic; 4 | 5 | namespace Emby.Server.Implementations.Branding 6 | { 7 | public class BrandingConfigurationFactory : IConfigurationFactory 8 | { 9 | public IEnumerable GetConfigurations() 10 | { 11 | return new[] 12 | { 13 | new ConfigurationStore 14 | { 15 | ConfigurationType = typeof(BrandingOptions), 16 | Key = "branding" 17 | } 18 | }; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Diagnostics/ProcessFactory.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Model.Diagnostics; 2 | 3 | namespace Emby.Server.Implementations.Diagnostics 4 | { 5 | public class ProcessFactory : IProcessFactory 6 | { 7 | public IProcess Create(ProcessOptions options) 8 | { 9 | return new CommonProcess(options); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/FFMpeg/FFMpegInfo.cs: -------------------------------------------------------------------------------- 1 | namespace Emby.Server.Implementations.FFMpeg 2 | { 3 | /// 4 | /// Class FFMpegInfo 5 | /// 6 | public class FFMpegInfo 7 | { 8 | /// 9 | /// Gets or sets the path. 10 | /// 11 | /// The path. 12 | public string EncoderPath { get; set; } 13 | /// 14 | /// Gets or sets the probe path. 15 | /// 16 | /// The probe path. 17 | public string ProbePath { get; set; } 18 | /// 19 | /// Gets or sets the version. 20 | /// 21 | /// The version. 22 | public string Version { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /Emby.Server.Implementations/FFMpeg/FFMpegInstallInfo.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Emby.Server.Implementations.FFMpeg 3 | { 4 | public class FFMpegInstallInfo 5 | { 6 | public string Version { get; set; } 7 | public string FFMpegFilename { get; set; } 8 | public string FFProbeFilename { get; set; } 9 | public string ArchiveType { get; set; } 10 | 11 | public FFMpegInstallInfo() 12 | { 13 | Version = "Path"; 14 | FFMpegFilename = "ffmpeg"; 15 | FFProbeFilename = "ffprobe"; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Emby.Server.Implementations/HttpClientManager/HttpClientInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net.Http; 3 | 4 | namespace Emby.Server.Implementations.HttpClientManager 5 | { 6 | /// 7 | /// Class HttpClientInfo 8 | /// 9 | public class HttpClientInfo 10 | { 11 | /// 12 | /// Gets or sets the last timeout. 13 | /// 14 | /// The last timeout. 15 | public DateTime LastTimeout { get; set; } 16 | public HttpClient HttpClient { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/ExtendedFileSystemInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Emby.Server.Implementations.IO 6 | { 7 | public class ExtendedFileSystemInfo 8 | { 9 | public bool IsHidden { get; set; } 10 | public bool IsReadOnly { get; set; } 11 | public bool Exists { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Smb/AllocInfo.cs: -------------------------------------------------------------------------------- 1 | // This code is derived from jcifs smb client library 2 | // Ported by J. Arturo 3 | // 4 | // This library is free software; you can redistribute it and/or 5 | // modify it under the terms of the GNU Lesser General Public 6 | // License as published by the Free Software Foundation; either 7 | // version 2.1 of the License, or (at your option) any later version. 8 | // 9 | // This library is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | // Lesser General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU Lesser General Public 15 | // License along with this library; if not, write to the Free Software 16 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 | namespace SharpCifs.Smb 18 | { 19 | internal interface IAllocInfo 20 | { 21 | long GetCapacity(); 22 | 23 | long GetFree(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Smb/SmbFileInputStream.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Server.Implementations/IO/SharpCifs/Smb/SmbFileInputStream.cs -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/BufferedReader.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | public class BufferedReader : StreamReader 6 | { 7 | public BufferedReader (InputStreamReader r) : base(r.BaseStream) 8 | { 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/CharBuffer.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal class CharBuffer : CharSequence 4 | { 5 | internal string Wrapped; 6 | 7 | public override string ToString () 8 | { 9 | return Wrapped; 10 | } 11 | 12 | public static CharBuffer Wrap (string str) 13 | { 14 | CharBuffer buffer = new CharBuffer (); 15 | buffer.Wrapped = str; 16 | return buffer; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/CharSequence.cs: -------------------------------------------------------------------------------- 1 | using System.Text; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | public class CharSequence 6 | { 7 | public static implicit operator CharSequence (string str) 8 | { 9 | return new StringCharSequence (str); 10 | } 11 | 12 | public static implicit operator CharSequence (StringBuilder str) 13 | { 14 | return new StringCharSequence (str.ToString ()); 15 | } 16 | } 17 | 18 | class StringCharSequence: CharSequence 19 | { 20 | string _str; 21 | 22 | public StringCharSequence (string str) 23 | { 24 | this._str = str; 25 | } 26 | 27 | public override string ToString () 28 | { 29 | return _str; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/DateFormat.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | 4 | namespace SharpCifs.Util.Sharpen 5 | { 6 | public abstract class DateFormat 7 | { 8 | public const int Default = 2; 9 | 10 | public static DateFormat GetDateTimeInstance (int dateStyle, int timeStyle) 11 | { 12 | return GetDateTimeInstance (dateStyle, timeStyle, CultureInfo.CurrentCulture); 13 | } 14 | 15 | public static DateFormat GetDateTimeInstance (int dateStyle, int timeStyle, CultureInfo aLocale) 16 | { 17 | return new SimpleDateFormat (aLocale.DateTimeFormat.FullDateTimePattern, aLocale); 18 | } 19 | 20 | TimeZoneInfo _timeZone; 21 | 22 | public abstract DateTime Parse (string value); 23 | 24 | public TimeZoneInfo GetTimeZone () 25 | { 26 | return _timeZone; 27 | } 28 | 29 | public void SetTimeZone (TimeZoneInfo timeZone) 30 | { 31 | this._timeZone = timeZone; 32 | } 33 | 34 | public abstract string Format (DateTime time); 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/FileInputStream.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | public class FileInputStream : InputStream 6 | { 7 | public FileInputStream (FilePath file) : this(file.GetPath ()) 8 | { 9 | } 10 | 11 | public FileInputStream (string file) 12 | { 13 | if (!File.Exists (file)) { 14 | throw new FileNotFoundException ("File not found", file); 15 | } 16 | Wrapped = new FileStream (file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 17 | } 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/FileOutputStream.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | internal class FileOutputStream : OutputStream 6 | { 7 | public FileOutputStream (FilePath file): this (file.GetPath (), false) 8 | { 9 | } 10 | 11 | public FileOutputStream (string file): this (file, false) 12 | { 13 | } 14 | 15 | public FileOutputStream (FilePath file, bool append) : this(file.GetPath (), append) 16 | { 17 | } 18 | 19 | public FileOutputStream (string file, bool append) 20 | { 21 | try { 22 | if (append) { 23 | Wrapped = File.Open (file, FileMode.Append, FileAccess.Write); 24 | } else { 25 | Wrapped = File.Open (file, FileMode.Create, FileAccess.Write); 26 | } 27 | } catch (DirectoryNotFoundException) { 28 | throw new FileNotFoundException ("File not found: " + file); 29 | } 30 | } 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/FileReader.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public class FileReader : InputStreamReader 4 | { 5 | //public FileReader (FilePath f) : base(f.GetPath ()) 6 | //{ 7 | //} 8 | //path -> fileStream 9 | public FileReader(InputStream s) : base(s) 10 | { 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/FileWriter.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | //resharper said, nobody using this. i believe it. 6 | //internal class FileWriter : StreamWriter 7 | //{ 8 | // public FileWriter (FilePath path) : base(path.GetPath ()) 9 | // { 10 | // } 11 | 12 | // public FileWriter Append (string sequence) 13 | // { 14 | // Write (sequence); 15 | // return this; 16 | // } 17 | //} 18 | } 19 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/FilterInputStream.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public class FilterInputStream : InputStream 4 | { 5 | protected InputStream In; 6 | 7 | public FilterInputStream (InputStream s) 8 | { 9 | In = s; 10 | } 11 | 12 | public override int Available () 13 | { 14 | return In.Available (); 15 | } 16 | 17 | public override void Close () 18 | { 19 | In.Close (); 20 | } 21 | 22 | public override void Mark (int readlimit) 23 | { 24 | In.Mark (readlimit); 25 | } 26 | 27 | public override bool MarkSupported () 28 | { 29 | return In.MarkSupported (); 30 | } 31 | 32 | public override int Read () 33 | { 34 | return In.Read (); 35 | } 36 | 37 | public override int Read (byte[] buf) 38 | { 39 | return In.Read (buf); 40 | } 41 | 42 | public override int Read (byte[] b, int off, int len) 43 | { 44 | return In.Read (b, off, len); 45 | } 46 | 47 | public override void Reset () 48 | { 49 | In.Reset (); 50 | } 51 | 52 | public override long Skip (long cnt) 53 | { 54 | return In.Skip (cnt); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/FilterOutputStream.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public class FilterOutputStream : OutputStream 4 | { 5 | protected OutputStream Out; 6 | 7 | public FilterOutputStream (OutputStream os) 8 | { 9 | Out = os; 10 | } 11 | 12 | public override void Close () 13 | { 14 | Out.Close (); 15 | } 16 | 17 | public override void Flush () 18 | { 19 | Out.Flush (); 20 | } 21 | 22 | public override void Write (byte[] b) 23 | { 24 | Out.Write (b); 25 | } 26 | 27 | public override void Write (int b) 28 | { 29 | Out.Write (b); 30 | } 31 | 32 | public override void Write (byte[] b, int offset, int len) 33 | { 34 | Out.Write (b, offset, len); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/Hashtable.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace SharpCifs.Util.Sharpen 5 | { 6 | public class Hashtable : Dictionary 7 | { 8 | public void Put(object key, object value) 9 | { 10 | Add(key, value); 11 | } 12 | 13 | public object Get(object key) 14 | { 15 | var m_key = Keys.SingleOrDefault(k => k.Equals(key)); 16 | 17 | return m_key != null ? this[m_key] : null; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/ICallable.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal interface ICallable 4 | { 5 | T Call (); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/IConcurrentMap.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | internal interface IConcurrentMap : IDictionary 6 | { 7 | TU PutIfAbsent (T key, TU value); 8 | bool Remove (object key, object value); 9 | bool Replace (T key, TU oldValue, TU newValue); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/IExecutor.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public interface IExecutor 4 | { 5 | void Execute (IRunnable runnable); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/IFilenameFilter.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public interface IFilenameFilter 4 | { 5 | bool Accept (FilePath dir, string name); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/IFuture.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal interface IFuture 4 | { 5 | bool Cancel (bool mayInterruptIfRunning); 6 | T Get (); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/IPrivilegedAction.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal interface IPrivilegedAction 4 | { 5 | T Run (); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/IRunnable.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public interface IRunnable 4 | { 5 | void Run (); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/InputStreamReader.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Text; 3 | 4 | namespace SharpCifs.Util.Sharpen 5 | { 6 | public class InputStreamReader : StreamReader 7 | { 8 | //Stream(string path) constructor deleted 9 | //protected InputStreamReader (string file) : base(file) 10 | //{ 11 | //} 12 | 13 | public InputStreamReader (InputStream s) : base(s.GetWrappedStream ()) 14 | { 15 | } 16 | 17 | public InputStreamReader (InputStream s, string encoding) : base(s.GetWrappedStream (), Encoding.GetEncoding (encoding)) 18 | { 19 | } 20 | 21 | public InputStreamReader (InputStream s, Encoding e) : base(s.GetWrappedStream (), e) 22 | { 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/Iterator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | 5 | namespace SharpCifs.Util.Sharpen 6 | { 7 | public interface ITerator 8 | { 9 | bool HasNext (); 10 | object Next (); 11 | void Remove (); 12 | } 13 | 14 | public abstract class Iterator : IEnumerator, ITerator 15 | { 16 | private T _lastValue; 17 | 18 | object ITerator.Next () 19 | { 20 | return Next (); 21 | } 22 | 23 | public abstract bool HasNext (); 24 | public abstract T Next (); 25 | public abstract void Remove (); 26 | 27 | bool IEnumerator.MoveNext () 28 | { 29 | if (HasNext ()) { 30 | _lastValue = Next (); 31 | return true; 32 | } 33 | return false; 34 | } 35 | 36 | void IEnumerator.Reset () 37 | { 38 | throw new NotImplementedException (); 39 | } 40 | 41 | void IDisposable.Dispose () 42 | { 43 | } 44 | 45 | T IEnumerator.Current { 46 | get { return _lastValue; } 47 | } 48 | 49 | object IEnumerator.Current { 50 | get { return _lastValue; } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/LinkageError.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | internal class LinkageError : Exception 6 | { 7 | public LinkageError (string msg) : base(msg) 8 | { 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/ObjectInputStream.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace SharpCifs.Util.Sharpen 5 | { 6 | internal class ObjectInputStream : InputStream 7 | { 8 | private BinaryReader _reader; 9 | 10 | public ObjectInputStream (InputStream s) 11 | { 12 | _reader = new BinaryReader (s.GetWrappedStream ()); 13 | } 14 | 15 | public int ReadInt () 16 | { 17 | return _reader.ReadInt32 (); 18 | } 19 | 20 | public object ReadObject () 21 | { 22 | throw new NotImplementedException (); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/ObjectOutputStream.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | internal class ObjectOutputStream : OutputStream 6 | { 7 | private BinaryWriter _bw; 8 | 9 | public ObjectOutputStream (OutputStream os) 10 | { 11 | _bw = new BinaryWriter (os.GetWrappedStream ()); 12 | } 13 | 14 | public virtual void WriteInt (int i) 15 | { 16 | _bw.Write (i); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/OutputStreamWriter.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Text; 3 | 4 | namespace SharpCifs.Util.Sharpen 5 | { 6 | internal class OutputStreamWriter : StreamWriter 7 | { 8 | public OutputStreamWriter (OutputStream stream) : base(stream.GetWrappedStream ()) 9 | { 10 | } 11 | 12 | public OutputStreamWriter (OutputStream stream, string encoding) : base(stream.GetWrappedStream (), Extensions.GetEncoding (encoding)) 13 | { 14 | } 15 | 16 | public OutputStreamWriter (OutputStream stream, Encoding encoding) : base(stream.GetWrappedStream (), encoding) 17 | { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/PipedOutputStream.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal class PipedOutputStream : OutputStream 4 | { 5 | PipedInputStream _ips; 6 | 7 | public PipedOutputStream () 8 | { 9 | } 10 | 11 | public PipedOutputStream (PipedInputStream iss) : this() 12 | { 13 | Attach (iss); 14 | } 15 | 16 | public override void Close () 17 | { 18 | _ips.Close (); 19 | base.Close (); 20 | } 21 | 22 | internal void Attach (PipedInputStream iss) 23 | { 24 | _ips = iss; 25 | } 26 | 27 | public override void Write (int b) 28 | { 29 | _ips.Write (b); 30 | } 31 | 32 | public override void Write (byte[] b, int offset, int len) 33 | { 34 | _ips.Write (b, offset, len); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/ReentrantLock.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | 3 | namespace SharpCifs.Util.Sharpen 4 | { 5 | internal class ReentrantLock 6 | { 7 | public void Lock () 8 | { 9 | Monitor.Enter (this); 10 | } 11 | 12 | public bool TryLock () 13 | { 14 | return Monitor.TryEnter (this); 15 | } 16 | 17 | public void Unlock () 18 | { 19 | Monitor.Exit (this); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/Reference.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal abstract class Reference 4 | { 5 | public abstract T Get (); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/StringTokenizer.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | public class StringTokenizer 4 | { 5 | private string[] _tokens; 6 | private int _pos; 7 | 8 | public StringTokenizer(string text, string delim) 9 | { 10 | _tokens = text.Split(delim); 11 | } 12 | 13 | public int CountTokens() 14 | { 15 | return _tokens.Length; 16 | } 17 | 18 | public string NextToken() 19 | { 20 | string value = _tokens[_pos]; 21 | 22 | _pos++; 23 | 24 | return value; 25 | } 26 | 27 | public bool HasMoreTokens() 28 | { 29 | return _pos < _tokens.Length; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/ThreadFactory.cs: -------------------------------------------------------------------------------- 1 | namespace SharpCifs.Util.Sharpen 2 | { 3 | internal class ThreadFactory 4 | { 5 | public Thread NewThread (IRunnable r) 6 | { 7 | Thread t = new Thread (r); 8 | t.SetDaemon (true); 9 | t.Start (); 10 | return t; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Request.cs: -------------------------------------------------------------------------------- 1 | // This code is derived from jcifs smb client library 2 | // Ported by J. Arturo 3 | // 4 | // This library is free software; you can redistribute it and/or 5 | // modify it under the terms of the GNU Lesser General Public 6 | // License as published by the Free Software Foundation; either 7 | // version 2.1 of the License, or (at your option) any later version. 8 | // 9 | // This library is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | // Lesser General Public License for more details. 13 | // 14 | // You should have received a copy of the GNU Lesser General Public 15 | // License along with this library; if not, write to the Free Software 16 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 | namespace SharpCifs.Util.Transport 18 | { 19 | public interface IRequest 20 | { 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Library/Resolvers/VideoResolver.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Library; 3 | using MediaBrowser.Controller.Resolvers; 4 | using MediaBrowser.Model.IO; 5 | 6 | namespace Emby.Server.Implementations.Library.Resolvers 7 | { 8 | public class GenericVideoResolver : BaseVideoResolver 9 | where T : Video, new () 10 | { 11 | public GenericVideoResolver(ILibraryManager libraryManager, IFileSystem fileSystem) : base(libraryManager, fileSystem) 12 | { 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MediaBrowser.Controller.Plugins; 3 | 4 | namespace Emby.Server.Implementations.LiveTv.EmbyTV 5 | { 6 | public class EntryPoint : IServerEntryPoint 7 | { 8 | public void Run() 9 | { 10 | EmbyTV.Current.Start(); 11 | } 12 | 13 | public void Dispose() 14 | { 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/LiveTv/EmbyTV/IRecorder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using MediaBrowser.Controller.Library; 5 | using MediaBrowser.Model.Dto; 6 | 7 | namespace Emby.Server.Implementations.LiveTv.EmbyTV 8 | { 9 | public interface IRecorder 10 | { 11 | /// 12 | /// Records the specified media source. 13 | /// 14 | Task Record(IDirectStreamProvider directStreamProvider, MediaSourceInfo mediaSource, string targetFile, TimeSpan duration, Action onStarted, CancellationToken cancellationToken); 15 | 16 | string GetOutputPath(MediaSourceInfo mediaSource, string targetFile); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/LiveTv/EmbyTV/SeriesTimerManager.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.LiveTv; 2 | using MediaBrowser.Model.Logging; 3 | using MediaBrowser.Model.Serialization; 4 | using System; 5 | using MediaBrowser.Model.IO; 6 | 7 | namespace Emby.Server.Implementations.LiveTv.EmbyTV 8 | { 9 | public class SeriesTimerManager : ItemDataProvider 10 | { 11 | public SeriesTimerManager(IFileSystem fileSystem, IJsonSerializer jsonSerializer, ILogger logger, string dataPath) 12 | : base(fileSystem, jsonSerializer, logger, dataPath, (r1, r2) => string.Equals(r1.Id, r2.Id, StringComparison.OrdinalIgnoreCase)) 13 | { 14 | } 15 | 16 | public override void Add(SeriesTimerInfo item) 17 | { 18 | if (string.IsNullOrEmpty(item.Id)) 19 | { 20 | throw new ArgumentException("SeriesTimerInfo.Id cannot be null or empty."); 21 | } 22 | 23 | base.Add(item); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/LiveTv/LiveTvConfigurationFactory.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Common.Configuration; 2 | using MediaBrowser.Model.LiveTv; 3 | using System.Collections.Generic; 4 | 5 | namespace Emby.Server.Implementations.LiveTv 6 | { 7 | public class LiveTvConfigurationFactory : IConfigurationFactory 8 | { 9 | public IEnumerable GetConfigurations() 10 | { 11 | return new ConfigurationStore[] 12 | { 13 | new ConfigurationStore 14 | { 15 | ConfigurationType = typeof(LiveTvOptions), 16 | Key = "livetv" 17 | } 18 | }; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/br.txt: -------------------------------------------------------------------------------- 1 | BR-L,1 2 | BR-10,5 3 | BR-12,7 4 | BR-14,8 5 | BR-16,8 6 | BR-18,9 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/ca.txt: -------------------------------------------------------------------------------- 1 | CA-G,1 2 | CA-PG,5 3 | CA-14A,7 4 | CA-A,8 5 | CA-18A,9 6 | CA-R,10 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/co.txt: -------------------------------------------------------------------------------- 1 | CO-T,1 2 | CO-7,5 3 | CO-12,7 4 | CO-15,8 5 | CO-18,10 6 | CO-X,100 7 | CO-BANNED,15 8 | CO-E,15 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/dk.txt: -------------------------------------------------------------------------------- 1 | DA-A,1 2 | DA-7,5 3 | DA-11,6 4 | DA-15,8 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/es.txt: -------------------------------------------------------------------------------- 1 | ES-A,1 2 | ES-APTA,1 3 | ES-7,3 4 | ES-12,6 5 | ES-16,8 6 | ES-18,11 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/fr.txt: -------------------------------------------------------------------------------- 1 | FR-U,1 2 | FR-10,5 3 | FR-12,7 4 | FR-16,9 5 | FR-18,10 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/gb.txt: -------------------------------------------------------------------------------- 1 | GB-U,1 2 | GB-PG,5 3 | GB-12,6 4 | GB-12A,7 5 | GB-15,8 6 | GB-18,9 7 | GB-R18,15 8 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/ie.txt: -------------------------------------------------------------------------------- 1 | IE-G,1 2 | IE-PG,5 3 | IE-12A,7 4 | IE-15A,8 5 | IE-16,9 6 | IE-18,10 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/jp.txt: -------------------------------------------------------------------------------- 1 | JP-G,1 2 | JP-PG12,7 3 | JP-15+,8 4 | JP-18+,10 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/kz.txt: -------------------------------------------------------------------------------- 1 | KZ-К,1 2 | KZ-БА,6 3 | KZ-Б14,7 4 | KZ-Е16,8 5 | KZ-Е18,10 6 | KZ-НА,15 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/mx.txt: -------------------------------------------------------------------------------- 1 | MX-AA,1 2 | MX-A,5 3 | MX-B,7 4 | MX-B-15,8 5 | MX-C,9 6 | MX-D,10 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/nl.txt: -------------------------------------------------------------------------------- 1 | NL-AL,1 2 | NL-MG6,2 3 | NL-6,3 4 | NL-9,5 5 | NL-12,6 6 | NL-16,8 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/nz.txt: -------------------------------------------------------------------------------- 1 | NZ-G,1 2 | NZ-PG,5 3 | NZ-M,6 4 | NZ-R13,7 5 | NZ-RP13,7 6 | NZ-R15,8 7 | NZ-RP16,9 8 | NZ-R16,9 9 | NZ-R18,10 10 | NZ-R,10 11 | NZ-MA,10 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/ro.txt: -------------------------------------------------------------------------------- 1 | RO-AG,1 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/uk.txt: -------------------------------------------------------------------------------- 1 | UK-U,1 2 | UK-PG,5 3 | UK-12,7 4 | UK-12A,7 5 | UK-15,9 6 | UK-18,10 7 | UK-R18,15 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Localization/Ratings/us.txt: -------------------------------------------------------------------------------- 1 | TV-Y,1 2 | APPROVED,1 3 | G,1 4 | E,1 5 | EC,1 6 | TV-G,1 7 | TV-Y7,3 8 | TV-Y7-FV,4 9 | PG,5 10 | TV-PG,5 11 | PG-13,7 12 | T,7 13 | TV-14,8 14 | R,9 15 | M,9 16 | TV-MA,9 17 | NC-17,10 18 | AO,15 19 | RP,15 20 | UR,15 21 | NR,15 22 | X,15 23 | XXX,100 -------------------------------------------------------------------------------- /Emby.Server.Implementations/Logging/ConsoleLogger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MediaBrowser.Model.Logging; 3 | 4 | namespace Emby.Server.Implementations.Logging 5 | { 6 | public class ConsoleLogger : IConsoleLogger 7 | { 8 | public void WriteLine(string message) 9 | { 10 | Console.WriteLine(message); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using MediaBrowser.Model.Services; 5 | 6 | namespace Emby.Server.Implementations.Net 7 | { 8 | public class WebSocketConnectEventArgs : EventArgs 9 | { 10 | /// 11 | /// Gets or sets the URL. 12 | /// 13 | /// The URL. 14 | public string Url { get; set; } 15 | /// 16 | /// Gets or sets the query string. 17 | /// 18 | /// The query string. 19 | public QueryParamCollection QueryString { get; set; } 20 | /// 21 | /// Gets or sets the web socket. 22 | /// 23 | /// The web socket. 24 | public IWebSocket WebSocket { get; set; } 25 | /// 26 | /// Gets or sets the endpoint. 27 | /// 28 | /// The endpoint. 29 | public string Endpoint { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Reflection/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Reflection; 4 | using MediaBrowser.Model.Reflection; 5 | 6 | namespace Emby.Server.Implementations.Reflection 7 | { 8 | public class AssemblyInfo : IAssemblyInfo 9 | { 10 | public Stream GetManifestResourceStream(Type type, string resource) 11 | { 12 | return type.Assembly.GetManifestResourceStream(resource); 13 | } 14 | 15 | public string[] GetManifestResourceNames(Type type) 16 | { 17 | return type.Assembly.GetManifestResourceNames(); 18 | } 19 | 20 | public Assembly[] GetCurrentAssemblies() 21 | { 22 | return AppDomain.CurrentDomain.GetAssemblies(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Security/RegRecord.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Server.Implementations.Security 4 | { 5 | class RegRecord 6 | { 7 | public string featId { get; set; } 8 | public bool registered { get; set; } 9 | public DateTime expDate { get; set; } 10 | public string key { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /Emby.Server.Implementations/Services/ServiceMethod.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Emby.Server.Implementations.Services 4 | { 5 | public class ServiceMethod 6 | { 7 | public string Id { get; set; } 8 | 9 | public ActionInvokerFn ServiceAction { get; set; } 10 | public MediaBrowser.Model.Services.IHasRequestFilter[] RequestFilters { get; set; } 11 | 12 | public static string Key(Type serviceType, string method, string requestDtoName) 13 | { 14 | return serviceType.FullName + " " + method.ToUpper() + " " + requestDtoName; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/CommunityRatingComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | 5 | namespace Emby.Server.Implementations.Sorting 6 | { 7 | public class CommunityRatingComparer : IBaseItemComparer 8 | { 9 | /// 10 | /// Compares the specified x. 11 | /// 12 | /// The x. 13 | /// The y. 14 | /// System.Int32. 15 | public int Compare(BaseItem x, BaseItem y) 16 | { 17 | return (x.CommunityRating ?? 0).CompareTo(y.CommunityRating ?? 0); 18 | } 19 | 20 | /// 21 | /// Gets the name. 22 | /// 23 | /// The name. 24 | public string Name 25 | { 26 | get { return ItemSortBy.CommunityRating; } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/DateCreatedComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | using System; 5 | 6 | namespace Emby.Server.Implementations.Sorting 7 | { 8 | /// 9 | /// Class DateCreatedComparer 10 | /// 11 | public class DateCreatedComparer : IBaseItemComparer 12 | { 13 | /// 14 | /// Compares the specified x. 15 | /// 16 | /// The x. 17 | /// The y. 18 | /// System.Int32. 19 | public int Compare(BaseItem x, BaseItem y) 20 | { 21 | return DateTime.Compare(x.DateCreated, y.DateCreated); 22 | } 23 | 24 | /// 25 | /// Gets the name. 26 | /// 27 | /// The name. 28 | public string Name 29 | { 30 | get { return ItemSortBy.DateCreated; } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/NameComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | using System; 5 | 6 | namespace Emby.Server.Implementations.Sorting 7 | { 8 | /// 9 | /// Class NameComparer 10 | /// 11 | public class NameComparer : IBaseItemComparer 12 | { 13 | /// 14 | /// Compares the specified x. 15 | /// 16 | /// The x. 17 | /// The y. 18 | /// System.Int32. 19 | public int Compare(BaseItem x, BaseItem y) 20 | { 21 | return string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase); 22 | } 23 | 24 | /// 25 | /// Gets the name. 26 | /// 27 | /// The name. 28 | public string Name 29 | { 30 | get { return ItemSortBy.Name; } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/RandomComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | using System; 5 | 6 | namespace Emby.Server.Implementations.Sorting 7 | { 8 | /// 9 | /// Class RandomComparer 10 | /// 11 | public class RandomComparer : IBaseItemComparer 12 | { 13 | /// 14 | /// Compares the specified x. 15 | /// 16 | /// The x. 17 | /// The y. 18 | /// System.Int32. 19 | public int Compare(BaseItem x, BaseItem y) 20 | { 21 | return Guid.NewGuid().CompareTo(Guid.NewGuid()); 22 | } 23 | 24 | /// 25 | /// Gets the name. 26 | /// 27 | /// The name. 28 | public string Name 29 | { 30 | get { return ItemSortBy.Random; } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/RuntimeComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | 5 | namespace Emby.Server.Implementations.Sorting 6 | { 7 | /// 8 | /// Class RuntimeComparer 9 | /// 10 | public class RuntimeComparer : IBaseItemComparer 11 | { 12 | /// 13 | /// Compares the specified x. 14 | /// 15 | /// The x. 16 | /// The y. 17 | /// System.Int32. 18 | public int Compare(BaseItem x, BaseItem y) 19 | { 20 | return (x.RunTimeTicks ?? 0).CompareTo(y.RunTimeTicks ?? 0); 21 | } 22 | 23 | /// 24 | /// Gets the name. 25 | /// 26 | /// The name. 27 | public string Name 28 | { 29 | get { return ItemSortBy.Runtime; } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/SortNameComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | using System; 5 | 6 | namespace Emby.Server.Implementations.Sorting 7 | { 8 | /// 9 | /// Class SortNameComparer 10 | /// 11 | public class SortNameComparer : IBaseItemComparer 12 | { 13 | /// 14 | /// Compares the specified x. 15 | /// 16 | /// The x. 17 | /// The y. 18 | /// System.Int32. 19 | public int Compare(BaseItem x, BaseItem y) 20 | { 21 | return string.Compare(x.SortName, y.SortName, StringComparison.CurrentCultureIgnoreCase); 22 | } 23 | 24 | /// 25 | /// Gets the name. 26 | /// 27 | /// The name. 28 | public string Name 29 | { 30 | get { return ItemSortBy.SortName; } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Sorting/StudioComparer.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Controller.Entities; 2 | using MediaBrowser.Controller.Sorting; 3 | using MediaBrowser.Model.Querying; 4 | using System.Linq; 5 | 6 | namespace Emby.Server.Implementations.Sorting 7 | { 8 | public class StudioComparer : IBaseItemComparer 9 | { 10 | /// 11 | /// Compares the specified x. 12 | /// 13 | /// The x. 14 | /// The y. 15 | /// System.Int32. 16 | public int Compare(BaseItem x, BaseItem y) 17 | { 18 | return AlphanumComparator.CompareValues(x.Studios.FirstOrDefault() ?? string.Empty, y.Studios.FirstOrDefault() ?? string.Empty); 19 | } 20 | 21 | /// 22 | /// Gets the name. 23 | /// 24 | /// The name. 25 | public string Name 26 | { 27 | get { return ItemSortBy.Studio; } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/StartupOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace Emby.Server.Implementations 6 | { 7 | public class StartupOptions 8 | { 9 | private readonly List _options; 10 | 11 | public StartupOptions(string[] commandLineArgs) 12 | { 13 | _options = commandLineArgs.ToList(); 14 | } 15 | 16 | public bool ContainsOption(string option) 17 | { 18 | return _options.Contains(option, StringComparer.OrdinalIgnoreCase); 19 | } 20 | 21 | public string GetOption(string name) 22 | { 23 | var index = _options.IndexOf(name); 24 | 25 | if (index != -1) 26 | { 27 | return _options.ElementAtOrDefault(index + 1); 28 | } 29 | 30 | return null; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/SystemEvents.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MediaBrowser.Common.Events; 3 | using MediaBrowser.Model.Logging; 4 | using MediaBrowser.Model.System; 5 | 6 | namespace Emby.Server.Implementations 7 | { 8 | public class SystemEvents : ISystemEvents 9 | { 10 | public event EventHandler Resume; 11 | public event EventHandler Suspend; 12 | public event EventHandler SessionLogoff; 13 | public event EventHandler SystemShutdown; 14 | 15 | private readonly ILogger _logger; 16 | 17 | public SystemEvents(ILogger logger) 18 | { 19 | _logger = logger; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/TextEncoding/NLangDetect/ErrorCode.cs: -------------------------------------------------------------------------------- 1 | namespace NLangDetect.Core 2 | { 3 | public enum ErrorCode 4 | { 5 | NoTextError, 6 | FormatError, 7 | FileLoadError, 8 | DuplicateLangError, 9 | NeedLoadProfileError, 10 | CantDetectError, 11 | CantOpenTrainData, 12 | TrainDataFormatError, 13 | InitParamError, 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/TextEncoding/NLangDetect/InternalException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace NLangDetect.Core 4 | { 5 | [Serializable] 6 | public class InternalException : Exception 7 | { 8 | #region Constructor(s) 9 | 10 | public InternalException(string message, Exception innerException) 11 | : base(message, innerException) 12 | { 13 | } 14 | 15 | public InternalException(string message) 16 | : this(message, null) 17 | { 18 | } 19 | 20 | #endregion 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/TextEncoding/NLangDetect/Language.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | 3 | namespace NLangDetect.Core 4 | { 5 | // TODO IMM HI: name?? 6 | public class Language 7 | { 8 | #region Constructor(s) 9 | 10 | public Language(string name, double probability) 11 | { 12 | Name = name; 13 | Probability = probability; 14 | } 15 | 16 | #endregion 17 | 18 | #region Object overrides 19 | 20 | public override string ToString() 21 | { 22 | if (Name == null) 23 | { 24 | return ""; 25 | } 26 | 27 | return 28 | string.Format( 29 | CultureInfo.InvariantCulture.NumberFormat, 30 | "{0}:{1:0.000000}", 31 | Name, 32 | Probability); 33 | } 34 | 35 | #endregion 36 | 37 | #region Properties 38 | 39 | public string Name { get; set; } 40 | 41 | public double Probability { get; set; } 42 | 43 | #endregion 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/TextEncoding/NLangDetect/NLangDetectException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace NLangDetect.Core 4 | { 5 | public class NLangDetectException : Exception 6 | { 7 | #region Constructor(s) 8 | 9 | public NLangDetectException(string message, ErrorCode errorCode) 10 | : base(message) 11 | { 12 | ErrorCode = errorCode; 13 | } 14 | 15 | #endregion 16 | 17 | #region Properties 18 | 19 | public ErrorCode ErrorCode { get; private set; } 20 | 21 | #endregion 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/TextEncoding/NLangDetect/ProbVector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace NLangDetect.Core 5 | { 6 | public class ProbVector 7 | { 8 | private readonly Dictionary _dict = new Dictionary(); 9 | 10 | public double this[int key] 11 | { 12 | get 13 | { 14 | double value; 15 | 16 | return _dict.TryGetValue(key, out value) ? value : 0.0; 17 | } 18 | 19 | set 20 | { 21 | if (Math.Abs(value) < double.Epsilon) 22 | { 23 | if (_dict.ContainsKey(key)) 24 | { 25 | _dict.Remove(key); 26 | } 27 | 28 | return; 29 | } 30 | 31 | _dict[key] = value; 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Threading/TimerFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MediaBrowser.Model.Threading; 3 | 4 | namespace Emby.Server.Implementations.Threading 5 | { 6 | public class TimerFactory : ITimerFactory 7 | { 8 | public ITimer Create(Action callback, object state, TimeSpan dueTime, TimeSpan period) 9 | { 10 | return new CommonTimer(callback, state, dueTime, period); 11 | } 12 | 13 | public ITimer Create(Action callback, object state, int dueTimeMs, int periodMs) 14 | { 15 | return new CommonTimer(callback, state, dueTimeMs, periodMs); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/Xml/XmlReaderSettingsFactory.cs: -------------------------------------------------------------------------------- 1 | using System.Xml; 2 | using MediaBrowser.Model.Xml; 3 | 4 | namespace Emby.Server.Implementations.Xml 5 | { 6 | public class XmlReaderSettingsFactory : IXmlReaderSettingsFactory 7 | { 8 | public XmlReaderSettings Create(bool enableValidation) 9 | { 10 | var settings = new XmlReaderSettings(); 11 | 12 | if (!enableValidation) 13 | { 14 | settings.ValidationType = ValidationType.None; 15 | } 16 | 17 | return settings; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Emby.Server.Implementations/values.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/Emby.Server.Implementations/values.txt -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CONFIG = Release 2 | RUNTIME = linux-x64 3 | 4 | # Use with xterm to prevent incompatibility with distros who 5 | # ship a recent version of ncurses. See: 6 | # https://github.com/dotnet/sdk/issues/1916#issuecomment-367080527 7 | TERM = xterm 8 | 9 | all : cleanup restore build 10 | 11 | cleanup: 12 | dotnet clean --configuration $(CONFIG) --runtime $(RUNTIME) \ 13 | ./MediaBrowser.sln 14 | 15 | restore: 16 | dotnet restore --runtime $(RUNTIME) ./MediaBrowser.sln 17 | 18 | build: 19 | dotnet build --configuration $(CONFIG) --runtime $(RUNTIME) \ 20 | ./MediaBrowser.sln 21 | run: 22 | dotnet ./Emby.Server.Unix/bin/Release/netcoreapp2.1/linux-x64/Emby.Server.Unix.dll 23 | -------------------------------------------------------------------------------- /MediaBrowser.Api/IHasDtoOptions.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace MediaBrowser.Api 3 | { 4 | public interface IHasDtoOptions : IHasItemFields 5 | { 6 | bool? EnableImages { get; set; } 7 | bool? EnableUserData { get; set; } 8 | 9 | int? ImageTypeLimit { get; set; } 10 | 11 | string EnableImageTypes { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /MediaBrowser.Api/MediaBrowser.Api.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | netcoreapp2.1 11 | false 12 | 13 | 14 | -------------------------------------------------------------------------------- /MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | netcoreapp2.1 11 | false 12 | 13 | 14 | -------------------------------------------------------------------------------- /MediaBrowser.Providers/Manager/GenericPriorityQueueNode.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | 6 | namespace Priority_Queue 7 | { 8 | /// Credit: https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp 9 | public class GenericPriorityQueueNode 10 | { 11 | /// 12 | /// The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor). 13 | /// Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead 14 | /// 15 | public TPriority Priority { get; protected internal set; } 16 | 17 | /// 18 | /// Represents the current position in the queue 19 | /// 20 | public int QueueIndex { get; internal set; } 21 | 22 | /// 23 | /// Represents the order the node was inserted in 24 | /// 25 | public long InsertionIndex { get; internal set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /MediaBrowser.Providers/MediaBrowser.Providers.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | netcoreapp2.1 15 | false 16 | 17 | 18 | -------------------------------------------------------------------------------- /MediaBrowser.Providers/Movies/TmdbSettings.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace MediaBrowser.Providers.Movies 4 | { 5 | internal class TmdbImageSettings 6 | { 7 | public List backdrop_sizes { get; set; } 8 | public string secure_base_url { get; set; } 9 | public List poster_sizes { get; set; } 10 | public List profile_sizes { get; set; } 11 | 12 | public string GetImageUrl(string image) 13 | { 14 | return secure_base_url + image; 15 | } 16 | } 17 | 18 | internal class TmdbSettingsResult 19 | { 20 | public TmdbImageSettings images { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | PreserveNewest 12 | 13 | 14 | resources\%(RecursiveDir)%(Filename)%(Extension) 15 | 16 | 17 | 18 | 19 | netcoreapp2.1 20 | false 21 | 22 | 23 | -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/ServerEntryPoint.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MediaBrowser.Common; 3 | using MediaBrowser.Controller.Plugins; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | 7 | namespace MediaBrowser.WebDashboard 8 | { 9 | public class ServerEntryPoint : IServerEntryPoint, IRunBeforeStartup 10 | { 11 | /// 12 | /// Gets the list of plugin configuration pages 13 | /// 14 | /// The configuration pages. 15 | public List PluginConfigurationPages { get; private set; } 16 | 17 | private readonly IApplicationHost _appHost; 18 | 19 | public static ServerEntryPoint Instance { get; private set; } 20 | 21 | public ServerEntryPoint(IApplicationHost appHost) 22 | { 23 | _appHost = appHost; 24 | Instance = this; 25 | } 26 | 27 | public void Run() 28 | { 29 | PluginConfigurationPages = _appHost.GetExports().ToList(); 30 | } 31 | 32 | public void Dispose() 33 | { 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/appservices.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 |
4 |
5 | 6 |
7 | 8 |
9 |

${HeaderInstalledServices}

10 | ${Help} 11 |
12 | 13 |
14 |
15 |
16 |

${HeaderAvailableServices}

17 |
18 |
19 |
20 |
21 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/Sortable/jquery.binding.js: -------------------------------------------------------------------------------- 1 | !function(factory){"use strict";"function"==typeof define&&define.amd?define(["jquery"],factory):factory(jQuery)}(function($){"use strict";$.fn.sortable=function(options){var retVal,args=arguments;return this.each(function(){var $el=$(this),sortable=$el.data("sortable");if(sortable||!(options instanceof Object)&&options||(sortable=new Sortable(this,options),$el.data("sortable",sortable)),sortable){if("widget"===options)return sortable;"destroy"===options?(sortable.destroy(),$el.removeData("sortable")):"function"==typeof sortable[options]?retVal=sortable[options].apply(sortable,[].slice.call(args,1)):options in sortable.options&&(retVal=sortable.option.apply(sortable,args))}}),void 0===retVal?this:retVal}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/Swiper/package.js: -------------------------------------------------------------------------------- 1 | var version="3.3.1";Package.describe({name:"nolimits4web:swiper",summary:"iDangero.us Swiper - mobile touch slider with hardware accelerated transitions and native behavior",version:version,git:"https://github.com/nolimits4web/Swiper"}),Package.onUse(function(api){api.versionsFrom("1.1.0.2"),api.addFiles(["dist/css/swiper.min.css","dist/js/swiper.js"],["client"])}),Package.onTest(function(api){}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/document-register-element/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | testing my-element 5 | 6 | 7 | 8 | 9 | 10 | some content 11 | 12 | -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/appstorage-cache.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function MyStore(){}function updateCache(instance){instance.cache.put("data",new Response(JSON.stringify(instance.localData)))}return MyStore.prototype.init=function(){var instance=this;return caches.open("embydata").then(function(result){instance.cache=result,instance.localData={}})},MyStore.prototype.setItem=function(name,value){if(this.localData){this.localData[name]!==value&&(this.localData[name]=value,updateCache(this))}},MyStore.prototype.getItem=function(name){if(this.localData)return this.localData[name]},MyStore.prototype.removeItem=function(name){this.localData&&(this.localData[name]=null,delete this.localData[name],updateCache(this))},new MyStore}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/appstorage-localstorage.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function onCachePutFail(e){console.log(e)}function updateCache(instance){var cache=instance.cache;cache&&cache.put("data",new Response(JSON.stringify(instance.localData))).catch(onCachePutFail)}function onCacheOpened(result){this.cache=result,this.localData={}}function MyStore(){try{self.caches&&caches.open("embydata").then(onCacheOpened.bind(this))}catch(err){console.log("Error opening cache: "+err)}}return MyStore.prototype.setItem=function(name,value){localStorage.setItem(name,value);var localData=this.localData;if(localData){localData[name]!==value&&(localData[name]=value,updateCache(this))}},MyStore.prototype.getItem=function(name){return localStorage.getItem(name)},MyStore.prototype.removeItem=function(name){localStorage.removeItem(name);var localData=this.localData;localData&&(localData[name]=null,delete localData[name],updateCache(this))},new MyStore}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/appstorage-memory.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function MyStore(){this.localData={}}return MyStore.prototype.setItem=function(name,value){this.localData[name]=value},MyStore.prototype.getItem=function(name){return this.localData[name]},MyStore.prototype.removeItem=function(name){this.localData[name]=null},new MyStore}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/cameraroll.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function CameraRoll(){}return CameraRoll.prototype.getFiles=function(){return Promise.resolve([])},new CameraRoll}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/events.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function getCallbacks(obj,name){if(!obj)throw new Error("obj cannot be null!");obj._callbacks=obj._callbacks||{};var list=obj._callbacks[name];return list||(obj._callbacks[name]=[],list=obj._callbacks[name]),list}return{on:function(obj,eventName,fn){getCallbacks(obj,eventName).push(fn)},off:function(obj,eventName,fn){var list=getCallbacks(obj,eventName),i=list.indexOf(fn);-1!==i&&list.splice(i,1)},trigger:function(obj,eventName){var eventObject={type:eventName},eventArgs=[];eventArgs.push(eventObject);for(var additionalArgs=arguments[2]||[],i=0,length=additionalArgs.length;i=length)return console.log("MultiServerSync.sync complete"),void resolve();var server=servers[index];console.log("Creating ServerSync to server: "+server.Id),(new ServerSync).sync(connectionManager,server,options).then(function(){console.log("ServerSync succeeded to server: "+server.Id),syncNext(connectionManager,servers,index+1,options,resolve,reject)},function(err){console.log("ServerSync failed to server: "+server.Id+". "+err),syncNext(connectionManager,servers,index+1,options,resolve,reject)})}function MultiServerSync(){}return MultiServerSync.prototype.sync=function(connectionManager,options){return console.log("MultiServerSync.sync starting..."),new Promise(function(resolve,reject){var servers=connectionManager.getSavedServers();syncNext(connectionManager,servers,0,options,resolve,reject)})},MultiServerSync}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/sync/transfermanager.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function downloadFile(url,folder,localItem,imageUrl){return Promise.reject()}function downloadSubtitles(url,folder,fileName){return Promise.reject()}function downloadImage(url,folder,fileName){return Promise.reject()}function resyncTransfers(){return Promise.resolve()}function getDownloadItemCount(){return Promise.resolve(0)}return{downloadFile:downloadFile,downloadSubtitles:downloadSubtitles,downloadImage:downloadImage,resyncTransfers:resyncTransfers,getDownloadItemCount:getDownloadItemCount}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-apiclient/wakeonlan.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function send(info){return Promise.reject()}function isSupported(){return!1}return{send:send,isSupported:isSupported}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/alert/alert.js: -------------------------------------------------------------------------------- 1 | define(["dialog","globalize"],function(dialog,globalize){"use strict";return function(text,title){var options;options="string"==typeof text?{title:title,text:text}:text;var items=[];return items.push({name:globalize.translate("sharedcomponents#ButtonGotIt"),id:"ok",type:"submit"}),options.buttons=items,dialog(options).then(function(result){return"ok"===result?Promise.resolve():Promise.reject()})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/alert/nativealert.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function replaceAll(str,find,replace){return str.split(find).join(replace)}return function(options){"string"==typeof options&&(options={text:options});var text=replaceAll(options.text||"","
","\n");return alert(text),Promise.resolve()}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/appfooter/appfooter.css: -------------------------------------------------------------------------------- 1 | .appfooter{position:fixed;left:0;right:0;z-index:1;bottom:0;-webkit-transition:-webkit-transform 180ms linear;-o-transition:transform 180ms linear;transition:transform 180ms linear;contain:layout style}.appfooter.headroom--unpinned{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/appfooter/appfooter.js: -------------------------------------------------------------------------------- 1 | define(["browser","css!./appfooter"],function(browser){"use strict";function render(options){var elem=document.createElement("div");return elem.classList.add("appfooter"),browser.chrome||elem.classList.add("appfooter-blurred"),document.body.appendChild(elem),elem}function appFooter(options){var self=this;self.element=render(options),self.add=function(elem){self.element.appendChild(elem)},self.insert=function(elem){"string"==typeof elem?self.element.insertAdjacentHTML("afterbegin",elem):self.element.insertBefore(elem,self.element.firstChild)}}return appFooter.prototype.destroy=function(){this.element=null},appFooter}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/backdrop/style.css: -------------------------------------------------------------------------------- 1 | .backdropContainer{contain:layout style size}.backdropImage{background-repeat:no-repeat;background-position:center center;-webkit-background-size:cover;background-size:cover;position:absolute;top:0;left:0;right:0;bottom:0;contain:layout style}.backdropImageFadeIn{-webkit-animation:backdrop-fadein .8s ease-in normal both;animation:backdrop-fadein .8s ease-in normal both}@-webkit-keyframes backdrop-fadein{from{opacity:0}to{opacity:1}}@keyframes backdrop-fadein{from{opacity:0}to{opacity:1}} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/peoplecardbuilder.js: -------------------------------------------------------------------------------- 1 | define(["cardBuilder"],function(cardBuilder){"use strict";function buildPeopleCards(items,options){options=Object.assign(options||{},{cardLayout:!1,centerText:!0,showTitle:!0,cardFooterAside:"none",showPersonRoleOrType:!0,cardCssClass:"personCard",defaultCardImageIcon:""}),cardBuilder.buildCards(items,options)}return{buildPeopleCards:buildPeopleCards}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/cardbuilder/roundcard.css: -------------------------------------------------------------------------------- 1 | .card-round:focus>.cardBox-focustransform{-webkit-transform:scale(1.26,1.26);transform:scale(1.26,1.26)}.cardImage-round,.cardImageContainer-round{-webkit-border-radius:1000px;border-radius:1000px} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/clearbutton.css: -------------------------------------------------------------------------------- 1 | .clearButton{background:0 0;border:0!important;padding:0!important;cursor:pointer;outline:0!important;color:inherit;width:100%;vertical-align:middle;font-family:inherit;font-size:inherit} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/confirm/confirm.js: -------------------------------------------------------------------------------- 1 | define(["dialog","globalize"],function(dialog,globalize){"use strict";return function(text,title){var options;options="string"==typeof text?{title:title,text:text}:text;var items=[];return items.push({name:options.cancelText||globalize.translate("sharedcomponents#ButtonCancel"),id:"cancel",type:"cancel"===options.primary?"submit":"cancel"}),items.push({name:options.confirmText||globalize.translate("sharedcomponents#ButtonOk"),id:"ok",type:"cancel"===options.primary?"cancel":"submit"}),options.buttons=items,dialog(options).then(function(result){return"ok"===result?Promise.resolve():Promise.reject()})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/confirm/nativeconfirm.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function replaceAll(str,find,replace){return str.split(find).join(replace)}return function(options){"string"==typeof options&&(options={title:"",text:options});var text=replaceAll(options.text||"","
","\n");return confirm(text)?Promise.resolve():Promise.reject()}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/deletehelper.js: -------------------------------------------------------------------------------- 1 | define(["connectionManager","confirm","appRouter","globalize"],function(connectionManager,confirm,appRouter,globalize){"use strict";function alertText(options){return new Promise(function(resolve,reject){require(["alert"],function(alert){alert(options).then(resolve,resolve)})})}function deleteItem(options){var item=options.item,itemId=item.Id,parentId=item.SeasonId||item.SeriesId||item.ParentId,serverId=item.ServerId,msg=globalize.translate("sharedcomponents#ConfirmDeleteItem"),title=globalize.translate("sharedcomponents#HeaderDeleteItem"),apiClient=connectionManager.getApiClient(item.ServerId);return confirm({title:title,text:msg,confirmText:globalize.translate("sharedcomponents#Delete"),primary:"cancel"}).then(function(){return apiClient.deleteItem(itemId).then(function(){options.navigate&&(parentId?appRouter.showItem(parentId,serverId):appRouter.goHome())},function(err){var result=function(){return Promise.reject(err)};return alertText(globalize.translate("sharedcomponents#ErrorDeletingItem")).then(result,result)})})}return{deleteItem:deleteItem}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.template.html: -------------------------------------------------------------------------------- 1 | 
2 |

3 |
4 | 5 |
6 |
7 | 8 |
9 | 10 |
11 |
12 |
13 | 14 |
15 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-button/paper-icon-button-light.js: -------------------------------------------------------------------------------- 1 | define(["layoutManager","css!./emby-button","registerElement"],function(layoutManager){"use strict";var EmbyButtonPrototype=Object.create(HTMLButtonElement.prototype);EmbyButtonPrototype.createdCallback=function(){this.classList.add("paper-icon-button-light"),layoutManager.tv&&this.classList.add("icon-button-focusscale")},document.registerElement("paper-icon-button-light",{prototype:EmbyButtonPrototype,extends:"button"})}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-collapse/emby-collapse.css: -------------------------------------------------------------------------------- 1 | .emby-collapse{margin:.5em 0}.collapseContent{border-width:0;padding:1.25em;height:0;-webkit-transition-property:height;-o-transition-property:height;transition-property:height;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s;overflow:hidden}.emby-collapsible-button{margin:0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;width:100%;text-align:left;text-transform:none;border-width:0 0 .1em;border-style:solid;padding-left:.1em;background:0 0;-webkit-box-shadow:none;box-shadow:none}.emby-collapse-expandIcon{-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transition:-webkit-transform 180ms ease-out;-o-transition:transform 180ms ease-out;transition:transform 180ms ease-out;position:absolute;right:.5em;font-size:1.5em}.emby-collapse-expandIconExpanded{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.emby-collapsible-title{margin:0;padding:0} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-input/emby-input.css: -------------------------------------------------------------------------------- 1 | .emby-input{display:block;margin:0;margin-bottom:0!important;font-size:110%;font-family:inherit;font-weight:inherit;padding:.4em .25em;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0!important;-webkit-tap-highlight-color:transparent;width:100%}.emby-input::-moz-focus-inner{border:0}.inputContainer{margin-bottom:1.8em}.inputLabel{display:inline-block;margin-bottom:.25em}.emby-input+.fieldDescription{margin-top:.25em}.emby-input-iconbutton{-webkit-align-self:flex-end;align-self:flex-end} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-progressring/emby-progressring.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-radio/emby-radio.js: -------------------------------------------------------------------------------- 1 | define(["css!./emby-radio","registerElement"],function(){"use strict";function onKeyDown(e){if(13===e.keyCode)return e.preventDefault(),this.checked=!0,!1}var EmbyRadioPrototype=Object.create(HTMLInputElement.prototype);EmbyRadioPrototype.attachedCallback=function(){if("true"!==this.getAttribute("data-radio")){this.setAttribute("data-radio","true"),this.classList.add("mdl-radio__button");var labelElement=this.parentNode;labelElement.classList.add("mdl-radio"),labelElement.classList.add("mdl-js-radio"),labelElement.classList.add("mdl-js-ripple-effect");var labelTextElement=labelElement.querySelector("span");labelTextElement.classList.add("radioButtonLabel"),labelTextElement.classList.add("mdl-radio__label"),labelElement.insertAdjacentHTML("beforeend",''),this.addEventListener("keydown",onKeyDown)}},document.registerElement("emby-radio",{prototype:EmbyRadioPrototype,extends:"input"})}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-tabs/emby-tabs.css: -------------------------------------------------------------------------------- 1 | .emby-tab-button,.emby-tabs-slider{position:relative}.emby-tab-button{background:0 0;-webkit-box-shadow:none;box-shadow:none;cursor:pointer;outline:0!important;width:auto;font-family:inherit;font-size:inherit;display:inline-block;vertical-align:middle;-webkit-flex-shrink:0;flex-shrink:0;margin:0;padding:1em .9em;height:auto;min-width:initial;line-height:initial;-webkit-border-radius:0!important;border-radius:0!important;overflow:hidden;font-weight:600}.emby-tab-button.emby-button-tv:focus{-webkit-transform:scale(1.32);transform:scale(1.32);-webkit-transform-origin:center center;transform-origin:center center}.emby-tab-button-ripple-effect{background:rgba(0,0,0,.7)!important}.tabContent:not(.is-active){display:none} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/emby-textarea/emby-textarea.css: -------------------------------------------------------------------------------- 1 | .emby-textarea{display:block;margin:0;margin-bottom:0!important;font-size:inherit;font-family:inherit;font-weight:inherit;color:inherit;padding:.35em .25em;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0!important;-webkit-tap-highlight-color:transparent;width:100%}.emby-textarea::-moz-focus-inner{border:0}.textareaLabel{display:inline-block;-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;margin-bottom:.25em}.emby-textarea+.fieldDescription{margin-top:.25em} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/filedownloader.js: -------------------------------------------------------------------------------- 1 | define(["multi-download"],function(multiDownload){"use strict";return{download:function(items){multiDownload(items.map(function(item){return item.url}))}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/filesystem.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";return{fileExists:function(path){return Promise.reject()},directoryExists:function(path){return Promise.reject()}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/flexstyles.css: -------------------------------------------------------------------------------- 1 | .flex{display:-webkit-box;display:-webkit-flex;display:flex}.inline-flex{display:-webkit-inline-box;display:-webkit-inline-flex;display:inline-flex}.flex-direction-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.flex-direction-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;flex-direction:row}.flex-grow{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1}.flex-shrink-zero{-webkit-flex-shrink:0;flex-shrink:0}.align-items-center{-webkit-box-align:center;-webkit-align-items:center;align-items:center}.align-items-flex-start{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.justify-content-center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.justify-content-flex-end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.flex-wrap-wrap{-webkit-flex-wrap:wrap;flex-wrap:wrap}.align-self-flex-end{-webkit-align-self:flex-end;align-self:flex-end} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/fonts.css: -------------------------------------------------------------------------------- 1 | h1,h2,h3{font-weight:500}html{font-family:-apple-system,Helvetica,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",'Open Sans',sans-serif;font-size:93%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}h1,h2,h3{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",'Open Sans',sans-serif}h1{font-size:1.8em}h2{font-size:1.5em}h3{font-size:1.17em}.layout-tv{font-size:2.5vh}.layout-mobile{font-size:90%} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/fonts.sized.css: -------------------------------------------------------------------------------- 1 | h1,h2,h3{font-weight:500}h1{font-size:1.8em}.layout-desktop h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.17em}@media all and (min-height:720px){html{font-size:20px}}@media all and (min-height:1000px){html{font-size:27px}} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fonts/material-icons/style.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:local('Material Icons'),local('MaterialIcons-Regular'),url(flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2'),url(flUhRq6tzZclQEJ-Vdg-IuiaDsNa.woff) format('woff')}.md-icon{font-family:'Material Icons';font-weight:400;font-style:normal;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-webkit-font-feature-settings:"liga" 1;-moz-font-feature-settings:"liga" 1;font-feature-settings:"liga" 1;line-height:1;overflow:hidden;vertical-align:middle} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/fullscreen/fullscreen-dc.js: -------------------------------------------------------------------------------- 1 | define(["dom","fullscreenManager"],function(dom,fullscreenManager){"use strict";function isTargetValid(target){return!dom.parentWithTag(target,["BUTTON","INPUT","TEXTAREA"])}dom.addEventListener(window,"dblclick",function(e){isTargetValid(e.target)&&(fullscreenManager.isFullScreen()?fullscreenManager.exitFullscreen():fullscreenManager.requestFullscreen())},{passive:!0})}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/guide/programs.css: -------------------------------------------------------------------------------- 1 | .newTvProgram{background:#38c;color:#fff}.liveTvProgram{background:#c33;color:#fff}.premiereTvProgram{background:#EF6C00;color:#fff}.repeatTvProgram{background:#009688;color:#fff} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/headroom/headroom.css: -------------------------------------------------------------------------------- 1 | .headroom{-webkit-transition:-webkit-transform 140ms linear;-o-transition:transform 140ms linear;transition:transform 140ms linear}.headroom--pinned{-webkit-transform:none;transform:none}.headroom--unpinned:not(.headroomDisabled){-webkit-transform:translateY(-100%);transform:translateY(-100%)} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/homescreensettings/homescreensettingsdialog.template.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 |

4 | ${HeaderDisplaySettings} 5 |

6 |
7 | 8 |
9 |
10 | 11 |
12 | 13 |
14 | 15 |
16 | 19 |
20 | 21 |
22 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/homesections/homesections.css: -------------------------------------------------------------------------------- 1 | .homeLibraryButton{min-width:18%;margin:.5em!important}@media all and (max-width:50em){.homeLibraryButton{width:46%!important}} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/imageeditor/imageeditor.css: -------------------------------------------------------------------------------- 1 | .imageEditor-buttons{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin:1em 0}.first-imageEditor-buttons{margin-top:2em} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/images/basicimagefetcher.js: -------------------------------------------------------------------------------- 1 | define(["dom"],function(dom){"use strict";function loadImage(elem,url){return elem?"IMG"!==elem.tagName?(elem.style.backgroundImage="url('"+url+"')",Promise.resolve()):loadImageIntoImg(elem,url):Promise.reject("elem cannot be null")}function loadImageIntoImg(elem,url){return new Promise(function(resolve,reject){dom.addEventListener(elem,"load",resolve,{once:!0}),elem.setAttribute("src",url)})}return{loadImage:loadImage}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/images/style.css: -------------------------------------------------------------------------------- 1 | .lazy-image-fadein{-webkit-animation:lazy-image-fadein 330ms ease-in normal both;animation:lazy-image-fadein 330ms ease-in normal both}.lazy-image-fadein-fast{-webkit-animation:lazy-image-fadein 160ms ease-in normal both;animation:lazy-image-fadein 160ms ease-in normal both}@-webkit-keyframes lazy-image-fadein{from{opacity:0}to{opacity:1}}@keyframes lazy-image-fadein{from{opacity:0}to{opacity:1}}.lazy-image-fadein{opacity:0;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-name:popInAnimation;animation-name:popInAnimation;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(0,0,.5,1);animation-timing-function:cubic-bezier(0,0,.5,1)}@-webkit-keyframes popInAnimation{0%{opacity:0}100%{opacity:1}}@keyframes popInAnimation{0%{opacity:0}100%{opacity:1}} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/imageuploader/style.css: -------------------------------------------------------------------------------- 1 | .imageEditor-dropZone{border:.2em dashed currentcolor;-webkit-border-radius:.25em;border-radius:.25em;text-align:center;position:relative;height:12em;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/layoutmanager.js: -------------------------------------------------------------------------------- 1 | define(["browser","appSettings","events"],function(browser,appSettings,events){"use strict";function setLayout(instance,layout,selectedLayout){layout===selectedLayout?(instance[layout]=!0,document.documentElement.classList.add("layout-"+layout)):(instance[layout]=!1,document.documentElement.classList.remove("layout-"+layout))}function LayoutManager(){}return LayoutManager.prototype.setLayout=function(layout,save){layout&&"auto"!==layout?(setLayout(this,"mobile",layout),setLayout(this,"tv",layout),setLayout(this,"desktop",layout),!1!==save&&appSettings.set("layout",layout)):(this.autoLayout(),!1!==save&&appSettings.set("layout","")),events.trigger(this,"modechange")},LayoutManager.prototype.getSavedLayout=function(layout){return appSettings.get("layout")},LayoutManager.prototype.autoLayout=function(){browser.mobile?this.setLayout("mobile",!1):browser.tv||browser.xboxOne?this.setLayout("tv",!1):this.setLayout(this.defaultLayout||"tv",!1)},LayoutManager.prototype.init=function(){var saved=this.getSavedLayout();saved?this.setLayout(saved,!1):this.autoLayout()},new LayoutManager}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/lazyloader/lazyedgehack.css: -------------------------------------------------------------------------------- 1 | .lazy{min-width:.1em;min-height:.1em} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/loading/loader2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/loading/loader2.gif -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/loading/loading-legacy.css: -------------------------------------------------------------------------------- 1 | .loading-spinner{margin-top:-3em;margin-left:-3em;width:6em;height:6em;position:fixed;top:50%;left:50%;z-index:9999999} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/loading/loading-legacy.js: -------------------------------------------------------------------------------- 1 | define(["require","css!./loading-legacy"],function(require){"use strict";var loadingElem;return{show:function(){var elem=loadingElem;elem||(elem=document.createElement("img"),elem.src=require.toUrl(".").split("?")[0]+"/loader2.gif",loadingElem=elem,elem.classList.add("loading-spinner"),document.body.appendChild(elem)),elem.classList.remove("hide")},hide:function(){var elem=loadingElem;elem&&elem.classList.add("hide")}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/mediainfo/fresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/mediainfo/fresh.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/mediainfo/rotten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/mediainfo/rotten.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/multidownload.js: -------------------------------------------------------------------------------- 1 | define(["browser"],function(browser){"use strict";function fallback(urls){var i=0;!function createIframe(){var frame=document.createElement("iframe");frame.style.display="none",frame.src=urls[i++],document.documentElement.appendChild(frame);var interval=setInterval(function(){"complete"!==frame.contentWindow.document.readyState&&"interactive"!==frame.contentWindow.document.readyState||(clearInterval(interval),setTimeout(function(){frame.parentNode.removeChild(frame)},1e3),i>>0;if("function"!=typeof fun)throw new TypeError;for(var res=[],thisp=arguments[1],i=0;i","\n"),result=prompt(label,options.text||"");return result?Promise.resolve(result):Promise.reject(result)}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.template.html: -------------------------------------------------------------------------------- 1 | 
2 | 5 |

6 |
7 | 8 |
9 |
10 | 11 |
12 |
13 | 14 |
15 |
16 | 17 |
18 | 21 |
22 | 23 |
24 |
25 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/empty.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.css: -------------------------------------------------------------------------------- 1 | .recordingDialog-imageContainer{-webkit-flex-shrink:0;flex-shrink:0;padding:1em 1em 1em 0;width:25%}.recordingDialog-img{width:100%}.recordingDialog-itemName{margin-top:.7em}.recordingDetailsContainer{display:-webkit-box;display:-webkit-flex;display:flex}.recordingDetails{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1}.recordingDetailText{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-flex-wrap:wrap;flex-wrap:wrap} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingfields.css: -------------------------------------------------------------------------------- 1 | .recordingButton{margin-left:0;min-width:10em}.recordingIcon-active{color:#c33}.recordSeriesContainer{margin-bottom:.8em} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/require/requiretext.js: -------------------------------------------------------------------------------- 1 | define(function(){"use strict";var addRedirectPrevention=null!=self.dashboardVersion&&self.Dashboard&&!self.Dashboard.isConnectMode();return{load:function(url,req,load,config){-1===url.indexOf("://")&&(url=config.baseUrl+url),config.urlArgs&&(url+=config.urlArgs(url,url)),addRedirectPrevention&&(-1===url.indexOf("?")?url+="?":url+="&",url+="r=0");var xhr=new XMLHttpRequest;xhr.open("GET",url,!0),xhr.onload=function(e){load(this.response)},xhr.send()},normalize:function(name,normalize){return normalize(name)}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/scrollstyles.css: -------------------------------------------------------------------------------- 1 | .smoothScrollX,.smoothScrollY{scroll-behavior:smooth}.scrollX{overflow-x:auto;-webkit-overflow-scrolling:touch;overflow-y:hidden;white-space:nowrap}.hiddenScrollX,.layout-tv .scrollX{-ms-overflow-style:none}.hiddenScrollX-forced{overflow:-moz-scrollbars-none}.scrollY,.smoothScrollY{overflow-y:auto;-webkit-overflow-scrolling:touch;overflow-x:hidden}.hiddenScrollX::-webkit-scrollbar,.layout-tv .scrollX::-webkit-scrollbar{height:0!important;display:none}.hiddenScrollY,.layout-tv .smoothScrollY{-ms-overflow-style:none}.hiddenScrollY-forced{overflow:-moz-scrollbars-none}.hiddenScrollY::-webkit-scrollbar,.layout-tv .scrollY::-webkit-scrollbar,.layout-tv .smoothScrollY::-webkit-scrollbar{width:0!important;display:none} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/search/searchfields.css: -------------------------------------------------------------------------------- 1 | .searchFieldsInner{max-width:60em;margin:0 auto}.searchfields-icon{margin-bottom:.1em;margin-right:.25em;font-size:2em;-webkit-align-self:flex-end;align-self:flex-end} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/search/searchfields.template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |
7 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/serviceworker/notifications.js: -------------------------------------------------------------------------------- 1 | !function(){"use strict";function getApiClient(serverId){return connectionManager?Promise.resolve(connectionManager.getApiClient(serverId)):Promise.reject()}function executeAction(action,data,serverId){return getApiClient(serverId).then(function(apiClient){switch(action){case"cancel-install":var id=data.id;return apiClient.cancelPackageInstallation(id);case"restart":return apiClient.restartServer();default:return clients.openWindow("/"),Promise.resolve()}})}var connectionManager;self.addEventListener("notificationclick",function(event){var notification=event.notification;notification.close();var data=notification.data,serverId=data.serverId,action=event.action;if(!action)return clients.openWindow("/"),void event.waitUntil(Promise.resolve());event.waitUntil(executeAction(action,data,serverId))},!1)}(); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/serviceworker/sync.js: -------------------------------------------------------------------------------- 1 | self.addEventListener("sync",function(event){"use strict";event.tag}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/shell.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";return{openUrl:function(url){window.open(url,"_blank")},canExec:!1,exec:function(options){return Promise.reject()}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/sortmenu/sortmenu.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | 7 |
8 | 11 |
12 | 13 |
14 | 18 |
19 |
20 |
21 |
22 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.css: -------------------------------------------------------------------------------- 1 | .originalSubtitleFileLabel{margin-right:1em} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/themes/blueradiance/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/themes/blueradiance/bg.jpg -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/themes/logodark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/themes/logodark.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/themes/logowhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/themes/logowhite.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/toast/toast.css: -------------------------------------------------------------------------------- 1 | .toast{position:fixed;min-width:20em;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 .0725em .29em 0 rgba(0,0,0,.37);box-shadow:0 .0725em .29em 0 rgba(0,0,0,.37);-webkit-border-radius:.15em;border-radius:.15em;cursor:default;-webkit-transition:-webkit-transform .3s ease-out;-o-transition:transform .3s ease-out;transition:transform .3s ease-out;min-height:initial;padding:1em 1.5em;bottom:1em;left:1em;font-size:110%;z-index:9999999;-webkit-transform:translateY(16em);transform:translateY(16em)}.toastVisible{-webkit-transform:none;transform:none} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/toast/toast.js: -------------------------------------------------------------------------------- 1 | define(["css!./toast"],function(){"use strict";function remove(elem){setTimeout(function(){elem.parentNode.removeChild(elem)},300)}function animateRemove(elem){setTimeout(function(){elem.classList.remove("toastVisible"),remove(elem)},3300)}return function(options){"string"==typeof options&&(options={text:options});var elem=document.createElement("div");elem.classList.add("toast"),elem.innerHTML=options.text,document.body.appendChild(elem),setTimeout(function(){elem.classList.add("toastVisible"),animateRemove(elem)},300)}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.css: -------------------------------------------------------------------------------- 1 | .btnUserDataOn{color:#c33!important} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/usersettings/usersettings.js: -------------------------------------------------------------------------------- 1 | define(["userSettingsBuilder"],function(userSettingsBuilder){"use strict";return new userSettingsBuilder}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/visibleinviewport.js: -------------------------------------------------------------------------------- 1 | define(["dom"],function(dom){"use strict";function visibleInViewport(elem,partial,thresholdX,thresholdY){if(thresholdX=thresholdX||0,thresholdY=thresholdY||0,!elem.getBoundingClientRect)return!0;var windowSize=dom.getWindowSize(),vpWidth=windowSize.innerWidth,vpHeight=windowSize.innerHeight,rec=elem.getBoundingClientRect(),tViz=rec.top>=0&&rec.top0&&rec.bottom<=vpHeight+thresholdY,lViz=rec.left>=0&&rec.left0&&rec.right<=vpWidth+thresholdX,vVisible=partial?tViz||bViz:tViz&&bViz,hVisible=partial?lViz||rViz:lViz&&rViz;return vVisible&&hVisible}return visibleInViewport}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/youtubeplayer/style.css: -------------------------------------------------------------------------------- 1 | .youtubePlayerContainer{background:#000!important;position:fixed!important;top:0;bottom:0;left:0;right:0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.youtubePlayerContainer.onTop{z-index:1000}.youtubePlayerContainer video{margin:0!important;padding:0!important;width:100%;height:100%} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/hlsjs/hls.js.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "path": ".", 6 | "folder_exclude_patterns": [ 7 | ".git", 8 | "node_modules", 9 | "dist", 10 | "lib" 11 | ], 12 | "file_exclude_patterns": [ 13 | ".gitignore", 14 | "hls.js.sublime-project", 15 | "hls.js.sublime-workspace" 16 | ] 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/bower_components/query-string/index.js: -------------------------------------------------------------------------------- 1 | "use strict";window.queryString={},window.queryString.extract=function(maybeUrl){return maybeUrl.split("?")[1]||""},window.queryString.parse=function(str){return"string"!=typeof str?{}:(str=str.trim().replace(/^(\?|#|&)/,""),str?str.split("&").reduce(function(ret,param){var parts=param.replace(/\+/g," ").split("="),key=parts[0],val=parts[1];return key=decodeURIComponent(key),val=void 0===val?null:decodeURIComponent(val),ret.hasOwnProperty(key)?Array.isArray(ret[key])?ret[key].push(val):ret[key]=[ret[key],val]:ret[key]=val,ret},{}):{})},window.queryString.stringify=function(obj){return obj?Object.keys(obj).sort().map(function(key){var val=obj[key];return Array.isArray(val)?val.sort().map(function(val2){return encodeURIComponent(key)+"="+encodeURIComponent(val2)}).join("&"):encodeURIComponent(key)+"="+encodeURIComponent(val)}).join("&"):""}; -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/camerauploadsettings.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 |
4 |
5 | 6 |

7 | ${HeaderCameraUpload} 8 |

9 | 10 |
11 |

${SelectCameraUploadServers}

12 | 13 |
14 |
15 |
16 |
17 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/components/categorysyncbuttons.js: -------------------------------------------------------------------------------- 1 | define(["itemHelper","libraryMenu","apphost"],function(itemHelper,libraryMenu,appHost){"use strict";function initSyncButtons(view){var apiClient=window.ApiClient;apiClient&&apiClient.getCurrentUserId()&&apiClient.getCurrentUser().then(function(user){for(var item={SupportsSync:!0},categorySyncButtons=view.querySelectorAll(".categorySyncButton"),i=0,length=categorySyncButtons.length;i47304e5?Math.round(seconds/47304e5)+" centuries ago":date_str}return window.humane_date=humane_date,humane_date}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/components/navdrawer/navdrawer.css: -------------------------------------------------------------------------------- 1 | .tmla-mask,.touch-menu-la{position:fixed;top:0;bottom:0;contain:strict}.touch-menu-la{background-color:#FFF;will-change:transform;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-transition:-webkit-transform ease-out 40ms,left ease-out 260ms;-o-transition:transform ease-out 40ms,left ease-out 260ms;transition:transform ease-out 40ms,left ease-out 260ms;z-index:1099}.touch-menu-la.transition{-webkit-transition:-webkit-transform ease-out 240ms,left ease-out 260ms;-o-transition:transform ease-out 240ms,left ease-out 260ms;transition:transform ease-out 240ms,left ease-out 260ms}.drawer-open{-webkit-box-shadow:2px 0 12px rgba(0,0,0,.4);box-shadow:2px 0 12px rgba(0,0,0,.4)}.scrollContainer{-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1}.tmla-mask{left:0;right:0;background-color:#000;opacity:0;z-index:1098;-webkit-transition:opacity ease-in-out .38s,visibility ease-in-out .38s;-o-transition:opacity ease-in-out .38s,visibility ease-in-out .38s;transition:opacity ease-in-out .38s,visibility ease-in-out .38s;will-change:opacity;background-color:rgba(0,0,0,.3)}.tmla-mask.backdrop{opacity:1} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/detailtable.css: -------------------------------------------------------------------------------- 1 | .detailTableBodyCell,.detailTableHeaderCell{border-spacing:0;padding:.4em}.detailTable{border-collapse:collapse;border-spacing:0;text-align:left;width:100%;margin:0 auto}.detailTableHeaderCell{font-weight:700;text-align:left;vertical-align:top} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/ani_equalizer_white.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/ani_equalizer_white.gif -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/iossplash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/iossplash.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/logindefault.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/logindefault.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/logoblack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/logoblack.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/supporter/premiumflag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/supporter/premiumflag.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/supporter/supporterbadge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/supporter/supporterbadge.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/images/supporter/supporterflag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/css/images/supporter/supporterflag.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/livetv.css: -------------------------------------------------------------------------------- 1 | .guideVerticalScroller{padding-bottom:15em}@media all and (min-width:62.5em){#guideTab{padding-left:.5em}} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/css/metadataeditor.css: -------------------------------------------------------------------------------- 1 | .editPageSidebar{display:block}.editPageSidebar-withcontent{display:none}.libraryTree{margin-left:.25em}.offlineEditorNode{color:#c33}.editorNode img{height:18px;margin:0 .35em;vertical-align:middle;position:relative;top:-2px}.jstree-anchor{font-weight:400!important}.jstree-wholerow-hovered{background:#38c!important;-webkit-border-radius:0!important;border-radius:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.jstree-default .jstree-hovered{background:0 0!important;-webkit-border-radius:0!important;border-radius:0!important;-webkit-box-shadow:none!important;box-shadow:none!important;color:#fff!important}.jstree-default .jstree-wholerow-clicked{background:#52B54B!important}@media all and (min-width:50em){.editPageSidebar{position:fixed;top:5.2em;bottom:0;left:0;width:30%;border-right:1px solid #555;display:block}.editPageInnerContent{float:right;width:68.5%}}@media all and (min-width:112.5em){.editPageSidebar{width:25%}.editPageInnerContent{width:73.5%}} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/dashboard/aboutpage.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";return function(view,params){view.addEventListener("viewbeforeshow",function(e){var elem=view.querySelector("#appVersionNumber");elem.innerHTML=elem.innerHTML.replace("{0}",ConnectionManager.appVersion())})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/dashboard/serveractivity.js: -------------------------------------------------------------------------------- 1 | define(["components/activitylog","globalize"],function(ActivityLog,globalize){"use strict";return function(view,params){var activityLog;"false"!==params.useractivity?(view.querySelector(".activityItems").setAttribute("data-useractivity","true"),view.querySelector(".sectionTitle").innerHTML=globalize.translate("HeaderActivity")):(view.querySelector(".activityItems").setAttribute("data-useractivity","false"),view.querySelector(".sectionTitle").innerHTML=globalize.translate("Alerts")),view.addEventListener("viewshow",function(){activityLog||(activityLog=new ActivityLog({serverId:ApiClient.serverId(),element:view.querySelector(".activityItems")}))}),view.addEventListener("viewdestroy",function(){activityLog&&activityLog.destroy(),activityLog=null})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/dashboard/wizardfinishpage.js: -------------------------------------------------------------------------------- 1 | define(["loading"],function(loading){"use strict";function onFinish(){loading.show(),ApiClient.ajax({url:ApiClient.getUrl("Startup/Complete"),type:"POST"}).then(function(){Dashboard.navigate("dashboard.html"),loading.hide()})}return function(view,params){view.querySelector(".btnWizardNext").addEventListener("click",onFinish),view.addEventListener("viewshow",function(){document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")}),view.addEventListener("viewhide",function(){document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/dashboard/wizardremoteaccess.js: -------------------------------------------------------------------------------- 1 | define(["loading","emby-checkbox","emby-button","emby-select"],function(loading){"use strict";function save(page){loading.show();var apiClient=ApiClient,config={};config.EnableRemoteAccess=page.querySelector("#chkRemoteAccess").checked,config.EnableAutomaticPortMapping=page.querySelector("#chkEnableUpnp").checked,apiClient.ajax({type:"POST",data:config,url:apiClient.getUrl("Startup/RemoteAccess")}).then(function(){loading.hide(),navigateToNextPage()})}function navigateToNextPage(){Dashboard.navigate("wizardagreement.html")}function onSubmit(e){return save(this),e.preventDefault(),!1}return function(view,params){view.querySelector(".wizardSettingsForm").addEventListener("submit",onSubmit),view.addEventListener("viewshow",function(){document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")}),view.addEventListener("viewhide",function(){document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/devices/devices.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 |
4 |
5 | 6 |
7 |
8 |

${TabDevices}

9 | ${Help} 10 |
11 |
12 | 13 |
14 | 15 | 16 | 17 |
18 |
19 |
20 |
-------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/devices/ios/ios.css: -------------------------------------------------------------------------------- 1 | html{font-size:82%!important}.formDialogFooter{position:static!important;margin:0 -1em!important} -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/edititemmetadata.html: -------------------------------------------------------------------------------- 1 | 
2 | 3 | 8 |
9 |
10 |
    11 |
    12 |
    13 |
    14 |
    15 |
    16 |
    17 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/favicon.ico -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/forgotpasswordpin.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 | 5 |
    6 | 7 |
    8 |

    ${HeaderPasswordReset}

    9 | 10 |
    11 | 12 |
    13 | 14 |
    15 | 18 | 19 | 22 |
    23 |
    24 |
    25 | 26 |
    27 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/home.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 |
    6 |
    7 |
    8 |
    9 |
    10 | -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/legacy/buttonenabled.js: -------------------------------------------------------------------------------- 1 | define(["jQuery"],function($){"use strict";$.fn.buttonEnabled=function(enabled){return enabled?this.attr("disabled","").removeAttr("disabled"):this.attr("disabled","disabled")}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/legacy/dashboard.js: -------------------------------------------------------------------------------- 1 | Dashboard.confirm=function(message,title,callback){"use strict";require(["confirm"],function(confirm){confirm(message,title).then(function(){callback(!0)},function(){callback(!1)})})},Dashboard.showLoadingMsg=function(){"use strict";require(["loading"],function(loading){loading.show()})},Dashboard.hideLoadingMsg=function(){"use strict";require(["loading"],function(loading){loading.hide()})}; -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/legacy/fnchecked.js: -------------------------------------------------------------------------------- 1 | define(["jQuery"],function($){"use strict";$.fn.checked=function(value){return!0===value||!1===value?$(this).each(function(){this.checked=value}):this.length&&this[0].checked},$.fn.checkboxradio=function(){return this}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/legacy/selectmenu.js: -------------------------------------------------------------------------------- 1 | define(["jQuery"],function($){"use strict";$.fn.selectmenu=function(){return this}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/library.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 |
    6 | 7 | 10 | 11 | 12 | ${Help} 13 |
    14 |
    15 |
    16 |
    17 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/livetvguideprovider.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 | 8 |
    9 |
    10 |
    11 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/log.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 |
    6 |
    7 |
    8 | 12 |
    ${EnableDebugLoggingHelp}
    13 |
    14 |
    15 |
    16 |
    17 | 18 |
    19 |
    20 |
    21 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/managedownloads.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 | 5 |
    6 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Emby", 3 | "short_name": "Emby", 4 | "start_url": "/web/index.html", 5 | "description": "The open media solution.", 6 | "lang": "en-US", 7 | "related_applications": [ 8 | { 9 | "platform": "android", 10 | "location": "https://play.google.com/store/apps/details?id=com.mb.android" 11 | }, 12 | { 13 | "platform": "ios", 14 | "location": "https://itunes.apple.com/us/app/emby/id992180193?ls=1&mt=8" 15 | }, 16 | { 17 | "platform": "web" 18 | } 19 | ], 20 | "icons": [ 21 | { 22 | "src": "touchicon72.png", 23 | "sizes": "72x72", 24 | "type": "image/png" 25 | }, 26 | { 27 | "src": "touchicon114.png", 28 | "sizes": "114x114", 29 | "type": "image/png" 30 | }, 31 | { 32 | "src": "touchicon144.png", 33 | "sizes": "144x144", 34 | "type": "image/png" 35 | } 36 | ], 37 | "display": "minimal-ui", 38 | "theme_color": "#52B54B" 39 | } -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/mypreferencesdisplay.html: -------------------------------------------------------------------------------- 1 | 
    2 |
    3 |
    4 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/mypreferenceshome.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/mypreferenceslanguages.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/mypreferencessubtitles.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/mysync.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 |
    8 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/mysyncjob.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 | 5 |
    6 |

    ${HeaderSyncJobInfo}

    7 |
    8 |
    9 |
    10 |
    11 |
    12 |
    13 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/notificationsettings.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 | 8 |
    9 |
    10 | 11 |
    12 |
    13 |
    14 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/plugins.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 |
    8 |
    9 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scheduledtasks.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 | 16 |
    17 |
    18 | 19 |
    20 |
    21 |
    22 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/apploader.js: -------------------------------------------------------------------------------- 1 | !function(){"use strict";function loadApp(){var script=document.createElement("script"),src="./scripts/site.js";self.dashboardVersion&&(src+="?v="+self.dashboardVersion),script.src=src,document.head.appendChild(script)}!function(){var src,script=document.createElement("script");src=self.Promise?"./bower_components/alameda/alameda.js":"./bower_components/requirejs/require.js",self.dashboardVersion&&(src+="?v="+self.dashboardVersion),script.src=src,script.onload=loadApp,document.head.appendChild(script)}()}(); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/edititemmetadata.js: -------------------------------------------------------------------------------- 1 | define(["loading"],function(loading){"use strict";function reload(context,itemId){loading.show(),itemId?require(["metadataEditor"],function(metadataEditor){metadataEditor.embed(context.querySelector(".editPageInnerContent"),itemId,ApiClient.serverInfo().Id)}):(context.querySelector(".editPageInnerContent").innerHTML="",loading.hide())}return function(view,params){view.addEventListener("viewshow",function(){reload(this,MetadataEditor.getCurrentItemId())}),MetadataEditor.setCurrentItemId(null),view.querySelector(".libraryTree").addEventListener("itemclicked",function(event){var data=event.detail;data.id!=MetadataEditor.getCurrentItemId()&&(MetadataEditor.setCurrentItemId(data.id),reload(view,data.id))})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/forgotpassword.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function processForgotPasswordResult(result){if("ContactAdmin"==result.Action)return void Dashboard.alert({message:Globalize.translate("MessageContactAdminToResetPassword"),title:Globalize.translate("HeaderForgotPassword")});if("InNetworkRequired"==result.Action)return void Dashboard.alert({message:Globalize.translate("MessageForgotPasswordInNetworkRequired"),title:Globalize.translate("HeaderForgotPassword")});if("PinCode"==result.Action){var msg=Globalize.translate("MessageForgotPasswordFileCreated");return msg+="
    ",msg+="
    ",msg+=result.PinFile,msg+="
    ",void Dashboard.alert({message:msg,title:Globalize.translate("HeaderForgotPassword")})}}return function(view,params){function onSubmit(e){return ApiClient.ajax({type:"POST",url:ApiClient.getUrl("Users/ForgotPassword"),dataType:"json",data:{EnteredUsername:view.querySelector("#txtName").value}}).then(processForgotPasswordResult),e.preventDefault(),!1}view.querySelector("form").addEventListener("submit",onSubmit)}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/forgotpasswordpin.js: -------------------------------------------------------------------------------- 1 | define([],function(){"use strict";function processForgotPasswordResult(result){if(result.Success){var msg=Globalize.translate("MessagePasswordResetForUsers");return msg+="
    ",msg+="
    ",msg+=result.UsersReset.join("
    "),void Dashboard.alert({message:msg,title:Globalize.translate("HeaderPasswordReset"),callback:function(){window.location.href="login.html"}})}Dashboard.alert({message:Globalize.translate("MessageInvalidForgotPasswordPin"),title:Globalize.translate("HeaderPasswordReset")})}return function(view,params){function onSubmit(e){return ApiClient.ajax({type:"POST",url:ApiClient.getUrl("Users/ForgotPassword/Pin"),dataType:"json",data:{Pin:view.querySelector("#txtPin").value}}).then(processForgotPasswordResult),e.preventDefault(),!1}view.querySelector("form").addEventListener("submit",onSubmit)}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/livetvguide.js: -------------------------------------------------------------------------------- 1 | define(["tvguide"],function(tvguide){"use strict";return function(view,params,tabContent){var guideInstance,self=this;self.renderTab=function(){guideInstance||(guideInstance=new tvguide({element:tabContent,serverId:ApiClient.serverId()}))},self.onShow=function(){guideInstance&&guideInstance.resume()},self.onHide=function(){guideInstance&&guideInstance.pause()}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/livetvguideprovider.js: -------------------------------------------------------------------------------- 1 | define(["events","loading"],function(events,loading){"use strict";function onListingsSubmitted(){Dashboard.navigate("livetvstatus.html")}function init(page,type,providerId){var url="components/tvproviders/"+type+".js";require([url],function(factory){var instance=new factory(page,providerId,{});events.on(instance,"submitted",onListingsSubmitted),instance.init()})}function loadTemplate(page,type,providerId){require(["text!./components/tvproviders/"+type+".template.html"],function(html){page.querySelector(".providerTemplate").innerHTML=Globalize.translateDocument(html),init(page,type,providerId)})}pageIdOn("pageshow","liveTvGuideProviderPage",function(){loading.show();var providerId=getParameterByName("id");loadTemplate(this,getParameterByName("type"),providerId)})}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/livetvseriestimers.js: -------------------------------------------------------------------------------- 1 | define(["datetime","cardBuilder","imageLoader","apphost","loading","paper-icon-button-light","emby-button"],function(datetime,cardBuilder,imageLoader,appHost,loading){"use strict";function renderTimers(context,timers){var html="";appHost.supports("imageanalysis");html+=cardBuilder.getCardsHtml({items:timers,shape:"auto",defaultShape:"portrait",showTitle:!0,cardLayout:!1,preferThumb:"auto",coverImage:!0,overlayText:!1,showSeriesTimerTime:!0,showSeriesTimerChannel:!0,centerText:!0,overlayMoreButton:!0,lines:3});var elem=context.querySelector("#items");elem.innerHTML=html,imageLoader.lazyChildren(elem),loading.hide()}function reload(context,promise){loading.show(),promise.then(function(result){renderTimers(context,result.Items)})}var query={SortBy:"SortName",SortOrder:"Ascending"};return function(view,params,tabContent){var timersPromise,self=this;self.preRender=function(){timersPromise=ApiClient.getLiveTvSeriesTimers(query)},self.renderTab=function(){reload(tabContent,timersPromise)}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/managedownloads.js: -------------------------------------------------------------------------------- 1 | define(["syncJobList"],function(syncJobList){"use strict";return function(view,params){var apiClient=ApiClient,mySyncJobList=new syncJobList({serverId:apiClient.serverId(),userId:null,element:view.querySelector(".syncActivity"),mode:"download"});view.addEventListener("viewdestroy",function(){mySyncJobList&&(mySyncJobList.destroy(),mySyncJobList=null)})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/mysync.js: -------------------------------------------------------------------------------- 1 | define(["apphost","globalize","syncJobList","events","localsync","emby-button","paper-icon-button-light"],function(appHost,globalize,syncJobList,events,localSync){"use strict";return function(view,params){var interval,mySyncJobList=new syncJobList({mode:params.mode,enableRemoteSyncManagement:!1,serverId:ApiClient.serverId(),userId:"offline"===params.mode?null:ApiClient.getCurrentUserId(),element:view.querySelector(".syncActivity"),mode:params.mode});view.addEventListener("viewbeforehide",function(){interval&&(clearInterval(interval),interval=null)}),view.addEventListener("viewdestroy",function(){mySyncJobList.destroy()})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/nowplayingpage.js: -------------------------------------------------------------------------------- 1 | define(["components/remotecontrol","libraryMenu","emby-button"],function(remotecontrolFactory,libraryMenu){"use strict";return function(view,params){var remoteControl=new remotecontrolFactory;remoteControl.init(view,view.querySelector(".remoteControlContent")),view.addEventListener("viewshow",function(e){libraryMenu.setTransparentMenu(!0),remoteControl&&remoteControl.onShow()}),view.addEventListener("viewbeforehide",function(e){libraryMenu.setTransparentMenu(!1),remoteControl&&remoteControl.destroy()})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/playlistedit.js: -------------------------------------------------------------------------------- 1 | define(["listView"],function(listView){"use strict";function getFetchPlaylistItemsFn(itemId){return function(){var query={Fields:"PrimaryImageAspectRatio,UserData",EnableImageTypes:"Primary,Backdrop,Banner,Thumb",UserId:ApiClient.getCurrentUserId()};return ApiClient.getJSON(ApiClient.getUrl("Playlists/"+itemId+"/Items",query))}}function getItemsHtmlFn(itemId){return function(items){return listView.getListViewHtml({items:items,showIndex:!1,showRemoveFromPlaylist:!0,playFromHere:!0,action:"playallfromhere",smallIcon:!0,dragHandle:!0,playlistId:itemId})}}function init(page,item){var elem=page.querySelector("#childrenContent .itemsContainer");elem.classList.add("vertical-list"),elem.classList.remove("vertical-wrap"),elem.enableDragReordering(!0),elem.fetchData=getFetchPlaylistItemsFn(item.Id),elem.getItemsHtml=getItemsHtmlFn(item.Id)}window.PlaylistViewer={render:function(page,item){page.playlistInit||(page.playlistInit=!0,init(page,item)),page.querySelector("#childrenContent").classList.add("verticalSection-extrabottompadding"),page.querySelector("#childrenContent .itemsContainer").refreshItems()}}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/searchpage.js: -------------------------------------------------------------------------------- 1 | define(["focusManager","searchFields","searchResults","events"],function(focusManager,SearchFields,SearchResults,events){"use strict";return function(view,params){function onSearch(e,value){self.searchResults.search(value)}var self=this;view.addEventListener("viewshow",function(){self.searchFields||(self.searchFields=new SearchFields({element:view.querySelector(".searchFields")}),self.searchResults=new SearchResults({element:view.querySelector(".searchResults"),serverId:params.serverId||ApiClient.serverId(),parentId:params.parentId,collectionType:params.collectionType}),events.on(self.searchFields,"search",onSearch))}),view.addEventListener("viewdestroy",function(){self.searchFields&&(self.searchFields.destroy(),self.searchFields=null),self.searchResults&&(self.searchResults.destroy(),self.searchResults=null)})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/themeloader.js: -------------------------------------------------------------------------------- 1 | define(["userSettings","skinManager","connectionManager","events"],function(userSettings,skinManager,connectionManager,events){"use strict";var currentViewType;pageClassOn("viewbeforeshow","page",function(){var classList=this.classList,viewType=classList.contains("type-interior")||classList.contains("wizardPage")?"a":"b";if(viewType!==currentViewType){currentViewType=viewType;var theme,context;"a"===viewType?(theme=userSettings.dashboardTheme(),context="serverdashboard"):theme=userSettings.theme(),skinManager.setTheme(theme,context)}}),events.on(connectionManager,"localusersignedin",function(e,user){currentViewType=null})}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/userpassword.js: -------------------------------------------------------------------------------- 1 | define(["jQuery","loading","libraryMenu"],function($,loading,libraryMenu){"use strict";function loadUser(page,user){libraryMenu.setTitle(user.Name),"Guest"==user.ConnectLinkType?$(".connectMessage",page).show():$(".connectMessage",page).hide(),loading.hide()}function loadData(page){loading.show();var userId=getParameterByName("userId");ApiClient.getUser(userId).then(function(user){loadUser(page,user)})}$(document).on("pageinit","#userPasswordPage",function(){$(".adminUpdatePasswordForm").off("submit",UpdatePasswordPage.onSubmit).on("submit",UpdatePasswordPage.onSubmit),$(".adminLocalAccessForm").off("submit",UpdatePasswordPage.onLocalAccessSubmit).on("submit",UpdatePasswordPage.onLocalAccessSubmit)}).on("pagebeforeshow","#userPasswordPage",function(){loadData(this)})}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/scripts/wizardagreement.js: -------------------------------------------------------------------------------- 1 | define(["dom","emby-linkbutton"],function(dom){"use strict";function onSubmit(e){return dom.parentWithClass(this,"page").querySelector(".chkAccept").checked?Dashboard.navigate("wizardfinish.html"):Dashboard.alert({message:Globalize.translate("MessagePleaseAcceptTermsOfServiceBeforeContinuing"),title:""}),e.preventDefault(),!1}return function(view,params){view.querySelector(".wizardAgreementForm").addEventListener("submit",onSubmit),view.addEventListener("viewshow",function(){document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")}),view.addEventListener("viewhide",function(){document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")})}}); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/search.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 |
    8 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/serveractivity.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 |

    8 |

    9 |
    10 | 11 |
    12 |
    13 |
    14 |
    15 |
    16 |
    17 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/serviceworker.js: -------------------------------------------------------------------------------- 1 | importScripts("bower_components/emby-webcomponents/serviceworker/notifications.js","bower_components/emby-webcomponents/serviceworker/sync.js"); -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/syncactivity.html: -------------------------------------------------------------------------------- 1 | 
    2 | 3 |
    4 |
    5 | 6 |
    7 | 10 | 11 |
    12 |
    13 |
    14 | 15 |
    16 |
    17 |
    18 |
    -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/thirdparty/jstree/themes/default/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/thirdparty/jstree/themes/default/32px.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/thirdparty/jstree/themes/default/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/thirdparty/jstree/themes/default/throbber.gif -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/touchicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/touchicon.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/touchicon114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/touchicon114.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/touchicon144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/touchicon144.png -------------------------------------------------------------------------------- /MediaBrowser.WebDashboard/dashboard-ui/touchicon72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/MediaBrowser.WebDashboard/dashboard-ui/touchicon72.png -------------------------------------------------------------------------------- /MediaBrowser.XbmcMetadata/Configuration/NfoOptions.cs: -------------------------------------------------------------------------------- 1 | using MediaBrowser.Common.Configuration; 2 | using MediaBrowser.Model.Configuration; 3 | using System.Collections.Generic; 4 | 5 | namespace MediaBrowser.XbmcMetadata.Configuration 6 | { 7 | public class ConfigurationFactory : IConfigurationFactory 8 | { 9 | public IEnumerable GetConfigurations() 10 | { 11 | return new[] 12 | { 13 | new ConfigurationStore 14 | { 15 | ConfigurationType = typeof(XbmcMetadataOptions), 16 | Key = "xbmcmetadata" 17 | } 18 | }; 19 | } 20 | } 21 | 22 | public static class ConfigurationExtension 23 | { 24 | public static XbmcMetadataOptions GetNfoConfiguration(this IConfigurationManager manager) 25 | { 26 | return manager.GetConfiguration("xbmcmetadata"); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | netcoreapp2.1 11 | false 12 | 13 | 14 | -------------------------------------------------------------------------------- /MediaBrowser.XbmcMetadata/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Mono.Nat/Mono.Nat.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | netcoreapp2.1 11 | false 12 | 13 | 14 | -------------------------------------------------------------------------------- /Mono.Nat/NatProtocol.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Mono.Nat 3 | { 4 | public enum NatProtocol 5 | { 6 | Upnp = 0, 7 | Pmp = 1 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Emby Server 2 | ============ 3 | 4 | Emby Server is a personal media server with apps on just about every device. 5 | 6 | It features a REST-based API with built-in documention to facilitate client development. We also have client libraries for our API to enable rapid development. 7 | 8 | ## Build Instructions ## 9 | To build Emby you will need to satify the following dependencies - make, libunwind, libicu, compat-openssl10, dotnet-sdk-2.1.10 for Fedora >= 26, on other distributions you will need the equivalents. The dotnet SDK can be obtained from: https://www.microsoft.com/net/learn/get-started/linux/rhel . 10 | ``` 11 | git clone https://github.com/dcrdev/Emby 12 | cd ./Emby 13 | make 14 | ``` 15 | 16 | ## Command Line Arguments ## 17 | ``` 18 | Emby.Server.Unix.dll [-updatepackage string] [-programdata string] [-service] [-os string] 19 | ``` 20 | ## Developer Info ## 21 | 22 | [Api Docs](https://github.com/MediaBrowser/MediaBrowser/wiki "Api Workflow") 23 | 24 | [How to Build a Server Plugin](https://github.com/MediaBrowser/MediaBrowser/wiki/How-to-build-a-Server-Plugin "How to build a server plugin") 25 | -------------------------------------------------------------------------------- /RSSDP/IEnumerableExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace Rssdp.Infrastructure 7 | { 8 | internal static class IEnumerableExtensions 9 | { 10 | public static IEnumerable SelectManyRecursive(this IEnumerable source, Func> selector) 11 | { 12 | if (source == null) throw new ArgumentNullException("source"); 13 | if (selector == null) throw new ArgumentNullException("selector"); 14 | 15 | return !source.Any() ? source : 16 | source.Concat( 17 | source 18 | .SelectMany(i => selector(i).EmptyIfNull()) 19 | .SelectManyRecursive(selector) 20 | ); 21 | } 22 | 23 | public static IEnumerable EmptyIfNull(this IEnumerable source) 24 | { 25 | return source ?? Enumerable.Empty(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /RSSDP/RSSDP.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | netcoreapp2.1 8 | false 9 | 10 | 11 | -------------------------------------------------------------------------------- /SharedVersion.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | [assembly: AssemblyVersion("3.5.2.0")] 4 | -------------------------------------------------------------------------------- /SocketHttpListener/ByteOrder.cs: -------------------------------------------------------------------------------- 1 | namespace SocketHttpListener 2 | { 3 | /// 4 | /// Contains the values that indicate whether the byte order is a Little-endian or Big-endian. 5 | /// 6 | public enum ByteOrder : byte 7 | { 8 | /// 9 | /// Indicates a Little-endian. 10 | /// 11 | Little, 12 | /// 13 | /// Indicates a Big-endian. 14 | /// 15 | Big 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SocketHttpListener/CompressionMethod.cs: -------------------------------------------------------------------------------- 1 | namespace SocketHttpListener 2 | { 3 | /// 4 | /// Contains the values of the compression method used to compress the message on the WebSocket 5 | /// connection. 6 | /// 7 | /// 8 | /// The values of the compression method are defined in 9 | /// Compression 10 | /// Extensions for WebSocket. 11 | /// 12 | public enum CompressionMethod : byte 13 | { 14 | /// 15 | /// Indicates non compression. 16 | /// 17 | None, 18 | /// 19 | /// Indicates using DEFLATE. 20 | /// 21 | Deflate 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /SocketHttpListener/Fin.cs: -------------------------------------------------------------------------------- 1 | namespace SocketHttpListener 2 | { 3 | internal enum Fin : byte 4 | { 5 | More = 0x0, 6 | Final = 0x1 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /SocketHttpListener/Mask.cs: -------------------------------------------------------------------------------- 1 | namespace SocketHttpListener 2 | { 3 | internal enum Mask : byte 4 | { 5 | Unmask = 0x0, 6 | Mask = 0x1 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/AuthenticationSchemeSelector.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | 3 | namespace SocketHttpListener.Net 4 | { 5 | public delegate AuthenticationSchemes AuthenticationSchemeSelector(HttpListenerRequest httpRequest); 6 | } 7 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/AuthenticationTypes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace SocketHttpListener.Net 6 | { 7 | internal class AuthenticationTypes 8 | { 9 | internal const string NTLM = "NTLM"; 10 | internal const string Negotiate = "Negotiate"; 11 | internal const string Basic = "Basic"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/BoundaryType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | 6 | namespace SocketHttpListener.Net 7 | { 8 | internal enum BoundaryType 9 | { 10 | ContentLength = 0, // Content-Length: XXX 11 | Chunked = 1, // Transfer-Encoding: chunked 12 | Multipart = 3, 13 | None = 4, 14 | Invalid = 5, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/EntitySendFormat.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | 6 | namespace SocketHttpListener.Net 7 | { 8 | internal enum EntitySendFormat 9 | { 10 | ContentLength = 0, // Content-Length: XXX 11 | Chunked = 1, // Transfer-Encoding: chunked 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/HttpVersion.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SocketHttpListener.Net 4 | { 5 | // 6 | // 7 | public class HttpVersion 8 | { 9 | 10 | public static readonly Version Version10 = new Version(1, 0); 11 | public static readonly Version Version11 = new Version(1, 1); 12 | 13 | // pretty useless.. 14 | public HttpVersion() { } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/UriScheme.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace SocketHttpListener.Net 6 | { 7 | internal static class UriScheme 8 | { 9 | public const string File = "file"; 10 | public const string Ftp = "ftp"; 11 | public const string Gopher = "gopher"; 12 | public const string Http = "http"; 13 | public const string Https = "https"; 14 | public const string News = "news"; 15 | public const string NetPipe = "net.pipe"; 16 | public const string NetTcp = "net.tcp"; 17 | public const string Nntp = "nntp"; 18 | public const string Mailto = "mailto"; 19 | public const string Ws = "ws"; 20 | public const string Wss = "wss"; 21 | 22 | public const string SchemeDelimiter = "://"; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /SocketHttpListener/Net/WebSockets/WebSocketContext.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Collections.Specialized; 4 | using System.Net; 5 | using System.Security.Principal; 6 | using MediaBrowser.Model.Net; 7 | using MediaBrowser.Model.Services; 8 | 9 | namespace SocketHttpListener.Net.WebSockets 10 | { 11 | public abstract class WebSocketContext 12 | { 13 | public abstract Uri RequestUri { get; } 14 | public abstract QueryParamCollection Headers { get; } 15 | public abstract string Origin { get; } 16 | public abstract IEnumerable SecWebSocketProtocols { get; } 17 | public abstract string SecWebSocketVersion { get; } 18 | public abstract string SecWebSocketKey { get; } 19 | public abstract CookieCollection CookieCollection { get; } 20 | public abstract IPrincipal User { get; } 21 | public abstract bool IsAuthenticated { get; } 22 | public abstract bool IsLocal { get; } 23 | public abstract bool IsSecureConnection { get; } 24 | public abstract WebSocket WebSocket { get; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SocketHttpListener/Primitives/ITextEncoding.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | using MediaBrowser.Model.Text; 6 | 7 | namespace SocketHttpListener.Primitives 8 | { 9 | public static class TextEncodingExtensions 10 | { 11 | public static Encoding GetDefaultEncoding(this ITextEncoding encoding) 12 | { 13 | return Encoding.UTF8; 14 | } 15 | 16 | public static Encoding GetDefaultEncoding() 17 | { 18 | return Encoding.UTF8; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SocketHttpListener/Rsv.cs: -------------------------------------------------------------------------------- 1 | namespace SocketHttpListener 2 | { 3 | internal enum Rsv : byte 4 | { 5 | Off = 0x0, 6 | On = 0x1 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /SocketHttpListener/SocketHttpListener.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | netcoreapp2.1 11 | true 12 | false 13 | 14 | 15 | -------------------------------------------------------------------------------- /ThirdParty/emby/Emby.Server.CinemaMode.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/ThirdParty/emby/Emby.Server.CinemaMode.dll -------------------------------------------------------------------------------- /ThirdParty/emby/Emby.Server.Connect.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/ThirdParty/emby/Emby.Server.Connect.dll -------------------------------------------------------------------------------- /ThirdParty/emby/Emby.Server.MediaEncoding.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/ThirdParty/emby/Emby.Server.MediaEncoding.dll -------------------------------------------------------------------------------- /ThirdParty/emby/Emby.Server.Sync.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/ThirdParty/emby/Emby.Server.Sync.dll -------------------------------------------------------------------------------- /ThirdParty/taglib/TagLib.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dcrdev/Emby/4a8528061f183093bd4be8fd95d07f9e280f4d5d/ThirdParty/taglib/TagLib.dll --------------------------------------------------------------------------------