From c663d6c4c065d0395b0933b4d7886e931aa0677f Mon Sep 17 00:00:00 2001 From: Jamie Rees Date: Sat, 15 Feb 2020 20:24:34 +0000 Subject: [PATCH] Added the option to filter between movies and tv shows or combined on the discover page --- .../discover/discover.component.html | 49 +- .../discover/discover.component.scss | 14 +- .../components/discover/discover.component.ts | 147 +++++- .../ClientApp/src/app/discover/interfaces.ts | 8 +- src/Ombi/ClientApp/src/styles/shared.scss | 11 +- src/Ombi/wwwroot/translations/en.json | 483 +++++++++--------- 6 files changed, 414 insertions(+), 298 deletions(-) diff --git a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html index 8d1984d8f..d76c0719e 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html +++ b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.html @@ -1,30 +1,27 @@
+
+
+ + + +
+
-
-
- - - +
+
+ + + +
-
-
-
- -
-
-
- -
-
+
+
+ +
+
+
+ +
+
\ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.scss b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.scss index 8e05d0955..1e50c5e1f 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.scss +++ b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.scss @@ -2,10 +2,9 @@ height: 100%; } - -.small-middle-container{ - margin: auto; - width: 80%; +.small-middle-container { + margin: auto; + width: 80%; } .small-padding { @@ -17,7 +16,12 @@ .loading-spinner { margin: 10%; } + #scroller { height: 100vh; overflow: scroll; - } \ No newline at end of file +} + +.small-space { + padding-top: 1%; +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts index 4c6d1c5a2..47695073b 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts +++ b/src/Ombi/ClientApp/src/app/discover/components/discover/discover.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from "@angular/core"; import { SearchV2Service } from "../../../services"; import { ISearchMovieResult, ISearchTvResult, RequestType } from "../../../interfaces"; -import { IDiscoverCardResult } from "../../interfaces"; +import { IDiscoverCardResult, DiscoverOption } from "../../interfaces"; import { trigger, transition, style, animate } from "@angular/animations"; @Component({ @@ -21,6 +21,9 @@ export class DiscoverComponent implements OnInit { public discoverResults: IDiscoverCardResult[] = []; public movies: ISearchMovieResult[] = []; public tvShows: ISearchTvResult[] = []; + + public discoverOptions: DiscoverOption = DiscoverOption.Combined; + public DiscoverOption = DiscoverOption; public defaultTvPoster: string; @@ -39,8 +42,18 @@ export class DiscoverComponent implements OnInit { public async ngOnInit() { this.loading() this.scrollDisabled = true; - this.movies = await this.searchService.popularMoviesByPage(0,12); - this.tvShows = await this.searchService.popularTvByPage(0,12); + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.popularMoviesByPage(0,12); + this.tvShows = await this.searchService.popularTvByPage(0,12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.popularMoviesByPage(0,12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.popularTvByPage(0,12); + break; + } this.contentLoaded = 12; @@ -56,16 +69,46 @@ export class DiscoverComponent implements OnInit { this.isScrolling = true; this.loading(); if (this.popularActive) { - this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12); - this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, 12); + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12); + this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, 12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, 12); + break; + } } - if(this.trendingActive) { - this.movies = await this.searchService.nowPlayingMoviesByPage(this.contentLoaded, 12); - this.tvShows = await this.searchService.trendingTvByPage(this.contentLoaded, 12); + if (this.trendingActive) { + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.nowPlayingMoviesByPage(this.contentLoaded, 12); + this.tvShows = await this.searchService.trendingTvByPage(this.contentLoaded, 12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.nowPlayingMoviesByPage(this.contentLoaded, 12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.trendingTvByPage(this.contentLoaded, 12); + break; + } } - if(this.upcomingActive) { - this.movies = await this.searchService.upcomingMoviesByPage(this.contentLoaded, 12); - this.tvShows = await this.searchService.anticipatedTvByPage(this.contentLoaded, 12); + if (this.upcomingActive) { + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.upcomingMoviesByPage(this.contentLoaded, 12); + this.tvShows = await this.searchService.anticipatedTvByPage(this.contentLoaded, 12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.upcomingMoviesByPage(this.contentLoaded, 12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.anticipatedTvByPage(this.contentLoaded, 12); + break; + } } this.contentLoaded += 12; @@ -83,8 +126,18 @@ export class DiscoverComponent implements OnInit { this.popularActive = true; this.trendingActive = false; this.upcomingActive = false; - this.movies = await this.searchService.popularMoviesByPage(0, 12); - this.tvShows = await this.searchService.popularTvByPage(0, 12); + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.popularMoviesByPage(0, 12); + this.tvShows = await this.searchService.popularTvByPage(0, 12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.popularMoviesByPage(0, 12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.popularTvByPage(0, 12); + break; + } this.createModel(); this.scrollDisabled = false; @@ -100,8 +153,18 @@ export class DiscoverComponent implements OnInit { this.popularActive = false; this.trendingActive = true; this.upcomingActive = false; - this.movies = await this.searchService.nowPlayingMoviesByPage(0, 12); - this.tvShows = await this.searchService.trendingTvByPage(0, 12); + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.nowPlayingMoviesByPage(0, 12); + this.tvShows = await this.searchService.trendingTvByPage(0, 12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.nowPlayingMoviesByPage(0, 12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.trendingTvByPage(0, 12); + break; + } this.createModel(); this.scrollDisabled = false; @@ -116,15 +179,55 @@ export class DiscoverComponent implements OnInit { this.popularActive = false; this.trendingActive = false; this.upcomingActive = true; - this.movies = await this.searchService.upcomingMoviesByPage(0, 12); - this.tvShows = await this.searchService.anticipatedTvByPage(0, 12); + switch (this.discoverOptions) { + case DiscoverOption.Combined: + this.movies = await this.searchService.upcomingMoviesByPage(0, 12); + this.tvShows = await this.searchService.anticipatedTvByPage(0, 12); + break; + case DiscoverOption.Movie: + this.movies = await this.searchService.upcomingMoviesByPage(0, 12); + break; + case DiscoverOption.Tv: + this.tvShows = await this.searchService.anticipatedTvByPage(0, 12); + break; + } this.createModel(); this.scrollDisabled = false; } + public async switchDiscoverMode(newMode: DiscoverOption) { + this.loading(); + this.clear(); + this.discoverOptions = newMode; + await this.ngOnInit(); + this.finishLoading(); + } + private createModel() { const tempResults = []; + + switch (this.discoverOptions) { + case DiscoverOption.Combined: + tempResults.push(...this.mapMovieModel()); + tempResults.push(...this.mapTvModel()); + break; + case DiscoverOption.Movie: + tempResults.push(...this.mapMovieModel()); + break; + case DiscoverOption.Tv: + tempResults.push(...this.mapTvModel()); + break; + } + + this.shuffle(tempResults); + this.discoverResults.push(...tempResults); + + this.finishLoading(); + } + + private mapMovieModel(): IDiscoverCardResult[] { + const tempResults = []; this.movies.forEach(m => { tempResults.push({ available: m.available, @@ -140,6 +243,11 @@ export class DiscoverComponent implements OnInit { imdbid: m.imdbId }); }); + return tempResults; + } + + private mapTvModel(): IDiscoverCardResult[] { + const tempResults = []; this.tvShows.forEach(m => { tempResults.push({ available: m.available, @@ -155,10 +263,7 @@ export class DiscoverComponent implements OnInit { imdbid: m.imdbId }); }); - this.shuffle(tempResults); - this.discoverResults.push(...tempResults); - - this.finishLoading(); + return tempResults; } private createInitialModel() { diff --git a/src/Ombi/ClientApp/src/app/discover/interfaces.ts b/src/Ombi/ClientApp/src/app/discover/interfaces.ts index 786c57320..9e080ca75 100644 --- a/src/Ombi/ClientApp/src/app/discover/interfaces.ts +++ b/src/Ombi/ClientApp/src/app/discover/interfaces.ts @@ -12,4 +12,10 @@ export interface IDiscoverCardResult { rating: number; overview: string; imdbid: string; -} \ No newline at end of file +} + +export enum DiscoverOption { + Combined = 1, + Movie = 2, + Tv = 3 +} diff --git a/src/Ombi/ClientApp/src/styles/shared.scss b/src/Ombi/ClientApp/src/styles/shared.scss index e2c888362..7ddb6e821 100644 --- a/src/Ombi/ClientApp/src/styles/shared.scss +++ b/src/Ombi/ClientApp/src/styles/shared.scss @@ -2,10 +2,10 @@ .top-spacing { padding-top: 10%; } - .modal-panel { - max-height: 100vh !important; - max-width: 100vw !important; - height: 100%; + .modal-panel { + max-height: 100vh !important; + max-width: 100vw !important; + height: 100%; } } @@ -30,6 +30,7 @@ body { height: 50px; } + /* Scrollbar */ ::-webkit-scrollbar { @@ -60,7 +61,7 @@ body { } table { - width: 100%; + width: 100%; } .loading-spinner { diff --git a/src/Ombi/wwwroot/translations/en.json b/src/Ombi/wwwroot/translations/en.json index 66dc0ba9d..abc6eb2f6 100644 --- a/src/Ombi/wwwroot/translations/en.json +++ b/src/Ombi/wwwroot/translations/en.json @@ -1,245 +1,248 @@ { - "Login": { - "SignInButton": "Sign in", - "UsernamePlaceholder": "Username", - "PasswordPlaceholder": "Password", - "RememberMe": "Remember Me", - "SignInWith": "Sign in with {{appName}}", - "SignInWithPlex": "Sign in with Plex", - "ForgottenPassword": "Forgot your password?", - "Errors": { - "IncorrectCredentials": "Incorrect username or password" - } - }, - "Common": { - "ContinueButton": "Continue", - "Available": "Available", - "PartiallyAvailable": "Partially Available", - "Monitored": "Monitored", - "NotAvailable": "Not Available", - "ProcessingRequest": "Processing Request", - "PendingApproval": "Pending Approval", - "RequestDenied": "Request Denied", - "NotRequested": "Not Requested", - "Requested": "Requested", - "Request": "Request", - "Denied": "Denied", - "Approve": "Approve", - "PartlyAvailable": "Partly Available", - "ViewDetails": "View Details", - "Errors": { - "Validation": "Please check your entered values" + "Login": { + "SignInButton": "Sign in", + "UsernamePlaceholder": "Username", + "PasswordPlaceholder": "Password", + "RememberMe": "Remember Me", + "SignInWith": "Sign in with {{appName}}", + "SignInWithPlex": "Sign in with Plex", + "ForgottenPassword": "Forgot your password?", + "Errors": { + "IncorrectCredentials": "Incorrect username or password" + } }, - "Cancel":"Cancel", - "Submit":"Submit" - }, - "PasswordReset": { - "EmailAddressPlaceholder": "Email Address", - "ResetPasswordButton": "Reset Password" - }, - "LandingPage": { - "OnlineHeading": "Currently Online", - "OnlineParagraph": "The media server is currently online", - "PartiallyOnlineHeading": "Partially Online", - "PartiallyOnlineParagraph": "The media server is partially online.", - "MultipleServersUnavailable": "There are {{serversUnavailable}} servers offline out of {{totalServers}}.", - "SingleServerUnavailable": "There is {{serversUnavailable}} server offline out of {{totalServers}}.", - "OfflineHeading": "Currently Offline", - "OfflineParagraph": "The media server is currently offline.", - "CheckPageForUpdates": "Check this page for continuous site updates." - }, - "NavigationBar": { - "Discover": "Discover", - "Search": "Search", - "Requests": "Requests", - "UserManagement": "User Management", - "Issues": "Issues", - "Vote": "Vote", - "Donate": "Donate!", - "DonateLibraryMaintainer": "Donate to Library Maintainer", - "DonateTooltip": "This is how I convince my wife to let me spend my spare time developing Ombi ;)", - "UpdateAvailableTooltip": "Update Available!", - "Settings": "Settings", - "Welcome": "Welcome {{username}}", - "UpdateDetails": "Update Details", - "Logout": "Logout", - "OpenMobileApp": "Open Mobile App", - "RecentlyAdded": "Recently Added", - "ChangeTheme":"Change Theme", - "Calendar":"Calendar", - "UserPreferences": "Preferences" - }, - "Search": { - "Title": "Search", - "Paragraph": "Want to watch something that is not currently available? No problem, just search for it below and request it!", - "MoviesTab": "Movies", - "TvTab": "TV Shows", - "MusicTab": "Music", - "Suggestions": "Suggestions", - "NoResults": "Sorry, we didn't find any results!", - "DigitalDate": "Digital Release: {{date}}", - "TheatricalRelease": "Theatrical Release: {{date}}", - "ViewOnPlex": "View On Plex", - "ViewOnEmby": "View On Emby", - "RequestAdded": "Request for {{title}} has been added successfully", - "Similar":"Similar", - "Refine":"Refine", - "SearchBarPlaceholder":"Type Here to Search", - "Movies": { - "PopularMovies": "Popular Movies", - "UpcomingMovies": "Upcoming Movies", - "TopRatedMovies": "Top Rated Movies", - "NowPlayingMovies": "Now Playing Movies", - "HomePage": "Home Page", - "Trailer": "Trailer" + "Common": { + "ContinueButton": "Continue", + "Available": "Available", + "PartiallyAvailable": "Partially Available", + "Monitored": "Monitored", + "NotAvailable": "Not Available", + "ProcessingRequest": "Processing Request", + "PendingApproval": "Pending Approval", + "RequestDenied": "Request Denied", + "NotRequested": "Not Requested", + "Requested": "Requested", + "Request": "Request", + "Denied": "Denied", + "Approve": "Approve", + "PartlyAvailable": "Partly Available", + "ViewDetails": "View Details", + "Errors": { + "Validation": "Please check your entered values" + }, + "Cancel": "Cancel", + "Submit": "Submit" }, - "TvShows": { - "Popular": "Popular", - "Trending": "Trending", - "MostWatched": "Most Watched", - "MostAnticipated": "Most Anticipated", - "Results": "Results", - "AirDate": "Air Date:", - "AllSeasons": "All Seasons", - "FirstSeason": "First Season", - "LatestSeason": "Latest Season", - "Select": "Select ...", - "SubmitRequest": "Submit Request", - "Season": "Season: {{seasonNumber}}", - "SelectAllInSeason": "Select All in Season {{seasonNumber}}" - } - }, - "Requests": { - "Title": "Requests", - "Paragraph": "Below you can see yours and all other requests, as well as their download and approval status.", - "MoviesTab": "Movies", - "TvTab": "TV Shows", - "MusicTab": "Music", - "RequestedBy": "Requested By:", - "Status": "Status:", - "RequestStatus": "Request status:", - "Denied": " Denied:", - "TheatricalRelease": "Theatrical Release: {{date}}", - "ReleaseDate": "Released: {{date}}", - "TheatricalReleaseSort": "Theatrical Release", - "DigitalRelease": "Digital Release: {{date}}", - "RequestDate": "Request Date:", - "QualityOverride": "Quality Override:", - "RootFolderOverride": "Root Folder Override:", - "ChangeRootFolder": "Root Folder", - "ChangeQualityProfile": "Quality Profile", - "MarkUnavailable": "Mark Unavailable", - "MarkAvailable": "Mark Available", - "Remove": "Remove", - "Deny": "Deny", - "DenyReason": "Deny Reason", - "Season": "Season:", - "GridTitle": "Title", - "AirDate": "AirDate", - "GridStatus": "Status", - "ReportIssue": "Report Issue", - "Filter": "Filter", - "Sort": "Sort", - "SeasonNumberHeading": "Season: {seasonNumber}", - "SortTitleAsc": "Title ▲", - "SortTitleDesc": "Title ▼", - "SortRequestDateAsc": "Request Date ▲", - "SortRequestDateDesc": "Request Date ▼", - "SortStatusAsc": "Status ▲", - "SortStatusDesc": "Status ▼", - "Remaining": { - "Quota": "{{remaining}}/{{total}} requests remaining", - "NextDays": "Another request will be added in {{time}} days", - "NextHours": "Another request will be added in {{time}} hours", - "NextMinutes": "Another request will be added in {{time}} minutes", - "NextMinute": "Another request will be added in {{time}} minute" - } - }, - "Issues": { - "Title": "Issues", - "PendingTitle": "Pending Issues", - "InProgressTitle": "In Progress Issues", - "ResolvedTitle": "Resolved Issues", - "ColumnTitle": "Title", - "Category": "Category", - "Status": "Status", - "Details": "Details", - "Description": "Description", - "NoComments": "No Comments!", - "MarkInProgress": "Mark In Progress", - "MarkResolved": "Mark Resolved", - "SendMessageButton": "Send", - "Subject": "Subject", - "Comments": "Comments", - "WriteMessagePlaceholder": "Write your message here...", - "ReportedBy": "Reported By", - "IssueDialog": { - "Title":"Report an issue", - "DescriptionPlaceholder":"Please describe the issue", - "TitlePlaceholder":"Short title of your issue", - "SelectCategory": "Select Category", - "IssueCreated":"Issue has been created" - } - }, - "Filter": { - "ClearFilter": "Clear Filter", - "FilterHeaderAvailability": "Availability", - "FilterHeaderRequestStatus": "Status", - "Approved": "Approved", - "PendingApproval": "Pending Approval" - }, - "UserManagment": { - "TvRemaining": "TV: {{remaining}}/{{total}} remaining", - "MovieRemaining": "Movies: {{remaining}}/{{total}} remaining", - "MusicRemaining": "Music: {{remaining}}/{{total}} remaining", - "TvDue": "TV: {{date}}", - "MovieDue": "Movie: {{date}}", - "MusicDue": "Music: {{date}}" - }, - "Votes": { - "CompletedVotesTab": "Voted", - "VotesTab": "Votes Needed" - }, - "MediaDetails": { - "Denied": "Denied", - "RecommendationsTitle": "Recommendations", - "SimilarTitle": "Similar", - "VideosTitle": "Videos", - "AlbumsTitle":"Albums", - "RequestAllAlbums":"Request All Albums", - "ClearSelection":"Clear Selection", - "RequestSelectedAlbums":"Request Selected Albums", - "Casts": { - "CastTitle": "Cast", - "Character": "Character", - "Actor": "Actor" + "PasswordReset": { + "EmailAddressPlaceholder": "Email Address", + "ResetPasswordButton": "Reset Password" }, - "EpisodeSelector":{ - "AllSeasonsTooltip":"This will request every season for this show", - "FirstSeasonTooltip":"This will only request the First Season for this show", - "LatestSeasonTooltip":"This will only request the Latest Season for this show" - } - }, - "Discovery": { - "PopularTab": "Popular", - "TrendingTab": "Trending", - "UpcomingTab": "Upcoming", - "CardDetails": { - "Availability": "Availability", - "Studio": "Studio", - "Network": "Network", - "UnknownNetwork": "Unknown", - "RequestStatus": "Request Status", - "Director": "Director", - "InCinemas": "In Cinemas", - "FirstAired": "First Aired", - "Writer": "Writer", - "ExecProducer": "Exec Producer" + "LandingPage": { + "OnlineHeading": "Currently Online", + "OnlineParagraph": "The media server is currently online", + "PartiallyOnlineHeading": "Partially Online", + "PartiallyOnlineParagraph": "The media server is partially online.", + "MultipleServersUnavailable": "There are {{serversUnavailable}} servers offline out of {{totalServers}}.", + "SingleServerUnavailable": "There is {{serversUnavailable}} server offline out of {{totalServers}}.", + "OfflineHeading": "Currently Offline", + "OfflineParagraph": "The media server is currently offline.", + "CheckPageForUpdates": "Check this page for continuous site updates." + }, + "NavigationBar": { + "Discover": "Discover", + "Search": "Search", + "Requests": "Requests", + "UserManagement": "User Management", + "Issues": "Issues", + "Vote": "Vote", + "Donate": "Donate!", + "DonateLibraryMaintainer": "Donate to Library Maintainer", + "DonateTooltip": "This is how I convince my wife to let me spend my spare time developing Ombi ;)", + "UpdateAvailableTooltip": "Update Available!", + "Settings": "Settings", + "Welcome": "Welcome {{username}}", + "UpdateDetails": "Update Details", + "Logout": "Logout", + "OpenMobileApp": "Open Mobile App", + "RecentlyAdded": "Recently Added", + "ChangeTheme": "Change Theme", + "Calendar": "Calendar", + "UserPreferences": "Preferences" + }, + "Search": { + "Title": "Search", + "Paragraph": "Want to watch something that is not currently available? No problem, just search for it below and request it!", + "MoviesTab": "Movies", + "TvTab": "TV Shows", + "MusicTab": "Music", + "Suggestions": "Suggestions", + "NoResults": "Sorry, we didn't find any results!", + "DigitalDate": "Digital Release: {{date}}", + "TheatricalRelease": "Theatrical Release: {{date}}", + "ViewOnPlex": "View On Plex", + "ViewOnEmby": "View On Emby", + "RequestAdded": "Request for {{title}} has been added successfully", + "Similar": "Similar", + "Refine": "Refine", + "SearchBarPlaceholder": "Type Here to Search", + "Movies": { + "PopularMovies": "Popular Movies", + "UpcomingMovies": "Upcoming Movies", + "TopRatedMovies": "Top Rated Movies", + "NowPlayingMovies": "Now Playing Movies", + "HomePage": "Home Page", + "Trailer": "Trailer" + }, + "TvShows": { + "Popular": "Popular", + "Trending": "Trending", + "MostWatched": "Most Watched", + "MostAnticipated": "Most Anticipated", + "Results": "Results", + "AirDate": "Air Date:", + "AllSeasons": "All Seasons", + "FirstSeason": "First Season", + "LatestSeason": "Latest Season", + "Select": "Select ...", + "SubmitRequest": "Submit Request", + "Season": "Season: {{seasonNumber}}", + "SelectAllInSeason": "Select All in Season {{seasonNumber}}" + } + }, + "Requests": { + "Title": "Requests", + "Paragraph": "Below you can see yours and all other requests, as well as their download and approval status.", + "MoviesTab": "Movies", + "TvTab": "TV Shows", + "MusicTab": "Music", + "RequestedBy": "Requested By:", + "Status": "Status:", + "RequestStatus": "Request status:", + "Denied": " Denied:", + "TheatricalRelease": "Theatrical Release: {{date}}", + "ReleaseDate": "Released: {{date}}", + "TheatricalReleaseSort": "Theatrical Release", + "DigitalRelease": "Digital Release: {{date}}", + "RequestDate": "Request Date:", + "QualityOverride": "Quality Override:", + "RootFolderOverride": "Root Folder Override:", + "ChangeRootFolder": "Root Folder", + "ChangeQualityProfile": "Quality Profile", + "MarkUnavailable": "Mark Unavailable", + "MarkAvailable": "Mark Available", + "Remove": "Remove", + "Deny": "Deny", + "DenyReason": "Deny Reason", + "Season": "Season:", + "GridTitle": "Title", + "AirDate": "AirDate", + "GridStatus": "Status", + "ReportIssue": "Report Issue", + "Filter": "Filter", + "Sort": "Sort", + "SeasonNumberHeading": "Season: {seasonNumber}", + "SortTitleAsc": "Title ▲", + "SortTitleDesc": "Title ▼", + "SortRequestDateAsc": "Request Date ▲", + "SortRequestDateDesc": "Request Date ▼", + "SortStatusAsc": "Status ▲", + "SortStatusDesc": "Status ▼", + "Remaining": { + "Quota": "{{remaining}}/{{total}} requests remaining", + "NextDays": "Another request will be added in {{time}} days", + "NextHours": "Another request will be added in {{time}} hours", + "NextMinutes": "Another request will be added in {{time}} minutes", + "NextMinute": "Another request will be added in {{time}} minute" + } + }, + "Issues": { + "Title": "Issues", + "PendingTitle": "Pending Issues", + "InProgressTitle": "In Progress Issues", + "ResolvedTitle": "Resolved Issues", + "ColumnTitle": "Title", + "Category": "Category", + "Status": "Status", + "Details": "Details", + "Description": "Description", + "NoComments": "No Comments!", + "MarkInProgress": "Mark In Progress", + "MarkResolved": "Mark Resolved", + "SendMessageButton": "Send", + "Subject": "Subject", + "Comments": "Comments", + "WriteMessagePlaceholder": "Write your message here...", + "ReportedBy": "Reported By", + "IssueDialog": { + "Title": "Report an issue", + "DescriptionPlaceholder": "Please describe the issue", + "TitlePlaceholder": "Short title of your issue", + "SelectCategory": "Select Category", + "IssueCreated": "Issue has been created" + } + }, + "Filter": { + "ClearFilter": "Clear Filter", + "FilterHeaderAvailability": "Availability", + "FilterHeaderRequestStatus": "Status", + "Approved": "Approved", + "PendingApproval": "Pending Approval" + }, + "UserManagment": { + "TvRemaining": "TV: {{remaining}}/{{total}} remaining", + "MovieRemaining": "Movies: {{remaining}}/{{total}} remaining", + "MusicRemaining": "Music: {{remaining}}/{{total}} remaining", + "TvDue": "TV: {{date}}", + "MovieDue": "Movie: {{date}}", + "MusicDue": "Music: {{date}}" + }, + "Votes": { + "CompletedVotesTab": "Voted", + "VotesTab": "Votes Needed" + }, + "MediaDetails": { + "Denied": "Denied", + "RecommendationsTitle": "Recommendations", + "SimilarTitle": "Similar", + "VideosTitle": "Videos", + "AlbumsTitle": "Albums", + "RequestAllAlbums": "Request All Albums", + "ClearSelection": "Clear Selection", + "RequestSelectedAlbums": "Request Selected Albums", + "Casts": { + "CastTitle": "Cast", + "Character": "Character", + "Actor": "Actor" + }, + "EpisodeSelector": { + "AllSeasonsTooltip": "This will request every season for this show", + "FirstSeasonTooltip": "This will only request the First Season for this show", + "LatestSeasonTooltip": "This will only request the Latest Season for this show" + } + }, + "Discovery": { + "PopularTab": "Popular", + "TrendingTab": "Trending", + "UpcomingTab": "Upcoming", + "Movies": "Movies", + "Combined": "Combined", + "Tv": "Tv", + "CardDetails": { + "Availability": "Availability", + "Studio": "Studio", + "Network": "Network", + "UnknownNetwork": "Unknown", + "RequestStatus": "Request Status", + "Director": "Director", + "InCinemas": "In Cinemas", + "FirstAired": "First Aired", + "Writer": "Writer", + "ExecProducer": "Exec Producer" + } + }, + "UserPreferences": { + "Welcome": "Welcome {{username}}!", + "OmbiLanguage": "Language", + "DarkMode": "Dark Mode" } - }, - "UserPreferences": { - "Welcome":"Welcome {{username}}!", - "OmbiLanguage":"Language", - "DarkMode":"Dark Mode" - } -} +} \ No newline at end of file