diff --git a/src/Ombi.Core/Engine/V2/TvSearchEngineV2.cs b/src/Ombi.Core/Engine/V2/TvSearchEngineV2.cs index 31fd458c5..4dd20926b 100644 --- a/src/Ombi.Core/Engine/V2/TvSearchEngineV2.cs +++ b/src/Ombi.Core/Engine/V2/TvSearchEngineV2.cs @@ -131,6 +131,7 @@ namespace Ombi.Core.Engine.V2 item.Available = oldModel.Available; item.Approved = oldModel.Approved; item.SeasonRequests = oldModel.SeasonRequests; + item.RequestId = oldModel.RequestId; return await GetExtraInfo(showInfoTask, item); } diff --git a/src/Ombi.Core/Rule/Rules/Search/ExistingRule.cs b/src/Ombi.Core/Rule/Rules/Search/ExistingRule.cs index 2d4482ba9..f2358a5f6 100644 --- a/src/Ombi.Core/Rule/Rules/Search/ExistingRule.cs +++ b/src/Ombi.Core/Rule/Rules/Search/ExistingRule.cs @@ -42,22 +42,11 @@ namespace Ombi.Core.Rule.Rules.Search } if (obj.Type == RequestType.TvShow) { - //var tvRequests = Tv.GetRequest(obj.Id); - //if (tvRequests != null) // Do we already have a request for this? - //{ - - // obj.Requested = true; - // obj.Approved = tvRequests.ChildRequests.Any(x => x.Approved); - // obj.Available = tvRequests.ChildRequests.Any(x => x.Available); - - // return Task.FromResult(Success()); - //} - var request = (SearchTvShowViewModel)obj; var tvRequests = Tv.GetRequest(obj.Id); if (tvRequests != null) // Do we already have a request for this? { - + request.RequestId = tvRequests.Id; request.Requested = true; request.Approved = tvRequests.ChildRequests.Any(x => x.Approved); diff --git a/src/Ombi/ClientApp/src/app/discover/card/discover-card-details.component.ts b/src/Ombi/ClientApp/src/app/discover/card/discover-card-details.component.ts index 2c0776804..31fd2a8d0 100644 --- a/src/Ombi/ClientApp/src/app/discover/card/discover-card-details.component.ts +++ b/src/Ombi/ClientApp/src/app/discover/card/discover-card-details.component.ts @@ -78,7 +78,7 @@ export class DiscoverCardDetailsComponent implements OnInit { } } else if (this.data.type === RequestType.tvShow) { - this.dialog.open(EpisodeRequestComponent, { width: "700px", data: this.tv }) + this.dialog.open(EpisodeRequestComponent, { width: "700px", data: this.tv, panelClass: 'modal-panel' }) } this.loading = false; diff --git a/src/Ombi/ClientApp/src/app/discover/card/discover-card.component.ts b/src/Ombi/ClientApp/src/app/discover/card/discover-card.component.ts index 4c958e77e..082b3b80e 100644 --- a/src/Ombi/ClientApp/src/app/discover/card/discover-card.component.ts +++ b/src/Ombi/ClientApp/src/app/discover/card/discover-card.component.ts @@ -27,7 +27,7 @@ export class DiscoverCardComponent implements OnInit { } public openDetails(details: IDiscoverCardResult) { - const ref = this.dialog.open(DiscoverCardDetailsComponent, { width:"700px", data: details }) + const ref = this.dialog.open(DiscoverCardDetailsComponent, { width:"700px", data: details, panelClass: 'modal-panel' }) ref.afterClosed().subscribe(result => { console.log('The dialog was closed'); diff --git a/src/Ombi/ClientApp/src/app/interfaces/ISearchTvResultV2.ts b/src/Ombi/ClientApp/src/app/interfaces/ISearchTvResultV2.ts index 7cba0d6ec..c34fb6c85 100644 --- a/src/Ombi/ClientApp/src/app/interfaces/ISearchTvResultV2.ts +++ b/src/Ombi/ClientApp/src/app/interfaces/ISearchTvResultV2.ts @@ -41,6 +41,7 @@ export interface ISearchTvResultV2 { images: IImagesV2; cast: ICast[]; crew: ICrew[]; + requestId: number; } diff --git a/src/Ombi/ClientApp/src/app/media-details/components/index.ts b/src/Ombi/ClientApp/src/app/media-details/components/index.ts index 99d46d339..bb93feb82 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/index.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/index.ts @@ -2,12 +2,13 @@ import { YoutubeTrailerComponent } from "./shared/youtube-trailer.component"; import { TvDetailsComponent } from "./tv/tv-details.component"; import { MovieInformationPanelComponent } from "./movie/panels/movie-information-panel.component"; -import { TvInformationPanelComponent } from "./tv/panels/tv-information-panel.component"; +import { TvInformationPanelComponent } from "./tv/panels/tv-information-panel/tv-information-panel.component"; import { TopBannerComponent } from "./shared/top-banner/top-banner.component"; import { SocialIconsComponent } from "./shared/social-icons/social-icons.component"; import { MediaPosterComponent } from "./shared/media-poster/media-poster.component"; import { CastCarouselComponent } from "./shared/cast-carousel/cast-carousel.component"; import { DenyDialogComponent } from "./shared/deny-dialog/deny-dialog.component"; +import { TvRequestsPanelComponent } from "./tv/panels/tv-requests/tv-requests-panel.component"; export const components: any[] = [ MovieDetailsComponent, @@ -20,6 +21,7 @@ export const components: any[] = [ MediaPosterComponent, CastCarouselComponent, DenyDialogComponent, + TvRequestsPanelComponent ]; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel.component.html b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel/tv-information-panel.component.html similarity index 100% rename from src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel.component.html rename to src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel/tv-information-panel.component.html diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel/tv-information-panel.component.ts similarity index 82% rename from src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel.component.ts rename to src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel/tv-information-panel.component.ts index 6f1b3773f..0e64c566a 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-information-panel/tv-information-panel.component.ts @@ -1,9 +1,9 @@ import { Component, ViewEncapsulation, Input, OnInit } from "@angular/core"; -import { ISearchTvResultV2 } from "../../../../interfaces/ISearchTvResultV2"; +import { ISearchTvResultV2 } from "../../../../../interfaces/ISearchTvResultV2"; @Component({ templateUrl: "./tv-information-panel.component.html", - styleUrls: ["../../../media-details.component.scss"], + styleUrls: ["../../../../media-details.component.scss"], selector: "tv-information-panel", encapsulation: ViewEncapsulation.None }) diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.html b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.html new file mode 100644 index 000000000..c7631725c --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.html @@ -0,0 +1,78 @@ + + + + + +
{{'Common.ProcessingRequest' | translate}}
+
+ {{'Common.PendingApproval' | translate}} +
+
+ {{'Common.NotRequested' | translate}} +
+
{{'Common.Available' | translate}} +
+
+ + Requested By '{{request.requestedUser.userAlias}}' on + {{request.requestedDate | amLocal | amDateFormat: 'LL' }} + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ 'Requests.Number' | translate }} {{element.episodeNumber}} {{ 'Requests.GridTitle' | translate }} {{element.title}} {{ 'Requests.AirDate' | translate }} {{element.airDate | amLocal | amDateFormat: 'L' }} {{ 'Requests.GridStatus' | translate }} + + + + + + +
+
+
+
+
+ +
+ + + + + + + +
+ +
\ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.scss b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.ts new file mode 100644 index 000000000..784c2d50d --- /dev/null +++ b/src/Ombi/ClientApp/src/app/media-details/components/tv/panels/tv-requests/tv-requests-panel.component.ts @@ -0,0 +1,16 @@ +import { Component, ViewEncapsulation, Input, OnInit } from "@angular/core"; +import { IChildRequests } from "../../../../../interfaces"; + +@Component({ + templateUrl: "./tv-requests-panel.component.html", + styleUrls: ["./tv-requests-panel.component.scss"], + selector: "tv-requests-panel" +}) +export class TvRequestsPanelComponent implements OnInit { + @Input() public tvRequest: IChildRequests[]; + + public displayedColumns: string[] = ['number', 'title', 'airDate', 'status']; + public ngOnInit(): void { + // + } +} 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 26292fa79..9439ac763 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 @@ -13,19 +13,21 @@
+ [imdbId]="tv.imdbId" [available]="tv.available" [plexUrl]="tv.plexUrl" [embyUrl]="tv.embyUrl"> +
- -
@@ -56,6 +58,30 @@ + + + + +
+
+ + + +
+ + +
+ + + + + Requests + + + + + +
@@ -63,84 +89,7 @@
-
- -
- -
-
-
-
- - -
@@ -150,4 +99,4 @@ - + \ No newline at end of file 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 4f56ee4b2..4a5c87365 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 @@ -1,11 +1,12 @@ import { Component, ViewEncapsulation } from "@angular/core"; -import { ImageService, SearchV2Service, MessageService } from "../../../services"; +import { ImageService, SearchV2Service, MessageService, RequestService } from "../../../services"; import { ActivatedRoute } from "@angular/router"; import { DomSanitizer } from "@angular/platform-browser"; import { ISearchTvResultV2 } from "../../../interfaces/ISearchTvResultV2"; import { MatDialog } from "@angular/material"; import { YoutubeTrailerComponent } from "../shared/youtube-trailer.component"; import { EpisodeRequestComponent } from "../../../shared/episode-request/episode-request.component"; +import { IChildRequests } from "../../../interfaces"; @Component({ templateUrl: "./tv-details.component.html", @@ -14,13 +15,14 @@ import { EpisodeRequestComponent } from "../../../shared/episode-request/episode }) export class TvDetailsComponent { public tv: ISearchTvResultV2; + public tvRequest: IChildRequests[]; public fromSearch: boolean; private tvdbId: number; constructor(private searchService: SearchV2Service, private route: ActivatedRoute, private sanitizer: DomSanitizer, private imageService: ImageService, - public dialog: MatDialog, public messageService: MessageService) { + public dialog: MatDialog, public messageService: MessageService, private requestService: RequestService) { this.route.params.subscribe((params: any) => { this.tvdbId = params.tvdbId; this.fromSearch = params.search; @@ -30,19 +32,23 @@ export class TvDetailsComponent { } public async load() { - if(this.fromSearch) { + if (this.fromSearch) { this.tv = await this.searchService.getTvInfoWithMovieDbId(this.tvdbId); this.tvdbId = this.tv.id; } else { this.tv = await this.searchService.getTvInfo(this.tvdbId); } - const tvBanner = await this.imageService.getTvBanner(this.tvdbId).toPromise(); + if(this.tv.requestId) { + this.tvRequest = await this.requestService.getChildRequests(this.tv.requestId).toPromise(); + } + + const tvBanner = await this.imageService.getTvBanner(this.tvdbId).toPromise(); this.tv.background = this.sanitizer.bypassSecurityTrustStyle("url(" + tvBanner + ")"); } public async request() { - this.dialog.open(EpisodeRequestComponent, { width: "800px", data: this.tv }) + this.dialog.open(EpisodeRequestComponent, { width: "800px", data: this.tv, panelClass: 'modal-panel' }) } public openDialog() { diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.html b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.html index 639372201..bb9720294 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.html +++ b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.html @@ -52,7 +52,7 @@ - + diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.scss b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.scss index eab4058e6..c875fa54c 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.scss +++ b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.scss @@ -2,8 +2,3 @@ margin: auto; width: 95%; } - -.table { - width: 100%; - height:100%; -} diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.html b/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.html index aa9a1fcf4..f13a0feba 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.html +++ b/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.html @@ -57,7 +57,7 @@ - + diff --git a/src/Ombi/ClientApp/src/app/shared/shared.module.ts b/src/Ombi/ClientApp/src/app/shared/shared.module.ts index 5998ff4fb..11d65d94a 100644 --- a/src/Ombi/ClientApp/src/app/shared/shared.module.ts +++ b/src/Ombi/ClientApp/src/app/shared/shared.module.ts @@ -10,7 +10,7 @@ import { IssuesReportComponent } from "./issues-report.component"; import { InputSwitchModule, SidebarModule } from "primeng/primeng"; import { - MatButtonModule, MatNativeDateModule, MatIconModule, MatSidenavModule, MatListModule, MatToolbarModule, MatTooltipModule, MatSelectModule, MatTableModule, MatPaginatorModule, MatSortModule} from '@angular/material'; + MatButtonModule, MatNativeDateModule, MatIconModule, MatSidenavModule, MatListModule, MatToolbarModule, MatTooltipModule, MatSelectModule, MatTableModule, MatPaginatorModule, MatSortModule, MatTreeModule} from '@angular/material'; import { MatCardModule, MatInputModule, MatTabsModule, MatAutocompleteModule, MatCheckboxModule, MatExpansionModule, MatDialogModule, MatProgressSpinnerModule, MatChipsModule } from "@angular/material"; import { EpisodeRequestComponent } from "./episode-request/episode-request.component"; @@ -47,6 +47,7 @@ import { EpisodeRequestComponent } from "./episode-request/episode-request.compo MatSelectModule, MatPaginatorModule, MatSortModule, + MatTreeModule, ], entryComponents: [ EpisodeRequestComponent @@ -62,6 +63,7 @@ import { EpisodeRequestComponent } from "./episode-request/episode-request.compo EpisodeRequestComponent, TruncateModule, InputSwitchModule, + MatTreeModule, MomentModule,MatCardModule, MatInputModule, MatTabsModule, diff --git a/src/Ombi/ClientApp/src/styles/shared.scss b/src/Ombi/ClientApp/src/styles/shared.scss index 14e94f4d0..171b833a2 100644 --- a/src/Ombi/ClientApp/src/styles/shared.scss +++ b/src/Ombi/ClientApp/src/styles/shared.scss @@ -1,54 +1,64 @@ @media (max-width: 978px) { - .top-spacing { - padding-top: 10%; - } + .top-spacing { + padding-top: 10%; + } + .modal-panel { + max-height: 100vh !important; + max-width: 100vw !important; + height: 100%; + } } @media (min-width: 979px) { - .top-spacing { - padding-top: 4%; - } + .top-spacing { + padding-top: 4%; + } } -html, body{ - min-height: 100vh; - overflow: auto; +html, +body { + min-height: 100vh; + overflow: auto; } .spinner-container { - position: relative; - margin-left: 50%; + position: relative; + margin-left: 50%; } .bottom-page-gap { - height: 50px; + height: 50px; } - /* Scrollbar */ + ::-webkit-scrollbar { - width: 7px; - background: rgba(0, 0, 0, 0); + width: 7px; + background: rgba(0, 0, 0, 0); } ::-webkit-scrollbar-track { - background: rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, 0); } ::-webkit-scrollbar-thumb { - border-radius: 3px; - background: #41927b; + border-radius: 3px; + background: #41927b; } .sidenav ::-webkit-scrollbar-track { - display: none; + display: none; } .grow { - transition: all .2s ease-in-out; + transition: all .2s ease-in-out; } .grow:hover { - transform: scale(1.1); - color: black; + transform: scale(1.1); + color: black; } + +table { + width: 100%; +} \ No newline at end of file