diff --git a/src/Ombi/ClientApp/app/requests/remainingrequests.component.ts b/src/Ombi/ClientApp/app/requests/remainingrequests.component.ts index 39f6ca200..9e64b0013 100644 --- a/src/Ombi/ClientApp/app/requests/remainingrequests.component.ts +++ b/src/Ombi/ClientApp/app/requests/remainingrequests.component.ts @@ -22,6 +22,10 @@ export class RemainingRequestsComponent implements OnInit { var self = this; this.update(); + this.requestService.onRequested().subscribe(m => { + this.update(); + }); + setInterval(function(){ self.calculateTime(); }, 10000) diff --git a/src/Ombi/ClientApp/app/search/moviesearch.component.ts b/src/Ombi/ClientApp/app/search/moviesearch.component.ts index a6a009962..965837bae 100644 --- a/src/Ombi/ClientApp/app/search/moviesearch.component.ts +++ b/src/Ombi/ClientApp/app/search/moviesearch.component.ts @@ -1,5 +1,5 @@ import { PlatformLocation } from "@angular/common"; -import { Component, Input, OnInit, ViewChild } from "@angular/core"; +import { Component, Input, OnInit } from "@angular/core"; import { DomSanitizer } from "@angular/platform-browser"; import { TranslateService } from "@ngx-translate/core"; import { Subject } from "rxjs"; @@ -8,7 +8,6 @@ import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { AuthService } from "../auth/auth.service"; import { IIssueCategory, IRequestEngineResult, ISearchMovieResult } from "../interfaces"; import { NotificationService, RequestService, SearchService } from "../services"; -import { RemainingRequestsComponent } from "../requests/remainingrequests.component"; @Component({ selector: "movie-search", @@ -25,7 +24,6 @@ export class MovieSearchComponent implements OnInit { @Input() public issueCategories: IIssueCategory[]; @Input() public issuesEnabled: boolean; - @ViewChild('remainingFilms') public remainingRequestsComponent: RemainingRequestsComponent; public issuesBarVisible = false; public issueRequestTitle: string; public issueRequestId: number; @@ -91,7 +89,6 @@ export class MovieSearchComponent implements OnInit { this.requestService.requestMovie({ theMovieDbId: searchResult.id }) .subscribe(x => { this.result = x; - this.remainingRequestsComponent.update(); if (this.result.result) { this.translate.get("Search.RequestAdded", { title: searchResult.title }).subscribe(x => { this.notificationService.success(x); diff --git a/src/Ombi/ClientApp/app/search/seriesinformation.component.ts b/src/Ombi/ClientApp/app/search/seriesinformation.component.ts index 27cdaf684..5c0088268 100644 --- a/src/Ombi/ClientApp/app/search/seriesinformation.component.ts +++ b/src/Ombi/ClientApp/app/search/seriesinformation.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit, ViewChild} from "@angular/core"; +import { Component, Input, OnInit } from "@angular/core"; import { NotificationService } from "../services"; import { RequestService } from "../services"; @@ -7,7 +7,6 @@ import { SearchService } from "../services"; import { INewSeasonRequests, IRequestEngineResult, ISeasonsViewModel, ITvRequestViewModel } from "../interfaces"; import { IEpisodesRequests } from "../interfaces"; import { ISearchTvResult } from "../interfaces"; -import { RemainingRequestsComponent } from "../requests/remainingrequests.component"; @Component({ selector: "seriesinformation", diff --git a/src/Ombi/ClientApp/app/search/tvsearch.component.ts b/src/Ombi/ClientApp/app/search/tvsearch.component.ts index b18b1343a..a41f34586 100644 --- a/src/Ombi/ClientApp/app/search/tvsearch.component.ts +++ b/src/Ombi/ClientApp/app/search/tvsearch.component.ts @@ -1,5 +1,5 @@ import { PlatformLocation } from "@angular/common"; -import { Component, Input, OnInit, ViewChild } from "@angular/core"; +import { Component, Input, OnInit } from "@angular/core"; import { DomSanitizer } from "@angular/platform-browser"; import { Subject } from "rxjs"; import { debounceTime, distinctUntilChanged } from "rxjs/operators"; @@ -7,7 +7,6 @@ import { debounceTime, distinctUntilChanged } from "rxjs/operators"; import { AuthService } from "../auth/auth.service"; import { IIssueCategory, IRequestEngineResult, ISearchTvResult, ISeasonsViewModel, ITvRequestViewModel } from "../interfaces"; import { ImageService, NotificationService, RequestService, SearchService } from "../services"; -import { RemainingRequestsComponent } from "../requests/remainingrequests.component"; @Component({ selector: "tv-search", @@ -25,7 +24,6 @@ export class TvSearchComponent implements OnInit { @Input() public issueCategories: IIssueCategory[]; @Input() public issuesEnabled: boolean; - @ViewChild('remainingTvShows') public remainingRequestsComponent: RemainingRequestsComponent; public issuesBarVisible = false; public issueRequestTitle: string; public issueRequestId: number; @@ -164,7 +162,6 @@ export class TvSearchComponent implements OnInit { this.requestService.requestTv(viewModel) .subscribe(x => { this.result = x; - this.remainingRequestsComponent.update(); if (this.result.result) { this.notificationService.success( `Request for ${searchResult.title} has been added successfully`); diff --git a/src/Ombi/ClientApp/app/services/request.service.ts b/src/Ombi/ClientApp/app/services/request.service.ts index 4434b7839..7940c43d6 100644 --- a/src/Ombi/ClientApp/app/services/request.service.ts +++ b/src/Ombi/ClientApp/app/services/request.service.ts @@ -2,7 +2,7 @@ import { PlatformLocation } from "@angular/common"; import { Injectable } from "@angular/core"; import { HttpClient } from "@angular/common/http"; -import { Observable } from "rxjs"; +import { Observable, ReplaySubject } from "rxjs"; import { TreeNode } from "primeng/primeng"; import { FilterType, IChildRequests, IFilter, IMovieRequestModel, IMovieRequests, IMovieUpdateModel, IRequestEngineResult, IRequestsViewModel, ITvRequests, ITvUpdateModel, OrderType } from "../interfaces"; @@ -12,10 +12,15 @@ import { IRemainingRequests } from "../interfaces/IRemainingRequests"; @Injectable() export class RequestService extends ServiceHelpers { + private requestEvents = new ReplaySubject(); constructor(http: HttpClient, public platformLocation: PlatformLocation) { super(http, "/api/v1/Request/", platformLocation); } + public onRequested(): Observable { + return this.requestEvents.asObservable(); + } + public getRemainingMovieRequests(): Observable { return this.http.get(`${this.url}movie/remaining`, {headers: this.headers}); } @@ -25,7 +30,14 @@ export class RequestService extends ServiceHelpers { } public requestMovie(movie: IMovieRequestModel): Observable { - return this.http.post(`${this.url}Movie/`, JSON.stringify(movie), {headers: this.headers}); + var observer = Observable.create(observer => { + this.http.post(`${this.url}Movie/`, JSON.stringify(movie), {headers: this.headers}).subscribe(m => { + observer.next(m); + this.requestEvents.next(m); + }); + }); + + return observer; } public getTotalMovies(): Observable { @@ -37,7 +49,14 @@ export class RequestService extends ServiceHelpers { } public requestTv(tv: ITvRequestViewModel): Observable { - return this.http.post(`${this.url}TV/`, JSON.stringify(tv), {headers: this.headers}); + var observer = Observable.create(observer => { + return this.http.post(`${this.url}TV/`, JSON.stringify(tv), { headers: this.headers }).subscribe(m => { + observer.next(m); + this.requestEvents.next(m); + }); + }); + + return observer; } public approveMovie(movie: IMovieUpdateModel): Observable {