diff --git a/src/Ombi.Helpers/GlobalMutex.cs b/src/Ombi.Helpers/GlobalMutex.cs
index ecf9cdf15..d7d3f7816 100644
--- a/src/Ombi.Helpers/GlobalMutex.cs
+++ b/src/Ombi.Helpers/GlobalMutex.cs
@@ -9,7 +9,7 @@ namespace Ombi.Helpers
{
const string mutexId = "Global\\OMBI";
- using (var mutex = new Mutex(false, mutexId, out __))
+ using (var mutex = new Mutex(false, mutexId, out var __))
{
var hasHandle = false;
try
diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html
index 8e107554f..26292fa79 100644
--- a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html
+++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.html
@@ -150,11 +150,4 @@
-
-
-
-
-
-
-
diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.ts
index 326594d98..aa5aad6ee 100644
--- a/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.ts
+++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/tv-details.component.ts
@@ -51,7 +51,7 @@ export class TvDetailsComponent {
}
public async request() {
- this.dialog.open(EpisodeRequestComponent, { width: "700px", data: this.tv })
+ this.dialog.open(EpisodeRequestComponent, { width: "800px", data: this.tv })
}
public openDialog() {
diff --git a/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.html b/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.html
index 4165fbdb0..11962184e 100644
--- a/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.html
+++ b/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.html
@@ -1,73 +1,83 @@
-
+
-
-
-
-
-
- Season {{season.seasonNumber}}
- Season {{season.seasonNumber}}
-
-
- Description
-
-
+
+
+
+
+
+
+
+ Season {{season.seasonNumber}}
+ Season {{season.seasonNumber}}
+
+
+ Description
+
+
+
+
+
+ {{ep.episodeNumber}}
+
+
+ {{ep.title}}
+
+
+ {{ep.airDate | amLocal | amDateFormat: 'L' }}
+
+
+ {{ep.airDateDisplay }}
+
+
+ Available
+ Processing
+ Request
+ Selected
+ Pending Approval
+
+ Not Requested
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
diff --git a/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts b/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts
index 8b03556f5..c4ecb45fd 100644
--- a/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts
+++ b/src/Ombi/ClientApp/src/app/shared/episode-request/episode-request.component.ts
@@ -29,8 +29,8 @@ export class EpisodeRequestComponent implements OnInit {
return ep.selected;
});
});
-
- if (!selected) {
+ debugger;
+ if (!selected && !this.series.requestAll && !this.series.firstSeason && !this.series.latestSeason) {
this.notificationService.send("You need to select some episodes!", "OK");
return;
}
@@ -41,15 +41,14 @@ export class EpisodeRequestComponent implements OnInit {
viewModel.seasons = [];
this.series.seasonRequests.forEach((season) => {
const seasonsViewModel =
{ seasonNumber: season.seasonNumber, episodes: [] };
- season.episodes.forEach(ep => {
- if (!this.series.latestSeason || !this.series.requestAll || !this.series.firstSeason) {
+ if (!this.series.latestSeason && !this.series.requestAll && !this.series.firstSeason) {
+ season.episodes.forEach(ep => {
if (ep.selected) {
ep.requested = true;
seasonsViewModel.episodes.push({ episodeNumber: ep.episodeNumber });
}
- }
- });
-
+ });
+ }
viewModel.seasons.push(seasonsViewModel);
});
@@ -81,11 +80,26 @@ export class EpisodeRequestComponent implements OnInit {
public seasonChanged(checkbox: MatCheckboxChange, season: INewSeasonRequests) {
season.episodes.forEach((ep) => {
- if (checkbox.checked) {
+ if (checkbox.checked && (!ep.available && !ep.requested && !ep.approved)) {
this.addRequest(ep)
} else {
this.removeRequest(ep);
}
});
}
+
+ public async requestAllSeasons() {
+ this.series.requestAll = true;
+ await this.submitRequests();
+ }
+
+ public async requestFirstSeason() {
+ this.series.firstSeason = true;
+ await this.submitRequests();
+ }
+
+ public async requestLatestSeason() {
+ this.series.latestSeason = true;
+ await this.submitRequests();
+ }
}
diff --git a/src/Ombi/ClientApp/src/app/shared/shared.module.ts b/src/Ombi/ClientApp/src/app/shared/shared.module.ts
index e488cedd2..e9ad2f4b1 100644
--- a/src/Ombi/ClientApp/src/app/shared/shared.module.ts
+++ b/src/Ombi/ClientApp/src/app/shared/shared.module.ts
@@ -43,6 +43,7 @@ import { EpisodeRequestComponent } from "./episode-request/episode-request.compo
TranslateModule,
MatExpansionModule,
MatDialogModule,
+ MatTooltipModule,
],
entryComponents: [
EpisodeRequestComponent
diff --git a/src/Ombi/wwwroot/translations/en.json b/src/Ombi/wwwroot/translations/en.json
index 025bc7a07..513c67336 100644
--- a/src/Ombi/wwwroot/translations/en.json
+++ b/src/Ombi/wwwroot/translations/en.json
@@ -17,14 +17,14 @@
"NotAvailable": "Not Available",
"ProcessingRequest": "Processing Request",
"PendingApproval": "Pending Approval",
- "RequestDenied":"Request Denied",
+ "RequestDenied": "Request Denied",
"NotRequested": "Not Requested",
"Requested": "Requested",
"Request": "Request",
- "Denied":"Denied",
- "Approve":"Approve",
+ "Denied": "Denied",
+ "Approve": "Approve",
"PartlyAvailable": "Partly Available",
- "ViewDetails": "View Details",
+ "ViewDetails": "View Details",
"Errors": {
"Validation": "Please check your entered values"
}
@@ -38,49 +38,45 @@
"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}}.",
+ "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",
+ "Discover": "Discover",
"Search": "Search",
"Requests": "Requests",
"UserManagement": "User Management",
- "Issues":"Issues",
- "Vote":"Vote",
+ "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 ;)",
+ "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"
+ "OpenMobileApp": "Open Mobile App",
+ "RecentlyAdded": "Recently Added"
},
"Search": {
"Title": "Search",
- "Paragraph":
- "Want to watch something that is not currently available? No problem, just search for it below and request it!",
+ "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",
+ "MusicTab": "Music",
"Suggestions": "Suggestions",
"NoResults": "Sorry, we didn't find any results!",
"DigitalDate": "Digital Release: {{date}}",
- "TheatricalRelease":"Theatrical 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",
+ "Similar": "Similar",
+ "Refine": "Refine",
"Movies": {
"PopularMovies": "Popular Movies",
"UpcomingMovies": "Upcoming Movies",
@@ -90,28 +86,27 @@
"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}}"
+ "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.",
+ "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",
+ "MusicTab": "Music",
"RequestedBy": "Requested By:",
"Status": "Status:",
"RequestStatus": "Request status:",
@@ -123,27 +118,27 @@
"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 ▼",
+ "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 ▼",
+ "SortStatusAsc": "Status ▲",
+ "SortStatusDesc": "Status ▼",
"Remaining": {
"Quota": "{{remaining}}/{{total}} requests remaining",
"NextDays": "Another request will be added in {{time}} days",
@@ -152,30 +147,30 @@
"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",
+ "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"
+ "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"
},
- "Filter":{
- "ClearFilter":"Clear Filter",
- "FilterHeaderAvailability":"Availability",
- "FilterHeaderRequestStatus":"Status",
- "Approved":"Approved",
+ "Filter": {
+ "ClearFilter": "Clear Filter",
+ "FilterHeaderAvailability": "Availability",
+ "FilterHeaderRequestStatus": "Status",
+ "Approved": "Approved",
"PendingApproval": "Pending Approval"
},
"UserManagment": {
@@ -192,30 +187,35 @@
},
"MediaDetails": {
"Denied": "Denied",
- "RecommendationsTitle":"Recommendations",
- "SimilarTitle":"Similar",
- "VideosTitle":"Videos",
+ "RecommendationsTitle": "Recommendations",
+ "SimilarTitle": "Similar",
+ "VideosTitle": "Videos",
"Casts": {
- "CastTitle":"Cast",
- "Character":"Character",
- "Actor":"Actor"
+ "CastTitle": "Cast",
+ "Character": "Character",
+ "Actor": "Actor"
},
- "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"
- }
+ "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"
}
}
}