├── .eslintignore
├── .eslintrc.yml
├── .gitignore
├── README.md
├── config.json
├── dep
└── jellyfin-sdk-0.10.0-1.tgz
├── dist
├── UIConfig.json
├── assets
│ └── images
│ │ ├── album.png
│ │ ├── avatar.png
│ │ ├── folder.png
│ │ ├── folder.xcf
│ │ ├── genre.png
│ │ ├── jellyfin-mono.png
│ │ ├── jellyfin.png
│ │ ├── jellyfin.svg
│ │ ├── playlist.png
│ │ └── song.png
├── i18n
│ ├── strings_en.json
│ ├── strings_zh.json
│ └── strings_zh_TW.json
├── index.d.ts
├── index.d.ts.map
├── index.js
├── index.js.map
├── lib
│ ├── JellyfinContext.d.ts
│ ├── JellyfinContext.d.ts.map
│ ├── JellyfinContext.js
│ ├── JellyfinContext.js.map
│ ├── connection
│ │ ├── ConnectionManager.d.ts
│ │ ├── ConnectionManager.d.ts.map
│ │ ├── ConnectionManager.js
│ │ ├── ConnectionManager.js.map
│ │ ├── ServerConnection.d.ts
│ │ ├── ServerConnection.d.ts.map
│ │ ├── ServerConnection.js
│ │ ├── ServerConnection.js.map
│ │ ├── ServerPoller.d.ts
│ │ ├── ServerPoller.d.ts.map
│ │ ├── ServerPoller.js
│ │ └── ServerPoller.js.map
│ ├── controller
│ │ ├── browse
│ │ │ ├── index.d.ts
│ │ │ ├── index.d.ts.map
│ │ │ ├── index.js
│ │ │ ├── index.js.map
│ │ │ └── view-handlers
│ │ │ │ ├── AlbumViewHandler.d.ts
│ │ │ │ ├── AlbumViewHandler.d.ts.map
│ │ │ │ ├── AlbumViewHandler.js
│ │ │ │ ├── AlbumViewHandler.js.map
│ │ │ │ ├── ArtistViewHandler.d.ts
│ │ │ │ ├── ArtistViewHandler.d.ts.map
│ │ │ │ ├── ArtistViewHandler.js
│ │ │ │ ├── ArtistViewHandler.js.map
│ │ │ │ ├── BaseViewHandler.d.ts
│ │ │ │ ├── BaseViewHandler.d.ts.map
│ │ │ │ ├── BaseViewHandler.js
│ │ │ │ ├── BaseViewHandler.js.map
│ │ │ │ ├── CollectionViewHandler.d.ts
│ │ │ │ ├── CollectionViewHandler.d.ts.map
│ │ │ │ ├── CollectionViewHandler.js
│ │ │ │ ├── CollectionViewHandler.js.map
│ │ │ │ ├── CollectionsViewHandler.d.ts
│ │ │ │ ├── CollectionsViewHandler.d.ts.map
│ │ │ │ ├── CollectionsViewHandler.js
│ │ │ │ ├── CollectionsViewHandler.js.map
│ │ │ │ ├── Explodable.d.ts
│ │ │ │ ├── Explodable.d.ts.map
│ │ │ │ ├── Explodable.js
│ │ │ │ ├── Explodable.js.map
│ │ │ │ ├── FilterSelectionViewHandler.d.ts
│ │ │ │ ├── FilterSelectionViewHandler.d.ts.map
│ │ │ │ ├── FilterSelectionViewHandler.js
│ │ │ │ ├── FilterSelectionViewHandler.js.map
│ │ │ │ ├── FilterableViewHandler.d.ts
│ │ │ │ ├── FilterableViewHandler.d.ts.map
│ │ │ │ ├── FilterableViewHandler.js
│ │ │ │ ├── FilterableViewHandler.js.map
│ │ │ │ ├── FolderViewHandler.d.ts
│ │ │ │ ├── FolderViewHandler.d.ts.map
│ │ │ │ ├── FolderViewHandler.js
│ │ │ │ ├── FolderViewHandler.js.map
│ │ │ │ ├── GenreViewHandler.d.ts
│ │ │ │ ├── GenreViewHandler.d.ts.map
│ │ │ │ ├── GenreViewHandler.js
│ │ │ │ ├── GenreViewHandler.js.map
│ │ │ │ ├── LibraryViewHandler.d.ts
│ │ │ │ ├── LibraryViewHandler.d.ts.map
│ │ │ │ ├── LibraryViewHandler.js
│ │ │ │ ├── LibraryViewHandler.js.map
│ │ │ │ ├── PlaylistViewHandler.d.ts
│ │ │ │ ├── PlaylistViewHandler.d.ts.map
│ │ │ │ ├── PlaylistViewHandler.js
│ │ │ │ ├── PlaylistViewHandler.js.map
│ │ │ │ ├── RootViewHandler.d.ts
│ │ │ │ ├── RootViewHandler.d.ts.map
│ │ │ │ ├── RootViewHandler.js
│ │ │ │ ├── RootViewHandler.js.map
│ │ │ │ ├── SongViewHandler.d.ts
│ │ │ │ ├── SongViewHandler.d.ts.map
│ │ │ │ ├── SongViewHandler.js
│ │ │ │ ├── SongViewHandler.js.map
│ │ │ │ ├── UserViewViewHandler.d.ts
│ │ │ │ ├── UserViewViewHandler.d.ts.map
│ │ │ │ ├── UserViewViewHandler.js
│ │ │ │ ├── UserViewViewHandler.js.map
│ │ │ │ ├── View.d.ts
│ │ │ │ ├── View.d.ts.map
│ │ │ │ ├── View.js
│ │ │ │ ├── View.js.map
│ │ │ │ ├── ViewHandler.d.ts
│ │ │ │ ├── ViewHandler.d.ts.map
│ │ │ │ ├── ViewHandler.js
│ │ │ │ ├── ViewHandler.js.map
│ │ │ │ ├── ViewHandlerFactory.d.ts
│ │ │ │ ├── ViewHandlerFactory.d.ts.map
│ │ │ │ ├── ViewHandlerFactory.js
│ │ │ │ ├── ViewHandlerFactory.js.map
│ │ │ │ ├── ViewHelper.d.ts
│ │ │ │ ├── ViewHelper.d.ts.map
│ │ │ │ ├── ViewHelper.js
│ │ │ │ ├── ViewHelper.js.map
│ │ │ │ └── renderer
│ │ │ │ ├── AlbumRenderer.d.ts
│ │ │ │ ├── AlbumRenderer.d.ts.map
│ │ │ │ ├── AlbumRenderer.js
│ │ │ │ ├── AlbumRenderer.js.map
│ │ │ │ ├── ArtistRenderer.d.ts
│ │ │ │ ├── ArtistRenderer.d.ts.map
│ │ │ │ ├── ArtistRenderer.js
│ │ │ │ ├── ArtistRenderer.js.map
│ │ │ │ ├── BaseRenderer.d.ts
│ │ │ │ ├── BaseRenderer.d.ts.map
│ │ │ │ ├── BaseRenderer.js
│ │ │ │ ├── BaseRenderer.js.map
│ │ │ │ ├── CollectionRenderer.d.ts
│ │ │ │ ├── CollectionRenderer.d.ts.map
│ │ │ │ ├── CollectionRenderer.js
│ │ │ │ ├── CollectionRenderer.js.map
│ │ │ │ ├── FolderRenderer.d.ts
│ │ │ │ ├── FolderRenderer.d.ts.map
│ │ │ │ ├── FolderRenderer.js
│ │ │ │ ├── FolderRenderer.js.map
│ │ │ │ ├── GenreRenderer.d.ts
│ │ │ │ ├── GenreRenderer.d.ts.map
│ │ │ │ ├── GenreRenderer.js
│ │ │ │ ├── GenreRenderer.js.map
│ │ │ │ ├── PlaylistRenderer.d.ts
│ │ │ │ ├── PlaylistRenderer.d.ts.map
│ │ │ │ ├── PlaylistRenderer.js
│ │ │ │ ├── PlaylistRenderer.js.map
│ │ │ │ ├── ServerRenderer.d.ts
│ │ │ │ ├── ServerRenderer.d.ts.map
│ │ │ │ ├── ServerRenderer.js
│ │ │ │ ├── ServerRenderer.js.map
│ │ │ │ ├── SongRenderer.d.ts
│ │ │ │ ├── SongRenderer.d.ts.map
│ │ │ │ ├── SongRenderer.js
│ │ │ │ ├── SongRenderer.js.map
│ │ │ │ ├── UserViewRenderer.d.ts
│ │ │ │ ├── UserViewRenderer.d.ts.map
│ │ │ │ ├── UserViewRenderer.js
│ │ │ │ ├── UserViewRenderer.js.map
│ │ │ │ ├── index.d.ts
│ │ │ │ ├── index.d.ts.map
│ │ │ │ ├── index.js
│ │ │ │ └── index.js.map
│ │ ├── play
│ │ │ ├── PlayController.d.ts
│ │ │ ├── PlayController.d.ts.map
│ │ │ ├── PlayController.js
│ │ │ └── PlayController.js.map
│ │ └── search
│ │ │ ├── SearchController.d.ts
│ │ │ ├── SearchController.d.ts.map
│ │ │ ├── SearchController.js
│ │ │ └── SearchController.js.map
│ ├── entities
│ │ ├── Album.d.ts
│ │ ├── Album.d.ts.map
│ │ ├── Album.js
│ │ ├── Album.js.map
│ │ ├── Artist.d.ts
│ │ ├── Artist.d.ts.map
│ │ ├── Artist.js
│ │ ├── Artist.js.map
│ │ ├── BaseEntity.d.ts
│ │ ├── BaseEntity.d.ts.map
│ │ ├── BaseEntity.js
│ │ ├── BaseEntity.js.map
│ │ ├── Collection.d.ts
│ │ ├── Collection.d.ts.map
│ │ ├── Collection.js
│ │ ├── Collection.js.map
│ │ ├── Folder.d.ts
│ │ ├── Folder.d.ts.map
│ │ ├── Folder.js
│ │ ├── Folder.js.map
│ │ ├── Genre.d.ts
│ │ ├── Genre.d.ts.map
│ │ ├── Genre.js
│ │ ├── Genre.js.map
│ │ ├── Playlist.d.ts
│ │ ├── Playlist.d.ts.map
│ │ ├── Playlist.js
│ │ ├── Playlist.js.map
│ │ ├── Server.d.ts
│ │ ├── Server.d.ts.map
│ │ ├── Server.js
│ │ ├── Server.js.map
│ │ ├── Song.d.ts
│ │ ├── Song.d.ts.map
│ │ ├── Song.js
│ │ ├── Song.js.map
│ │ ├── UserView.d.ts
│ │ ├── UserView.d.ts.map
│ │ ├── UserView.js
│ │ ├── UserView.js.map
│ │ ├── index.d.ts
│ │ ├── index.d.ts.map
│ │ ├── index.js
│ │ └── index.js.map
│ ├── model
│ │ ├── AlbumModel.d.ts
│ │ ├── AlbumModel.d.ts.map
│ │ ├── AlbumModel.js
│ │ ├── AlbumModel.js.map
│ │ ├── ArtistModel.d.ts
│ │ ├── ArtistModel.d.ts.map
│ │ ├── ArtistModel.js
│ │ ├── ArtistModel.js.map
│ │ ├── BaseModel.d.ts
│ │ ├── BaseModel.d.ts.map
│ │ ├── BaseModel.js
│ │ ├── BaseModel.js.map
│ │ ├── CollectionModel.d.ts
│ │ ├── CollectionModel.d.ts.map
│ │ ├── CollectionModel.js
│ │ ├── CollectionModel.js.map
│ │ ├── FolderModel.d.ts
│ │ ├── FolderModel.d.ts.map
│ │ ├── FolderModel.js
│ │ ├── FolderModel.js.map
│ │ ├── GenreModel.d.ts
│ │ ├── GenreModel.d.ts.map
│ │ ├── GenreModel.js
│ │ ├── GenreModel.js.map
│ │ ├── PlaylistModel.d.ts
│ │ ├── PlaylistModel.d.ts.map
│ │ ├── PlaylistModel.js
│ │ ├── PlaylistModel.js.map
│ │ ├── SongModel.d.ts
│ │ ├── SongModel.d.ts.map
│ │ ├── SongModel.js
│ │ ├── SongModel.js.map
│ │ ├── UserViewModel.d.ts
│ │ ├── UserViewModel.d.ts.map
│ │ ├── UserViewModel.js
│ │ ├── UserViewModel.js.map
│ │ ├── filter
│ │ │ ├── AZFilterModel.d.ts
│ │ │ ├── AZFilterModel.d.ts.map
│ │ │ ├── AZFilterModel.js
│ │ │ ├── AZFilterModel.js.map
│ │ │ ├── FilterFilterModel.d.ts
│ │ │ ├── FilterFilterModel.d.ts.map
│ │ │ ├── FilterFilterModel.js
│ │ │ ├── FilterFilterModel.js.map
│ │ │ ├── FilterModel.d.ts
│ │ │ ├── FilterModel.d.ts.map
│ │ │ ├── FilterModel.js
│ │ │ ├── FilterModel.js.map
│ │ │ ├── GenreFilterModel.d.ts
│ │ │ ├── GenreFilterModel.d.ts.map
│ │ │ ├── GenreFilterModel.js
│ │ │ ├── GenreFilterModel.js.map
│ │ │ ├── SortFilterModel.d.ts
│ │ │ ├── SortFilterModel.d.ts.map
│ │ │ ├── SortFilterModel.js
│ │ │ ├── SortFilterModel.js.map
│ │ │ ├── YearFilterModel.d.ts
│ │ │ ├── YearFilterModel.d.ts.map
│ │ │ ├── YearFilterModel.js
│ │ │ └── YearFilterModel.js.map
│ │ ├── index.d.ts
│ │ ├── index.d.ts.map
│ │ ├── index.js
│ │ ├── index.js.map
│ │ └── parser
│ │ │ ├── AlbumParser.d.ts
│ │ │ ├── AlbumParser.d.ts.map
│ │ │ ├── AlbumParser.js
│ │ │ ├── AlbumParser.js.map
│ │ │ ├── ArtistParser.d.ts
│ │ │ ├── ArtistParser.d.ts.map
│ │ │ ├── ArtistParser.js
│ │ │ ├── ArtistParser.js.map
│ │ │ ├── BaseParser.d.ts
│ │ │ ├── BaseParser.d.ts.map
│ │ │ ├── BaseParser.js
│ │ │ ├── BaseParser.js.map
│ │ │ ├── CollectionParser.d.ts
│ │ │ ├── CollectionParser.d.ts.map
│ │ │ ├── CollectionParser.js
│ │ │ ├── CollectionParser.js.map
│ │ │ ├── FolderContentParser.d.ts
│ │ │ ├── FolderContentParser.d.ts.map
│ │ │ ├── FolderContentParser.js
│ │ │ ├── FolderContentParser.js.map
│ │ │ ├── FolderParser.d.ts
│ │ │ ├── FolderParser.d.ts.map
│ │ │ ├── FolderParser.js
│ │ │ ├── FolderParser.js.map
│ │ │ ├── GenreParser.d.ts
│ │ │ ├── GenreParser.d.ts.map
│ │ │ ├── GenreParser.js
│ │ │ ├── GenreParser.js.map
│ │ │ ├── LyricsParser.d.ts
│ │ │ ├── LyricsParser.d.ts.map
│ │ │ ├── LyricsParser.js
│ │ │ ├── LyricsParser.js.map
│ │ │ ├── Parser.d.ts
│ │ │ ├── Parser.d.ts.map
│ │ │ ├── Parser.js
│ │ │ ├── Parser.js.map
│ │ │ ├── PlaylistParser.d.ts
│ │ │ ├── PlaylistParser.d.ts.map
│ │ │ ├── PlaylistParser.js
│ │ │ ├── PlaylistParser.js.map
│ │ │ ├── SongParser.d.ts
│ │ │ ├── SongParser.d.ts.map
│ │ │ ├── SongParser.js
│ │ │ ├── SongParser.js.map
│ │ │ ├── UserViewParser.d.ts
│ │ │ ├── UserViewParser.d.ts.map
│ │ │ ├── UserViewParser.js
│ │ │ └── UserViewParser.js.map
│ └── util
│ │ ├── AlbumArtHandler.d.ts
│ │ ├── AlbumArtHandler.d.ts.map
│ │ ├── AlbumArtHandler.js
│ │ ├── AlbumArtHandler.js.map
│ │ ├── JellyfinNowPlayingMetadataProvider.d.ts
│ │ ├── JellyfinNowPlayingMetadataProvider.d.ts.map
│ │ ├── JellyfinNowPlayingMetadataProvider.js
│ │ ├── JellyfinNowPlayingMetadataProvider.js.map
│ │ ├── PluginConfig.d.ts
│ │ ├── PluginConfig.d.ts.map
│ │ ├── PluginConfig.js
│ │ ├── PluginConfig.js.map
│ │ ├── ServerHelper.d.ts
│ │ ├── ServerHelper.d.ts.map
│ │ ├── ServerHelper.js
│ │ ├── ServerHelper.js.map
│ │ ├── SongHelper.d.ts
│ │ ├── SongHelper.d.ts.map
│ │ ├── SongHelper.js
│ │ ├── SongHelper.js.map
│ │ ├── StopWatch.d.ts
│ │ ├── StopWatch.d.ts.map
│ │ ├── StopWatch.js
│ │ ├── StopWatch.js.map
│ │ ├── Type.d.ts
│ │ ├── Type.d.ts.map
│ │ ├── Type.js
│ │ ├── Type.js.map
│ │ ├── UI.d.ts
│ │ ├── UI.d.ts.map
│ │ ├── UI.js
│ │ ├── UI.js.map
│ │ ├── index.d.ts
│ │ ├── index.d.ts.map
│ │ ├── index.js
│ │ └── index.js.map
└── package.json
├── fixup.sh
├── install.sh
├── package-lock.json
├── package.json
├── src
├── UIConfig.json
├── assets
│ └── images
│ │ ├── album.png
│ │ ├── avatar.png
│ │ ├── folder.png
│ │ ├── folder.xcf
│ │ ├── genre.png
│ │ ├── jellyfin-mono.png
│ │ ├── jellyfin.png
│ │ ├── jellyfin.svg
│ │ ├── playlist.png
│ │ └── song.png
├── config.json
├── i18n
│ ├── strings_en.json
│ ├── strings_zh.json
│ └── strings_zh_TW.json
├── index.ts
├── lib
│ ├── JellyfinContext.ts
│ ├── connection
│ │ ├── ConnectionManager.ts
│ │ ├── ServerConnection.ts
│ │ └── ServerPoller.ts
│ ├── controller
│ │ ├── browse
│ │ │ ├── index.ts
│ │ │ └── view-handlers
│ │ │ │ ├── AlbumViewHandler.ts
│ │ │ │ ├── ArtistViewHandler.ts
│ │ │ │ ├── BaseViewHandler.ts
│ │ │ │ ├── CollectionViewHandler.ts
│ │ │ │ ├── CollectionsViewHandler.ts
│ │ │ │ ├── Explodable.ts
│ │ │ │ ├── FilterSelectionViewHandler.ts
│ │ │ │ ├── FilterableViewHandler.ts
│ │ │ │ ├── FolderViewHandler.ts
│ │ │ │ ├── GenreViewHandler.ts
│ │ │ │ ├── LibraryViewHandler.ts
│ │ │ │ ├── PlaylistViewHandler.ts
│ │ │ │ ├── RootViewHandler.ts
│ │ │ │ ├── SongViewHandler.ts
│ │ │ │ ├── UserViewViewHandler.ts
│ │ │ │ ├── View.ts
│ │ │ │ ├── ViewHandler.ts
│ │ │ │ ├── ViewHandlerFactory.ts
│ │ │ │ ├── ViewHelper.ts
│ │ │ │ └── renderer
│ │ │ │ ├── AlbumRenderer.ts
│ │ │ │ ├── ArtistRenderer.ts
│ │ │ │ ├── BaseRenderer.ts
│ │ │ │ ├── CollectionRenderer.ts
│ │ │ │ ├── FolderRenderer.ts
│ │ │ │ ├── GenreRenderer.ts
│ │ │ │ ├── PlaylistRenderer.ts
│ │ │ │ ├── ServerRenderer.ts
│ │ │ │ ├── SongRenderer.ts
│ │ │ │ ├── UserViewRenderer.ts
│ │ │ │ └── index.ts
│ │ ├── play
│ │ │ └── PlayController.ts
│ │ └── search
│ │ │ └── SearchController.ts
│ ├── entities
│ │ ├── Album.ts
│ │ ├── Artist.ts
│ │ ├── BaseEntity.ts
│ │ ├── Collection.ts
│ │ ├── Folder.ts
│ │ ├── Genre.ts
│ │ ├── Playlist.ts
│ │ ├── Server.ts
│ │ ├── Song.ts
│ │ ├── UserView.ts
│ │ └── index.ts
│ ├── model
│ │ ├── AlbumModel.ts
│ │ ├── ArtistModel.ts
│ │ ├── BaseModel.ts
│ │ ├── CollectionModel.ts
│ │ ├── FolderModel.ts
│ │ ├── GenreModel.ts
│ │ ├── PlaylistModel.ts
│ │ ├── SongModel.ts
│ │ ├── UserViewModel.ts
│ │ ├── filter
│ │ │ ├── AZFilterModel.ts
│ │ │ ├── FilterFilterModel.ts
│ │ │ ├── FilterModel.ts
│ │ │ ├── GenreFilterModel.ts
│ │ │ ├── SortFilterModel.ts
│ │ │ └── YearFilterModel.ts
│ │ ├── index.ts
│ │ └── parser
│ │ │ ├── AlbumParser.ts
│ │ │ ├── ArtistParser.ts
│ │ │ ├── BaseParser.ts
│ │ │ ├── CollectionParser.ts
│ │ │ ├── FolderContentParser.ts
│ │ │ ├── FolderParser.ts
│ │ │ ├── GenreParser.ts
│ │ │ ├── LyricsParser.ts
│ │ │ ├── Parser.ts
│ │ │ ├── PlaylistParser.ts
│ │ │ ├── SongParser.ts
│ │ │ └── UserViewParser.ts
│ └── util
│ │ ├── AlbumArtHandler.ts
│ │ ├── JellyfinNowPlayingMetadataProvider.ts
│ │ ├── PluginConfig.ts
│ │ ├── ServerHelper.ts
│ │ ├── SongHelper.ts
│ │ ├── StopWatch.ts
│ │ ├── Type.ts
│ │ ├── UI.ts
│ │ └── index.ts
└── tsconfig.json
├── tsconfig.json
└── uninstall.sh
/.eslintignore:
--------------------------------------------------------------------------------
1 | .git
2 | .github
3 | node_modules/
4 | dist/
5 | test/
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | test
3 | tsconfig.tsbuildinfo
--------------------------------------------------------------------------------
/config.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/config.json
--------------------------------------------------------------------------------
/dep/jellyfin-sdk-0.10.0-1.tgz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dep/jellyfin-sdk-0.10.0-1.tgz
--------------------------------------------------------------------------------
/dist/assets/images/album.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/album.png
--------------------------------------------------------------------------------
/dist/assets/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/avatar.png
--------------------------------------------------------------------------------
/dist/assets/images/folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/folder.png
--------------------------------------------------------------------------------
/dist/assets/images/folder.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/folder.xcf
--------------------------------------------------------------------------------
/dist/assets/images/genre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/genre.png
--------------------------------------------------------------------------------
/dist/assets/images/jellyfin-mono.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/jellyfin-mono.png
--------------------------------------------------------------------------------
/dist/assets/images/jellyfin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/jellyfin.png
--------------------------------------------------------------------------------
/dist/assets/images/jellyfin.svg:
--------------------------------------------------------------------------------
1 |
2 |
11 |
25 |
--------------------------------------------------------------------------------
/dist/assets/images/playlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/playlist.png
--------------------------------------------------------------------------------
/dist/assets/images/song.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/dist/assets/images/song.png
--------------------------------------------------------------------------------
/dist/index.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAyB,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AASrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,kCAAkC,MAAM,+CAA+C,CAAC;AAE/F,UAAU,UAAW,SAAQ,iBAAiB;IAC5C,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC1B;AAQD,cAAM,kBAAmB,YAAW,uBAAuB;;gBAa7C,OAAO,EAAE,GAAG;IAKxB,WAAW;IA0GX,eAAe;IAMf,eAAe,CAAC,IAAI,EAAE,GAAG;IA2CnB,kBAAkB,CAAC,IAAI,EAAE,GAAG;IA2BlC,wBAAwB,CAAC,IAAI,EAAE,GAAG;IAsBlC,yBAAyB,CAAC,IAAI,EAAE,GAAG;IAmBnC,wBAAwB,CAAC,IAAI,EAAE,GAAG;IAkClC,gCAAgC,CAAC,IAAI,EAAE,GAAG;IAyC1C,cAAc;IAOd,OAAO;IA4CP,MAAM;IA6BN,qBAAqB;IAerB,eAAe,CAAC,GAAG,EAAE,MAAM;IAO3B,UAAU,CAAC,GAAG,EAAE,MAAM;IAOtB,iBAAiB,CAAC,KAAK,EAAE,GAAG;IAI5B,IAAI;IAIJ,KAAK;IAIL,MAAM;IAIN,IAAI,CAAC,QAAQ,EAAE,MAAM;IAIrB,IAAI;IAIJ,QAAQ;IAIR,QAAQ,CAAC,KAAK,EAAE,GAAG;IAOnB,MAAM,CAAC,KAAK,EAAE,WAAW;IAOzB,IAAI,CAAC,IAAI,EAAE,UAAU;IAsCrB,eAAe,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAItD,oBAAoB,CAAC,IAAI,EAAE;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC;IA0EzD,6BAA6B;CAG9B;AAED,SAAS,kBAAkB,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/JellyfinContext.d.ts:
--------------------------------------------------------------------------------
1 | import winston from 'winston';
2 | import { PluginConfigKey, PluginConfigValue } from './util/PluginConfig';
3 | interface DeviceInfo {
4 | name: string;
5 | id: string;
6 | host: string;
7 | }
8 | declare class JellyfinContext {
9 | #private;
10 | constructor();
11 | set(key: string, value: any): void;
12 | get(key: string, defaultValue: T): T;
13 | delete(key: string): void;
14 | init(pluginContext: any, pluginConfig: any): void;
15 | toast(type: 'success' | 'info' | 'error' | 'warn', message: string, title?: string): void;
16 | getLogger(): winston.Logger;
17 | getDeviceInfo(): DeviceInfo;
18 | hasConfigKey(key: T): boolean;
19 | getConfigValue(key: T): PluginConfigValue;
20 | deleteConfigValue(key: string): void;
21 | setConfigValue(key: T, value: PluginConfigValue): void;
22 | getAlbumArtPlugin(): any;
23 | getMpdPlugin(): any;
24 | getStateMachine(): any;
25 | getPlaylistManager(): any;
26 | reset(): void;
27 | getI18n(key: string, ...formatValues: any[]): string;
28 | get volumioCoreCommand(): any;
29 | }
30 | declare const _default: JellyfinContext;
31 | export default _default;
32 | //# sourceMappingURL=JellyfinContext.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/JellyfinContext.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"JellyfinContext.d.ts","sourceRoot":"","sources":["../../src/lib/JellyfinContext.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAwB,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAQD,cAAM,eAAe;;;IAqBnB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAI3B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAKvC,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG;IAgB1C,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,SAAa;IAItF,SAAS,IAAI,OAAO,CAAC,MAAM;IAI3B,aAAa,IAAI,UAAU;IAa3B,YAAY,CAAC,CAAC,SAAS,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO;IAIxD,cAAc,CAAC,CAAC,SAAS,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;IAqBvE,iBAAiB,CAAC,GAAG,EAAE,MAAM;IAI7B,cAAc,CAAC,CAAC,SAAS,eAAe,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAK7E,iBAAiB;IAIjB,YAAY,IAAI,GAAG;IAInB,eAAe,IAAI,GAAG;IAItB,kBAAkB,IAAI,GAAG;IAIzB,KAAK;IAeL,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,GAAG,EAAE,GAAG,MAAM;IAkDpD,IAAI,kBAAkB,IAAI,GAAG,CAE5B;CACF;;AAED,wBAAqC"}
--------------------------------------------------------------------------------
/dist/lib/connection/ConnectionManager.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | import EventEmitter from 'events';
3 | import { ClientInfo, DeviceInfo } from '@jellyfin/sdk';
4 | import ServerConnection from './ServerConnection';
5 | import Server from '../entities/Server';
6 | export interface PasswordFetch {
7 | (server: Server, username: string): string;
8 | }
9 | export interface JellyfinSdkInitInfo {
10 | clientInfo: ClientInfo;
11 | deviceInfo: DeviceInfo;
12 | }
13 | export default class ConnectionManager extends EventEmitter {
14 | #private;
15 | constructor(sdkInitInfo: JellyfinSdkInitInfo);
16 | getAuthenticatedConnection(server: Server, username: string, passwordFetch: PasswordFetch): Promise;
17 | logoutAll(): Promise;
18 | logout(connection: ServerConnection): Promise;
19 | findConnection(server: Server, username: string, authenticated?: boolean): ServerConnection | null;
20 | }
21 | //# sourceMappingURL=ConnectionManager.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/connection/ConnectionManager.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../../src/lib/connection/ConnectionManager.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAA2B,MAAM,eAAe,CAAC;AAChF,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAKxC,MAAM,WAAW,aAAa;IAC5B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,YAAY;;gBAM7C,WAAW,EAAE,mBAAmB;IAOtC,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmCrH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB1B,MAAM,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DzD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,gBAAgB,GAAG,IAAI;CAIjG"}
--------------------------------------------------------------------------------
/dist/lib/connection/ServerConnection.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { AuthenticationResult } from '@jellyfin/sdk/lib/generated-client/models/authentication-result';
3 | import Server from '../entities/Server';
4 | interface ServerConnection {
5 | id: string;
6 | username: string;
7 | server: Server;
8 | api: Api;
9 | auth?: AuthenticationResult | null;
10 | }
11 | export default ServerConnection;
12 | //# sourceMappingURL=ServerConnection.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/connection/ServerConnection.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ServerConnection.d.ts","sourceRoot":"","sources":["../../../src/lib/connection/ServerConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iEAAiE,CAAC;AACvG,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpC;AAED,eAAe,gBAAgB,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/connection/ServerConnection.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=ServerConnection.js.map
--------------------------------------------------------------------------------
/dist/lib/connection/ServerConnection.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ServerConnection.js","sourceRoot":"","sources":["../../../src/lib/connection/ServerConnection.ts"],"names":[],"mappings":"","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { AuthenticationResult } from '@jellyfin/sdk/lib/generated-client/models/authentication-result';\nimport Server from '../entities/Server';\n\ninterface ServerConnection {\n id: string;\n username: string;\n server: Server;\n api: Api;\n auth?: AuthenticationResult | null;\n}\n\nexport default ServerConnection;\n"]}
--------------------------------------------------------------------------------
/dist/lib/connection/ServerPoller.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | import EventEmitter from 'events';
4 | import { Api, Jellyfin } from '@jellyfin/sdk';
5 | import AbortController from 'abort-controller';
6 | import Server from '../entities/Server';
7 | export interface PollListener {
8 | (event: PollEvent): void;
9 | }
10 | export interface PollEvent {
11 | eventName: 'online' | 'lost';
12 | server: Server;
13 | api: Api;
14 | }
15 | interface PollTarget {
16 | url: string;
17 | connectionUrl: string;
18 | api: Api;
19 | pollTimer?: NodeJS.Timeout | null;
20 | abortController?: AbortController | null;
21 | lastEvent?: PollEvent;
22 | }
23 | export default class ServerPoller extends EventEmitter {
24 | #private;
25 | constructor(sdk: Jellyfin);
26 | addTarget(url: string | string[]): void;
27 | removeTarget(target: string | PollTarget): void;
28 | clearTargets(): void;
29 | getOnlineServers(): Server[];
30 | findOnlineServer(url: string): Server | null;
31 | emit(event: 'serverOnline', args: PollEvent): boolean;
32 | emit(event: 'serverLost', args: PollEvent): boolean;
33 | on(event: 'serverOnline' | 'serverLost', listener: PollListener): this;
34 | }
35 | export {};
36 | //# sourceMappingURL=ServerPoller.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/connection/ServerPoller.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ServerPoller.d.ts","sourceRoot":"","sources":["../../../src/lib/connection/ServerPoller.ts"],"names":[],"mappings":";;AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAA2B,MAAM,eAAe,CAAC;AAEvE,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAE/C,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAIxC,MAAM,WAAW,YAAY;IAC3B,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,GAAG,CAAC;CACV;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAID,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAY;;gBAKxC,GAAG,EAAE,QAAQ;IAMzB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAmBhC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAkBxC,YAAY;IAIZ,gBAAgB,IAAI,MAAM,EAAE;IAS5B,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA+D5C,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IACrD,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO;IAKnD,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;CAIvE"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/index.d.ts:
--------------------------------------------------------------------------------
1 | import ConnectionManager from '../../connection/ConnectionManager';
2 | import { ExplodedTrackInfo } from './view-handlers/Explodable';
3 | import { RenderedPage } from './view-handlers/ViewHandler';
4 | export default class BrowseController {
5 | #private;
6 | constructor(connectionManager: ConnectionManager);
7 | browseUri(uri: string): Promise;
8 | /**
9 | * Explodable uris:
10 | * - song[@songId=...]
11 | * - songs[@albumId=...] | [ [@playlistId=...| @parentId=...] ]
12 | * - albums[@parentId=...][@genreId=...| @artistId=...| @albumArtistId=...]
13 | *
14 | */
15 | explodeUri(uri: string): Promise;
16 | }
17 | //# sourceMappingURL=index.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/index.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/browse/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,oCAAoC,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,MAAM,CAAC,OAAO,OAAO,gBAAgB;;gBAIvB,iBAAiB,EAAE,iBAAiB;IAoB1C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOnD;;;;;;OAMG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAU5D"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/AlbumViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"AlbumViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/AlbumViewHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIjF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,GAAG,CAAC;CAC7B;AAED,cAAM,gBAAiB,SAAQ,qBAAqB,CAAC,SAAS,CAAC;;IAEvD,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAmIrC,SAAS,CAAC,uBAAuB,IAAI,oBAAoB;IAmBnD,iBAAiB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;CAsC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAA4C"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ArtistViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import FilterableViewHandler, { FilterableViewConfig } from './FilterableViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface ArtistView extends View {
5 | name: 'artists' | 'albumArtists';
6 | parentId?: string;
7 | search?: string;
8 | collatedSearchResults?: '1';
9 | }
10 | export default class ArtistViewHandler extends FilterableViewHandler {
11 | browse(): Promise;
12 | protected getFilterableViewConfig(): FilterableViewConfig;
13 | }
14 | //# sourceMappingURL=ArtistViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ArtistViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ArtistViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/ArtistViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AAKnE,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,IAAI,EAAE,SAAS,GAAG,cAAc,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,GAAG,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,qBAAqB,CAAC,UAAU,CAAC;IAExE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAoDrC,SAAS,CAAC,uBAAuB,IAAI,oBAAoB;CAa1D"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/CollectionViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface CollectionView extends View {
5 | name: 'collection';
6 | parentId: string;
7 | itemType?: 'album' | 'artist' | 'playlist' | 'song';
8 | }
9 | export default class CollectionViewHandler extends BaseViewHandler {
10 | #private;
11 | browse(): Promise;
12 | }
13 | //# sourceMappingURL=CollectionViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/CollectionViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/CollectionViewHandler.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAI1B,OAAO,EAAgB,YAAY,EAAwB,MAAM,eAAe,CAAC;AAKjF,MAAM,WAAW,cAAe,SAAQ,IAAI;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;CACrD;AAED,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,eAAe,CAAC,cAAc,CAAC;;IAE1E,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;CAmGtC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/CollectionsViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface CollectionsView extends View {
5 | name: 'collections';
6 | }
7 | export default class CollectionsViewHandler extends BaseViewHandler {
8 | browse(): Promise;
9 | }
10 | //# sourceMappingURL=CollectionsViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/CollectionsViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionsViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/CollectionsViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEnE,MAAM,WAAW,eAAgB,SAAQ,IAAI;IAC3C,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,eAAe,CAAC,eAAe,CAAC;IAE5E,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;CAiCtC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/Explodable.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Explodable.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/Explodable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAGzF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,KAAK,WAAW,CAAC,CAAC,SAAS,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG;IAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAE7H,wBAAgB,UAAU,CAAC,CAAC,SAAS,IAAI,EAAE,KAAK,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK;;mBAI/D,QAAQ,iBAAiB,EAAE,CAAC;mCAkBZ,IAAI,GAAG,QAAQ,iBAAiB,GAAG,IAAI,CAAC;sCA8E3C,IAAI,GAAG,mBAAmB,GAAG,IAAI;QAS/D;;;WAGG;2BACgB,IAAI,GAAG,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAI1C"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/FilterSelectionViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface FilterSelectionView extends View {
5 | name: 'filter.az' | 'filter.filter' | 'filter.genre' | 'filter.sort' | 'filter.year';
6 | filterView: string;
7 | }
8 | export default class FilterSelectionViewHandler extends BaseViewHandler {
9 | #private;
10 | browse(): Promise;
11 | constructPrevUri(): string;
12 | }
13 | //# sourceMappingURL=FilterSelectionViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/FilterSelectionViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FilterSelectionViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/FilterSelectionViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAE,MAAM,eAAe,CAAC;AAK3D,MAAM,WAAW,mBAAoB,SAAQ,IAAI;IAC/C,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;IACrF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,eAAe,CAAC,mBAAmB,CAAC;;IAEpF,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAgErC,gBAAgB,IAAI,MAAM;CAkE3B"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/FilterableViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import { FilterType } from '../../../model/filter/FilterModel';
2 | import BaseViewHandler from './BaseViewHandler';
3 | import View from './View';
4 | import { RenderedList } from './ViewHandler';
5 | import { GetItemsParams } from '../../../model/BaseModel';
6 | export interface FilterableViewConfig {
7 | showFilters: boolean;
8 | saveFiltersKey: string;
9 | filterTypes: FilterType[];
10 | }
11 | export interface HandleFiltersResult {
12 | lists: RenderedList[];
13 | modelQueryParams: GetItemsParams;
14 | }
15 | export default abstract class FilterableViewHandler extends BaseViewHandler {
16 | #private;
17 | protected handleFilters(): Promise;
18 | protected abstract getFilterableViewConfig(): FilterableViewConfig;
19 | }
20 | //# sourceMappingURL=FilterableViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/FilterableViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FilterableViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/FilterableViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,UAAU,EAAa,MAAM,mCAAmC,CAAC;AACnG,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gBAAgB,EAAE,cAAc,CAAA;CACjC;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,qBAAqB,CAAC,CAAC,SAAS,IAAI,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;;cAE5E,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmB7D,SAAS,CAAC,QAAQ,CAAC,uBAAuB,IAAI,oBAAoB;CAoNnE"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/FolderViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import FilterableViewHandler, { FilterableViewConfig } from './FilterableViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface FolderView extends View {
5 | name: 'folder';
6 | parentId: string;
7 | }
8 | export default class FolderViewHandler extends FilterableViewHandler {
9 | browse(): Promise;
10 | protected getFilterableViewConfig(): FilterableViewConfig;
11 | }
12 | //# sourceMappingURL=FolderViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/FolderViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FolderViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/FolderViewHandler.ts"],"names":[],"mappings":"AAGA,OAAO,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEnE,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,qBAAqB,CAAC,UAAU,CAAC;IAExE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAiDrC,SAAS,CAAC,uBAAuB,IAAI,oBAAoB;CAO1D"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/GenreViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface GenreView extends View {
5 | name: 'genres';
6 | parentId: string;
7 | }
8 | export default class GenreViewHandler extends BaseViewHandler {
9 | browse(): Promise;
10 | }
11 | //# sourceMappingURL=GenreViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/GenreViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/GenreViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEjF,MAAM,WAAW,SAAU,SAAQ,IAAI;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,eAAe,CAAC,SAAS,CAAC;IAEhE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;CAkCtC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/LibraryViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | import { ExplodedTrackInfo } from './Explodable';
5 | export interface LibraryView extends View {
6 | name: 'library';
7 | parentId: string;
8 | }
9 | export default class LibraryViewHandler extends BaseViewHandler {
10 | #private;
11 | browse(): Promise;
12 | explode(): Promise;
13 | }
14 | //# sourceMappingURL=LibraryViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/LibraryViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"LibraryViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/LibraryViewHandler.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAwB,MAAM,eAAe,CAAC;AAKjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAUjD,MAAM,WAAW,WAAY,SAAQ,IAAI;IACvC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,eAAe,CAAC,WAAW,CAAC;;IAEpE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAsQ/B,OAAO,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAY9C"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/PlaylistViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface PlaylistView extends View {
5 | name: 'playlists';
6 | }
7 | export default class PlaylistViewHandler extends BaseViewHandler {
8 | browse(): Promise;
9 | }
10 | //# sourceMappingURL=PlaylistViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/PlaylistViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlaylistViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/PlaylistViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAwB,MAAM,eAAe,CAAC;AAEjF,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,eAAe,CAAC,YAAY,CAAC;IAEtE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;CAkCtC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/RootViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface RootView extends View {
5 | name: 'root';
6 | }
7 | export default class RootViewHandler extends BaseViewHandler {
8 | browse(): Promise;
9 | }
10 | //# sourceMappingURL=RootViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/RootViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"RootViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/RootViewHandler.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,eAAe,CAAC,QAAQ,CAAC;IAE9D,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;CA0CtC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/SongViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SongViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/SongViewHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,GAAG,CAAC;CAC7B;AAED,cAAM,eAAgB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC;IAErD,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAkH/B,iBAAiB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAsC1C,SAAS,CAAC,uBAAuB,IAAI,oBAAoB;CAiB1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAA2C"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/UserViewViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseViewHandler from './BaseViewHandler';
2 | import View from './View';
3 | import { RenderedPage } from './ViewHandler';
4 | export interface UserViewView extends View {
5 | name: 'userViews';
6 | serverId: string;
7 | username: string;
8 | }
9 | export default class UserViewViewHandler extends BaseViewHandler {
10 | #private;
11 | browse(): Promise;
12 | }
13 | //# sourceMappingURL=UserViewViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/UserViewViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserViewViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/UserViewViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAgB,YAAY,EAAwB,MAAM,eAAe,CAAC;AAMjF,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,eAAe,CAAC,YAAY,CAAC;;IAEtE,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;CAyEtC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/View.d.ts:
--------------------------------------------------------------------------------
1 | interface View extends Record {
2 | name: string;
3 | username?: string;
4 | serverId?: string;
5 | parentId?: string;
6 | startIndex?: number;
7 | limit?: number;
8 | fixedView?: string;
9 | saveFilter?: string;
10 | noExplode?: '1';
11 | }
12 | export default View;
13 | //# sourceMappingURL=View.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/View.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"View.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/View.ts"],"names":[],"mappings":"AAAA,UAAU,IAAK,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,eAAe,IAAI,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/View.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=View.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/View.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"View.js","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/View.ts"],"names":[],"mappings":"","sourcesContent":["interface View extends Record {\n name: string;\n username?: string;\n serverId?: string;\n parentId?: string;\n startIndex?: number;\n limit?: number;\n fixedView?: string;\n saveFilter?: string;\n noExplode?: '1';\n}\n\nexport default View;\n"]}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHandler.d.ts:
--------------------------------------------------------------------------------
1 | import { RenderedHeader, RenderedListItem } from './renderer/BaseRenderer';
2 | export interface RenderedPage {
3 | navigation?: RenderedPageContents;
4 | }
5 | export interface RenderedPageContents {
6 | prev?: {
7 | uri?: string;
8 | };
9 | info?: RenderedHeader;
10 | lists?: RenderedList[];
11 | }
12 | export interface RenderedList {
13 | title?: string;
14 | availableListViews: ('list' | 'grid')[];
15 | items: RenderedListItem[];
16 | }
17 | export default abstract class ViewHandler {
18 | abstract browse(): Promise;
19 | abstract explode(): Promise;
20 | }
21 | //# sourceMappingURL=ViewHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ViewHandler.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/ViewHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAC;IACF,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxC,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,WAAW;IACvC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IACxC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CACjC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHandler.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | class ViewHandler {
4 | }
5 | exports.default = ViewHandler;
6 | //# sourceMappingURL=ViewHandler.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHandler.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ViewHandler.js","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/ViewHandler.ts"],"names":[],"mappings":";;AAoBA,MAA8B,WAAW;CAGxC;AAHD,8BAGC","sourcesContent":["import { RenderedHeader, RenderedListItem } from './renderer/BaseRenderer';\n\nexport interface RenderedPage {\n navigation?: RenderedPageContents;\n}\n\nexport interface RenderedPageContents {\n prev?: {\n uri?: string\n };\n info?: RenderedHeader;\n lists?: RenderedList[];\n}\n\nexport interface RenderedList {\n title?: string;\n availableListViews: ('list' | 'grid')[];\n items: RenderedListItem[];\n}\n\nexport default abstract class ViewHandler {\n abstract browse(): Promise;\n abstract explode(): Promise;\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHandlerFactory.d.ts:
--------------------------------------------------------------------------------
1 | import ConnectionManager from '../../../connection/ConnectionManager';
2 | import ServerConnection from '../../../connection/ServerConnection';
3 | import BaseViewHandler from './BaseViewHandler';
4 | import View from './View';
5 | export default class ViewHandlerFactory {
6 | static getHandler(uri: string, connection: ServerConnection): Promise>;
7 | static getHandler(uri: string, connectionManager: ConnectionManager): Promise>;
8 | }
9 | //# sourceMappingURL=ViewHandlerFactory.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHandlerFactory.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ViewHandlerFactory.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/ViewHandlerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,uCAAuC,CAAC;AACtE,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AAGpE,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAQhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AA+B1B,MAAM,CAAC,OAAO,OAAO,kBAAkB;WAExB,UAAU,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;WAClG,UAAU,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAcxH"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHelper.d.ts:
--------------------------------------------------------------------------------
1 | import { AZFilterModelConfig } from '../../../model/filter/AZFilterModel';
2 | import { FilterFilterModelConfig } from '../../../model/filter/FilterFilterModel';
3 | import { FilterType } from '../../../model/filter/FilterModel';
4 | import { GenreFilterModelConfig } from '../../../model/filter/GenreFilterModel';
5 | import { SortFilterModelConfig } from '../../../model/filter/SortFilterModel';
6 | import { YearFilterModelConfig } from '../../../model/filter/YearFilterModel';
7 | import View from './View';
8 | type FilterModelConfig = AZFilterModelConfig | FilterFilterModelConfig | GenreFilterModelConfig | SortFilterModelConfig | YearFilterModelConfig;
9 | export default class ViewHelper {
10 | #private;
11 | static getViewsFromUri(uri: string): View[];
12 | static constructUriSegmentFromView(view: V): string;
13 | static getFilterModelConfigFromView(view: View, filterType: FilterType.Year): YearFilterModelConfig | null;
14 | static getFilterModelConfigFromView(view: View, filterType: FilterType.Sort): SortFilterModelConfig | null;
15 | static getFilterModelConfigFromView(view: View, filterType: FilterType.Genre): GenreFilterModelConfig | null;
16 | static getFilterModelConfigFromView(view: View, filterType: FilterType.Filter): FilterFilterModelConfig | null;
17 | static getFilterModelConfigFromView(view: View, filterType: FilterType.AZ): AZFilterModelConfig | null;
18 | static getFilterModelConfigFromView(view: View, filterType: FilterType): FilterModelConfig | null;
19 | }
20 | export {};
21 | //# sourceMappingURL=ViewHelper.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/ViewHelper.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ViewHelper.d.ts","sourceRoot":"","sources":["../../../../../src/lib/controller/browse/view-handlers/ViewHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAwB,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAsB,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAClG,OAAO,EAAsB,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAElG,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,KAAK,iBAAiB,GAAG,mBAAmB,GAAG,uBAAuB,GACpE,sBAAsB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAGzE,MAAM,CAAC,OAAO,OAAO,UAAU;;IAE7B,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE;IA4C3C,MAAM,CAAC,2BAA2B,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC;IAmD1D,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,GAAG,qBAAqB,GAAG,IAAI;IAC1G,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,GAAG,qBAAqB,GAAG,IAAI;IAC1G,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,GAAG,sBAAsB,GAAG,IAAI;IAC5G,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAC9G,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,GAAG,mBAAmB,GAAG,IAAI;IACtG,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,iBAAiB,GAAG,IAAI;CA6GlG"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/AlbumRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import Album from '../../../../entities/Album';
2 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
3 | export default class AlbumRenderer extends BaseRenderer {
4 | renderToListItem(data: Album): RenderedListItem | null;
5 | renderToHeader(data: Album): RenderedHeader | null;
6 | }
7 | //# sourceMappingURL=AlbumRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/AlbumRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"AlbumRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/AlbumRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,4BAA4B,CAAC;AAG/C,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY,CAAC,KAAK,CAAC;IAE5D,gBAAgB,CAAC,IAAI,EAAE,KAAK,GAAG,gBAAgB,GAAG,IAAI;IAiBtD,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,cAAc,GAAG,IAAI;CAWnD"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/AlbumRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
7 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
8 | class AlbumRenderer extends BaseRenderer_1.default {
9 | renderToListItem(data) {
10 | const songsView = {
11 | name: 'songs',
12 | albumId: data.id
13 | };
14 | return {
15 | service: 'jellyfin',
16 | type: 'folder',
17 | title: data.name,
18 | artist: data.albumArtist,
19 | duration: data.duration,
20 | albumart: this.getAlbumArt(data),
21 | uri: `${this.uri}/${ViewHelper_1.default.constructUriSegmentFromView(songsView)}`
22 | };
23 | }
24 | renderToHeader(data) {
25 | const header = super.renderToHeader(data) || {};
26 | header.artist = data.albumArtist;
27 | header.year = data.year;
28 | // Duration does not get converted into time format when shown in header
29 | // (as opposed to list item). So we have to do it ourselves.
30 | header.duration = this.timeFormat(data.duration);
31 | header.genre = this.getStringFromIdNamePair(data.genres);
32 | return header;
33 | }
34 | }
35 | exports.default = AlbumRenderer;
36 | //# sourceMappingURL=AlbumRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/ArtistRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import Artist from '../../../../entities/Artist';
2 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
3 | export default class ArtistRenderer extends BaseRenderer {
4 | renderToListItem(data: Artist, options?: {
5 | noParent: boolean;
6 | }): RenderedListItem | null;
7 | renderToHeader(data: Artist): RenderedHeader | null;
8 | }
9 | //# sourceMappingURL=ArtistRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/ArtistRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ArtistRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/ArtistRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,6BAA6B,CAAC;AACjD,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAMhF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY,CAAC,MAAM,CAAC;IAE9D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,GAAG,gBAAgB,GAAG,IAAI;IA0BxF,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;CAMpD"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/BaseRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import BaseEntity from '../../../../entities/BaseEntity';
2 | import AlbumArtHandler from '../../../../util/AlbumArtHandler';
3 | import View from '../View';
4 | export interface RenderedListItem {
5 | service: 'jellyfin';
6 | type: 'folder' | 'song' | 'streaming-category' | 'jellyfin-filter' | 'jellyfin-filter-option';
7 | title: string;
8 | albumart?: string | null;
9 | artist?: string | null;
10 | album?: string | null;
11 | duration?: number | null;
12 | uri: string;
13 | icon?: string;
14 | favorite?: boolean;
15 | }
16 | export interface RenderedHeader {
17 | service: 'jellyfin';
18 | type: 'album' | 'song';
19 | uri: string;
20 | albumart: string | null;
21 | album?: string | null;
22 | artist?: string | null;
23 | year?: number | string | null;
24 | duration?: string | null;
25 | genre?: string | null;
26 | }
27 | export default abstract class BaseRenderer {
28 | #private;
29 | constructor(uri: string, currentView: View, previousViews: View[], albumArtHandler: AlbumArtHandler);
30 | abstract renderToListItem(data: T, ...args: any[]): RenderedListItem | null;
31 | renderToHeader(data: T): RenderedHeader | null;
32 | protected getAlbumArt(data: T): string;
33 | get uri(): string;
34 | get currentView(): View;
35 | get previousViews(): View[];
36 | protected timeFormat(time: number | null): string | null;
37 | getStringFromIdNamePair(data: {
38 | id: string;
39 | name: string;
40 | }[]): string;
41 | }
42 | //# sourceMappingURL=BaseRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/CollectionRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import Collection from '../../../../entities/Collection';
2 | import BaseRenderer, { RenderedListItem } from './BaseRenderer';
3 | export default class CollectionRenderer extends BaseRenderer {
4 | renderToListItem(data: Collection): RenderedListItem | null;
5 | }
6 | //# sourceMappingURL=CollectionRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/CollectionRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/CollectionRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iCAAiC,CAAC;AAGzD,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,YAAY,CAAC,UAAU,CAAC;IAEtE,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI;CAe5D"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/CollectionRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
7 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
8 | class CollectionRenderer extends BaseRenderer_1.default {
9 | renderToListItem(data) {
10 | const collectionView = {
11 | name: 'collection',
12 | parentId: data.id
13 | };
14 | return {
15 | service: 'jellyfin',
16 | type: 'streaming-category',
17 | title: data.name,
18 | artist: String(data.year),
19 | albumart: this.getAlbumArt(data),
20 | uri: `${this.uri}/${ViewHelper_1.default.constructUriSegmentFromView(collectionView)}`
21 | };
22 | }
23 | }
24 | exports.default = CollectionRenderer;
25 | //# sourceMappingURL=CollectionRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/CollectionRenderer.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionRenderer.js","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/CollectionRenderer.ts"],"names":[],"mappings":";;;;;AAEA,+DAAuC;AACvC,kEAAgE;AAEhE,MAAqB,kBAAmB,SAAQ,sBAAwB;IAEtE,gBAAgB,CAAC,IAAgB;QAC/B,MAAM,cAAc,GAAmB;YACrC,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,IAAI,CAAC,EAAE;SAClB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAChC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,oBAAU,CAAC,2BAA2B,CAAC,cAAc,CAAC,EAAE;SAC7E,CAAC;IACJ,CAAC;CACF;AAjBD,qCAiBC","sourcesContent":["import Collection from '../../../../entities/Collection';\nimport { CollectionView } from '../CollectionViewHandler';\nimport ViewHelper from '../ViewHelper';\nimport BaseRenderer, { RenderedListItem } from './BaseRenderer';\n\nexport default class CollectionRenderer extends BaseRenderer {\n\n renderToListItem(data: Collection): RenderedListItem | null {\n const collectionView: CollectionView = {\n name: 'collection',\n parentId: data.id\n };\n\n return {\n service: 'jellyfin',\n type: 'streaming-category',\n title: data.name,\n artist: String(data.year),\n albumart: this.getAlbumArt(data),\n uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(collectionView)}`\n };\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/FolderRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import BaseRenderer, { RenderedListItem } from './BaseRenderer';
2 | import Folder from '../../../../entities/Folder';
3 | export default class FolderRenderer extends BaseRenderer {
4 | renderToListItem(data: Folder): RenderedListItem | null;
5 | }
6 | //# sourceMappingURL=FolderRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/FolderRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FolderRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/FolderRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,MAAsB,MAAM,6BAA6B,CAAC;AAMjE,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY,CAAC,MAAM,CAAC;IAE9D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CA0BxD"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/FolderRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
7 | const Folder_1 = require("../../../../entities/Folder");
8 | const entities_1 = require("../../../../entities");
9 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
10 | class FolderRenderer extends BaseRenderer_1.default {
11 | renderToListItem(data) {
12 | let title;
13 | if (data.type === entities_1.EntityType.Folder) {
14 | title = `
15 |
16 | ${data.name}
17 |
18 | `;
19 | }
20 | else {
21 | title = data.name;
22 | }
23 | const targetView = {
24 | name: data.folderType === Folder_1.FolderType.Collections ? 'collections' : 'folder',
25 | parentId: data.id
26 | };
27 | return {
28 | service: 'jellyfin',
29 | type: 'streaming-category',
30 | title,
31 | uri: `${this.uri}/${ViewHelper_1.default.constructUriSegmentFromView(targetView)}`,
32 | albumart: this.getAlbumArt(data)
33 | };
34 | }
35 | }
36 | exports.default = FolderRenderer;
37 | //# sourceMappingURL=FolderRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/GenreRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import Genre from '../../../../entities/Genre';
2 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
3 | export default class GenreRenderer extends BaseRenderer {
4 | renderToListItem(data: Genre): RenderedListItem | null;
5 | renderToHeader(data: Genre): RenderedHeader | null;
6 | }
7 | //# sourceMappingURL=GenreRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/GenreRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/GenreRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,4BAA4B,CAAC;AAC/C,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKhF,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY,CAAC,KAAK,CAAC;IAE5D,gBAAgB,CAAC,IAAI,EAAE,KAAK,GAAG,gBAAgB,GAAG,IAAI;IAetD,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,cAAc,GAAG,IAAI;CAKnD"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/GenreRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
7 | const JellyfinContext_1 = __importDefault(require("../../../../JellyfinContext"));
8 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
9 | class GenreRenderer extends BaseRenderer_1.default {
10 | renderToListItem(data) {
11 | const albumView = {
12 | name: 'albums',
13 | parentId: this.currentView.parentId,
14 | genreId: data.id
15 | };
16 | return {
17 | 'service': 'jellyfin',
18 | 'type': 'folder',
19 | 'title': data.name,
20 | 'albumart': this.getAlbumArt(data),
21 | 'uri': `${this.uri}/${ViewHelper_1.default.constructUriSegmentFromView(albumView)}`
22 | };
23 | }
24 | renderToHeader(data) {
25 | const header = super.renderToHeader(data) || {};
26 | header.artist = JellyfinContext_1.default.getI18n('JELLYFIN_GENRE');
27 | return header;
28 | }
29 | }
30 | exports.default = GenreRenderer;
31 | //# sourceMappingURL=GenreRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/PlaylistRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
2 | import Playlist from '../../../../entities/Playlist';
3 | export default class PlaylistRenderer extends BaseRenderer {
4 | renderToListItem(data: Playlist): RenderedListItem | null;
5 | renderToHeader(data: Playlist): RenderedHeader | null;
6 | }
7 | //# sourceMappingURL=PlaylistRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/PlaylistRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlaylistRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/PlaylistRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AAKrD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY,CAAC,QAAQ,CAAC;IAElE,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI;IAezD,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,IAAI;CAKtD"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/PlaylistRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
7 | const JellyfinContext_1 = __importDefault(require("../../../../JellyfinContext"));
8 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
9 | class PlaylistRenderer extends BaseRenderer_1.default {
10 | renderToListItem(data) {
11 | const songView = {
12 | name: 'songs',
13 | playlistId: data.id
14 | };
15 | return {
16 | service: 'jellyfin',
17 | type: 'folder',
18 | title: data.name,
19 | albumart: this.getAlbumArt(data),
20 | uri: `${this.uri}/${ViewHelper_1.default.constructUriSegmentFromView(songView)}`
21 | };
22 | }
23 | renderToHeader(data) {
24 | const header = super.renderToHeader(data) || {};
25 | header.artist = JellyfinContext_1.default.getI18n('JELLYFIN_PLAYLIST');
26 | return header;
27 | }
28 | }
29 | exports.default = PlaylistRenderer;
30 | //# sourceMappingURL=PlaylistRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/ServerRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import Server from '../../../../entities/Server';
2 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
3 | export default class ServerRenderer extends BaseRenderer {
6 | renderToListItem(data: Server & {
7 | username: string;
8 | }): RenderedListItem | null;
9 | renderToHeader(): RenderedHeader | null;
10 | }
11 | //# sourceMappingURL=ServerRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/ServerRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ServerRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/ServerRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,6BAA6B,CAAC;AAGjD,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY,CAAC,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;IAErF,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB,GAAG,IAAI;IAgB9E,cAAc,IAAI,cAAc,GAAG,IAAI;CAGxC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/ServerRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
7 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
8 | class ServerRenderer extends BaseRenderer_1.default {
9 | renderToListItem(data) {
10 | const userViewView = {
11 | name: 'userViews',
12 | username: data.username,
13 | serverId: data.id
14 | };
15 | return {
16 | 'service': 'jellyfin',
17 | 'type': 'streaming-category',
18 | 'title': `${data.username} @ ${data.name}`,
19 | 'uri': `jellyfin/${ViewHelper_1.default.constructUriSegmentFromView(userViewView)}`,
20 | 'albumart': '/albumart?sourceicon=music_service/jellyfin/dist/assets/images/jellyfin.png'
21 | };
22 | }
23 | renderToHeader() {
24 | return null;
25 | }
26 | }
27 | exports.default = ServerRenderer;
28 | //# sourceMappingURL=ServerRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/ServerRenderer.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ServerRenderer.js","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/ServerRenderer.ts"],"names":[],"mappings":";;;;;AAEA,+DAAuC;AACvC,kEAAgF;AAEhF,MAAqB,cAAe,SAAQ,sBAA2C;IAErF,gBAAgB,CAAC,IAAmC;QAClD,MAAM,YAAY,GAAiB;YACjC,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,EAAE;SAClB,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE,oBAAoB;YAC5B,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,IAAI,EAAE;YAC1C,KAAK,EAAE,YAAY,oBAAU,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE;YACzE,UAAU,EAAE,6EAA6E;SAC1F,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AArBD,iCAqBC","sourcesContent":["import Server from '../../../../entities/Server';\nimport { UserViewView } from '../UserViewViewHandler';\nimport ViewHelper from '../ViewHelper';\nimport BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';\n\nexport default class ServerRenderer extends BaseRenderer {\n\n renderToListItem(data: Server & { username: string }): RenderedListItem | null {\n const userViewView: UserViewView = {\n name: 'userViews',\n username: data.username,\n serverId: data.id\n };\n\n return {\n 'service': 'jellyfin',\n 'type': 'streaming-category',\n 'title': `${data.username} @ ${data.name}`,\n 'uri': `jellyfin/${ViewHelper.constructUriSegmentFromView(userViewView)}`,\n 'albumart': '/albumart?sourceicon=music_service/jellyfin/dist/assets/images/jellyfin.png'\n };\n }\n\n renderToHeader(): RenderedHeader | null {\n return null;\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/SongRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
2 | import Song from '../../../../entities/Song';
3 | export default class SongRenderer extends BaseRenderer {
4 | renderToListItem(data: Song): RenderedListItem | null;
5 | renderToHeader(): RenderedHeader | null;
6 | }
7 | //# sourceMappingURL=SongRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/SongRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SongRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/SongRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,YAAY,CAAC,IAAI,CAAC;IAE1D,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,GAAG,IAAI;IAmBrD,cAAc,IAAI,cAAc,GAAG,IAAI;CAGxC"}
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/SongRenderer.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const BaseRenderer_1 = __importDefault(require("./BaseRenderer"));
7 | const ViewHelper_1 = __importDefault(require("../ViewHelper"));
8 | class SongRenderer extends BaseRenderer_1.default {
9 | renderToListItem(data) {
10 | const songView = {
11 | name: 'song',
12 | songId: data.id
13 | };
14 | return {
15 | service: 'jellyfin',
16 | type: 'song',
17 | title: data.name,
18 | artist: this.getStringFromIdNamePair(data.artists),
19 | album: data.album?.name,
20 | duration: data.duration,
21 | uri: `${this.uri}/${ViewHelper_1.default.constructUriSegmentFromView(songView)}`,
22 | albumart: this.getAlbumArt(data),
23 | favorite: data.favorite
24 | };
25 | }
26 | renderToHeader() {
27 | return null;
28 | }
29 | }
30 | exports.default = SongRenderer;
31 | //# sourceMappingURL=SongRenderer.js.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/UserViewRenderer.d.ts:
--------------------------------------------------------------------------------
1 | import UserView from '../../../../entities/UserView';
2 | import BaseRenderer, { RenderedListItem } from './BaseRenderer';
3 | export default class UserViewRenderer extends BaseRenderer {
4 | renderToListItem(data: UserView): RenderedListItem | null;
5 | }
6 | //# sourceMappingURL=UserViewRenderer.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/browse/view-handlers/renderer/UserViewRenderer.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserViewRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/controller/browse/view-handlers/renderer/UserViewRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,QAA0B,MAAM,+BAA+B,CAAC;AAMvE,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY,CAAC,QAAQ,CAAC;IAElE,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI;CAgD1D"}
--------------------------------------------------------------------------------
/dist/lib/controller/play/PlayController.d.ts:
--------------------------------------------------------------------------------
1 | import ConnectionManager from '../../connection/ConnectionManager';
2 | import ServerConnection from '../../connection/ServerConnection';
3 | import { Song } from '../../entities';
4 | import { ExplodedTrackInfo } from '../browse/view-handlers/Explodable';
5 | export default class PlayController {
6 | #private;
7 | constructor(connectionManager: ConnectionManager);
8 | /**
9 | * Track uri:
10 | * jellyfin/{username}@{serverId}/song@songId={songId}
11 | */
12 | clearAddPlayTrack(track: ExplodedTrackInfo): Promise;
13 | stop(): any;
14 | pause(): any;
15 | resume(): any;
16 | seek(position: number): any;
17 | next(): any;
18 | previous(): any;
19 | dispose(): void;
20 | prefetch(track: ExplodedTrackInfo): Promise;
21 | getSongFromTrack(track: ExplodedTrackInfo): Promise<{
22 | song: Song;
23 | connection: ServerConnection;
24 | }>;
25 | }
26 | //# sourceMappingURL=PlayController.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/play/PlayController.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlayController.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/play/PlayController.ts"],"names":[],"mappings":"AAKA,OAAO,iBAAiB,MAAM,oCAAoC,CAAC;AACnE,OAAO,gBAAgB,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAqCvE,MAAM,CAAC,OAAO,OAAO,cAAc;;gBAUrB,iBAAiB,EAAE,iBAAiB;IAsChD;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBhE,IAAI;IAMJ,KAAK;IAML,MAAM;IAMN,IAAI,CAAC,QAAQ,EAAE,MAAM;IAMrB,IAAI;IAMJ,QAAQ;IAKR,OAAO;IAOD,QAAQ,CAAC,KAAK,EAAE,iBAAiB;IAsIjC,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,gBAAgB,CAAA;KAAC,CAAC;CAwKtG"}
--------------------------------------------------------------------------------
/dist/lib/controller/search/SearchController.d.ts:
--------------------------------------------------------------------------------
1 | import ConnectionManager from '../../connection/ConnectionManager';
2 | import { RenderedList } from '../browse/view-handlers/ViewHandler';
3 | export interface SearchQuery {
4 | value: string;
5 | }
6 | export default class SearchController {
7 | #private;
8 | constructor(connectionManager: ConnectionManager);
9 | search(query: SearchQuery): Promise;
10 | }
11 | //# sourceMappingURL=SearchController.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/controller/search/SearchController.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SearchController.d.ts","sourceRoot":"","sources":["../../../../src/lib/controller/search/SearchController.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAUnE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;;gBAIvB,iBAAiB,EAAE,iBAAiB;IAI1C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAgE1D"}
--------------------------------------------------------------------------------
/dist/lib/entities/Album.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | interface Album extends BaseEntity {
4 | type: EntityType.Album;
5 | albumArtist: string | null;
6 | artists: {
7 | id: string;
8 | name: string;
9 | }[];
10 | duration: number | null;
11 | year: number | null;
12 | genres: {
13 | id: string;
14 | name: string;
15 | }[];
16 | }
17 | export default Album;
18 | //# sourceMappingURL=Album.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Album.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Album.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Album.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,UAAU,KAAM,SAAQ,UAAU;IAChC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;KACb,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;KACb,EAAE,CAAC;CACL;AAED,eAAe,KAAK,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Album.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Album.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Album.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Album.js","sourceRoot":"","sources":["../../../src/lib/entities/Album.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\ninterface Album extends BaseEntity {\n type: EntityType.Album;\n albumArtist: string | null;\n artists: {\n id: string,\n name: string\n }[];\n duration: number | null;\n year: number | null;\n genres: {\n id: string,\n name: string\n }[];\n}\n\nexport default Album;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Artist.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | interface Artist extends BaseEntity {
4 | type: EntityType.Artist | EntityType.AlbumArtist;
5 | genres: {
6 | id: string;
7 | name: string;
8 | }[];
9 | }
10 | export default Artist;
11 | //# sourceMappingURL=Artist.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Artist.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Artist.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Artist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,UAAU,MAAO,SAAQ,UAAU;IACjC,IAAI,EAAE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;IACjD,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;KACb,EAAE,CAAC;CACL;AAED,eAAe,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Artist.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Artist.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Artist.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Artist.js","sourceRoot":"","sources":["../../../src/lib/entities/Artist.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\ninterface Artist extends BaseEntity {\n type: EntityType.Artist | EntityType.AlbumArtist;\n genres: {\n id: string,\n name: string\n }[];\n}\n\nexport default Artist;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/BaseEntity.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | interface BaseEntity {
3 | type: EntityType;
4 | id: string;
5 | name: string;
6 | thumbnail: string | null;
7 | }
8 | export default BaseEntity;
9 | //# sourceMappingURL=BaseEntity.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/BaseEntity.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"BaseEntity.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/BaseEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAE/B,UAAU,UAAU;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,eAAe,UAAU,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/BaseEntity.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=BaseEntity.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/BaseEntity.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"BaseEntity.js","sourceRoot":"","sources":["../../../src/lib/entities/BaseEntity.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '.';\n\ninterface BaseEntity {\n type: EntityType;\n id: string;\n name: string;\n thumbnail: string | null;\n}\n\nexport default BaseEntity;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Collection.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | interface Collection extends BaseEntity {
4 | type: EntityType.Collection;
5 | year: number | null;
6 | }
7 | export default Collection;
8 | //# sourceMappingURL=Collection.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Collection.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,UAAU,UAAW,SAAQ,UAAU;IACrC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,eAAe,UAAU,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Collection.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Collection.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Collection.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../../src/lib/entities/Collection.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\ninterface Collection extends BaseEntity {\n type: EntityType.Collection;\n year: number | null;\n}\n\nexport default Collection;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Folder.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | export declare enum FolderType {
4 | Collections = "Collections",
5 | Folder = "Folder"
6 | }
7 | interface Folder extends BaseEntity {
8 | type: EntityType.Folder | EntityType.CollectionFolder;
9 | folderType?: FolderType;
10 | }
11 | export default Folder;
12 | //# sourceMappingURL=Folder.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Folder.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Folder.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,oBAAY,UAAU;IACpB,WAAW,gBAAgB;IAC3B,MAAM,WAAW;CAClB;AAED,UAAU,MAAO,SAAQ,UAAU;IACjC,IAAI,EAAE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC;IACtD,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,eAAe,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Folder.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | exports.FolderType = void 0;
4 | var FolderType;
5 | (function (FolderType) {
6 | FolderType["Collections"] = "Collections";
7 | FolderType["Folder"] = "Folder";
8 | })(FolderType = exports.FolderType || (exports.FolderType = {}));
9 | //# sourceMappingURL=Folder.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Folder.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Folder.js","sourceRoot":"","sources":["../../../src/lib/entities/Folder.ts"],"names":[],"mappings":";;;AAGA,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yCAA2B,CAAA;IAC3B,+BAAiB,CAAA;AACnB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\nexport enum FolderType {\n Collections = 'Collections',\n Folder = 'Folder'\n}\n\ninterface Folder extends BaseEntity {\n type: EntityType.Folder | EntityType.CollectionFolder;\n folderType?: FolderType;\n}\n\nexport default Folder;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Genre.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | interface Genre extends BaseEntity {
4 | type: EntityType.Genre;
5 | }
6 | export default Genre;
7 | //# sourceMappingURL=Genre.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Genre.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Genre.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Genre.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,UAAU,KAAM,SAAQ,UAAU;IAChC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;CACxB;AAED,eAAe,KAAK,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Genre.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Genre.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Genre.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Genre.js","sourceRoot":"","sources":["../../../src/lib/entities/Genre.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\ninterface Genre extends BaseEntity {\n type: EntityType.Genre;\n}\n\nexport default Genre;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Playlist.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | interface Playlist extends BaseEntity {
4 | type: EntityType.Playlist;
5 | }
6 | export default Playlist;
7 | //# sourceMappingURL=Playlist.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Playlist.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Playlist.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Playlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,UAAU,QAAS,SAAQ,UAAU;IACnC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;CAC3B;AAED,eAAe,QAAQ,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Playlist.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Playlist.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Playlist.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Playlist.js","sourceRoot":"","sources":["../../../src/lib/entities/Playlist.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\ninterface Playlist extends BaseEntity {\n type: EntityType.Playlist;\n}\n\nexport default Playlist;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Server.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '../entities';
2 | import BaseEntity from '../entities/BaseEntity';
3 | interface Server extends BaseEntity {
4 | type: EntityType.Server;
5 | url: string;
6 | connectionUrl: string;
7 | }
8 | export default Server;
9 | //# sourceMappingURL=Server.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Server.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAEhD,UAAU,MAAO,SAAQ,UAAU;IACjC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAe,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Server.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Server.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Server.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../../src/lib/entities/Server.ts"],"names":[],"mappings":"","sourcesContent":["import { EntityType } from '../entities';\nimport BaseEntity from '../entities/BaseEntity';\n\ninterface Server extends BaseEntity {\n type: EntityType.Server,\n url: string;\n connectionUrl: string;\n}\n\nexport default Server;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/Song.d.ts:
--------------------------------------------------------------------------------
1 | import { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client/models';
2 | import { EntityType } from '.';
3 | import BaseEntity from './BaseEntity';
4 | interface Song extends BaseEntity {
5 | type: EntityType.Song;
6 | artists: {
7 | id: string;
8 | name: string;
9 | }[];
10 | album: {
11 | id: string;
12 | name: string;
13 | thumbnail: string | null;
14 | } | null;
15 | duration: number;
16 | mediaSources?: MediaSourceInfo[];
17 | favorite: boolean;
18 | }
19 | export default Song;
20 | //# sourceMappingURL=Song.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/Song.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Song.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/Song.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,UAAU,IAAK,SAAQ,UAAU;IAC/B,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC;IACtB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;KACb,EAAE,CAAC;IACJ,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAe,IAAI,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/Song.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Song.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/Song.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Song.js","sourceRoot":"","sources":["../../../src/lib/entities/Song.ts"],"names":[],"mappings":"","sourcesContent":["import { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client/models';\nimport { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\ninterface Song extends BaseEntity {\n type: EntityType.Song;\n artists: {\n id: string,\n name: string\n }[];\n album: {\n id: string;\n name: string;\n thumbnail: string | null;\n } | null;\n duration: number;\n mediaSources?: MediaSourceInfo[];\n favorite: boolean;\n}\n\nexport default Song;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/UserView.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 | export declare enum UserViewType {
4 | Collections = "Collections",
5 | Playlists = "Playlists",
6 | Library = "Library",
7 | Folders = "Folder"
8 | }
9 | interface UserView extends BaseEntity {
10 | type: EntityType.UserView;
11 | userViewType?: UserViewType;
12 | }
13 | export default UserView;
14 | //# sourceMappingURL=UserView.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/UserView.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserView.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/UserView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;AAC/B,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,oBAAY,YAAY;IACtB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,OAAO,WAAW;CACnB;AAED,UAAU,QAAS,SAAQ,UAAU;IACnC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,eAAe,QAAQ,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/entities/UserView.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | exports.UserViewType = void 0;
4 | var UserViewType;
5 | (function (UserViewType) {
6 | UserViewType["Collections"] = "Collections";
7 | UserViewType["Playlists"] = "Playlists";
8 | UserViewType["Library"] = "Library";
9 | UserViewType["Folders"] = "Folder";
10 | })(UserViewType = exports.UserViewType || (exports.UserViewType = {}));
11 | //# sourceMappingURL=UserView.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/UserView.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserView.js","sourceRoot":"","sources":["../../../src/lib/entities/UserView.ts"],"names":[],"mappings":";;;AAGA,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,2CAA2B,CAAA;IAC3B,uCAAuB,CAAA;IACvB,mCAAmB,CAAA;IACnB,kCAAkB,CAAA;AACpB,CAAC,EALW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAKvB","sourcesContent":["import { EntityType } from '.';\nimport BaseEntity from './BaseEntity';\n\nexport enum UserViewType {\n Collections = 'Collections',\n Playlists = 'Playlists',\n Library = 'Library',\n Folders = 'Folder'\n}\n\ninterface UserView extends BaseEntity {\n type: EntityType.UserView;\n userViewType?: UserViewType;\n}\n\nexport default UserView;\n"]}
--------------------------------------------------------------------------------
/dist/lib/entities/index.d.ts:
--------------------------------------------------------------------------------
1 | export { default as Album } from './Album';
2 | export { default as Artist } from './Artist';
3 | export { default as Collection } from './Collection';
4 | export { default as Folder } from './Folder';
5 | export { default as Genre } from './Genre';
6 | export { default as Playlist } from './Playlist';
7 | export { default as Song } from './Song';
8 | export declare enum EntityType {
9 | Album = "Album",
10 | Artist = "Artist",
11 | AlbumArtist = "AlbumArtist",
12 | Collection = "Collection",
13 | Folder = "Folder",
14 | CollectionFolder = "CollectionFolder",
15 | Genre = "Genre",
16 | Playlist = "Playlist",
17 | Song = "Song",
18 | Server = "Server",
19 | UserView = "UserView",
20 | Unknown = "Unknown"
21 | }
22 | //# sourceMappingURL=index.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/entities/index.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEzC,oBAAY,UAAU;IACpB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,gBAAgB,qBAAqB;IACrC,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB"}
--------------------------------------------------------------------------------
/dist/lib/entities/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | exports.EntityType = void 0;
4 | var EntityType;
5 | (function (EntityType) {
6 | EntityType["Album"] = "Album";
7 | EntityType["Artist"] = "Artist";
8 | EntityType["AlbumArtist"] = "AlbumArtist";
9 | EntityType["Collection"] = "Collection";
10 | EntityType["Folder"] = "Folder";
11 | EntityType["CollectionFolder"] = "CollectionFolder";
12 | EntityType["Genre"] = "Genre";
13 | EntityType["Playlist"] = "Playlist";
14 | EntityType["Song"] = "Song";
15 | EntityType["Server"] = "Server";
16 | EntityType["UserView"] = "UserView";
17 | EntityType["Unknown"] = "Unknown";
18 | })(EntityType = exports.EntityType || (exports.EntityType = {}));
19 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/dist/lib/entities/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/entities/index.ts"],"names":[],"mappings":";;;AAQA,IAAY,UAaX;AAbD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,+BAAiB,CAAA;IACjB,yCAA2B,CAAA;IAC3B,uCAAyB,CAAA;IACzB,+BAAiB,CAAA;IACjB,mDAAqC,CAAA;IACrC,6BAAe,CAAA;IACf,mCAAqB,CAAA;IACrB,2BAAa,CAAA;IACb,+BAAiB,CAAA;IACjB,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACrB,CAAC,EAbW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAarB","sourcesContent":["export { default as Album } from './Album';\nexport { default as Artist } from './Artist';\nexport { default as Collection } from './Collection';\nexport { default as Folder } from './Folder';\nexport { default as Genre } from './Genre';\nexport { default as Playlist } from './Playlist';\nexport { default as Song } from './Song';\n\nexport enum EntityType {\n Album = 'Album',\n Artist = 'Artist',\n AlbumArtist = 'AlbumArtist',\n Collection = 'Collection',\n Folder = 'Folder',\n CollectionFolder = 'CollectionFolder',\n Genre = 'Genre',\n Playlist = 'Playlist',\n Song = 'Song',\n Server = 'Server',\n UserView = 'UserView',\n Unknown = 'Unknown'\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/AlbumModel.d.ts:
--------------------------------------------------------------------------------
1 | import Album from '../entities/Album';
2 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
3 | export interface GetSimilarAlbumsParams {
4 | album: Album;
5 | limit?: number;
6 | }
7 | export default class AlbumModel extends BaseModel {
8 | getAlbums(params: GetItemsParams): Promise>;
9 | getAlbum(id: string): Promise;
10 | getSimilarAlbums(params: GetSimilarAlbumsParams): Promise;
11 | }
12 | //# sourceMappingURL=AlbumModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/AlbumModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"AlbumModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/AlbumModel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;IAE/C,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAKjE,QAAQ,CAAC,EAAE,EAAE,MAAM;IAKb,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAczE"}
--------------------------------------------------------------------------------
/dist/lib/model/ArtistModel.d.ts:
--------------------------------------------------------------------------------
1 | import Artist from '../entities/Artist';
2 | import { GetItemsParams, GetItemsResult } from './BaseModel';
3 | import { default as BaseModel } from './BaseModel';
4 | export default class ArtistModel extends BaseModel {
5 | getArtists(params: GetItemsParams): Promise>;
6 | getArtist(id: string): Promise;
7 | getAlbumArtists(params: GetItemsParams): Promise>;
8 | getAlbumArtist(id: string): Promise;
9 | }
10 | //# sourceMappingURL=ArtistModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/ArtistModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ArtistModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/ArtistModel.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAE1C,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAQzE,SAAS,CAAC,EAAE,EAAE,MAAM;IAKd,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAQ9E,cAAc,CAAC,EAAE,EAAE,MAAM;CAI1B"}
--------------------------------------------------------------------------------
/dist/lib/model/CollectionModel.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '../entities';
2 | import Album from '../entities/Album';
3 | import Artist from '../entities/Artist';
4 | import Collection from '../entities/Collection';
5 | import Playlist from '../entities/Playlist';
6 | import Song from '../entities/Song';
7 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
8 | export interface GetCollectionItemsParams extends Omit {
9 | itemType: EntityType.Album | EntityType.Artist | EntityType.Playlist | EntityType.Song;
10 | }
11 | export default class CollectionModel extends BaseModel {
12 | getCollections(params: GetItemsParams): Promise>;
13 | getCollectionItems(params: GetCollectionItemsParams): Promise>;
14 | getCollectionItems(params: GetCollectionItemsParams & {
15 | itemType: EntityType.Song;
16 | }): Promise>;
17 | getCollectionItems(params: GetCollectionItemsParams & {
18 | itemType: EntityType.Playlist;
19 | }): Promise>;
20 | getCollectionItems(params: GetCollectionItemsParams & {
21 | itemType: EntityType.Artist;
22 | }): Promise>;
23 | getCollectionItems(params: GetCollectionItemsParams & {
24 | itemType: EntityType.Album;
25 | }): Promise>;
26 | getCollection(id: string): Promise;
27 | }
28 | //# sourceMappingURL=CollectionModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/CollectionModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/CollectionModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOxE,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC;IACjF,QAAQ,EAAE,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;CACxF;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS;IAEpD,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAW3E,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC/G,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG;QAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAA;KAAC,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjH,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG;QAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAA;KAAC,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzH,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG;QAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrH,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG;QAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAA;KAAC,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAkDnH,aAAa,CAAC,EAAE,EAAE,MAAM;CAIzB"}
--------------------------------------------------------------------------------
/dist/lib/model/FolderModel.d.ts:
--------------------------------------------------------------------------------
1 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
2 | import { FolderContentType } from './parser/FolderContentParser';
3 | export default class FolderModel extends BaseModel {
4 | getFolderContents(params: GetItemsParams): Promise>;
5 | getFolder(id: string): Promise;
6 | }
7 | //# sourceMappingURL=FolderModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/FolderModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FolderModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/FolderModel.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAA4B,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAEhD,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAKrF,SAAS,CAAC,EAAE,EAAE,MAAM;CAIrB"}
--------------------------------------------------------------------------------
/dist/lib/model/FolderModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const BaseModel_1 = __importDefault(require("./BaseModel"));
7 | const FolderContentParser_1 = __importDefault(require("./parser/FolderContentParser"));
8 | const FolderParser_1 = __importDefault(require("./parser/FolderParser"));
9 | class FolderModel extends BaseModel_1.default {
10 | getFolderContents(params) {
11 | const parser = new FolderContentParser_1.default();
12 | return this.getItemsFromAPI({ ...params, recursive: false }, parser);
13 | }
14 | getFolder(id) {
15 | const parser = new FolderParser_1.default();
16 | return this.getItemFromApi({ itemId: id }, parser);
17 | }
18 | }
19 | exports.default = FolderModel;
20 | //# sourceMappingURL=FolderModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/FolderModel.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FolderModel.js","sourceRoot":"","sources":["../../../src/lib/model/FolderModel.ts"],"names":[],"mappings":";;;;;AAAA,4DAAwE;AACxE,uFAAsF;AACtF,yEAAiD;AAEjD,MAAqB,WAAY,SAAQ,mBAAS;IAEhD,iBAAiB,CAAC,MAAsB;QACtC,MAAM,MAAM,GAAG,IAAI,6BAAmB,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,eAAe,CAAoB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1F,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,MAAM,MAAM,GAAG,IAAI,sBAAY,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAXD,8BAWC","sourcesContent":["import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';\nimport FolderContentParser, { FolderContentType } from './parser/FolderContentParser';\nimport FolderParser from './parser/FolderParser';\n\nexport default class FolderModel extends BaseModel {\n\n getFolderContents(params: GetItemsParams): Promise> {\n const parser = new FolderContentParser();\n return this.getItemsFromAPI({ ...params, recursive: false }, parser);\n }\n\n getFolder(id: string) {\n const parser = new FolderParser();\n return this.getItemFromApi({ itemId: id }, parser);\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/GenreModel.d.ts:
--------------------------------------------------------------------------------
1 | import Genre from '../entities/Genre';
2 | import { GetItemsParams, GetItemsResult } from './BaseModel';
3 | import { default as BaseModel } from './BaseModel';
4 | export default class GenreModel extends BaseModel {
5 | getGenres(params: GetItemsParams): Promise>;
6 | getGenre(id: string): Promise;
7 | }
8 | //# sourceMappingURL=GenreModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/GenreModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/GenreModel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;IAEzC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAQvE,QAAQ,CAAC,EAAE,EAAE,MAAM;CAIpB"}
--------------------------------------------------------------------------------
/dist/lib/model/GenreModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const genres_api_1 = require("@jellyfin/sdk/lib/utils/api/genres-api");
7 | const BaseModel_1 = __importDefault(require("./BaseModel"));
8 | const GenreParser_1 = __importDefault(require("./parser/GenreParser"));
9 | class GenreModel extends BaseModel_1.default {
10 | async getGenres(params) {
11 | const parser = new GenreParser_1.default();
12 | return this.getItemsFromAPI(params, parser, {
13 | getApi: (api) => (0, genres_api_1.getGenresApi)(api),
14 | getItems: 'getGenres'
15 | });
16 | }
17 | getGenre(id) {
18 | const parser = new GenreParser_1.default();
19 | return this.getItemFromApi({ itemId: id }, parser);
20 | }
21 | }
22 | exports.default = GenreModel;
23 | //# sourceMappingURL=GenreModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/GenreModel.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreModel.js","sourceRoot":"","sources":["../../../src/lib/model/GenreModel.ts"],"names":[],"mappings":";;;;;AACA,uEAAsE;AAGtE,4DAAmD;AACnD,uEAA+C;AAE/C,MAAqB,UAAW,SAAQ,mBAAS;IAE/C,KAAK,CAAC,SAAS,CAAC,MAAsB;QACpC,MAAM,MAAM,GAAG,IAAI,qBAAW,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,eAAe,CAAmB,MAAM,EAAE,MAAM,EAAE;YAC5D,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,yBAAY,EAAC,GAAG,CAAC;YAClC,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,MAAM,GAAG,IAAI,qBAAW,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAdD,6BAcC","sourcesContent":["import { GenresApi } from '@jellyfin/sdk/lib/generated-client/api/genres-api';\nimport { getGenresApi } from '@jellyfin/sdk/lib/utils/api/genres-api';\nimport Genre from '../entities/Genre';\nimport { GetItemsParams, GetItemsResult } from './BaseModel';\nimport { default as BaseModel } from './BaseModel';\nimport GenreParser from './parser/GenreParser';\n\nexport default class GenreModel extends BaseModel {\n\n async getGenres(params: GetItemsParams): Promise> {\n const parser = new GenreParser();\n return this.getItemsFromAPI(params, parser, {\n getApi: (api) => getGenresApi(api),\n getItems: 'getGenres'\n });\n }\n\n getGenre(id: string) {\n const parser = new GenreParser();\n return this.getItemFromApi({ itemId: id }, parser);\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/PlaylistModel.d.ts:
--------------------------------------------------------------------------------
1 | import Playlist from '../entities/Playlist';
2 | import { GetItemsParams, GetItemsResult } from './BaseModel';
3 | import { default as BaseModel } from './BaseModel';
4 | export default class PlaylistModel extends BaseModel {
5 | getPlaylists(params: GetItemsParams): Promise>;
6 | getPlaylist(id: string): Promise;
7 | }
8 | //# sourceMappingURL=PlaylistModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/PlaylistModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlaylistModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/PlaylistModel.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAE5C,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAK7E,WAAW,CAAC,EAAE,EAAE,MAAM;CAIvB"}
--------------------------------------------------------------------------------
/dist/lib/model/PlaylistModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const entities_1 = require("../entities");
7 | const BaseModel_1 = __importDefault(require("./BaseModel"));
8 | const PlaylistParser_1 = __importDefault(require("./parser/PlaylistParser"));
9 | class PlaylistModel extends BaseModel_1.default {
10 | async getPlaylists(params) {
11 | const parser = new PlaylistParser_1.default();
12 | return this.getItemsFromAPI({ ...params, itemTypes: entities_1.EntityType.Playlist }, parser);
13 | }
14 | getPlaylist(id) {
15 | const parser = new PlaylistParser_1.default();
16 | return this.getItemFromApi({ itemId: id }, parser);
17 | }
18 | }
19 | exports.default = PlaylistModel;
20 | //# sourceMappingURL=PlaylistModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/PlaylistModel.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlaylistModel.js","sourceRoot":"","sources":["../../../src/lib/model/PlaylistModel.ts"],"names":[],"mappings":";;;;;AAAA,0CAAyC;AAGzC,4DAAmD;AACnD,6EAAqD;AAErD,MAAqB,aAAc,SAAQ,mBAAS;IAElD,KAAK,CAAC,YAAY,CAAC,MAAsB;QACvC,MAAM,MAAM,GAAG,IAAI,wBAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,eAAe,CAAW,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,qBAAU,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/F,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,MAAM,GAAG,IAAI,wBAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAXD,gCAWC","sourcesContent":["import { EntityType } from '../entities';\nimport Playlist from '../entities/Playlist';\nimport { GetItemsParams, GetItemsResult } from './BaseModel';\nimport { default as BaseModel } from './BaseModel';\nimport PlaylistParser from './parser/PlaylistParser';\n\nexport default class PlaylistModel extends BaseModel {\n\n async getPlaylists(params: GetItemsParams): Promise> {\n const parser = new PlaylistParser();\n return this.getItemsFromAPI({ ...params, itemTypes: EntityType.Playlist }, parser);\n }\n\n getPlaylist(id: string) {\n const parser = new PlaylistParser();\n return this.getItemFromApi({ itemId: id }, parser);\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/SongModel.d.ts:
--------------------------------------------------------------------------------
1 | import Song from '../entities/Song';
2 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
3 | export default class SongModel extends BaseModel {
4 | getSongs(params: GetItemsParams): Promise>;
5 | getSong(id: string): Promise;
6 | getLyrics(id: string): Promise;
7 | }
8 | //# sourceMappingURL=SongModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/SongModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SongModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/SongModel.ts"],"names":[],"mappings":"AAGA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIxE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,SAAS;IAE9C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAS/D,OAAO,CAAC,EAAE,EAAE,MAAM;IAKZ,SAAS,CAAC,EAAE,EAAE,MAAM;CAM3B"}
--------------------------------------------------------------------------------
/dist/lib/model/SongModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const item_fields_1 = require("@jellyfin/sdk/lib/generated-client/models/item-fields");
7 | const lyrics_api_1 = require("@jellyfin/sdk/lib/utils/api/lyrics-api");
8 | const entities_1 = require("../entities");
9 | const BaseModel_1 = __importDefault(require("./BaseModel"));
10 | const SongParser_1 = __importDefault(require("./parser/SongParser"));
11 | const LyricsParser_1 = __importDefault(require("./parser/LyricsParser"));
12 | class SongModel extends BaseModel_1.default {
13 | getSongs(params) {
14 | const parser = new SongParser_1.default();
15 | return this.getItemsFromAPI({
16 | ...params,
17 | itemTypes: entities_1.EntityType.Song,
18 | fields: [item_fields_1.ItemFields.MediaSources]
19 | }, parser);
20 | }
21 | getSong(id) {
22 | const parser = new SongParser_1.default();
23 | return this.getItemFromApi({ itemId: id }, parser);
24 | }
25 | async getLyrics(id) {
26 | const api = (0, lyrics_api_1.getLyricsApi)(this.connection.api);
27 | const dto = await api.getLyrics({ itemId: id });
28 | const parser = new LyricsParser_1.default();
29 | return parser.parseDto(dto.data);
30 | }
31 | }
32 | exports.default = SongModel;
33 | //# sourceMappingURL=SongModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/UserViewModel.d.ts:
--------------------------------------------------------------------------------
1 | import UserView from '../entities/UserView';
2 | import BaseModel, { GetItemsResult } from './BaseModel';
3 | export default class UserViewModel extends BaseModel {
4 | getUserViews(): Promise>;
5 | getUserView(id: string): Promise;
6 | }
7 | //# sourceMappingURL=UserViewModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/UserViewModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserViewModel.d.ts","sourceRoot":"","sources":["../../../src/lib/model/UserViewModel.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,SAAS,EAAE,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAElD,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAQjD,WAAW,CAAC,EAAE,EAAE,MAAM;CAIvB"}
--------------------------------------------------------------------------------
/dist/lib/model/UserViewModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const user_views_api_1 = require("@jellyfin/sdk/lib/utils/api/user-views-api");
7 | const BaseModel_1 = __importDefault(require("./BaseModel"));
8 | const UserViewParser_1 = __importDefault(require("./parser/UserViewParser"));
9 | class UserViewModel extends BaseModel_1.default {
10 | getUserViews() {
11 | const parser = new UserViewParser_1.default();
12 | return this.getItemsFromAPI({}, parser, {
13 | getApi: (api) => (0, user_views_api_1.getUserViewsApi)(api),
14 | getItems: 'getUserViews'
15 | });
16 | }
17 | getUserView(id) {
18 | const parser = new UserViewParser_1.default();
19 | return this.getItemFromApi({ itemId: id }, parser);
20 | }
21 | }
22 | exports.default = UserViewModel;
23 | //# sourceMappingURL=UserViewModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/UserViewModel.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserViewModel.js","sourceRoot":"","sources":["../../../src/lib/model/UserViewModel.ts"],"names":[],"mappings":";;;;;AAEA,+EAA6E;AAE7E,4DAAwD;AACxD,6EAAqD;AAErD,MAAqB,aAAc,SAAQ,mBAAS;IAElD,YAAY;QACV,MAAM,MAAM,GAAG,IAAI,wBAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,eAAe,CAAyB,EAAE,EAAE,MAAM,EAAE;YAC9D,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAA,gCAAe,EAAC,GAAG,CAAC;YAC1C,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,MAAM,GAAG,IAAI,wBAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF;AAdD,gCAcC","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { UserViewsApi } from '@jellyfin/sdk/lib/generated-client/api/user-views-api';\nimport { getUserViewsApi } from '@jellyfin/sdk/lib/utils/api/user-views-api';\nimport UserView from '../entities/UserView';\nimport BaseModel, { GetItemsResult } from './BaseModel';\nimport UserViewParser from './parser/UserViewParser';\n\nexport default class UserViewModel extends BaseModel {\n\n getUserViews(): Promise> {\n const parser = new UserViewParser();\n return this.getItemsFromAPI({}, parser, {\n getApi: (api: Api) => getUserViewsApi(api),\n getItems: 'getUserViews'\n });\n }\n\n getUserView(id: string) {\n const parser = new UserViewParser();\n return this.getItemFromApi({ itemId: id }, parser);\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/filter/AZFilterModel.d.ts:
--------------------------------------------------------------------------------
1 | import BaseModel from '../BaseModel';
2 | import FilterModel, { Filter } from './FilterModel';
3 | export interface AZFilterModelConfig {
4 | initialSelection?: {
5 | nameStartsWith?: string;
6 | };
7 | }
8 | export default class AZFilterModel extends BaseModel implements FilterModel {
9 | getFilter(config?: AZFilterModelConfig): Promise;
10 | getDefaultSelection(): Promise>;
11 | }
12 | //# sourceMappingURL=AZFilterModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/AZFilterModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"AZFilterModel.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/filter/AZFilterModel.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,WAAW,EAAE,EAAE,MAAM,EAAc,MAAM,eAAe,CAAC;AAIhE,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE;QACjB,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAU,YAAW,WAAW;IAEnE,SAAS,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBxD,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAK1D"}
--------------------------------------------------------------------------------
/dist/lib/model/filter/AZFilterModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const JellyfinContext_1 = __importDefault(require("../../JellyfinContext"));
7 | const BaseModel_1 = __importDefault(require("../BaseModel"));
8 | const FilterModel_1 = require("./FilterModel");
9 | const AZ = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
10 | class AZFilterModel extends BaseModel_1.default {
11 | async getFilter(config) {
12 | const options = AZ.map((c) => ({
13 | name: c,
14 | value: c,
15 | selected: c === config?.initialSelection?.nameStartsWith
16 | }));
17 | return {
18 | type: FilterModel_1.FilterType.AZ,
19 | title: JellyfinContext_1.default.getI18n('JELLYFIN_FILTER_AZ_TITLE'),
20 | placeholder: JellyfinContext_1.default.getI18n('JELLYFIN_FILTER_AZ_PLACEHOLDER'),
21 | field: 'nameStartsWith',
22 | icon: 'fa fa-font',
23 | resettable: true,
24 | options
25 | };
26 | }
27 | async getDefaultSelection() {
28 | return {
29 | nameStartsWith: undefined
30 | };
31 | }
32 | }
33 | exports.default = AZFilterModel;
34 | //# sourceMappingURL=AZFilterModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/FilterFilterModel.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '../../entities';
2 | import BaseModel from '../BaseModel';
3 | import FilterModel, { Filter } from './FilterModel';
4 | export type FilterFilterItemType = EntityType.Album | EntityType.Artist | EntityType.AlbumArtist | EntityType.Song;
5 | export interface FilterFilterModelConfig {
6 | itemType: FilterFilterItemType;
7 | initialSelection?: {
8 | filters?: string[];
9 | };
10 | }
11 | export default class FilterFilterModel extends BaseModel implements FilterModel {
12 | getFilter(config?: FilterFilterModelConfig): Promise;
13 | getDefaultSelection(): Promise>;
14 | }
15 | //# sourceMappingURL=FilterFilterModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/FilterFilterModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FilterFilterModel.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/filter/FilterFilterModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,WAAW,EAAE,EAAE,MAAM,EAA4B,MAAM,eAAe,CAAC;AAE9E,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,GACnE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,gBAAgB,CAAC,EAAE;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KACnB,CAAC;CACH;AAwBD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAU,YAAW,WAAW;IAEvE,SAAS,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoC5D,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAK1D"}
--------------------------------------------------------------------------------
/dist/lib/model/filter/FilterModel.d.ts:
--------------------------------------------------------------------------------
1 | export declare enum FilterType {
2 | AZ = "AZ",
3 | Genre = "Genre",
4 | Year = "Year",
5 | Filter = "Filter",
6 | Sort = "Sort"
7 | }
8 | export interface Filter {
9 | type: FilterType;
10 | title?: string;
11 | placeholder: string;
12 | field?: string;
13 | icon?: string;
14 | resettable?: boolean;
15 | options?: FilterOption[];
16 | subfilters?: Subfilter[];
17 | }
18 | export type Subfilter = Omit;
19 | export interface FilterOption {
20 | name: string;
21 | value: any;
22 | selected?: boolean;
23 | }
24 | export type FilterSelection = Record;
25 | interface FilterModel {
26 | getFilter(config?: any): Promise;
27 | getDefaultSelection(params: any): Promise;
28 | }
29 | export default FilterModel;
30 | //# sourceMappingURL=FilterModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/FilterModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FilterModel.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/filter/FilterModel.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAEpE,UAAU,WAAW;IACnB,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC5D;AAED,eAAe,WAAW,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/model/filter/FilterModel.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | exports.FilterType = void 0;
4 | var FilterType;
5 | (function (FilterType) {
6 | FilterType["AZ"] = "AZ";
7 | FilterType["Genre"] = "Genre";
8 | FilterType["Year"] = "Year";
9 | FilterType["Filter"] = "Filter";
10 | FilterType["Sort"] = "Sort";
11 | })(FilterType = exports.FilterType || (exports.FilterType = {}));
12 | //# sourceMappingURL=FilterModel.js.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/FilterModel.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FilterModel.js","sourceRoot":"","sources":["../../../../src/lib/model/filter/FilterModel.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,6BAAe,CAAA;IACf,2BAAa,CAAA;IACb,+BAAiB,CAAA;IACjB,2BAAa,CAAA;AACf,CAAC,EANW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAMrB","sourcesContent":["export enum FilterType {\n AZ = 'AZ',\n Genre = 'Genre',\n Year = 'Year',\n Filter = 'Filter',\n Sort = 'Sort'\n}\n\nexport interface Filter {\n type: FilterType,\n title?: string,\n placeholder: string,\n field?: string,\n icon?: string,\n resettable?: boolean,\n options?: FilterOption[],\n subfilters?: Subfilter[]\n}\n\nexport type Subfilter = Omit;\n\nexport interface FilterOption {\n name: string,\n value: any,\n selected?: boolean\n}\n\nexport type FilterSelection = Record;\n\ninterface FilterModel {\n getFilter(config?: any): Promise;\n getDefaultSelection(params: any): Promise;\n}\n\nexport default FilterModel;\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/filter/GenreFilterModel.d.ts:
--------------------------------------------------------------------------------
1 | import BaseModel from '../BaseModel';
2 | import FilterModel, { Filter } from './FilterModel';
3 | export interface GenreFilterModelConfig {
4 | parentId: string;
5 | initialSelection?: {
6 | genreIds?: string[];
7 | };
8 | }
9 | export default class GenreFilterModel extends BaseModel implements FilterModel {
10 | getFilter(config?: GenreFilterModelConfig): Promise;
11 | getDefaultSelection(): Promise>;
12 | }
13 | //# sourceMappingURL=GenreFilterModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/GenreFilterModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreFilterModel.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/filter/GenreFilterModel.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,WAAW,EAAE,EAAE,MAAM,EAA4B,MAAM,eAAe,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KACpB,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAU,YAAW,WAAW;IAEtE,SAAS,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;IAwC3D,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAK1D"}
--------------------------------------------------------------------------------
/dist/lib/model/filter/SortFilterModel.d.ts:
--------------------------------------------------------------------------------
1 | import { SortOrder } from '@jellyfin/sdk/lib/generated-client/models';
2 | import { EntityType } from '../../entities';
3 | import BaseModel from '../BaseModel';
4 | import FilterModel, { Filter } from './FilterModel';
5 | export type SortFilterItemType = EntityType.Album | EntityType.Song | EntityType.Folder;
6 | export interface SortFilterModelConfig {
7 | itemType: SortFilterItemType;
8 | initialSelection?: {
9 | sortBy?: string;
10 | sortOrder?: SortOrder;
11 | };
12 | }
13 | export interface SortFilterSelection {
14 | sortBy: string;
15 | sortOrder: SortOrder;
16 | }
17 | export default class SortFilterModel extends BaseModel implements FilterModel {
18 | #private;
19 | getFilter(config?: SortFilterModelConfig): Promise;
20 | getDefaultSelection(targetType: SortFilterItemType): Promise;
21 | }
22 | //# sourceMappingURL=SortFilterModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/SortFilterModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SortFilterModel.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/filter/SortFilterModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,WAAW,EAAE,EAAE,MAAM,EAAyB,MAAM,eAAe,CAAC;AAE3E,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;AAExF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,SAAS,CAAA;KACtB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAA;CACrB;AAqDD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAU,YAAW,WAAW;;IAErE,SAAS,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IA0D1D,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAOxF"}
--------------------------------------------------------------------------------
/dist/lib/model/filter/YearFilterModel.d.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '../../entities';
2 | import BaseModel from '../BaseModel';
3 | import FilterModel, { Filter } from './FilterModel';
4 | export type YearFilterItemType = EntityType.Album | EntityType.Song;
5 | export interface YearFilterModelConfig {
6 | parentId: string;
7 | itemType: YearFilterItemType;
8 | initialSelection?: {
9 | years?: string[];
10 | };
11 | }
12 | export default class YearFilterModel extends BaseModel implements FilterModel {
13 | getFilter(config?: YearFilterModelConfig): Promise;
14 | getDefaultSelection(): Promise>;
15 | }
16 | //# sourceMappingURL=YearFilterModel.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/filter/YearFilterModel.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"YearFilterModel.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/filter/YearFilterModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,SAA+B,MAAM,cAAc,CAAC;AAC3D,OAAO,WAAW,EAAE,EAAE,MAAM,EAA4B,MAAM,eAAe,CAAC;AAE9E,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,CAAC,EAAE;QACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KACjB,CAAC;CACH;AAED,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAU,YAAW,WAAW;IAErE,SAAS,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IA0C1D,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAK1D"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/AlbumParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Album from '../../entities/Album';
4 | import BaseParser from './BaseParser';
5 | export default class AlbumParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=AlbumParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/AlbumParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"AlbumParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/AlbumParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU,CAAC,KAAK,CAAC;IAElD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CA4BnE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/AlbumParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const entities_1 = require("../../entities");
7 | const BaseParser_1 = __importDefault(require("./BaseParser"));
8 | class AlbumParser extends BaseParser_1.default {
9 | async parseDto(data, api) {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 | const artists = data.ArtistItems?.reduce((result, artist) => {
15 | if (artist.Id && artist.Name) {
16 | result.push({
17 | id: artist.Id,
18 | name: artist.Name
19 | });
20 | }
21 | return result;
22 | }, []) || [];
23 | const result = {
24 | ...base,
25 | type: entities_1.EntityType.Album,
26 | albumArtist: data.AlbumArtist || null,
27 | artists,
28 | duration: data.RunTimeTicks ? this.ticksToSeconds(data.RunTimeTicks) : null,
29 | year: data.ProductionYear || null,
30 | genres: this.getGenres(data)
31 | };
32 | return result;
33 | }
34 | }
35 | exports.default = AlbumParser;
36 | //# sourceMappingURL=AlbumParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/ArtistParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { EntityType } from '../../entities';
4 | import Artist from '../../entities/Artist';
5 | import BaseParser from './BaseParser';
6 | export default class ArtistParser extends BaseParser {
7 | #private;
8 | constructor(type: EntityType.Artist | EntityType.AlbumArtist);
9 | parseDto(data: BaseItemDto, api: Api): Promise;
10 | }
11 | //# sourceMappingURL=ArtistParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/ArtistParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ArtistParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/ArtistParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU,CAAC,MAAM,CAAC;;gBAI9C,IAAI,EAAE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,WAAW;IAKtD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAYpE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/ArtistParser.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ArtistParser.js","sourceRoot":"","sources":["../../../../src/lib/model/parser/ArtistParser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,8DAAsC;AAEtC,MAAqB,YAAa,SAAQ,oBAAkB;IAI1D,YAAY,IAAgD;QAC1D,KAAK,EAAE,CAAC;QAHV,qCAAkD;QAIhD,uBAAA,IAAI,sBAAS,IAAI,MAAA,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAiB,EAAE,GAAQ;QACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,uBAAA,IAAI,0BAAM;YAChB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC7B,CAAC;IACJ,CAAC;CACF;AArBD,+BAqBC","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';\nimport { EntityType } from '../../entities';\nimport Artist from '../../entities/Artist';\nimport BaseParser from './BaseParser';\n\nexport default class ArtistParser extends BaseParser {\n\n #type: EntityType.Artist | EntityType.AlbumArtist;\n\n constructor(type: EntityType.Artist | EntityType.AlbumArtist) {\n super();\n this.#type = type;\n }\n\n async parseDto(data: BaseItemDto, api: Api): Promise {\n const base = await super.parseDto(data, api);\n if (!base) {\n return null;\n }\n\n return {\n ...base,\n type: this.#type,\n genres: this.getGenres(data)\n };\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/parser/BaseParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Parser from './Parser';
4 | import BaseEntity from '../../entities/BaseEntity';
5 | export default abstract class BaseParser implements Parser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | getThumbnailUrl(data: BaseItemDto, api: Api): Promise;
8 | protected ticksToSeconds(ticks: number): number;
9 | protected getGenres(data: BaseItemDto): {
10 | id: string;
11 | name: string;
12 | }[];
13 | }
14 | //# sourceMappingURL=BaseParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/BaseParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"BaseParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/BaseParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,UAAU,MAAM,2BAA2B,CAAC;AAGnD,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,UAAU,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,MAAM,CAAC,UAAU,CAAC;IAEpF,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;IAerE,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY1E,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM;IAOtC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;CAMvE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/BaseParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const image_type_1 = require("@jellyfin/sdk/lib/generated-client/models/image-type");
4 | const entities_1 = require("../../entities");
5 | class BaseParser {
6 | async parseDto(data, api) {
7 | if (!data.Id || !data.Name) {
8 | return null;
9 | }
10 | const result = {
11 | type: entities_1.EntityType.Unknown,
12 | id: data.Id,
13 | name: data.Name,
14 | thumbnail: await this.getThumbnailUrl(data, api)
15 | };
16 | return result;
17 | }
18 | async getThumbnailUrl(data, api) {
19 | if (!data.Id || !data.ImageTags?.Primary) {
20 | return null;
21 | }
22 | return api.getItemImageUrl(data.Id, image_type_1.ImageType.Primary, {
23 | maxWidth: 500,
24 | maxHeight: 500,
25 | quality: 90
26 | }) || null;
27 | }
28 | ticksToSeconds(ticks) {
29 | if (ticks) {
30 | return Math.floor(ticks / 10000000);
31 | }
32 | return 0;
33 | }
34 | getGenres(data) {
35 | return data.GenreItems?.map((genre) => ({
36 | id: genre.Id,
37 | name: genre.Name
38 | })).filter((genre) => genre.id && genre.name) || [];
39 | }
40 | }
41 | exports.default = BaseParser;
42 | //# sourceMappingURL=BaseParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/CollectionParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Collection from '../../entities/Collection';
4 | import BaseParser from './BaseParser';
5 | export default class CollectionParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=CollectionParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/CollectionParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/CollectionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU,CAAC,UAAU,CAAC;IAE5D,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAcxE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/CollectionParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const entities_1 = require("../../entities");
7 | const BaseParser_1 = __importDefault(require("./BaseParser"));
8 | class CollectionParser extends BaseParser_1.default {
9 | async parseDto(data, api) {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 | const result = {
15 | ...base,
16 | type: entities_1.EntityType.Collection,
17 | year: data.ProductionYear || null
18 | };
19 | return result;
20 | }
21 | }
22 | exports.default = CollectionParser;
23 | //# sourceMappingURL=CollectionParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/CollectionParser.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"CollectionParser.js","sourceRoot":"","sources":["../../../../src/lib/model/parser/CollectionParser.ts"],"names":[],"mappings":";;;;;AAEA,6CAA4C;AAE5C,8DAAsC;AAEtC,MAAqB,gBAAiB,SAAQ,oBAAsB;IAElE,KAAK,CAAC,QAAQ,CAAC,IAAiB,EAAE,GAAQ;QACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAe;YACzB,GAAG,IAAI;YACP,IAAI,EAAE,qBAAU,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;SAClC,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAhBD,mCAgBC","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';\nimport { EntityType } from '../../entities';\nimport Collection from '../../entities/Collection';\nimport BaseParser from './BaseParser';\n\nexport default class CollectionParser extends BaseParser {\n\n async parseDto(data: BaseItemDto, api: Api): Promise {\n const base = await super.parseDto(data, api);\n if (!base) {\n return null;\n }\n\n const result: Collection = {\n ...base,\n type: EntityType.Collection,\n year: data.ProductionYear || null\n };\n\n return result;\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/parser/FolderContentParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind';
4 | import Album from '../../entities/Album';
5 | import Artist from '../../entities/Artist';
6 | import Folder from '../../entities/Folder';
7 | import BaseParser from './BaseParser';
8 | import Parser from './Parser';
9 | export type FolderContentType = Artist | Album | Folder;
10 | export default class FolderContentParser extends BaseParser {
11 | #private;
12 | constructor();
13 | getParser(dtoType: BaseItemKind): Parser | null;
14 | parseDto(data: BaseItemDto, api: Api): Promise;
15 | }
16 | //# sourceMappingURL=FolderContentParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/FolderContentParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FolderContentParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/FolderContentParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAExF,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAG3C,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU,CAAC,iBAAiB,CAAC;;;IAQ5E,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAoB5D,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAO/E"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/FolderParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Folder from '../../entities/Folder';
4 | import BaseParser from './BaseParser';
5 | export default class FolderParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=FolderParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/FolderParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"FolderParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/FolderParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,MAAsB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,UAAU,CAAC,MAAM,CAAC;IAEpD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAqBpE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/FolderParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const models_1 = require("@jellyfin/sdk/lib/generated-client/models");
7 | const entities_1 = require("../../entities");
8 | const Folder_1 = require("../../entities/Folder");
9 | const BaseParser_1 = __importDefault(require("./BaseParser"));
10 | class FolderParser extends BaseParser_1.default {
11 | async parseDto(data, api) {
12 | const base = await super.parseDto(data, api);
13 | if (!base || (data.Type !== models_1.BaseItemKind.Folder &&
14 | data.Type !== models_1.BaseItemKind.CollectionFolder && data.Type !== models_1.BaseItemKind.UserView)) {
15 | return null;
16 | }
17 | const result = {
18 | ...base,
19 | type: data.Type === models_1.BaseItemKind.CollectionFolder ? entities_1.EntityType.CollectionFolder : entities_1.EntityType.Folder
20 | };
21 | if (data.Type === models_1.BaseItemKind.CollectionFolder && data.CollectionType === 'boxsets') {
22 | result.folderType = Folder_1.FolderType.Collections;
23 | }
24 | else {
25 | result.folderType = Folder_1.FolderType.Folder;
26 | }
27 | return result;
28 | }
29 | }
30 | exports.default = FolderParser;
31 | //# sourceMappingURL=FolderParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/GenreParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Genre from '../../entities/Genre';
4 | import BaseParser from './BaseParser';
5 | export default class GenreParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=GenreParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/GenreParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/GenreParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,UAAU,CAAC,KAAK,CAAC;IAElD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAanE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/GenreParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const entities_1 = require("../../entities");
7 | const BaseParser_1 = __importDefault(require("./BaseParser"));
8 | class GenreParser extends BaseParser_1.default {
9 | async parseDto(data, api) {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 | const result = {
15 | ...base,
16 | type: entities_1.EntityType.Genre
17 | };
18 | return result;
19 | }
20 | }
21 | exports.default = GenreParser;
22 | //# sourceMappingURL=GenreParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/GenreParser.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"GenreParser.js","sourceRoot":"","sources":["../../../../src/lib/model/parser/GenreParser.ts"],"names":[],"mappings":";;;;;AAEA,6CAA4C;AAE5C,8DAAsC;AAEtC,MAAqB,WAAY,SAAQ,oBAAiB;IAExD,KAAK,CAAC,QAAQ,CAAC,IAAiB,EAAE,GAAQ;QACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAU;YACpB,GAAG,IAAI;YACP,IAAI,EAAE,qBAAU,CAAC,KAAK;SACvB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAfD,8BAeC","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';\nimport { EntityType } from '../../entities';\nimport Genre from '../../entities/Genre';\nimport BaseParser from './BaseParser';\n\nexport default class GenreParser extends BaseParser {\n\n async parseDto(data: BaseItemDto, api: Api): Promise {\n const base = await super.parseDto(data, api);\n if (!base) {\n return null;\n }\n\n const result: Genre = {\n ...base,\n type: EntityType.Genre\n };\n\n return result;\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/parser/LyricsParser.d.ts:
--------------------------------------------------------------------------------
1 | import { LyricDto } from '@jellyfin/sdk/lib/generated-client/models/lyric-dto';
2 | import { MetadataLyrics } from 'now-playing-common';
3 | export default class LyricsParser {
4 | parseDto(data: LyricDto): Promise;
5 | }
6 | //# sourceMappingURL=LyricsParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/LyricsParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"LyricsParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/LyricsParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qDAAqD,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAY;IAEzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAuC/D"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/LyricsParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | class LyricsParser {
4 | async parseDto(data) {
5 | /**
6 | * LyricDto supposedly has `Metadata.IsSynced` property but
7 | * `Metadata` is empty (as of v10.9.6). We need to test by
8 | * looping through each line of lyrics.
9 | */
10 | if (!data.Lyrics) {
11 | return null;
12 | }
13 | const isSynced = data.Lyrics.every((line) => line.Start !== undefined);
14 | if (isSynced) {
15 | const lines = data.Lyrics.map((line) => ({
16 | text: line.Text || '',
17 | // Convert to milliseconds
18 | start: line.Start ? line.Start / 10000 : 0
19 | })) || [];
20 | if (lines.length > 0) {
21 | return {
22 | type: 'synced',
23 | lines
24 | };
25 | }
26 | }
27 | else {
28 | const lines = data.Lyrics?.reduce((result, line) => {
29 | if (line.Text !== undefined) {
30 | result.push(line.Text);
31 | }
32 | return result;
33 | }, []) || [];
34 | if (lines.length > 0) {
35 | return {
36 | type: 'plain',
37 | lines
38 | };
39 | }
40 | }
41 | return null;
42 | }
43 | }
44 | exports.default = LyricsParser;
45 | //# sourceMappingURL=LyricsParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/Parser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | interface Parser {
4 | parseDto(data: BaseItemDto, api: Api): Promise;
5 | }
6 | export default Parser;
7 | //# sourceMappingURL=Parser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/Parser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/Parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,UAAU,MAAM,CAAC,CAAC;IAChB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED,eAAe,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/Parser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Parser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/Parser.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../../src/lib/model/parser/Parser.ts"],"names":[],"mappings":"","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';\n\ninterface Parser {\n parseDto(data: BaseItemDto, api: Api): Promise;\n}\n\nexport default Parser;\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/parser/PlaylistParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Playlist from '../../entities/Playlist';
4 | import BaseParser from './BaseParser';
5 | export default class PlaylistParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=PlaylistParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/PlaylistParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlaylistParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/PlaylistParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,QAAQ,MAAM,yBAAyB,CAAC;AAC/C,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CAAC,QAAQ,CAAC;IAExD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAatE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/PlaylistParser.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const entities_1 = require("../../entities");
7 | const BaseParser_1 = __importDefault(require("./BaseParser"));
8 | class PlaylistParser extends BaseParser_1.default {
9 | async parseDto(data, api) {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 | const result = {
15 | ...base,
16 | type: entities_1.EntityType.Playlist
17 | };
18 | return result;
19 | }
20 | }
21 | exports.default = PlaylistParser;
22 | //# sourceMappingURL=PlaylistParser.js.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/PlaylistParser.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"PlaylistParser.js","sourceRoot":"","sources":["../../../../src/lib/model/parser/PlaylistParser.ts"],"names":[],"mappings":";;;;;AAEA,6CAA4C;AAE5C,8DAAsC;AAEtC,MAAqB,cAAe,SAAQ,oBAAoB;IAE9D,KAAK,CAAC,QAAQ,CAAC,IAAiB,EAAE,GAAQ;QACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAa;YACvB,GAAG,IAAI;YACP,IAAI,EAAE,qBAAU,CAAC,QAAQ;SAC1B,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAfD,iCAeC","sourcesContent":["import { Api } from '@jellyfin/sdk';\nimport { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';\nimport { EntityType } from '../../entities';\nimport Playlist from '../../entities/Playlist';\nimport BaseParser from './BaseParser';\n\nexport default class PlaylistParser extends BaseParser {\n\n async parseDto(data: BaseItemDto, api: Api): Promise {\n const base = await super.parseDto(data, api);\n if (!base) {\n return null;\n }\n\n const result: Playlist = {\n ...base,\n type: EntityType.Playlist\n };\n\n return result;\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/model/parser/SongParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import Song from '../../entities/Song';
4 | import BaseParser from './BaseParser';
5 | export default class SongParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=SongParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/SongParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SongParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/SongParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,IAAI,MAAM,qBAAqB,CAAC;AACvC,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,UAAU,CAAC,IAAI,CAAC;IAEhD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;CA+ClE"}
--------------------------------------------------------------------------------
/dist/lib/model/parser/UserViewParser.d.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import UserView from '../../entities/UserView';
4 | import BaseParser from './BaseParser';
5 | export default class UserViewParser extends BaseParser {
6 | parseDto(data: BaseItemDto, api: Api): Promise;
7 | }
8 | //# sourceMappingURL=UserViewParser.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/model/parser/UserViewParser.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UserViewParser.d.ts","sourceRoot":"","sources":["../../../../src/lib/model/parser/UserViewParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAEtF,OAAO,QAA0B,MAAM,yBAAyB,CAAC;AACjE,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CAAC,QAAQ,CAAC;IAExD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CA6BtE"}
--------------------------------------------------------------------------------
/dist/lib/util/AlbumArtHandler.d.ts:
--------------------------------------------------------------------------------
1 | import BaseEntity from '../entities/BaseEntity';
2 | export default class AlbumArtHandler {
3 | #private;
4 | constructor();
5 | getAlbumArtUri(item: T): string;
6 | }
7 | //# sourceMappingURL=AlbumArtHandler.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/AlbumArtHandler.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"AlbumArtHandler.d.ts","sourceRoot":"","sources":["../../../src/lib/util/AlbumArtHandler.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAShD,MAAM,CAAC,OAAO,OAAO,eAAe;;;IAQlC,cAAc,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM;CAgFtD"}
--------------------------------------------------------------------------------
/dist/lib/util/JellyfinNowPlayingMetadataProvider.d.ts:
--------------------------------------------------------------------------------
1 | import { MetadataAlbumInfo, MetadataArtistInfo, MetadataSongInfo, NowPlayingMetadataProvider } from 'now-playing-common';
2 | import ConnectionManager from '../connection/ConnectionManager';
3 | export default class JellyfinNowPlayingMetadataProvider implements NowPlayingMetadataProvider {
4 | #private;
5 | version: '1.0.0';
6 | constructor(connectionManager: ConnectionManager);
7 | getSongInfo(songTitle: string, _albumTitle?: string, _artistName?: string, uri?: string): Promise;
8 | getAlbumInfo(): Promise;
9 | getArtistInfo(): Promise;
10 | }
11 | //# sourceMappingURL=JellyfinNowPlayingMetadataProvider.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/JellyfinNowPlayingMetadataProvider.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"JellyfinNowPlayingMetadataProvider.d.ts","sourceRoot":"","sources":["../../../src/lib/util/JellyfinNowPlayingMetadataProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAkB,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEzI,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAKhE,MAAM,CAAC,OAAO,OAAO,kCAAmC,YAAW,0BAA0B;;IAE3F,OAAO,EAAE,OAAO,CAAC;gBAIL,iBAAiB,EAAE,iBAAiB;IAK1C,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAqC1H,YAAY,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAIjD,aAAa,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CAI1D"}
--------------------------------------------------------------------------------
/dist/lib/util/ServerHelper.d.ts:
--------------------------------------------------------------------------------
1 | import ConnectionManager from '../connection/ConnectionManager';
2 | import ServerConnection from '../connection/ServerConnection';
3 | import View from '../controller/browse/view-handlers/View';
4 | import Server from '../entities/Server';
5 | export interface ServerConfEntry {
6 | url: string;
7 | username: string;
8 | password: string;
9 | }
10 | export default class ServerHelper {
11 | static getServersFromConfig(): ServerConfEntry[];
12 | static fetchPasswordFromConfig(server: Server, username: string): string;
13 | static hasServerConfig(username: string, host: string): boolean;
14 | static getConnectionUrl(url: string): string;
15 | static getOnlineServerByIdAndUsername(id: string, username: string): Server | null;
16 | static generateConnectionId(username: string, serverId: string): string;
17 | static generateConnectionId(username: string, server: Server): string;
18 | static getConnectionByView(view: View, src: ServerConnection | ConnectionManager): Promise;
19 | }
20 | //# sourceMappingURL=ServerHelper.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/ServerHelper.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ServerHelper.d.ts","sourceRoot":"","sources":["../../../src/lib/util/ServerHelper.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAC9D,OAAO,IAAI,MAAM,yCAAyC,CAAC;AAE3D,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAIxC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAE/B,MAAM,CAAC,oBAAoB,IAAI,eAAe,EAAE;IAIhD,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOxE,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ/D,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAa5C,MAAM,CAAC,8BAA8B,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAalF,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IACvE,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;WAWxD,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,GAAG,iBAAiB;CAsCvF"}
--------------------------------------------------------------------------------
/dist/lib/util/SongHelper.d.ts:
--------------------------------------------------------------------------------
1 | import ConnectionManager from '../connection/ConnectionManager';
2 | import ServerConnection from '../connection/ServerConnection';
3 | import { Song } from '../entities';
4 | export interface SetSongFavoriteResult {
5 | songId: string;
6 | canonicalUri: string | null;
7 | favorite: boolean;
8 | }
9 | export default class SongHelper {
10 | static setFavoriteByUri(uri: string, favorite: boolean, connectionManager: ConnectionManager): Promise;
11 | static getCanonicalUri(songTarget: Song | string, connection: ServerConnection | null): string | null;
12 | }
13 | //# sourceMappingURL=SongHelper.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/SongHelper.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"SongHelper.d.ts","sourceRoot":"","sources":["../../../src/lib/util/SongHelper.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,gBAAgB,MAAM,gCAAgC,CAAC;AAI9D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAGnC,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;WAEhB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA0BnI,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;CAatG"}
--------------------------------------------------------------------------------
/dist/lib/util/StopWatch.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Note: this is not a general-purpose utility class, but one made specifically for
3 | * keeping track of the seek position in MPD 'stop' events handled by PlayController.
4 | */
5 | export default class StopWatch {
6 | #private;
7 | constructor();
8 | start(startElapsedMS?: number): this;
9 | stop(): this;
10 | getElapsed(): number;
11 | }
12 | //# sourceMappingURL=StopWatch.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/StopWatch.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"StopWatch.d.ts","sourceRoot":"","sources":["../../../src/lib/util/StopWatch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,OAAO,OAAO,SAAS;;;IAW5B,KAAK,CAAC,cAAc,SAAI;IAOxB,IAAI;IAQJ,UAAU;CAYX"}
--------------------------------------------------------------------------------
/dist/lib/util/Type.d.ts:
--------------------------------------------------------------------------------
1 | export type ValueOf = T[keyof T];
2 | //# sourceMappingURL=Type.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/Type.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Type.d.ts","sourceRoot":"","sources":["../../../src/lib/util/Type.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
--------------------------------------------------------------------------------
/dist/lib/util/Type.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=Type.js.map
--------------------------------------------------------------------------------
/dist/lib/util/Type.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"Type.js","sourceRoot":"","sources":["../../../src/lib/util/Type.ts"],"names":[],"mappings":"","sourcesContent":["// Used for converting Object values to string literal types:\n// https://dev.to/multimo/how-to-build-typescript-string-literal-types-from-objects-values-361l\nexport type ValueOf = T[keyof T];\n"]}
--------------------------------------------------------------------------------
/dist/lib/util/UI.d.ts:
--------------------------------------------------------------------------------
1 | export default class UI {
2 | static supportsEnhancedTitles(): boolean;
3 | static isManifestUI(): boolean;
4 | static createLink(data: {
5 | text: string;
6 | uri: string;
7 | }): string;
8 | }
9 | //# sourceMappingURL=UI.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/UI.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UI.d.ts","sourceRoot":"","sources":["../../../src/lib/util/UI.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,EAAE;IACrB,MAAM,CAAC,sBAAsB,IAAI,OAAO;IAIxC,MAAM,CAAC,YAAY,IAAI,OAAO;IAM9B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAI/D"}
--------------------------------------------------------------------------------
/dist/lib/util/UI.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const fs_1 = require("fs");
4 | class UI {
5 | static supportsEnhancedTitles() {
6 | return !this.isManifestUI();
7 | }
8 | static isManifestUI() {
9 | const volumioManifestUIDir = '/volumio/http/www4';
10 | const volumioManifestUIDisabledFile = '/data/disableManifestUI';
11 | return (0, fs_1.existsSync)(volumioManifestUIDir) && !(0, fs_1.existsSync)(volumioManifestUIDisabledFile);
12 | }
13 | static createLink(data) {
14 | const onclick = `angular.element('#browse-page').scope().browse.fetchLibrary({uri: '${data.uri}'})`;
15 | return `${data.text}`;
16 | }
17 | }
18 | exports.default = UI;
19 | //# sourceMappingURL=UI.js.map
--------------------------------------------------------------------------------
/dist/lib/util/UI.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"UI.js","sourceRoot":"","sources":["../../../src/lib/util/UI.ts"],"names":[],"mappings":";;AAAA,2BAAgC;AAEhC,MAAqB,EAAE;IACrB,MAAM,CAAC,sBAAsB;QAC3B,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,YAAY;QACjB,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;QAClD,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;QAChE,OAAO,IAAA,eAAU,EAAC,oBAAoB,CAAC,IAAI,CAAC,IAAA,eAAU,EAAC,6BAA6B,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAmC;QACnD,MAAM,OAAO,GAAG,sEAAsE,IAAI,CAAC,GAAG,KAAK,CAAC;QACpG,OAAO,wBAAwB,OAAO,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC;IAC7D,CAAC;CACF;AAfD,qBAeC","sourcesContent":["import { existsSync } from 'fs';\n\nexport default class UI {\n static supportsEnhancedTitles(): boolean {\n return !this.isManifestUI();\n }\n\n static isManifestUI(): boolean {\n const volumioManifestUIDir = '/volumio/http/www4';\n const volumioManifestUIDisabledFile = '/data/disableManifestUI';\n return existsSync(volumioManifestUIDir) && !existsSync(volumioManifestUIDisabledFile);\n }\n\n static createLink(data: { text: string, uri: string }): string {\n const onclick = `angular.element('#browse-page').scope().browse.fetchLibrary({uri: '${data.uri}'})`;\n return `${data.text}`;\n }\n}\n"]}
--------------------------------------------------------------------------------
/dist/lib/util/index.d.ts:
--------------------------------------------------------------------------------
1 | export declare function jsPromiseToKew(promise: Promise): any;
2 | export declare function kewToJSPromise(promise: any): Promise;
3 | export declare function objectAssignIfExists>(target: T, source: Record, props: string[]): T;
4 | //# sourceMappingURL=index.d.ts.map
--------------------------------------------------------------------------------
/dist/lib/util/index.d.ts.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/util/index.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAWzD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAczD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAQ9H"}
--------------------------------------------------------------------------------
/dist/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "commonjs"
3 | }
4 |
--------------------------------------------------------------------------------
/fixup.sh:
--------------------------------------------------------------------------------
1 | cat >dist/package.json <
2 |
11 |
25 |
--------------------------------------------------------------------------------
/src/assets/images/playlist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/src/assets/images/playlist.png
--------------------------------------------------------------------------------
/src/assets/images/song.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/src/assets/images/song.png
--------------------------------------------------------------------------------
/src/config.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/patrickkfkan/volumio-jellyfin/59757711bbaf12f969673d8a69378205f7ba754d/src/config.json
--------------------------------------------------------------------------------
/src/lib/connection/ServerConnection.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { AuthenticationResult } from '@jellyfin/sdk/lib/generated-client/models/authentication-result';
3 | import Server from '../entities/Server';
4 |
5 | interface ServerConnection {
6 | id: string;
7 | username: string;
8 | server: Server;
9 | api: Api;
10 | auth?: AuthenticationResult | null;
11 | }
12 |
13 | export default ServerConnection;
14 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/View.ts:
--------------------------------------------------------------------------------
1 | interface View extends Record {
2 | name: string;
3 | username?: string;
4 | serverId?: string;
5 | parentId?: string;
6 | startIndex?: number;
7 | limit?: number;
8 | fixedView?: string;
9 | saveFilter?: string;
10 | noExplode?: '1';
11 | }
12 |
13 | export default View;
14 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/ViewHandler.ts:
--------------------------------------------------------------------------------
1 | import { RenderedHeader, RenderedListItem } from './renderer/BaseRenderer';
2 |
3 | export interface RenderedPage {
4 | navigation?: RenderedPageContents;
5 | }
6 |
7 | export interface RenderedPageContents {
8 | prev?: {
9 | uri?: string
10 | };
11 | info?: RenderedHeader;
12 | lists?: RenderedList[];
13 | }
14 |
15 | export interface RenderedList {
16 | title?: string;
17 | availableListViews: ('list' | 'grid')[];
18 | items: RenderedListItem[];
19 | }
20 |
21 | export default abstract class ViewHandler {
22 | abstract browse(): Promise;
23 | abstract explode(): Promise;
24 | }
25 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/AlbumRenderer.ts:
--------------------------------------------------------------------------------
1 | import Album from '../../../../entities/Album';
2 | import { SongView } from '../SongViewHandler';
3 | import ViewHelper from '../ViewHelper';
4 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
5 |
6 | export default class AlbumRenderer extends BaseRenderer {
7 |
8 | renderToListItem(data: Album): RenderedListItem | null {
9 | const songsView: SongView = {
10 | name: 'songs',
11 | albumId: data.id
12 | };
13 |
14 | return {
15 | service: 'jellyfin',
16 | type: 'folder',
17 | title: data.name,
18 | artist: data.albumArtist,
19 | duration: data.duration,
20 | albumart: this.getAlbumArt(data),
21 | uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(songsView)}`
22 | };
23 | }
24 |
25 | renderToHeader(data: Album): RenderedHeader | null {
26 | const header = super.renderToHeader(data) || {} as RenderedHeader;
27 | header.artist = data.albumArtist;
28 | header.year = data.year;
29 | // Duration does not get converted into time format when shown in header
30 | // (as opposed to list item). So we have to do it ourselves.
31 | header.duration = this.timeFormat(data.duration);
32 | header.genre = this.getStringFromIdNamePair(data.genres);
33 |
34 | return header;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/ArtistRenderer.ts:
--------------------------------------------------------------------------------
1 | import Artist from '../../../../entities/Artist';
2 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
3 | import jellyfin from '../../../../JellyfinContext';
4 | import { EntityType } from '../../../../entities';
5 | import { AlbumView } from '../AlbumViewHandler';
6 | import ViewHelper from '../ViewHelper';
7 |
8 | export default class ArtistRenderer extends BaseRenderer {
9 |
10 | renderToListItem(data: Artist, options?: { noParent: boolean }): RenderedListItem | null {
11 | const albumView: AlbumView = {
12 | name: 'albums'
13 | };
14 |
15 | const parentId = options?.noParent ? null : this.currentView.parentId;
16 | if (parentId) {
17 | albumView.parentId = parentId;
18 | }
19 |
20 | if (data.type === EntityType.Artist) {
21 | albumView.artistId = data.id;
22 | }
23 | else {
24 | albumView.albumArtistId = data.id;
25 | }
26 |
27 | return {
28 | service: 'jellyfin',
29 | type: 'folder',
30 | title: data.name,
31 | albumart: this.getAlbumArt(data),
32 | uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(albumView)}`
33 | };
34 | }
35 |
36 | renderToHeader(data: Artist): RenderedHeader | null {
37 | const header = super.renderToHeader(data) || {} as RenderedHeader;
38 | header.artist = jellyfin.getI18n('JELLYFIN_ARTIST');
39 | header.year = this.getStringFromIdNamePair(data.genres);
40 | return header;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/CollectionRenderer.ts:
--------------------------------------------------------------------------------
1 | import Collection from '../../../../entities/Collection';
2 | import { CollectionView } from '../CollectionViewHandler';
3 | import ViewHelper from '../ViewHelper';
4 | import BaseRenderer, { RenderedListItem } from './BaseRenderer';
5 |
6 | export default class CollectionRenderer extends BaseRenderer {
7 |
8 | renderToListItem(data: Collection): RenderedListItem | null {
9 | const collectionView: CollectionView = {
10 | name: 'collection',
11 | parentId: data.id
12 | };
13 |
14 | return {
15 | service: 'jellyfin',
16 | type: 'streaming-category',
17 | title: data.name,
18 | artist: String(data.year),
19 | albumart: this.getAlbumArt(data),
20 | uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(collectionView)}`
21 | };
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/FolderRenderer.ts:
--------------------------------------------------------------------------------
1 | import BaseRenderer, { RenderedListItem } from './BaseRenderer';
2 | import Folder, { FolderType } from '../../../../entities/Folder';
3 | import { EntityType } from '../../../../entities';
4 | import ViewHelper from '../ViewHelper';
5 | import { CollectionsView } from '../CollectionsViewHandler';
6 | import { FolderView } from '../FolderViewHandler';
7 |
8 | export default class FolderRenderer extends BaseRenderer {
9 |
10 | renderToListItem(data: Folder): RenderedListItem | null {
11 | let title;
12 | if (data.type === EntityType.Folder) {
13 | title = `
14 |
15 | ${data.name}
16 |
17 | `;
18 | }
19 | else {
20 | title = data.name;
21 | }
22 |
23 | const targetView: CollectionsView | FolderView = {
24 | name: data.folderType === FolderType.Collections ? 'collections' : 'folder',
25 | parentId: data.id
26 | };
27 |
28 | return {
29 | service: 'jellyfin',
30 | type: 'streaming-category',
31 | title,
32 | uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(targetView)}`,
33 | albumart: this.getAlbumArt(data)
34 | };
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/GenreRenderer.ts:
--------------------------------------------------------------------------------
1 | import Genre from '../../../../entities/Genre';
2 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
3 | import jellyfin from '../../../../JellyfinContext';
4 | import { AlbumView } from '../AlbumViewHandler';
5 | import ViewHelper from '../ViewHelper';
6 |
7 | export default class GenreRenderer extends BaseRenderer {
8 |
9 | renderToListItem(data: Genre): RenderedListItem | null {
10 | const albumView: AlbumView = {
11 | name: 'albums',
12 | parentId: this.currentView.parentId,
13 | genreId: data.id
14 | };
15 | return {
16 | 'service': 'jellyfin',
17 | 'type': 'folder',
18 | 'title': data.name,
19 | 'albumart': this.getAlbumArt(data),
20 | 'uri': `${this.uri}/${ViewHelper.constructUriSegmentFromView(albumView)}`
21 | };
22 | }
23 |
24 | renderToHeader(data: Genre): RenderedHeader | null {
25 | const header = super.renderToHeader(data) || {} as RenderedHeader;
26 | header.artist = jellyfin.getI18n('JELLYFIN_GENRE');
27 | return header;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/PlaylistRenderer.ts:
--------------------------------------------------------------------------------
1 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
2 | import Playlist from '../../../../entities/Playlist';
3 | import jellyfin from '../../../../JellyfinContext';
4 | import { SongView } from '../SongViewHandler';
5 | import ViewHelper from '../ViewHelper';
6 |
7 | export default class PlaylistRenderer extends BaseRenderer {
8 |
9 | renderToListItem(data: Playlist): RenderedListItem | null {
10 | const songView: SongView = {
11 | name: 'songs',
12 | playlistId: data.id
13 | };
14 |
15 | return {
16 | service: 'jellyfin',
17 | type: 'folder',
18 | title: data.name,
19 | albumart: this.getAlbumArt(data),
20 | uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(songView)}`
21 | };
22 | }
23 |
24 | renderToHeader(data: Playlist): RenderedHeader | null {
25 | const header = super.renderToHeader(data) || {} as RenderedHeader;
26 | header.artist = jellyfin.getI18n('JELLYFIN_PLAYLIST');
27 | return header;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/ServerRenderer.ts:
--------------------------------------------------------------------------------
1 | import Server from '../../../../entities/Server';
2 | import { UserViewView } from '../UserViewViewHandler';
3 | import ViewHelper from '../ViewHelper';
4 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
5 |
6 | export default class ServerRenderer extends BaseRenderer {
7 |
8 | renderToListItem(data: Server & { username: string }): RenderedListItem | null {
9 | const userViewView: UserViewView = {
10 | name: 'userViews',
11 | username: data.username,
12 | serverId: data.id
13 | };
14 |
15 | return {
16 | 'service': 'jellyfin',
17 | 'type': 'streaming-category',
18 | 'title': `${data.username} @ ${data.name}`,
19 | 'uri': `jellyfin/${ViewHelper.constructUriSegmentFromView(userViewView)}`,
20 | 'albumart': '/albumart?sourceicon=music_service/jellyfin/dist/assets/images/jellyfin.png'
21 | };
22 | }
23 |
24 | renderToHeader(): RenderedHeader | null {
25 | return null;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/lib/controller/browse/view-handlers/renderer/SongRenderer.ts:
--------------------------------------------------------------------------------
1 | import BaseRenderer, { RenderedHeader, RenderedListItem } from './BaseRenderer';
2 | import Song from '../../../../entities/Song';
3 | import { SongView } from '../SongViewHandler';
4 | import ViewHelper from '../ViewHelper';
5 |
6 | export default class SongRenderer extends BaseRenderer {
7 |
8 | renderToListItem(data: Song): RenderedListItem | null {
9 | const songView: SongView = {
10 | name: 'song',
11 | songId: data.id
12 | };
13 |
14 | return {
15 | service: 'jellyfin',
16 | type: 'song',
17 | title: data.name,
18 | artist: this.getStringFromIdNamePair(data.artists),
19 | album: data.album?.name,
20 | duration: data.duration,
21 | uri: `${this.uri}/${ViewHelper.constructUriSegmentFromView(songView)}`,
22 | albumart: this.getAlbumArt(data),
23 | favorite: data.favorite
24 | };
25 | }
26 |
27 | renderToHeader(): RenderedHeader | null {
28 | return null;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/lib/entities/Album.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | interface Album extends BaseEntity {
5 | type: EntityType.Album;
6 | albumArtist: string | null;
7 | artists: {
8 | id: string,
9 | name: string
10 | }[];
11 | duration: number | null;
12 | year: number | null;
13 | genres: {
14 | id: string,
15 | name: string
16 | }[];
17 | }
18 |
19 | export default Album;
20 |
--------------------------------------------------------------------------------
/src/lib/entities/Artist.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | interface Artist extends BaseEntity {
5 | type: EntityType.Artist | EntityType.AlbumArtist;
6 | genres: {
7 | id: string,
8 | name: string
9 | }[];
10 | }
11 |
12 | export default Artist;
13 |
--------------------------------------------------------------------------------
/src/lib/entities/BaseEntity.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 |
3 | interface BaseEntity {
4 | type: EntityType;
5 | id: string;
6 | name: string;
7 | thumbnail: string | null;
8 | }
9 |
10 | export default BaseEntity;
11 |
--------------------------------------------------------------------------------
/src/lib/entities/Collection.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | interface Collection extends BaseEntity {
5 | type: EntityType.Collection;
6 | year: number | null;
7 | }
8 |
9 | export default Collection;
10 |
--------------------------------------------------------------------------------
/src/lib/entities/Folder.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | export enum FolderType {
5 | Collections = 'Collections',
6 | Folder = 'Folder'
7 | }
8 |
9 | interface Folder extends BaseEntity {
10 | type: EntityType.Folder | EntityType.CollectionFolder;
11 | folderType?: FolderType;
12 | }
13 |
14 | export default Folder;
15 |
--------------------------------------------------------------------------------
/src/lib/entities/Genre.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | interface Genre extends BaseEntity {
5 | type: EntityType.Genre;
6 | }
7 |
8 | export default Genre;
9 |
--------------------------------------------------------------------------------
/src/lib/entities/Playlist.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | interface Playlist extends BaseEntity {
5 | type: EntityType.Playlist;
6 | }
7 |
8 | export default Playlist;
9 |
--------------------------------------------------------------------------------
/src/lib/entities/Server.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '../entities';
2 | import BaseEntity from '../entities/BaseEntity';
3 |
4 | interface Server extends BaseEntity {
5 | type: EntityType.Server,
6 | url: string;
7 | connectionUrl: string;
8 | }
9 |
10 | export default Server;
11 |
--------------------------------------------------------------------------------
/src/lib/entities/Song.ts:
--------------------------------------------------------------------------------
1 | import { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client/models';
2 | import { EntityType } from '.';
3 | import BaseEntity from './BaseEntity';
4 |
5 | interface Song extends BaseEntity {
6 | type: EntityType.Song;
7 | artists: {
8 | id: string,
9 | name: string
10 | }[];
11 | album: {
12 | id: string;
13 | name: string;
14 | thumbnail: string | null;
15 | } | null;
16 | duration: number;
17 | mediaSources?: MediaSourceInfo[];
18 | favorite: boolean;
19 | }
20 |
21 | export default Song;
22 |
--------------------------------------------------------------------------------
/src/lib/entities/UserView.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '.';
2 | import BaseEntity from './BaseEntity';
3 |
4 | export enum UserViewType {
5 | Collections = 'Collections',
6 | Playlists = 'Playlists',
7 | Library = 'Library',
8 | Folders = 'Folder'
9 | }
10 |
11 | interface UserView extends BaseEntity {
12 | type: EntityType.UserView;
13 | userViewType?: UserViewType;
14 | }
15 |
16 | export default UserView;
17 |
--------------------------------------------------------------------------------
/src/lib/entities/index.ts:
--------------------------------------------------------------------------------
1 | export { default as Album } from './Album';
2 | export { default as Artist } from './Artist';
3 | export { default as Collection } from './Collection';
4 | export { default as Folder } from './Folder';
5 | export { default as Genre } from './Genre';
6 | export { default as Playlist } from './Playlist';
7 | export { default as Song } from './Song';
8 |
9 | export enum EntityType {
10 | Album = 'Album',
11 | Artist = 'Artist',
12 | AlbumArtist = 'AlbumArtist',
13 | Collection = 'Collection',
14 | Folder = 'Folder',
15 | CollectionFolder = 'CollectionFolder',
16 | Genre = 'Genre',
17 | Playlist = 'Playlist',
18 | Song = 'Song',
19 | Server = 'Server',
20 | UserView = 'UserView',
21 | Unknown = 'Unknown'
22 | }
23 |
--------------------------------------------------------------------------------
/src/lib/model/AlbumModel.ts:
--------------------------------------------------------------------------------
1 | import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api';
2 | import { EntityType } from '../entities';
3 | import Album from '../entities/Album';
4 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
5 | import AlbumParser from './parser/AlbumParser';
6 |
7 | export interface GetSimilarAlbumsParams {
8 | album: Album,
9 | limit?: number
10 | }
11 |
12 | export default class AlbumModel extends BaseModel {
13 |
14 | getAlbums(params: GetItemsParams): Promise> {
15 | const parser = new AlbumParser();
16 | return this.getItemsFromAPI({ ...params, itemTypes: EntityType.Album }, parser);
17 | }
18 |
19 | getAlbum(id: string) {
20 | const parser = new AlbumParser();
21 | return this.getItemFromApi({ itemId: id }, parser);
22 | }
23 |
24 | async getSimilarAlbums(params: GetSimilarAlbumsParams): Promise {
25 | if (!this.connection.auth?.User?.Id) {
26 | throw Error('No auth');
27 | }
28 | const parser = new AlbumParser();
29 | const libraryApi = getLibraryApi(this.connection.api);
30 | const response = await libraryApi.getSimilarAlbums({
31 | itemId: params.album.id,
32 | userId: this.connection.auth.User.Id,
33 | excludeArtistIds: params.album.artists.map((artist) => artist.id),
34 | limit: params.limit || 12
35 | });
36 | return this.parseItemDtos(response.data.Items || [], parser);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/lib/model/ArtistModel.ts:
--------------------------------------------------------------------------------
1 | import { ArtistsApi } from '@jellyfin/sdk/lib/generated-client/api/artists-api';
2 | import { getArtistsApi } from '@jellyfin/sdk/lib/utils/api/artists-api';
3 | import { EntityType } from '../entities';
4 | import Artist from '../entities/Artist';
5 | import { GetItemsParams, GetItemsResult } from './BaseModel';
6 | import { default as BaseModel } from './BaseModel';
7 | import ArtistParser from './parser/ArtistParser';
8 |
9 | export default class ArtistModel extends BaseModel {
10 |
11 | async getArtists(params: GetItemsParams): Promise> {
12 | const parser = new ArtistParser(EntityType.Artist);
13 | return this.getItemsFromAPI(params, parser, {
14 | getApi: (api) => getArtistsApi(api),
15 | getItems: 'getArtists'
16 | });
17 | }
18 |
19 | getArtist(id: string) {
20 | const parser = new ArtistParser(EntityType.Artist);
21 | return this.getItemFromApi({ itemId: id }, parser);
22 | }
23 |
24 | async getAlbumArtists(params: GetItemsParams): Promise> {
25 | const parser = new ArtistParser(EntityType.AlbumArtist);
26 | return this.getItemsFromAPI(params, parser, {
27 | getApi: (api) => getArtistsApi(api),
28 | getItems: 'getAlbumArtists'
29 | });
30 | }
31 |
32 | getAlbumArtist(id: string) {
33 | const parser = new ArtistParser(EntityType.AlbumArtist);
34 | return this.getItemFromApi({ itemId: id }, parser);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/lib/model/FolderModel.ts:
--------------------------------------------------------------------------------
1 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
2 | import FolderContentParser, { FolderContentType } from './parser/FolderContentParser';
3 | import FolderParser from './parser/FolderParser';
4 |
5 | export default class FolderModel extends BaseModel {
6 |
7 | getFolderContents(params: GetItemsParams): Promise> {
8 | const parser = new FolderContentParser();
9 | return this.getItemsFromAPI({ ...params, recursive: false }, parser);
10 | }
11 |
12 | getFolder(id: string) {
13 | const parser = new FolderParser();
14 | return this.getItemFromApi({ itemId: id }, parser);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/lib/model/GenreModel.ts:
--------------------------------------------------------------------------------
1 | import { GenresApi } from '@jellyfin/sdk/lib/generated-client/api/genres-api';
2 | import { getGenresApi } from '@jellyfin/sdk/lib/utils/api/genres-api';
3 | import Genre from '../entities/Genre';
4 | import { GetItemsParams, GetItemsResult } from './BaseModel';
5 | import { default as BaseModel } from './BaseModel';
6 | import GenreParser from './parser/GenreParser';
7 |
8 | export default class GenreModel extends BaseModel {
9 |
10 | async getGenres(params: GetItemsParams): Promise> {
11 | const parser = new GenreParser();
12 | return this.getItemsFromAPI(params, parser, {
13 | getApi: (api) => getGenresApi(api),
14 | getItems: 'getGenres'
15 | });
16 | }
17 |
18 | getGenre(id: string) {
19 | const parser = new GenreParser();
20 | return this.getItemFromApi({ itemId: id }, parser);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/lib/model/PlaylistModel.ts:
--------------------------------------------------------------------------------
1 | import { EntityType } from '../entities';
2 | import Playlist from '../entities/Playlist';
3 | import { GetItemsParams, GetItemsResult } from './BaseModel';
4 | import { default as BaseModel } from './BaseModel';
5 | import PlaylistParser from './parser/PlaylistParser';
6 |
7 | export default class PlaylistModel extends BaseModel {
8 |
9 | async getPlaylists(params: GetItemsParams): Promise> {
10 | const parser = new PlaylistParser();
11 | return this.getItemsFromAPI({ ...params, itemTypes: EntityType.Playlist }, parser);
12 | }
13 |
14 | getPlaylist(id: string) {
15 | const parser = new PlaylistParser();
16 | return this.getItemFromApi({ itemId: id }, parser);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/lib/model/SongModel.ts:
--------------------------------------------------------------------------------
1 | import { ItemFields } from '@jellyfin/sdk/lib/generated-client/models/item-fields';
2 | import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api';
3 | import { EntityType } from '../entities';
4 | import Song from '../entities/Song';
5 | import BaseModel, { GetItemsParams, GetItemsResult } from './BaseModel';
6 | import SongParser from './parser/SongParser';
7 | import LyricsParser from './parser/LyricsParser';
8 |
9 | export default class SongModel extends BaseModel {
10 |
11 | getSongs(params: GetItemsParams): Promise> {
12 | const parser = new SongParser();
13 | return this.getItemsFromAPI({
14 | ...params,
15 | itemTypes: EntityType.Song,
16 | fields: [ ItemFields.MediaSources ]
17 | }, parser);
18 | }
19 |
20 | getSong(id: string) {
21 | const parser = new SongParser();
22 | return this.getItemFromApi({ itemId: id }, parser);
23 | }
24 |
25 | async getLyrics(id: string) {
26 | const api = getLyricsApi(this.connection.api);
27 | const dto = await api.getLyrics({ itemId: id });
28 | const parser = new LyricsParser();
29 | return parser.parseDto(dto.data);
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/lib/model/UserViewModel.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { UserViewsApi } from '@jellyfin/sdk/lib/generated-client/api/user-views-api';
3 | import { getUserViewsApi } from '@jellyfin/sdk/lib/utils/api/user-views-api';
4 | import UserView from '../entities/UserView';
5 | import BaseModel, { GetItemsResult } from './BaseModel';
6 | import UserViewParser from './parser/UserViewParser';
7 |
8 | export default class UserViewModel extends BaseModel {
9 |
10 | getUserViews(): Promise> {
11 | const parser = new UserViewParser();
12 | return this.getItemsFromAPI({}, parser, {
13 | getApi: (api: Api) => getUserViewsApi(api),
14 | getItems: 'getUserViews'
15 | });
16 | }
17 |
18 | getUserView(id: string) {
19 | const parser = new UserViewParser();
20 | return this.getItemFromApi({ itemId: id }, parser);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/lib/model/filter/AZFilterModel.ts:
--------------------------------------------------------------------------------
1 | import jellyfin from '../../JellyfinContext';
2 | import BaseModel from '../BaseModel';
3 | import FilterModel, { Filter, FilterType } from './FilterModel';
4 |
5 | const AZ = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ];
6 |
7 | export interface AZFilterModelConfig {
8 | initialSelection?: {
9 | nameStartsWith?: string
10 | };
11 | }
12 |
13 | export default class AZFilterModel extends BaseModel implements FilterModel {
14 |
15 | async getFilter(config?: AZFilterModelConfig): Promise {
16 | const options = AZ.map((c) => ({
17 | name: c,
18 | value: c,
19 | selected: c === config?.initialSelection?.nameStartsWith
20 | }));
21 |
22 | return {
23 | type: FilterType.AZ,
24 | title: jellyfin.getI18n('JELLYFIN_FILTER_AZ_TITLE'),
25 | placeholder: jellyfin.getI18n('JELLYFIN_FILTER_AZ_PLACEHOLDER'),
26 | field: 'nameStartsWith',
27 | icon: 'fa fa-font',
28 | resettable: true,
29 | options
30 | };
31 | }
32 |
33 | async getDefaultSelection(): Promise> {
34 | return {
35 | nameStartsWith: undefined
36 | };
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/lib/model/filter/FilterModel.ts:
--------------------------------------------------------------------------------
1 | export enum FilterType {
2 | AZ = 'AZ',
3 | Genre = 'Genre',
4 | Year = 'Year',
5 | Filter = 'Filter',
6 | Sort = 'Sort'
7 | }
8 |
9 | export interface Filter {
10 | type: FilterType,
11 | title?: string,
12 | placeholder: string,
13 | field?: string,
14 | icon?: string,
15 | resettable?: boolean,
16 | options?: FilterOption[],
17 | subfilters?: Subfilter[]
18 | }
19 |
20 | export type Subfilter = Omit;
21 |
22 | export interface FilterOption {
23 | name: string,
24 | value: any,
25 | selected?: boolean
26 | }
27 |
28 | export type FilterSelection = Record;
29 |
30 | interface FilterModel {
31 | getFilter(config?: any): Promise;
32 | getDefaultSelection(params: any): Promise;
33 | }
34 |
35 | export default FilterModel;
36 |
--------------------------------------------------------------------------------
/src/lib/model/parser/AlbumParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { EntityType } from '../../entities';
4 | import Album from '../../entities/Album';
5 | import BaseParser from './BaseParser';
6 |
7 | export default class AlbumParser extends BaseParser {
8 |
9 | async parseDto(data: BaseItemDto, api: Api): Promise {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 |
15 | const artists = data.ArtistItems?.reduce((result, artist) => {
16 | if (artist.Id && artist.Name) {
17 | result.push({
18 | id: artist.Id,
19 | name: artist.Name
20 | });
21 | }
22 | return result;
23 | }, []) || [];
24 |
25 | const result: Album = {
26 | ...base,
27 | type: EntityType.Album,
28 | albumArtist: data.AlbumArtist || null,
29 | artists,
30 | duration: data.RunTimeTicks ? this.ticksToSeconds(data.RunTimeTicks) : null,
31 | year: data.ProductionYear || null,
32 | genres: this.getGenres(data)
33 | };
34 |
35 | return result;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/lib/model/parser/ArtistParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { EntityType } from '../../entities';
4 | import Artist from '../../entities/Artist';
5 | import BaseParser from './BaseParser';
6 |
7 | export default class ArtistParser extends BaseParser {
8 |
9 | #type: EntityType.Artist | EntityType.AlbumArtist;
10 |
11 | constructor(type: EntityType.Artist | EntityType.AlbumArtist) {
12 | super();
13 | this.#type = type;
14 | }
15 |
16 | async parseDto(data: BaseItemDto, api: Api): Promise {
17 | const base = await super.parseDto(data, api);
18 | if (!base) {
19 | return null;
20 | }
21 |
22 | return {
23 | ...base,
24 | type: this.#type,
25 | genres: this.getGenres(data)
26 | };
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/lib/model/parser/CollectionParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { EntityType } from '../../entities';
4 | import Collection from '../../entities/Collection';
5 | import BaseParser from './BaseParser';
6 |
7 | export default class CollectionParser extends BaseParser {
8 |
9 | async parseDto(data: BaseItemDto, api: Api): Promise {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 |
15 | const result: Collection = {
16 | ...base,
17 | type: EntityType.Collection,
18 | year: data.ProductionYear || null
19 | };
20 |
21 | return result;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/lib/model/parser/FolderParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models';
3 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
4 | import { EntityType } from '../../entities';
5 | import Folder, { FolderType } from '../../entities/Folder';
6 | import BaseParser from './BaseParser';
7 |
8 | export default class FolderParser extends BaseParser {
9 |
10 | async parseDto(data: BaseItemDto, api: Api): Promise {
11 | const base = await super.parseDto(data, api);
12 | if (!base || (data.Type !== BaseItemKind.Folder &&
13 | data.Type !== BaseItemKind.CollectionFolder && data.Type !== BaseItemKind.UserView)) {
14 | return null;
15 | }
16 |
17 | const result: Folder = {
18 | ...base,
19 | type: data.Type === BaseItemKind.CollectionFolder ? EntityType.CollectionFolder : EntityType.Folder
20 | };
21 |
22 | if (data.Type === BaseItemKind.CollectionFolder && data.CollectionType === 'boxsets') {
23 | result.folderType = FolderType.Collections;
24 | }
25 | else {
26 | result.folderType = FolderType.Folder;
27 | }
28 |
29 | return result;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/lib/model/parser/GenreParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { EntityType } from '../../entities';
4 | import Genre from '../../entities/Genre';
5 | import BaseParser from './BaseParser';
6 |
7 | export default class GenreParser extends BaseParser {
8 |
9 | async parseDto(data: BaseItemDto, api: Api): Promise {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 |
15 | const result: Genre = {
16 | ...base,
17 | type: EntityType.Genre
18 | };
19 |
20 | return result;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/lib/model/parser/LyricsParser.ts:
--------------------------------------------------------------------------------
1 | import { LyricDto } from '@jellyfin/sdk/lib/generated-client/models/lyric-dto';
2 | import { MetadataLyrics } from 'now-playing-common';
3 |
4 | export default class LyricsParser {
5 |
6 | async parseDto(data: LyricDto): Promise {
7 | /**
8 | * LyricDto supposedly has `Metadata.IsSynced` property but
9 | * `Metadata` is empty (as of v10.9.6). We need to test by
10 | * looping through each line of lyrics.
11 | */
12 | if (!data.Lyrics) {
13 | return null;
14 | }
15 | const isSynced = data.Lyrics.every((line) => line.Start !== undefined);
16 | if (isSynced) {
17 | const lines = data.Lyrics.map((line) => ({
18 | text: line.Text || '',
19 | // Convert to milliseconds
20 | start: line.Start ? line.Start / 10000 : 0
21 | })) || [];
22 | if (lines.length > 0) {
23 | return {
24 | type: 'synced',
25 | lines
26 | };
27 | }
28 | }
29 | else {
30 | const lines = data.Lyrics?.reduce((result, line) => {
31 | if (line.Text !== undefined) {
32 | result.push(line.Text);
33 | }
34 | return result;
35 | }, []) || [];
36 | if (lines.length > 0) {
37 | return {
38 | type: 'plain',
39 | lines
40 | };
41 | }
42 | }
43 | return null;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/lib/model/parser/Parser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 |
4 | interface Parser {
5 | parseDto(data: BaseItemDto, api: Api): Promise;
6 | }
7 |
8 | export default Parser;
9 |
--------------------------------------------------------------------------------
/src/lib/model/parser/PlaylistParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
3 | import { EntityType } from '../../entities';
4 | import Playlist from '../../entities/Playlist';
5 | import BaseParser from './BaseParser';
6 |
7 | export default class PlaylistParser extends BaseParser {
8 |
9 | async parseDto(data: BaseItemDto, api: Api): Promise {
10 | const base = await super.parseDto(data, api);
11 | if (!base) {
12 | return null;
13 | }
14 |
15 | const result: Playlist = {
16 | ...base,
17 | type: EntityType.Playlist
18 | };
19 |
20 | return result;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/lib/model/parser/UserViewParser.ts:
--------------------------------------------------------------------------------
1 | import { Api } from '@jellyfin/sdk';
2 | import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models';
3 | import { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto';
4 | import { EntityType } from '../../entities';
5 | import UserView, { UserViewType } from '../../entities/UserView';
6 | import BaseParser from './BaseParser';
7 |
8 | export default class UserViewParser extends BaseParser {
9 |
10 | async parseDto(data: BaseItemDto, api: Api): Promise {
11 | const base = await super.parseDto(data, api);
12 | if (!base) {
13 | return null;
14 | }
15 |
16 | const result: UserView = {
17 | ...base,
18 | type: EntityType.UserView
19 | };
20 |
21 | if (data.Type === BaseItemKind.CollectionFolder && data.CollectionType === 'boxsets') {
22 | result.userViewType = UserViewType.Collections;
23 | }
24 | else if (data.Type === BaseItemKind.UserView && data.CollectionType === 'playlists') {
25 | result.userViewType = UserViewType.Playlists;
26 | }
27 | else if (data.Type === BaseItemKind.CollectionFolder && data.CollectionType === 'music') {
28 | result.userViewType = UserViewType.Library;
29 | }
30 | else if (data.Type === BaseItemKind.UserView && data.CollectionType === 'folders') {
31 | result.userViewType = UserViewType.Folders;
32 | }
33 | else {
34 | return null;
35 | }
36 |
37 | return result;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/lib/util/StopWatch.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Note: this is not a general-purpose utility class, but one made specifically for
3 | * keeping track of the seek position in MPD 'stop' events handled by PlayController.
4 | */
5 |
6 | export default class StopWatch {
7 | #startTimestamp: number;
8 | #stopTimestamp: number;
9 | #startElapsedMS: number;
10 | #status: 'running' | 'stopped';
11 |
12 | constructor() {
13 | this.#status = 'stopped';
14 | this.#startTimestamp = this.#stopTimestamp = this.#getCurrentTimestamp();
15 | }
16 |
17 | start(startElapsedMS = 0) {
18 | this.#startTimestamp = this.#stopTimestamp = this.#getCurrentTimestamp();
19 | this.#startElapsedMS = startElapsedMS;
20 | this.#status = 'running';
21 | return this;
22 | }
23 |
24 | stop() {
25 | if (this.#status !== 'stopped') {
26 | this.#stopTimestamp = this.#getCurrentTimestamp();
27 | this.#status = 'stopped';
28 | }
29 | return this;
30 | }
31 |
32 | getElapsed() {
33 | if (this.#status === 'stopped') {
34 | return this.#stopTimestamp - this.#startTimestamp + this.#startElapsedMS;
35 | }
36 |
37 | // Status: 'running'
38 | return this.#getCurrentTimestamp() - this.#startTimestamp + this.#startElapsedMS;
39 | }
40 |
41 | #getCurrentTimestamp() {
42 | return new Date().getTime();
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/lib/util/Type.ts:
--------------------------------------------------------------------------------
1 | // Used for converting Object values to string literal types:
2 | // https://dev.to/multimo/how-to-build-typescript-string-literal-types-from-objects-values-361l
3 | export type ValueOf = T[keyof T];
4 |
--------------------------------------------------------------------------------
/src/lib/util/UI.ts:
--------------------------------------------------------------------------------
1 | import { existsSync } from 'fs';
2 |
3 | export default class UI {
4 | static supportsEnhancedTitles(): boolean {
5 | return !this.isManifestUI();
6 | }
7 |
8 | static isManifestUI(): boolean {
9 | const volumioManifestUIDir = '/volumio/http/www4';
10 | const volumioManifestUIDisabledFile = '/data/disableManifestUI';
11 | return existsSync(volumioManifestUIDir) && !existsSync(volumioManifestUIDisabledFile);
12 | }
13 |
14 | static createLink(data: { text: string, uri: string }): string {
15 | const onclick = `angular.element('#browse-page').scope().browse.fetchLibrary({uri: '${data.uri}'})`;
16 | return `${data.text}`;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/lib/util/index.ts:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2 | // @ts-ignore
3 | import libQ from 'kew';
4 |
5 | export function jsPromiseToKew(promise: Promise): any {
6 | const defer = libQ.defer();
7 |
8 | promise.then((result) => {
9 | defer.resolve(result);
10 | })
11 | .catch((error) => {
12 | defer.reject(error);
13 | });
14 |
15 | return defer.promise;
16 | }
17 |
18 | export function kewToJSPromise(promise: any): Promise {
19 | // Guard against a JS promise from being passed to this function.
20 | if (typeof promise.catch === 'function' && typeof promise.fail === undefined) {
21 | // JS promise - return as is
22 | return promise;
23 | }
24 | return new Promise((resolve, reject) => {
25 | promise.then((result: any) => {
26 | resolve(result);
27 | })
28 | .fail((error: any) => {
29 | reject(error);
30 | });
31 | });
32 | }
33 |
34 | export function objectAssignIfExists>(target: T, source: Record, props: string[]): T {
35 | props.forEach((prop) => {
36 | if (source[prop] !== undefined) {
37 | Reflect.set(target, prop, source[prop]);
38 | }
39 | });
40 |
41 | return target;
42 | }
43 |
--------------------------------------------------------------------------------
/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": ["./**/*.ts"],
3 | "compilerOptions": {
4 | "rootDir": ".",
5 | "target": "es2020",
6 | "module": "commonjs",
7 | "outDir": "../dist/",
8 | "declaration": true,
9 | "declarationMap": true,
10 | "esModuleInterop": true,
11 | "moduleResolution": "node",
12 | "sourceMap": true,
13 | "inlineSources": true,
14 | "strict": true,
15 | "strictPropertyInitialization": false,
16 | "resolveJsonModule": true
17 | },
18 | "references": [
19 | { "path": "../" }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "rootDir": ".",
4 | "outDir": ".",
5 | "resolveJsonModule": true,
6 | "composite": true
7 | },
8 | "files": [
9 | "package.json"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/uninstall.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | echo "Jellyfin plugin uninstalled"
3 |
--------------------------------------------------------------------------------