diff --git a/build.cake b/build.cake
index d200eac98..dd2cfb626 100644
--- a/build.cake
+++ b/build.cake
@@ -1,10 +1,10 @@
#tool "nuget:?package=GitVersion.CommandLine"
#addin "Cake.Gulp"
-#addin "nuget:?package=Cake.Npm&version=0.13.0"
#addin "SharpZipLib"
#addin nuget:?package=Cake.Compression&version=0.1.4
#addin "Cake.Incubator"
+#addin "Cake.Yarn"
//////////////////////////////////////////////////////////////////////
// ARGUMENTS
@@ -122,36 +122,19 @@ Task("SetVersionInfo")
Task("NPM")
.Does(() => {
- var settings = new NpmInstallSettings {
- LogLevel = NpmLogLevel.Silent,
- WorkingDirectory = webProjDir,
- Production = true
- };
-
- NpmInstall(settings);
+ Yarn.FromPath(webProjDir).Install();
});
Task("Gulp Publish")
.IsDependentOn("NPM")
- .Does(() => {
-
- var runScriptSettings = new NpmRunScriptSettings {
- ScriptName="publish",
- WorkingDirectory = webProjDir,
- };
-
- NpmRunScript(runScriptSettings);
+ .Does(() => {
+ Yarn.FromPath(webProjDir).RunScript("publish");
});
Task("TSLint")
.Does(() =>
{
- var settings = new NpmRunScriptSettings {
- WorkingDirectory = webProjDir,
- ScriptName = "lint"
- };
-
- NpmRunScript(settings);
+ Yarn.FromPath(webProjDir).RunScript("lint");
});
Task("PrePublish")
diff --git a/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs b/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs
index 0633d641e..99ff5b6bd 100644
--- a/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs
+++ b/src/Ombi.Core.Tests/Rule/Search/EmbyAvailabilityRuleTests.cs
@@ -29,7 +29,10 @@ namespace Ombi.Core.Tests.Rule.Search
{
ProviderId = "123"
});
- var search = new SearchMovieViewModel();
+ var search = new SearchMovieViewModel()
+ {
+ TheMovieDbId = "123",
+ };
var result = await Rule.Execute(search);
Assert.True(result.Success);
diff --git a/src/Ombi/.gitignore b/src/Ombi/.gitignore
index b370cf723..49c402ee8 100644
--- a/src/Ombi/.gitignore
+++ b/src/Ombi/.gitignore
@@ -1,23 +1,10 @@
-/wwwroot/css/**
-/wwwroot/fonts/**
-/wwwroot/lib/**
-/wwwroot/maps/**
-/wwwroot/dist/**
-/wwwroot/*.js.map
-/wwwroot/*.js
-
-# dependencies
-/node_modules
-/bower_components
-
-# misc
+node_modules
+bin
+obj
+wwwroot/dist
+*.log
/.sass-cache
/connect.lock
/coverage/*
-/libpeerconnection.log
-npm-debug.log
-testem.log
-#/typings
-/systemjs.config.js*
/Logs/**
**.db
diff --git a/src/Ombi/.vscode/tasks.json b/src/Ombi/.vscode/tasks.json
index 0f5fbd905..e57a5dee7 100644
--- a/src/Ombi/.vscode/tasks.json
+++ b/src/Ombi/.vscode/tasks.json
@@ -4,7 +4,7 @@
"version": "2.0.0",
"tasks": [
{
- "taskName": "restore",
+ "label": "restore",
"command": "npm",
"type": "shell",
"args": [
@@ -14,7 +14,16 @@
"problemMatcher": []
},
{
- "taskName": "build",
+ "label": "clean",
+ "command": "dotnet",
+ "type": "shell",
+ "args": [
+ "clean"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "build",
"command": "dotnet",
"type": "shell",
"args": [
@@ -27,7 +36,7 @@
"problemMatcher": "$msCompile"
},
{
- "taskName": "lint",
+ "label": "lint",
"type": "shell",
"command": "npm",
"args": [
diff --git a/src/Ombi/ClientApp/app/animations/fadeinout.ts b/src/Ombi/ClientApp/app/animations/fadeinout.ts
index 8ecf15a15..d0d5692a2 100644
--- a/src/Ombi/ClientApp/app/animations/fadeinout.ts
+++ b/src/Ombi/ClientApp/app/animations/fadeinout.ts
@@ -1,7 +1,7 @@
import { animate, style, transition, trigger } from "@angular/animations";
-import { AnimationEntryMetadata } from "@angular/core";
+import { AnimationTriggerMetadata } from "@angular/animations";
-export const fadeInOutAnimation: AnimationEntryMetadata = trigger("fadeInOut", [
+export const fadeInOutAnimation: AnimationTriggerMetadata = trigger("fadeInOut", [
transition(":enter", [ // :enter is alias to 'void => *'
style({ opacity: 0 }),
animate(1000, style({ opacity: 1 })),
diff --git a/src/Ombi/ClientApp/app/app.module.ts b/src/Ombi/ClientApp/app/app.module.ts
index 257a07cd0..d6eb29b53 100644
--- a/src/Ombi/ClientApp/app/app.module.ts
+++ b/src/Ombi/ClientApp/app/app.module.ts
@@ -1,12 +1,12 @@
-import {CommonModule, PlatformLocation} from "@angular/common";
-import {HttpClient, HttpClientModule} from "@angular/common/http";
-import {NgModule} from "@angular/core";
-import {FormsModule, ReactiveFormsModule} from "@angular/forms";
-import {HttpModule} from "@angular/http";
-import {MatButtonModule, MatCardModule, MatInputModule, MatTabsModule} from "@angular/material";
-import {BrowserModule} from "@angular/platform-browser";
-import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
-import {RouterModule, Routes} from "@angular/router";
+import { CommonModule, PlatformLocation } from "@angular/common";
+import { HttpClient, HttpClientModule } from "@angular/common/http";
+import { NgModule } from "@angular/core";
+import { FormsModule, ReactiveFormsModule } from "@angular/forms";
+import { HttpModule } from "@angular/http";
+import { MatButtonModule, MatCardModule, MatInputModule, MatTabsModule } from "@angular/material";
+import { BrowserModule } from "@angular/platform-browser";
+import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
+import { RouterModule, Routes } from "@angular/router";
import { JwtModule } from "@auth0/angular-jwt";
@@ -15,7 +15,7 @@ import { TranslateLoader, TranslateModule } from "@ngx-translate/core";
import { TranslateHttpLoader } from "@ngx-translate/http-loader";
import { CookieService } from "ng2-cookies";
import { GrowlModule } from "primeng/components/growl/growl";
-import { ButtonModule, CaptchaModule, ConfirmationService, ConfirmDialogModule, DataTableModule,DialogModule, SharedModule, SidebarModule, TooltipModule } from "primeng/primeng";
+import { ButtonModule, CaptchaModule, ConfirmationService, ConfirmDialogModule, DataTableModule, DialogModule, SharedModule, SidebarModule, TooltipModule } from "primeng/primeng";
// Components
import { AppComponent } from "./app.component";
@@ -67,6 +67,14 @@ export function HttpLoaderFactory(http: HttpClient, platformLocation: PlatformLo
return new TranslateHttpLoader(http, "/translations/", `.json?v=${version}`);
}
+export function JwtTokenGetter() {
+ const token = localStorage.getItem("id_token");
+ if (!token) {
+ return "";
+ }
+ return token;
+}
+
@NgModule({
imports: [
RouterModule.forRoot(routes),
@@ -89,18 +97,12 @@ export function HttpLoaderFactory(http: HttpClient, platformLocation: PlatformLo
CaptchaModule,
TooltipModule,
ConfirmDialogModule,
- CommonModule,
+ CommonModule,
JwtModule.forRoot({
config: {
- tokenGetter: () => {
- const token = localStorage.getItem("id_token");
- if (!token) {
- return "";
- }
- return token;
- },
+ tokenGetter: JwtTokenGetter,
},
- }),
+ }),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
@@ -119,7 +121,7 @@ export function HttpLoaderFactory(http: HttpClient, platformLocation: PlatformLo
TokenResetPasswordComponent,
CookieComponent,
LoginOAuthComponent,
- ],
+ ],
providers: [
NotificationService,
AuthService,
diff --git a/src/Ombi/ClientApp/app/auth/auth.service.ts b/src/Ombi/ClientApp/app/auth/auth.service.ts
index 92b41ccd9..f22b4d4ad 100644
--- a/src/Ombi/ClientApp/app/auth/auth.service.ts
+++ b/src/Ombi/ClientApp/app/auth/auth.service.ts
@@ -1,8 +1,8 @@
-import { PlatformLocation } from "@angular/common";
+import { PlatformLocation } from "@angular/common";
import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { JwtHelperService } from "@auth0/angular-jwt";
-import { Observable } from "rxjs/Rx";
+import { Observable } from "rxjs";
import { ServiceHelpers } from "../services";
import { ILocalUser, IUserLogin } from "./IUserLogin";
diff --git a/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts
index 2d5ec2bd6..bd34c9851 100644
--- a/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts
+++ b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts
@@ -1,5 +1,5 @@
import { Component, OnInit } from "@angular/core";
-import { NguCarousel } from "@ngu/carousel";
+import { NguCarouselConfig } from "@ngu/carousel";
import { ImageService, RecentlyAddedService } from "../services";
import { IRecentlyAddedMovies, IRecentlyAddedTvShows } from "./../interfaces";
@@ -43,7 +43,7 @@ export class RecentlyAddedComponent implements OnInit {
public groupTv: boolean = false;
// https://github.com/sheikalthaf/ngu-carousel
- public carouselTile: NguCarousel;
+ public carouselTile: NguCarouselConfig;
constructor(private recentlyAddedService: RecentlyAddedService,
private imageService: ImageService) {}
diff --git a/src/Ombi/ClientApp/app/requests/movierequests.component.ts b/src/Ombi/ClientApp/app/requests/movierequests.component.ts
index 0848daf53..db7b400db 100644
--- a/src/Ombi/ClientApp/app/requests/movierequests.component.ts
+++ b/src/Ombi/ClientApp/app/requests/movierequests.component.ts
@@ -1,15 +1,12 @@
-import { PlatformLocation } from "@angular/common";
+import { PlatformLocation } from "@angular/common";
import { Component, Input, OnInit } from "@angular/core";
import { DomSanitizer } from "@angular/platform-browser";
-import "rxjs/add/operator/debounceTime";
-import "rxjs/add/operator/distinctUntilChanged";
-import "rxjs/add/operator/map";
-import { Subject } from "rxjs/Subject";
+import { Subject } from "rxjs";
+import { debounceTime, distinctUntilChanged } from "rxjs/operators";
import { AuthService } from "../auth/auth.service";
-import { NotificationService, RadarrService, RequestService } from "../services";
-
import { FilterType, IFilter, IIssueCategory, IMovieRequests, IPagenator, IRadarrProfile, IRadarrRootFolder, OrderType } from "../interfaces";
+import { NotificationService, RadarrService, RequestService } from "../services";
@Component({
selector: "movie-requests",
@@ -40,32 +37,33 @@ export class MovieRequestsComponent implements OnInit {
public orderType: OrderType = OrderType.RequestedDateDesc;
public OrderType = OrderType;
-
+
public totalMovies: number = 100;
private currentlyLoaded: number;
private amountToLoad: number;
- constructor(private requestService: RequestService,
- private auth: AuthService,
- private notificationService: NotificationService,
- private radarrService: RadarrService,
- private sanitizer: DomSanitizer,
- private readonly platformLocation: PlatformLocation) {
- this.searchChanged
- .debounceTime(600) // Wait Xms after the last event before emitting last event
- .distinctUntilChanged() // only emit if value is different from previous value
- .subscribe(x => {
- this.searchText = x as string;
- if (this.searchText === "") {
- this.resetSearch();
- return;
- }
- this.requestService.searchMovieRequests(this.searchText)
- .subscribe(m => {
- this.setOverrides(m);
- this.movieRequests = m;
- });
- });
+ constructor(
+ private requestService: RequestService,
+ private auth: AuthService,
+ private notificationService: NotificationService,
+ private radarrService: RadarrService,
+ private sanitizer: DomSanitizer,
+ private readonly platformLocation: PlatformLocation) {
+ this.searchChanged.pipe(
+ debounceTime(600), // Wait Xms after the last event before emitting last event
+ distinctUntilChanged(), // only emit if value is different from previous value
+ ).subscribe(x => {
+ this.searchText = x as string;
+ if (this.searchText === "") {
+ this.resetSearch();
+ return;
+ }
+ this.requestService.searchMovieRequests(this.searchText)
+ .subscribe(m => {
+ this.setOverrides(m);
+ this.movieRequests = m;
+ });
+ });
this.defaultPoster = "../../../images/default_movie_poster.png";
const base = this.platformLocation.getBaseHrefFromDOM();
if (base) {
@@ -75,7 +73,7 @@ export class MovieRequestsComponent implements OnInit {
public ngOnInit() {
this.amountToLoad = 10;
- this.currentlyLoaded = 10;
+ this.currentlyLoaded = 10;
this.filter = {
availabilityFilter: FilterType.None,
statusFilter: FilterType.None,
@@ -85,7 +83,7 @@ export class MovieRequestsComponent implements OnInit {
}
public paginate(event: IPagenator) {
- const skipAmount = event.first;
+ const skipAmount = event.first;
this.loadRequests(this.amountToLoad, skipAmount);
}
@@ -102,7 +100,7 @@ export class MovieRequestsComponent implements OnInit {
public changeAvailability(request: IMovieRequests, available: boolean) {
request.available = available;
- if(available) {
+ if (available) {
this.requestService.markMovieAvailable({ id: request.id }).subscribe(x => {
if (x.result) {
this.notificationService.success(
@@ -173,7 +171,7 @@ export class MovieRequestsComponent implements OnInit {
this.filterDisplay = false;
this.filter.availabilityFilter = FilterType.None;
this.filter.statusFilter = FilterType.None;
-
+
this.resetSearch();
}
@@ -199,11 +197,11 @@ export class MovieRequestsComponent implements OnInit {
el.className = "active";
this.orderType = value;
-
+
this.loadInit();
- }
-
- public subscribe(request: IMovieRequests) {
+ }
+
+ public subscribe(request: IMovieRequests) {
request.subscribed = true;
this.requestService.subscribeToMovie(request.id)
.subscribe(x => {
@@ -238,10 +236,10 @@ export class MovieRequestsComponent implements OnInit {
}
private loadRequests(amountToLoad: number, currentlyLoaded: number) {
- this.requestService.getMovieRequests(amountToLoad, currentlyLoaded, this.orderType, this.filter)
+ this.requestService.getMovieRequests(amountToLoad, currentlyLoaded, this.orderType, this.filter)
.subscribe(x => {
this.setOverrides(x.collection);
- if(!this.movieRequests) {
+ if (!this.movieRequests) {
this.movieRequests = [];
}
this.movieRequests = x.collection;
@@ -364,6 +362,6 @@ export class MovieRequestsComponent implements OnInit {
private setBackground(req: IMovieRequests): void {
req.backgroundPath = this.sanitizer.bypassSecurityTrustStyle
- ("url(" + "https://image.tmdb.org/t/p/w1280" + req.background + ")");
+ ("url(" + "https://image.tmdb.org/t/p/w1280" + req.background + ")");
}
}
diff --git a/src/Ombi/ClientApp/app/requests/tvrequests.component.html b/src/Ombi/ClientApp/app/requests/tvrequests.component.html
index cfe589e23..954bd6b42 100644
--- a/src/Ombi/ClientApp/app/requests/tvrequests.component.html
+++ b/src/Ombi/ClientApp/app/requests/tvrequests.component.html
@@ -17,111 +17,111 @@
[infiniteScrollDistance]="1"
[infiniteScrollThrottle]="100"
(scrolled)="loadMore()">-->
-
+
+
+ Results
+
+
+
+
+
+
+
-
-
- Results
-
-
-
-
-
-
-
+
-
+
-
+
+
+
+
+
+ Status:
+ {{node.data.status}}
-
-
-
-
- Status:
- {{node.data.status}}
-
-
-
Release Date: {{node.data.releaseDate | date}}
-
-
{{ 'Requests.QualityOverride' | translate }}
- {{node.data.qualityOverrideTitle}}
-
-
{{ 'Requests.RootFolderOverride' | translate }}
- {{node.data.rootPathOverrideTitle}}
-
+
Release Date: {{node.data.releaseDate | date}}
+
+
{{ 'Requests.QualityOverride' | translate }}
+ {{node.data.qualityOverrideTitle}}
+
+
{{ 'Requests.RootFolderOverride' | translate }}
+ {{node.data.rootPathOverrideTitle}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+ {{ 'Requests.ReportIssue' | translate }}
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/app/requests/tvrequests.component.ts b/src/Ombi/ClientApp/app/requests/tvrequests.component.ts
index 202b6dbf6..e59fc5c94 100644
--- a/src/Ombi/ClientApp/app/requests/tvrequests.component.ts
+++ b/src/Ombi/ClientApp/app/requests/tvrequests.component.ts
@@ -1,21 +1,14 @@
-import { PlatformLocation } from "@angular/common";
+import { PlatformLocation } from "@angular/common";
import { Component, Input, OnInit } from "@angular/core";
import { DomSanitizer } from "@angular/platform-browser";
-import "rxjs/add/operator/debounceTime";
-import "rxjs/add/operator/distinctUntilChanged";
-import "rxjs/add/operator/map";
-import { Subject } from "rxjs/Subject";
-import { ImageService } from "./../services/image.service";
-
-import "rxjs/add/operator/debounceTime";
-import "rxjs/add/operator/distinctUntilChanged";
-import "rxjs/add/operator/map";
+import { TreeNode } from "primeng/primeng";
+import { Subject } from "rxjs";
+import { debounceTime, distinctUntilChanged } from "rxjs/operators";
import { AuthService } from "../auth/auth.service";
+import { IIssueCategory, IPagenator, ISonarrProfile, ISonarrRootFolder, ITvRequests } from "../interfaces";
import { NotificationService, RequestService, SonarrService } from "../services";
-
-import { TreeNode } from "primeng/primeng";
-import { IIssueCategory, IPagenator, ISonarrProfile, ISonarrRootFolder, ITvRequests } from "../interfaces";
+import { ImageService } from "./../services/image.service";
@Component({
selector: "tv-requests",
@@ -46,29 +39,30 @@ export class TvRequestsComponent implements OnInit {
private currentlyLoaded: number;
private amountToLoad: number;
- constructor(private requestService: RequestService,
- private auth: AuthService,
- private sanitizer: DomSanitizer,
- private imageService: ImageService,
- private sonarrService: SonarrService,
- private notificationService: NotificationService,
- private readonly platformLocation: PlatformLocation) {
- this.searchChanged
- .debounceTime(600) // Wait Xms after the last event before emitting last event
- .distinctUntilChanged() // only emit if value is different from previous value
- .subscribe(x => {
- this.searchText = x as string;
- if (this.searchText === "") {
- this.resetSearch();
- return;
- }
- this.requestService.searchTvRequestsTree(this.searchText)
- .subscribe(m => {
- this.tvRequests = m;
- this.tvRequests.forEach((val) => this.loadBackdrop(val));
- this.tvRequests.forEach((val) => this.setOverride(val.data));
- });
- });
+ constructor(
+ private requestService: RequestService,
+ private auth: AuthService,
+ private sanitizer: DomSanitizer,
+ private imageService: ImageService,
+ private sonarrService: SonarrService,
+ private notificationService: NotificationService,
+ private readonly platformLocation: PlatformLocation) {
+ this.searchChanged.pipe(
+ debounceTime(600), // Wait Xms after the last event before emitting last event
+ distinctUntilChanged(), // only emit if value is different from previous value
+ ).subscribe(x => {
+ this.searchText = x as string;
+ if (this.searchText === "") {
+ this.resetSearch();
+ return;
+ }
+ this.requestService.searchTvRequestsTree(this.searchText)
+ .subscribe(m => {
+ this.tvRequests = m;
+ this.tvRequests.forEach((val) => this.loadBackdrop(val));
+ this.tvRequests.forEach((val) => this.setOverride(val.data));
+ });
+ });
this.defaultPoster = "../../../images/default_tv_poster.png";
const base = this.platformLocation.getBaseHrefFromDOM();
if (base) {
@@ -118,7 +112,7 @@ export class TvRequestsComponent implements OnInit {
this.currentlyLoaded = 10;
this.tvRequests = [];
this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser");
-
+
this.loadInit();
}
@@ -126,10 +120,10 @@ export class TvRequestsComponent implements OnInit {
const skipAmount = event.first;
this.requestService.getTvRequestsTree(this.amountToLoad, skipAmount)
- .subscribe(x => {
- this.tvRequests = x;
- this.currentlyLoaded = this.currentlyLoaded + this.amountToLoad;
- });
+ .subscribe(x => {
+ this.tvRequests = x;
+ this.currentlyLoaded = this.currentlyLoaded + this.amountToLoad;
+ });
}
public search(text: any) {
@@ -211,13 +205,13 @@ export class TvRequestsComponent implements OnInit {
this.setDefaults(val);
this.loadBackdrop(val);
this.setOverride(val.data);
- });
- });
+ });
+ });
- if(this.isAdmin) {
+ if (this.isAdmin) {
this.sonarrService.getQualityProfilesWithoutSettings()
.subscribe(x => this.sonarrProfiles = x);
-
+
this.sonarrService.getRootFoldersWithoutSettings()
.subscribe(x => this.sonarrRootFolders = x);
}
@@ -240,9 +234,9 @@ export class TvRequestsComponent implements OnInit {
("url(https://image.tmdb.org/t/p/w1280" + val.data.background + ")");
} else {
this.imageService.getTvBanner(val.data.tvDbId).subscribe(x => {
- if(x) {
+ if (x) {
val.data.background = this.sanitizer.bypassSecurityTrustStyle
- ("url(" + x + ")");
+ ("url(" + x + ")");
}
});
}
diff --git a/src/Ombi/ClientApp/app/search/moviesearch.component.ts b/src/Ombi/ClientApp/app/search/moviesearch.component.ts
index 236ae8ed8..9bb074b34 100644
--- a/src/Ombi/ClientApp/app/search/moviesearch.component.ts
+++ b/src/Ombi/ClientApp/app/search/moviesearch.component.ts
@@ -1,11 +1,9 @@
-import { PlatformLocation } from "@angular/common";
+import { PlatformLocation } from "@angular/common";
import { Component, Input, OnInit } from "@angular/core";
import { DomSanitizer } from "@angular/platform-browser";
import { TranslateService } from "@ngx-translate/core";
-import "rxjs/add/operator/debounceTime";
-import "rxjs/add/operator/distinctUntilChanged";
-import "rxjs/add/operator/map";
-import { Subject } from "rxjs/Subject";
+import { Subject } from "rxjs";
+import { debounceTime, distinctUntilChanged } from "rxjs/operators";
import { AuthService } from "../auth/auth.service";
import { IIssueCategory, IRequestEngineResult, ISearchMovieResult } from "../interfaces";
@@ -22,7 +20,7 @@ export class MovieSearchComponent implements OnInit {
public movieResults: ISearchMovieResult[];
public result: IRequestEngineResult;
public searchApplied = false;
-
+
@Input() public issueCategories: IIssueCategory[];
@Input() public issuesEnabled: boolean;
public issuesBarVisible = false;
@@ -31,30 +29,31 @@ export class MovieSearchComponent implements OnInit {
public issueProviderId: string;
public issueCategorySelected: IIssueCategory;
public defaultPoster: string;
-
- constructor(private searchService: SearchService, private requestService: RequestService,
- private notificationService: NotificationService, private authService: AuthService,
- private readonly translate: TranslateService, private sanitizer: DomSanitizer,
- private readonly platformLocation: PlatformLocation) {
-
- this.searchChanged
- .debounceTime(600) // Wait Xms after the last event before emitting last event
- .distinctUntilChanged() // only emit if value is different from previous value
- .subscribe(x => {
- this.searchText = x as string;
- if (this.searchText === "") {
- this.clearResults();
- return;
- }
- this.searchService.searchMovie(this.searchText)
- .subscribe(x => {
- this.movieResults = x;
- this.searchApplied = true;
- // Now let's load some extra info including IMDB Id
- // This way the search is fast at displaying results.
- this.getExtraInfo();
- });
- });
+
+ constructor(
+ private searchService: SearchService, private requestService: RequestService,
+ private notificationService: NotificationService, private authService: AuthService,
+ private readonly translate: TranslateService, private sanitizer: DomSanitizer,
+ private readonly platformLocation: PlatformLocation) {
+
+ this.searchChanged.pipe(
+ debounceTime(600), // Wait Xms after the last event before emitting last event
+ distinctUntilChanged(), // only emit if value is different from previous value
+ ).subscribe(x => {
+ this.searchText = x as string;
+ if (this.searchText === "") {
+ this.clearResults();
+ return;
+ }
+ this.searchService.searchMovie(this.searchText)
+ .subscribe(x => {
+ this.movieResults = x;
+ this.searchApplied = true;
+ // Now let's load some extra info including IMDB Id
+ // This way the search is fast at displaying results.
+ this.getExtraInfo();
+ });
+ });
this.defaultPoster = "../../../images/default_movie_poster.png";
const base = this.platformLocation.getBaseHrefFromDOM();
if (base) {
@@ -105,7 +104,7 @@ export class MovieSearchComponent implements OnInit {
searchResult.approved = false;
searchResult.processed = false;
searchResult.requestProcessing = false;
-
+
}
});
} catch (e) {
@@ -160,12 +159,12 @@ export class MovieSearchComponent implements OnInit {
public similarMovies(theMovieDbId: number) {
this.clearResults();
this.searchService.similarMovies(theMovieDbId)
- .subscribe(x => {
- this.movieResults = x;
- this.getExtraInfo();
- });
+ .subscribe(x => {
+ this.movieResults = x;
+ this.getExtraInfo();
+ });
}
-
+
public subscribe(r: ISearchMovieResult) {
r.subscribed = true;
this.requestService.subscribeToMovie(r.requestId)
@@ -182,17 +181,17 @@ export class MovieSearchComponent implements OnInit {
});
}
- private getExtraInfo() {
-
- this.movieResults.forEach((val, index) => {
- if (val.posterPath === null) {
- val.posterPath = this.defaultPoster;
- } else {
- val.posterPath = "https://image.tmdb.org/t/p/w300/" + val.posterPath;
- }
- val.background = this.sanitizer.bypassSecurityTrustStyle
- ("url(" + "https://image.tmdb.org/t/p/w1280" + val.backdropPath + ")");
- this.searchService.getMovieInformation(val.id)
+ private getExtraInfo() {
+
+ this.movieResults.forEach((val, index) => {
+ if (val.posterPath === null) {
+ val.posterPath = this.defaultPoster;
+ } else {
+ val.posterPath = "https://image.tmdb.org/t/p/w300/" + val.posterPath;
+ }
+ val.background = this.sanitizer.bypassSecurityTrustStyle
+ ("url(" + "https://image.tmdb.org/t/p/w1280" + val.backdropPath + ")");
+ this.searchService.getMovieInformation(val.id)
.subscribe(m => {
this.updateItem(val, m);
});
@@ -203,7 +202,7 @@ export class MovieSearchComponent implements OnInit {
const index = this.movieResults.indexOf(key, 0);
if (index > -1) {
const copy = { ...this.movieResults[index] };
- this.movieResults[index] = updated;
+ this.movieResults[index] = updated;
this.movieResults[index].background = copy.background;
this.movieResults[index].posterPath = copy.posterPath;
}
diff --git a/src/Ombi/ClientApp/app/search/moviesearchgrid.component.ts b/src/Ombi/ClientApp/app/search/moviesearchgrid.component.ts
index 1c9c7beeb..00a782096 100644
--- a/src/Ombi/ClientApp/app/search/moviesearchgrid.component.ts
+++ b/src/Ombi/ClientApp/app/search/moviesearchgrid.component.ts
@@ -1,13 +1,10 @@
-import { Component, OnInit } from "@angular/core";
-import "rxjs/add/operator/debounceTime";
-import "rxjs/add/operator/distinctUntilChanged";
-import "rxjs/add/operator/map";
-import { Subject } from "rxjs/Subject";
+import { Component, OnInit } from "@angular/core";
+import { Subject } from "rxjs";
+import { debounceTime, distinctUntilChanged } from "rxjs/operators";
import { AuthService } from "../auth/auth.service";
-import { NotificationService, RequestService, SearchService } from "../services";
-
import { IRequestEngineResult, ISearchMovieResult, ISearchMovieResultContainer } from "../interfaces";
+import { NotificationService, RequestService, SearchService } from "../services";
@Component({
selector: "movie-search-grid",
@@ -21,28 +18,29 @@ export class MovieSearchGridComponent implements OnInit {
public movieResultGrid: ISearchMovieResultContainer[] = [];
public result: IRequestEngineResult;
public searchApplied = false;
-
- constructor(private searchService: SearchService, private requestService: RequestService,
- private notificationService: NotificationService, private authService: AuthService) {
- this.searchChanged
- .debounceTime(600) // Wait Xms afterthe last event before emitting last event
- .distinctUntilChanged() // only emit if value is different from previous value
- .subscribe(x => {
- this.searchText = x as string;
- if (this.searchText === "") {
- this.clearResults();
- return;
- }
- this.searchService.searchMovie(this.searchText)
- .subscribe(x => {
- this.movieResults = x;
- this.searchApplied = true;
- // Now let's load some exta info including IMDBId
- // This way the search is fast at displaying results.
- this.getExtaInfo();
- });
- });
+ constructor(
+ private searchService: SearchService, private requestService: RequestService,
+ private notificationService: NotificationService, private authService: AuthService) {
+
+ this.searchChanged.pipe(
+ debounceTime(600), // Wait Xms afterthe last event before emitting last event
+ distinctUntilChanged(), // only emit if value is different from previous value
+ ).subscribe(x => {
+ this.searchText = x as string;
+ if (this.searchText === "") {
+ this.clearResults();
+ return;
+ }
+ this.searchService.searchMovie(this.searchText)
+ .subscribe(x => {
+ this.movieResults = x;
+ this.searchApplied = true;
+ // Now let's load some exta info including IMDBId
+ // This way the search is fast at displaying results.
+ this.getExtaInfo();
+ });
+ });
}
public ngOnInit() {
@@ -67,7 +65,7 @@ export class MovieSearchGridComponent implements OnInit {
}
try {
- this.requestService.requestMovie({ theMovieDbId : searchResult.id})
+ this.requestService.requestMovie({ theMovieDbId: searchResult.id })
.subscribe(x => {
this.result = x;
@@ -129,7 +127,7 @@ export class MovieSearchGridComponent implements OnInit {
});
}
- private getExtaInfo() {
+ private getExtaInfo() {
this.movieResults.forEach((val) => {
this.searchService.getMovieInformation(val.id)
.subscribe(m => this.updateItem(val, m));
@@ -147,18 +145,18 @@ export class MovieSearchGridComponent implements OnInit {
this.movieResults = [];
this.searchApplied = false;
}
-
+
private processGrid(movies: ISearchMovieResult[]) {
let container =
{ movies: [] };
movies.forEach((movie, i) => {
i++;
- if((i % 4) === 0) {
- container.movies.push(movie);
+ if ((i % 4) === 0) {
+ container.movies.push(movie);
this.movieResultGrid.push(container);
container = { movies: [] };
} else {
-
- container.movies.push(movie);
+
+ container.movies.push(movie);
}
});
this.movieResultGrid.push(container);
diff --git a/src/Ombi/ClientApp/app/search/seriesinformation.component.ts b/src/Ombi/ClientApp/app/search/seriesinformation.component.ts
index f2eef3d57..00775fd55 100644
--- a/src/Ombi/ClientApp/app/search/seriesinformation.component.ts
+++ b/src/Ombi/ClientApp/app/search/seriesinformation.component.ts
@@ -1,5 +1,4 @@
import { Component, Input, OnInit} from "@angular/core";
-import "rxjs/add/operator/takeUntil";
import { NotificationService } from "../services";
import { RequestService } from "../services";
diff --git a/src/Ombi/ClientApp/app/search/tvsearch.component.html b/src/Ombi/ClientApp/app/search/tvsearch.component.html
index ee5667f76..6007bd7e2 100644
--- a/src/Ombi/ClientApp/app/search/tvsearch.component.html
+++ b/src/Ombi/ClientApp/app/search/tvsearch.component.html
@@ -5,7 +5,7 @@