diff --git a/README.md b/README.md index e9415432d..7f8de2f56 100644 --- a/README.md +++ b/README.md @@ -33,10 +33,10 @@ We also now have merch up on Teespring! ___ -| Service | Stable | Develop | -|----------|:---------------------------:|:----------------------------:| -| AppVeyor | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/master?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/develop?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/develop) | -| Download |[![Download](http://i.imgur.com/odToka3.png)](https://github.com/tidusjar/Ombi/releases) | [![Download](http://i.imgur.com/odToka3.png)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/develop/artifacts) | +| Service | Stable | Develop | V4 | +|----------|:---------------------------:|:----------------------------:|:----------------------------:| +| Build Status | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/master?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/master) | [![Build status](https://ci.appveyor.com/api/projects/status/hgj8j6lcea7j0yhn/branch/develop?svg=true)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/develop) | [![Build Status](https://dev.azure.com/tidusjar/Ombi/_apis/build/status/Ombi%20CI?branchName=feature%2Fv4)](https://dev.azure.com/tidusjar/Ombi/_build/latest?definitionId=18&branchName=feature%2Fv4) +| Download |[![Download](http://i.imgur.com/odToka3.png)](https://github.com/tidusjar/Ombi/releases) | [![Download](http://i.imgur.com/odToka3.png)](https://ci.appveyor.com/project/tidusjar/requestplex/branch/develop/artifacts) | [![Download](http://i.imgur.com/odToka3.png)](https://github.com/tidusjar/ombi.releases/releases) | # Features Here are some of the features Ombi V3 has: * Now working without crashes on Linux. diff --git a/src/Ombi.Notifications/Agents/WhatsAppNotification.cs b/src/Ombi.Notifications/Agents/WhatsAppNotification.cs index ae41dc09e..0f0cd5d09 100644 --- a/src/Ombi.Notifications/Agents/WhatsAppNotification.cs +++ b/src/Ombi.Notifications/Agents/WhatsAppNotification.cs @@ -36,7 +36,9 @@ namespace Ombi.Notifications.Agents { return false; } - return !settings.WhatsAppSettings.AccountSid.IsNullOrEmpty() && !settings.WhatsAppSettings.AuthToken.IsNullOrEmpty() && !settings.WhatsAppSettings.From.IsNullOrEmpty(); + return (!settings.WhatsAppSettings?.AccountSid?.IsNullOrEmpty() ?? false) + && (!settings.WhatsAppSettings?.AuthToken?.IsNullOrEmpty() ?? false) + && (!settings.WhatsAppSettings?.From?.IsNullOrEmpty() ?? false); } protected override async Task NewRequest(NotificationOptions model, TwilioSettings settings) diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs b/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs index b001878ff..27e6e3daa 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs @@ -78,13 +78,11 @@ namespace Ombi.Schedule.Jobs.Plex { return; } - await Notification.Clients.Clients(NotificationHub.AdminConnectionIds) - .SendAsync(NotificationHub.NotificationEvent, recentlyAddedSearch ? "Plex Recently Added Sync Started" : "Plex Content Sync Started"); + await NotifyClient(recentlyAddedSearch ? "Plex Recently Added Sync Started" : "Plex Content Sync Started"); if (!ValidateSettings(plexSettings)) { Logger.LogError("Plex Settings are not valid"); - await Notification.Clients.Clients(NotificationHub.AdminConnectionIds) - .SendAsync(NotificationHub.NotificationEvent, recentlyAddedSearch ? "Plex Recently Added Sync, Settings Not Valid" : "Plex Content, Settings Not Valid"); + await NotifyClient(recentlyAddedSearch ? "Plex Recently Added Sync, Settings Not Valid" : "Plex Content, Settings Not Valid"); return; } var processedContent = new ProcessedContent(); @@ -104,13 +102,13 @@ namespace Ombi.Schedule.Jobs.Plex } catch (Exception e) { - await Notification.Clients.Clients(NotificationHub.AdminConnectionIds) - .SendAsync(NotificationHub.NotificationEvent, recentlyAddedSearch ? "Plex Recently Added Sync Errored" : "Plex Content Sync Errored"); + await NotifyClient(recentlyAddedSearch ? "Plex Recently Added Sync Errored" : "Plex Content Sync Errored"); Logger.LogWarning(LoggingEvents.PlexContentCacher, e, "Exception thrown when attempting to cache the Plex Content"); } if (!recentlyAddedSearch) { + await NotifyClient("Plex Sync - Starting Episode Sync"); Logger.LogInformation("Starting EP Cacher"); await OmbiQuartz.TriggerJob(nameof(IPlexEpisodeSync), "Plex"); } @@ -124,6 +122,7 @@ namespace Ombi.Schedule.Jobs.Plex } else { + await NotifyClient("Plex Sync - Checking if any requests are now available"); Logger.LogInformation("Kicking off Plex Availability Checker"); await OmbiQuartz.TriggerJob(nameof(IPlexAvailabilityChecker), "Plex"); } @@ -141,10 +140,11 @@ namespace Ombi.Schedule.Jobs.Plex await OmbiQuartz.TriggerJob(nameof(IPlexAvailabilityChecker), "Plex"); } } - Logger.LogInformation("Finished Plex Content Cacher, with processed content: {0}, episodes: {1}. Recently Added Scan: {2}", processedContent?.Content?.Count() ?? 0, processedContent?.Episodes?.Count() ?? 0, recentlyAddedSearch); + var processedCont = processedContent?.Content?.Count() ?? 0; + var processedEp = processedContent?.Episodes?.Count() ?? 0; + Logger.LogInformation("Finished Plex Content Cacher, with processed content: {0}, episodes: {1}. Recently Added Scan: {2}", processedContent, processedEp, recentlyAddedSearch); - await Notification.Clients.Clients(NotificationHub.AdminConnectionIds) - .SendAsync(NotificationHub.NotificationEvent, recentlyAddedSearch ? "Plex Recently Added Sync Finished" : "Plex Content Sync Finished"); + await NotifyClient(recentlyAddedSearch ? $"Plex Recently Added Sync Finished, We processed {processedCont}, and {processedEp} Episodes" : "Plex Content Sync Finished"); } @@ -186,6 +186,7 @@ namespace Ombi.Schedule.Jobs.Plex var allContent = await GetAllContent(servers, recentlyAddedSearch); Logger.LogDebug("We found {0} items", allContent.Count); + // Let's now process this. var contentToAdd = new HashSet(); @@ -654,7 +655,11 @@ namespace Ombi.Schedule.Jobs.Plex return libs; } - + private async Task NotifyClient(string message) + { + await Notification.Clients.Clients(NotificationHub.AdminConnectionIds) + .SendAsync(NotificationHub.NotificationEvent, $"Plex Sync - {message}"); + } private static bool ValidateSettings(PlexSettings plex) { diff --git a/src/Ombi.Store/Context/OmbiContext.cs b/src/Ombi.Store/Context/OmbiContext.cs index 2d06d4553..90e559875 100644 --- a/src/Ombi.Store/Context/OmbiContext.cs +++ b/src/Ombi.Store/Context/OmbiContext.cs @@ -120,7 +120,7 @@ namespace Ombi.Store.Context notificationToAdd = new NotificationTemplates { NotificationType = notificationType, - Message = "Hello! Your request for {Title} on {ApplicationName}! This is now available! :)", + Message = "Hello! Your request for {Title} on {ApplicationName} is now available! :)", Subject = "{ApplicationName}: {Title} is now available!", Agent = agent, Enabled = true, diff --git a/src/Ombi/ClientApp/angular.json b/src/Ombi/ClientApp/angular.json index d7801204f..0d3e21b27 100644 --- a/src/Ombi/ClientApp/angular.json +++ b/src/Ombi/ClientApp/angular.json @@ -13,6 +13,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { + "aot": true, "progress": true, "extractCss": true, "outputPath": "dist", @@ -24,29 +25,33 @@ "src/assets" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css", "src/styles/_imports.scss", "node_modules/bootstrap/scss/bootstrap.scss", - "node_modules/angular-bootstrap-md/scss/mdb-free.scss", - "node_modules/pace/themes/orange/pace-theme-flat-top.css", "node_modules/font-awesome/scss/font-awesome.scss", "node_modules/primeng/resources/primeng.min.css", - "node_modules/primeng/resources/themes/nova-light/theme.css", "node_modules/primeicons/primeicons.css", "node_modules/please-wait/src/please-wait.scss", "node_modules/@fullcalendar/core/main.min.css", + "node_modules/@fullcalendar/daygrid/main.min.css", "node_modules/spinkit/scss/spinners/11-folding-cube.scss", "node_modules/spinkit/scss/spinkit.scss" ], "scripts": [ "node_modules/jquery/dist/jquery.min.js", "node_modules/chart.js/dist/Chart.js", - "node_modules/hammerjs/hammer.min.js", "./node_modules/@fullcalendar/core/main.js", "./node_modules/@fullcalendar/interaction/main.js" ] }, "configurations": { "production": { + "budgets": [ + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ], "fileReplacements": [ { "replace": "src/environments/environment.ts", @@ -64,6 +69,12 @@ "buildOptimizer": true }, "hmr": { + "budgets": [ + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ], "fileReplacements": [ { "replace": "src/environments/environment.ts", diff --git a/src/Ombi/ClientApp/package.json b/src/Ombi/ClientApp/package.json index 96bcdbd60..f3d62fbc0 100644 --- a/src/Ombi/ClientApp/package.json +++ b/src/Ombi/ClientApp/package.json @@ -9,23 +9,24 @@ }, "private": true, "dependencies": { - "@angular/animations": "^8.0.0", - "@angular/cdk": "^8.0.0", - "@angular/common": "^8.0.0", - "@angular/compiler": "^8.0.0", - "@angular/core": "^8.0.0", - "@angular/forms": "^8.0.0", - "@angular/material": "^8.0.0", - "@angular/platform-browser": "^8.0.0", - "@angular/platform-browser-dynamic": "^8.0.0", - "@angular/platform-server": "^8.0.0", - "@angular/router": "^8.0.0", + "@angular/animations": "^9.1.7", + "@angular/cdk": "^9.2.3", + "@angular/common": "^9.1.7", + "@angular/compiler": "^9.1.7", + "@angular/core": "^9.1.7", + "@angular/forms": "^9.1.7", + "@angular/localize": "^9.1.7", + "@angular/material": "^9.2.3", + "@angular/platform-browser": "^9.1.7", + "@angular/platform-browser-dynamic": "^9.1.7", + "@angular/platform-server": "^9.1.7", + "@angular/router": "^9.1.7", "@angularclass/hmr": "^2.1.3", "@aspnet/signalr": "^1.1.0", "@auth0/angular-jwt": "^2.1.0", "@fullcalendar/core": "^4.2.0", + "@fullcalendar/daygrid": "^4.4.0", "@fullcalendar/interaction": "^4.2.0", - "@ng-bootstrap/ng-bootstrap": "^4.0.1", "@ngu/carousel": "^1.4.9-beta-2", "@ngx-translate/core": "^11.0.1", "@ngx-translate/http-loader": "^4.0.0", @@ -33,49 +34,41 @@ "@yellowspot/ng-truncate": "^1.4.0", "angular-bootstrap-md": "^7.5.4", "angular-router-loader": "^0.8.5", - "angular2-template-loader": "^0.6.2", "angularx-qrcode": "^2.1.0", - "aspnet-prerendering": "^3.0.1", - "awesome-typescript-loader": "^5.2.0", "bootstrap": "^4.2.1", "chart.js": "2.5.0", "core-js": "^2.5.4", "eventemitter2": "^5.0.1", "font-awesome": "^4.7.0", "fullcalendar": "^4.0.0-alpha.4", - "hammerjs": "^2.0.8", "jquery": "3.3.1", "moment": "^2.23.0", "ng2-cookies": "^1.0.12", - "ngx-bootstrap": "^3.1.4", "ngx-clipboard": "^12.1.0", - "ngx-infinite-scroll": "^7.1.0", + "ngx-infinite-scroll": "^9.0.0", "ngx-moment": "^3.0.1", "ngx-order-pipe": "^2.0.1", - "ngx-page-scroll": "^5.0.1", - "pace": "github:HubSpot/pace#v1.0.2", "please-wait": "^0.0.5", "popper.js": "^1.14.3", "primeicons": "^1.0.0", - "primeng": "^7.0.3", + "primeng": "^9.0.6", "rxjs": "^6.5.2", - "socket.io-client": "^2.2.0", "spinkit": "^1.2.5", "store": "^2.0.12", - "sweetalert2": "^7.33.1", + "tslib": "^1.10.0", "tslint-angular": "^1.1.2", - "zone.js": "^0.9.1" + "zone.js": "~0.10.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.803.21", - "@angular/cli": "~8.3.21", - "@angular/compiler-cli": "^8.2.14", - "@angular/language-service": "^8.2.14", + "@angular-devkit/build-angular": "~0.901.6", + "@angular/cli": "~9.1.6", + "@angular/compiler-cli": "^9.1.7", + "@angular/language-service": "^9.1.7", "@types/jasmine": "~2.8.6", "@types/jasminewd2": "~2.0.3", - "@types/node": "~8.9.4", - "codelyzer": "^4.5.0", - "typescript": "~3.4.5" + "@types/node": "^12.11.1", + "codelyzer": "^5.1.2", + "typescript": "~3.8.3" }, "optionalDependencies": { "node-sass": "^4.12.0", diff --git a/src/Ombi/ClientApp/src/app/app.component.ts b/src/Ombi/ClientApp/src/app/app.component.ts index c8bf7f134..957bbe7aa 100644 --- a/src/Ombi/ClientApp/src/app/app.component.ts +++ b/src/Ombi/ClientApp/src/app/app.component.ts @@ -7,7 +7,7 @@ import { AuthService } from "./auth/auth.service"; import { ILocalUser } from "./auth/IUserLogin"; import { NotificationService, CustomPageService } from "./services"; import { SettingsService } from "./services"; -import { MatSnackBar } from '@angular/material'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { ICustomizationSettings, ICustomPage } from "./interfaces"; import { StorageService } from './shared/storage/storage-service'; diff --git a/src/Ombi/ClientApp/src/app/app.module.ts b/src/Ombi/ClientApp/src/app/app.module.ts index 11e0d5e60..16dfba6a8 100644 --- a/src/Ombi/ClientApp/src/app/app.module.ts +++ b/src/Ombi/ClientApp/src/app/app.module.ts @@ -7,21 +7,32 @@ import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { RouterModule, Routes } from "@angular/router"; import { JwtModule } from "@auth0/angular-jwt"; -import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; 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, OverlayPanelModule, SharedModule, SidebarModule, - TooltipModule -} from "primeng/primeng"; -import { - MatButtonModule, MatNativeDateModule, MatIconModule, MatSidenavModule, MatListModule, MatToolbarModule, MatAutocompleteModule, MatCheckboxModule, MatSnackBarModule, - MatProgressSpinnerModule -} from '@angular/material'; -import { MatCardModule, MatInputModule, MatTabsModule, MatSlideToggleModule } from "@angular/material"; +import { ButtonModule } from "primeng/button"; +import { ConfirmDialogModule } from "primeng/confirmdialog"; +import { DataViewModule } from "primeng/dataview"; +import { DialogModule } from "primeng/dialog"; +import { OverlayPanelModule } from "primeng/overlaypanel"; +import { TooltipModule } from "primeng/tooltip"; +import { SidebarModule } from "primeng/sidebar"; + +import { MatAutocompleteModule } from '@angular/material/autocomplete'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatIconModule } from '@angular/material/icon'; +import { MatListModule } from '@angular/material/list'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatCardModule } from "@angular/material/card"; +import { MatInputModule } from "@angular/material/input"; +import { MatSlideToggleModule } from "@angular/material/slide-toggle"; +import { MatTabsModule } from "@angular/material/tabs"; import { MDBBootstrapModule, CardsFreeModule, NavbarModule } from "angular-bootstrap-md"; @@ -70,9 +81,8 @@ const routes: Routes = [ { loadChildren: () => import("./settings/settings.module").then(m => m.SettingsModule), path: "Settings" }, { loadChildren: () => import("./wizard/wizard.module").then(m => m.WizardModule), path: "Wizard" }, { loadChildren: () => import("./usermanagement/usermanagement.module").then(m => m.UserManagementModule), path: "usermanagement" }, - { loadChildren: () => import("./requests/requests.module").then(m => m.RequestsModule), path: "requestsOld" }, + // { loadChildren: () => import("./requests/requests.module").then(m => m.RequestsModule), path: "requestsOld" }, { loadChildren: () => import("./requests-list/requests-list.module").then(m => m.RequestsListModule), path: "requests-list" }, - { loadChildren: () => import("./recentlyAdded/recentlyAdded.module").then(m => m.RecentlyAddedModule), path: "recentlyadded" }, { loadChildren: () => import("./vote/vote.module").then(m => m.VoteModule), path: "vote" }, { loadChildren: () => import("./media-details/media-details.module").then(m => m.MediaDetailsModule), path: "details" }, { loadChildren: () => import("./user-preferences/user-preferences.module").then(m => m.UserPreferencesModule), path: "user-preferences" }, @@ -106,23 +116,19 @@ export function JwtTokenGetter() { BrowserModule, HttpClientModule, BrowserAnimationsModule, - GrowlModule, ButtonModule, FormsModule, - DataTableModule, + DataViewModule, MatSnackBarModule, - SharedModule, MatSnackBarModule, DialogModule, MatButtonModule, NavbarModule, - NgbModule.forRoot(), MatCardModule, MatInputModule, MatTabsModule, ReactiveFormsModule, MatAutocompleteModule, - CaptchaModule, TooltipModule, ConfirmDialogModule, OverlayPanelModule, @@ -168,7 +174,6 @@ export function JwtTokenGetter() { IdentityService, StatusService, LandingPageService, - ConfirmationService, ImageService, CustomPageService, CookieService, diff --git a/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.html b/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.html index 47c6213db..2f0bb743c 100644 --- a/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.html +++ b/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.html @@ -1,3 +1,3 @@ -
+
\ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.ts b/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.ts index 64f5c7db1..599c53dfa 100644 --- a/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.ts +++ b/src/Ombi/ClientApp/src/app/calendar/components/calendar.component.ts @@ -3,6 +3,9 @@ import { Component, OnInit } from "@angular/core"; import { CalendarService } from "../../services/calendar.service"; import { ICalendarModel } from "../../interfaces/ICalendar"; +import dayGridPlugin from '@fullcalendar/daygrid'; +import interactionPlugin from '@fullcalendar/interaction'; + @Component({ templateUrl: "./calendar.component.html", styleUrls: ["./calendar.component.scss"], @@ -18,9 +21,8 @@ export class CalendarComponent implements OnInit { public async ngOnInit() { this.loading() - this.entries = await this.calendarService.getCalendarEntries(); - this.options = { + plugins: [dayGridPlugin, interactionPlugin], defaultDate: new Date(), header: { left: 'prev,next', @@ -31,6 +33,8 @@ export class CalendarComponent implements OnInit { e.preventDefault(); } }; + + this.entries = await this.calendarService.getCalendarEntries(); this.finishLoading(); } diff --git a/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.ts b/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.ts index 950fb7732..fa13b1866 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.ts +++ b/src/Ombi/ClientApp/src/app/discover/components/card/discover-card-details.component.ts @@ -1,5 +1,5 @@ import { Component, Inject, OnInit, ViewEncapsulation } from "@angular/core"; -import { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from "@angular/material"; +import { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from "@angular/material/dialog"; import { IDiscoverCardResult } from "../../interfaces"; import { SearchV2Service, RequestService, MessageService } from "../../../services"; import { RequestType } from "../../../interfaces"; diff --git a/src/Ombi/ClientApp/src/app/discover/components/card/discover-card.component.ts b/src/Ombi/ClientApp/src/app/discover/components/card/discover-card.component.ts index a83f2af26..cb401b8d1 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/card/discover-card.component.ts +++ b/src/Ombi/ClientApp/src/app/discover/components/card/discover-card.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, Input } from "@angular/core"; import { IDiscoverCardResult } from "../../interfaces"; import { RequestType, ISearchTvResult, ISearchMovieResult } from "../../../interfaces"; import { SearchV2Service } from "../../../services"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; import { DiscoverCardDetailsComponent } from "./discover-card-details.component"; import { ISearchTvResultV2 } from "../../../interfaces/ISearchTvResultV2"; import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2"; 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 3238ea5ed..a92d92c5f 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 @@ -35,6 +35,8 @@ export class DiscoverComponent implements OnInit { public loadingFlag: boolean; public scrollDisabled: boolean; + private amountToLoad = 14; + private contentLoaded: number; private isScrolling: boolean = false; private mediaTypeStorageKey = "DiscoverOptions"; @@ -51,14 +53,14 @@ export class DiscoverComponent implements OnInit { this.scrollDisabled = true; switch (this.discoverOptions) { case DiscoverOption.Combined: - this.movies = await this.searchService.popularMoviesByPage(0, 12); - this.tvShows = await this.searchService.popularTvByPage(0, 12); + this.movies = await this.searchService.popularMoviesByPage(0, this.amountToLoad); + this.tvShows = await this.searchService.popularTvByPage(0, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.popularMoviesByPage(0, 12); + this.movies = await this.searchService.popularMoviesByPage(0, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.popularTvByPage(0, 12); + this.tvShows = await this.searchService.popularTvByPage(0, this.amountToLoad); break; } @@ -69,6 +71,7 @@ export class DiscoverComponent implements OnInit { } public async onScroll() { + console.log("scrolled"); if (!this.contentLoaded) { return; } @@ -78,42 +81,42 @@ export class DiscoverComponent implements OnInit { if (this.popularActive) { switch (this.discoverOptions) { case DiscoverOption.Combined: - this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12); - this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, 12); + this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, this.amountToLoad); + this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12); + this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, 12); + this.tvShows = await this.searchService.popularTvByPage(this.contentLoaded, this.amountToLoad); break; } } 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); + this.movies = await this.searchService.nowPlayingMoviesByPage(this.contentLoaded, this.amountToLoad); + this.tvShows = await this.searchService.trendingTvByPage(this.contentLoaded, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.nowPlayingMoviesByPage(this.contentLoaded, 12); + this.movies = await this.searchService.nowPlayingMoviesByPage(this.contentLoaded, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.trendingTvByPage(this.contentLoaded, 12); + this.tvShows = await this.searchService.trendingTvByPage(this.contentLoaded, this.amountToLoad); break; } } 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); + this.movies = await this.searchService.upcomingMoviesByPage(this.contentLoaded, this.amountToLoad); + this.tvShows = await this.searchService.anticipatedTvByPage(this.contentLoaded, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.upcomingMoviesByPage(this.contentLoaded, 12); + this.movies = await this.searchService.upcomingMoviesByPage(this.contentLoaded, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.anticipatedTvByPage(this.contentLoaded, 12); + this.tvShows = await this.searchService.anticipatedTvByPage(this.contentLoaded, this.amountToLoad); break; } } @@ -135,14 +138,14 @@ export class DiscoverComponent implements OnInit { this.upcomingActive = false; switch (this.discoverOptions) { case DiscoverOption.Combined: - this.movies = await this.searchService.popularMoviesByPage(0, 12); - this.tvShows = await this.searchService.popularTvByPage(0, 12); + this.movies = await this.searchService.popularMoviesByPage(0, this.amountToLoad); + this.tvShows = await this.searchService.popularTvByPage(0, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.popularMoviesByPage(0, 12); + this.movies = await this.searchService.popularMoviesByPage(0, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.popularTvByPage(0, 12); + this.tvShows = await this.searchService.popularTvByPage(0, this.amountToLoad); break; } @@ -162,14 +165,14 @@ export class DiscoverComponent implements OnInit { this.upcomingActive = false; switch (this.discoverOptions) { case DiscoverOption.Combined: - this.movies = await this.searchService.nowPlayingMoviesByPage(0, 12); - this.tvShows = await this.searchService.trendingTvByPage(0, 12); + this.movies = await this.searchService.nowPlayingMoviesByPage(0, this.amountToLoad); + this.tvShows = await this.searchService.trendingTvByPage(0, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.nowPlayingMoviesByPage(0, 12); + this.movies = await this.searchService.nowPlayingMoviesByPage(0, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.trendingTvByPage(0, 12); + this.tvShows = await this.searchService.trendingTvByPage(0, this.amountToLoad); break; } @@ -188,14 +191,14 @@ export class DiscoverComponent implements OnInit { this.upcomingActive = true; switch (this.discoverOptions) { case DiscoverOption.Combined: - this.movies = await this.searchService.upcomingMoviesByPage(0, 12); - this.tvShows = await this.searchService.anticipatedTvByPage(0, 12); + this.movies = await this.searchService.upcomingMoviesByPage(0, this.amountToLoad); + this.tvShows = await this.searchService.anticipatedTvByPage(0, this.amountToLoad); break; case DiscoverOption.Movie: - this.movies = await this.searchService.upcomingMoviesByPage(0, 12); + this.movies = await this.searchService.upcomingMoviesByPage(0, this.amountToLoad); break; case DiscoverOption.Tv: - this.tvShows = await this.searchService.anticipatedTvByPage(0, 12); + this.tvShows = await this.searchService.anticipatedTvByPage(0, this.amountToLoad); break; } diff --git a/src/Ombi/ClientApp/src/app/discover/components/index.ts b/src/Ombi/ClientApp/src/app/discover/components/index.ts index 428e894e1..6e56d29d8 100644 --- a/src/Ombi/ClientApp/src/app/discover/components/index.ts +++ b/src/Ombi/ClientApp/src/app/discover/components/index.ts @@ -6,7 +6,7 @@ import { DiscoverCardComponent } from "./card/discover-card.component"; import { Routes } from "@angular/router"; import { AuthGuard } from "../../auth/auth.guard"; import { SearchService, RequestService } from "../../services"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; export const components: any[] = [ diff --git a/src/Ombi/ClientApp/src/app/issues/issues.module.ts b/src/Ombi/ClientApp/src/app/issues/issues.module.ts index cf357d269..2607d336a 100644 --- a/src/Ombi/ClientApp/src/app/issues/issues.module.ts +++ b/src/Ombi/ClientApp/src/app/issues/issues.module.ts @@ -1,9 +1,7 @@ import { NgModule } from "@angular/core"; import { RouterModule, Routes } from "@angular/router"; -import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; import { OrderModule } from "ngx-order-pipe"; -import { PaginatorModule, SharedModule, TabViewModule } from "primeng/primeng"; import { IdentityService, SearchService } from "../services"; @@ -16,7 +14,6 @@ import { IssuesComponent } from "./issues.component"; import { IssuesTableComponent } from "./issuestable.component"; import { PipeModule } from "../pipes/pipe.module"; -import { IssuesListComponent } from "./components/issues-list/issues-list.component"; import * as fromComponents from "./components"; @@ -28,13 +25,9 @@ const routes: Routes = [ @NgModule({ imports: [ RouterModule.forChild(routes), - NgbModule.forRoot(), - SharedModule, OrderModule, PipeModule, OmbiShared, - PaginatorModule, - TabViewModule, ], declarations: [ IssuesComponent, diff --git a/src/Ombi/ClientApp/src/app/login/login.component.ts b/src/Ombi/ClientApp/src/app/login/login.component.ts index 7f1dccbd8..b93fb24ae 100644 --- a/src/Ombi/ClientApp/src/app/login/login.component.ts +++ b/src/Ombi/ClientApp/src/app/login/login.component.ts @@ -15,7 +15,7 @@ import { ImageService } from "../services"; import { fadeInOutAnimation } from "../animations/fadeinout"; import { StorageService } from "../shared/storage/storage-service"; -import { MatSnackBar } from "@angular/material"; +import { MatSnackBar } from "@angular/material/snack-bar"; @Component({ templateUrl: "./login.component.html", diff --git a/src/Ombi/ClientApp/src/app/media-details/components/artist/artist-details.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/artist/artist-details.component.ts index e154a2981..ff6e1e436 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/artist/artist-details.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/artist/artist-details.component.ts @@ -2,7 +2,7 @@ import { Component } from "@angular/core"; import { ImageService, SearchV2Service, RequestService, MessageService } from "../../../services"; import { ActivatedRoute } from "@angular/router"; import { DomSanitizer } from "@angular/platform-browser"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; import { YoutubeTrailerComponent } from "../shared/youtube-trailer.component"; import { AuthService } from "../../../auth/auth.service"; import { DenyDialogComponent } from "../shared/deny-dialog/deny-dialog.component"; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts index 1d2600550..202e805d9 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/movie-details.component.ts @@ -3,7 +3,7 @@ import { ImageService, SearchV2Service, RequestService, MessageService } from ". import { ActivatedRoute } from "@angular/router"; import { DomSanitizer } from "@angular/platform-browser"; import { ISearchMovieResultV2 } from "../../../interfaces/ISearchMovieResultV2"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; import { YoutubeTrailerComponent } from "../shared/youtube-trailer.component"; import { AuthService } from "../../../auth/auth.service"; import { IMovieRequests, RequestType, IAdvancedData } from "../../../interfaces"; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-admin-panel/movie-admin-panel.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-admin-panel/movie-admin-panel.component.ts index ed7b54f97..e19840a6d 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-admin-panel/movie-admin-panel.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-admin-panel/movie-admin-panel.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnInit, EventEmitter, Output } from "@angular/core"; import { RadarrService } from "../../../../../services"; import { IRadarrProfile, IRadarrRootFolder, IMovieRequests, IAdvancedData } from "../../../../../interfaces"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; import { MovieAdvancedOptionsComponent } from "../movie-advanced-options/movie-advanced-options.component"; import { RequestServiceV2 } from "../../../../../services/requestV2.service"; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-advanced-options/movie-advanced-options.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-advanced-options/movie-advanced-options.component.ts index 4e237890d..d5c3310fb 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-advanced-options/movie-advanced-options.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/movie/panels/movie-advanced-options/movie-advanced-options.component.ts @@ -1,5 +1,5 @@ import { Component, Inject } from "@angular/core"; -import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; import { IAdvancedData } from "../../../../../interfaces"; @Component({ diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.html b/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.html index 1e0cbea7e..6bd1501a8 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.html +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.html @@ -1,29 +1,29 @@ {{'MediaDetails.Casts.CastTitle' | translate}} - - -
-
- - - - - - - - -
-
- {{'MediaDetails.Casts.Character' | translate}}: {{item.character}} - {{'MediaDetails.Casts.Character' | translate}}: {{item.character.name}} -
-
- {{'MediaDetails.Casts.Actor' | translate}}: {{item.name}} - {{'MediaDetails.Casts.Actor' | translate}}: {{item.person.name}} -
-
-
-
+ + + + +
-
\ No newline at end of file + \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.scss b/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.scss index d9db92e00..6d1402716 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.scss +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/cast-carousel/cast-carousel.component.scss @@ -1,7 +1,64 @@ @import "~@angular/material/theming"; @import "~styles/variables.scss"; -.actor-background { - .dark & { - background: $backgroundTint-dark; - } -} + ::ng-deep body .ui-carousel .ui-carousel-content .ui-carousel-prev, +body .ui-carousel .ui-carousel-content .ui-carousel-next { + background-color: #ffffff; + border: solid 1px rgba(178, 193, 205, 0.64); + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + margin: 0.2em; + color: #333333; + -moz-transition: color 0.2s; + -o-transition: color 0.2s; + -webkit-transition: color 0.2s; + transition: color 0.2s; +} + +::ng-deep body .ui-carousel .ui-carousel-content .ui-carousel-prev:not(.ui-state-disabled):hover, +body .ui-carousel .ui-carousel-content .ui-carousel-next:not(.ui-state-disabled):hover { + background-color: #ffffff; + color: #000; + border-color: solid 1px rgba(178, 193, 205, 0.64); +} + +::ng-deep body .ui-carousel .ui-carousel-dots-container .ui-carousel-dot-item>.ui-button { + border-color: transparent; + background-color: transparent; +} + +::ng-deep body .ui-carousel .ui-carousel-dots-container .ui-carousel-dot-item .ui-carousel-dot-icon { + width: 20px; + height: 6px; + background-color: rgba(255, 255, 255, 0.44); + margin: 0 0.2em; +} + +::ng-deep body .ui-carousel .ui-carousel-dots-container .ui-carousel-dot-item .ui-carousel-dot-icon::before { + content: " "; +} + +::ng-deep body .ui-carousel .ui-carousel-dots-container .ui-carousel-dot-item.ui-state-highlight .ui-carousel-dot-icon { + background-color: #FFF; +} + +.carousel-item { + text-align: center; +} + +::ng-deep .ui-carousel-next { + background-color: #ffffff; + border: solid 1px rgba(178, 193, 205, 0.64); + border-radius: 50%; + margin: 0.2em; + color: #333333; + transition: color 0.2s; +} + +::ng-deep .ui-carousel-content button:focus { + outline: none; +} + +.bottom-space { + padding-bottom: 10px; +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts index 8d6e92e64..8ead47144 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/deny-dialog/deny-dialog.component.ts @@ -1,6 +1,6 @@ import { Component, Inject, Output, EventEmitter } from "@angular/core"; import { IDenyDialogData } from "../interfaces/interfaces"; -import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; import { RequestService, MessageService } from "../../../../services"; import { RequestType, IRequestEngineResult } from "../../../../interfaces"; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts index 223d1a4a3..0730ab10d 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/new-issue/new-issue.component.ts @@ -1,6 +1,6 @@ import { Component, Inject, OnInit } from "@angular/core"; import { IDenyDialogData, IIssueDialogData } from "../interfaces/interfaces"; -import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; import { MessageService, IssuesService } from "../../../../services"; import { IIssues, IIssueCategory, IssueStatus, RequestType } from "../../../../interfaces"; import { TranslateService } from "@ngx-translate/core"; diff --git a/src/Ombi/ClientApp/src/app/media-details/components/shared/youtube-trailer.component.ts b/src/Ombi/ClientApp/src/app/media-details/components/shared/youtube-trailer.component.ts index 3456759cf..c0812071d 100644 --- a/src/Ombi/ClientApp/src/app/media-details/components/shared/youtube-trailer.component.ts +++ b/src/Ombi/ClientApp/src/app/media-details/components/shared/youtube-trailer.component.ts @@ -1,5 +1,5 @@ import { Component, Inject } from "@angular/core"; -import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material"; +import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog"; @Component({ selector: "youtube-trailer", 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 index fe32ae988..201d4c274 100644 --- 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 @@ -2,7 +2,7 @@ import { Component, Input } from "@angular/core"; import { IChildRequests, RequestType } from "../../../../../interfaces"; import { RequestService } from "../../../../../services/request.service"; import { MessageService } from "../../../../../services"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; import { DenyDialogComponent } from "../../../shared/deny-dialog/deny-dialog.component"; @Component({ 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 b59cf6b8e..9083dc959 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 @@ -3,7 +3,7 @@ import { ImageService, SearchV2Service, MessageService, RequestService } from ". import { ActivatedRoute } from "@angular/router"; import { DomSanitizer } from "@angular/platform-browser"; import { ISearchTvResultV2 } from "../../../interfaces/ISearchTvResultV2"; -import { MatDialog } from "@angular/material"; +import { MatDialog } from "@angular/material/dialog"; import { YoutubeTrailerComponent } from "../shared/youtube-trailer.component"; import { EpisodeRequestComponent } from "../../../shared/episode-request/episode-request.component"; import { IChildRequests, RequestType } from "../../../interfaces"; diff --git a/src/Ombi/ClientApp/src/app/my-nav/my-nav.component.scss b/src/Ombi/ClientApp/src/app/my-nav/my-nav.component.scss index b26c43c30..f6fcb0824 100644 --- a/src/Ombi/ClientApp/src/app/my-nav/my-nav.component.scss +++ b/src/Ombi/ClientApp/src/app/my-nav/my-nav.component.scss @@ -63,7 +63,7 @@ // changed bottom to 10px so when you overlay a link it won't get blocked by URL .bottom-nav-link { bottom: 10px; - position: absolute; + position: absolute !important; //background-color:#E84C3D; } diff --git a/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts b/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts index 78045ec57..def528ac0 100644 --- a/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts +++ b/src/Ombi/ClientApp/src/app/my-nav/nav-search.component.ts @@ -12,9 +12,8 @@ import { empty, of } from "rxjs"; import { SearchV2Service } from "../services/searchV2.service"; import { IMultiSearchResult } from "../interfaces"; import { Router } from "@angular/router"; -import { NgbTypeaheadSelectItemEvent } from "@ng-bootstrap/ng-bootstrap"; import { FormGroup, FormBuilder } from "@angular/forms"; -import { MatAutocompleteSelectedEvent } from "@angular/material"; +import { MatAutocompleteSelectedEvent } from "@angular/material/autocomplete"; @Component({ selector: "app-nav-search", diff --git a/src/Ombi/ClientApp/src/app/pipes/pipe.module.ts b/src/Ombi/ClientApp/src/app/pipes/pipe.module.ts index 615157a5f..a947851b3 100644 --- a/src/Ombi/ClientApp/src/app/pipes/pipe.module.ts +++ b/src/Ombi/ClientApp/src/app/pipes/pipe.module.ts @@ -11,7 +11,7 @@ import { QualityPipe } from "./QualityPipe"; }) export class PipeModule { - public static forRoot(): ModuleWithProviders { + public static forRoot(): ModuleWithProviders { return { ngModule: PipeModule, providers: [], diff --git a/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.component.html b/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.component.html deleted file mode 100644 index ee60b7c87..000000000 --- a/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.component.html +++ /dev/null @@ -1,51 +0,0 @@ -

Recently Added

- -
- -
- - - -
- poster -
{{movie.title}}
-
- - -
- - - -
- - - -
- - - - poster - {{t.title}} -
- Season: {{t.seasonNumber}} -
- Episode: {{t.episodeNumber}} -
- - - -
diff --git a/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.component.ts b/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.component.ts deleted file mode 100644 index f426a39d1..000000000 --- a/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.component.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { Component, OnInit } from "@angular/core"; -import { NguCarouselConfig } from "@ngu/carousel"; - -import { IRecentlyAddedMovies, IRecentlyAddedTvShows } from "../interfaces"; -import { ImageService, RecentlyAddedService } from "../services"; - -@Component({ - templateUrl: "recentlyAdded.component.html", - styles: [` - .leftRs { - position: absolute; - margin: auto; - top: 0; - bottom: 0; - width: 50px; - height: 50px; - box-shadow: 1px 2px 10px -1px rgba(0, 0, 0, .3); - border-radius: 100%; - left: 0; - background: #df691a; - } - - .rightRs { - position: absolute; - margin: auto; - top: 0; - bottom: 0; - width: 50px; - height: 50px; - box-shadow: 1px 2px 10px -1px rgba(0, 0, 0, .3); - border-radius: 100%; - right: 0; - background: #df691a; - } - `], -}) - -export class RecentlyAddedComponent implements OnInit { - public movies: IRecentlyAddedMovies[]; - public tv: IRecentlyAddedTvShows[]; - public range: Date[]; - - public groupTv: boolean = false; - - // https://github.com/sheikalthaf/ngu-carousel - public carouselTile: NguCarouselConfig; - - constructor(private recentlyAddedService: RecentlyAddedService, - private imageService: ImageService) {} - - public ngOnInit() { - this.getMovies(); - this.getShows(); - - this.carouselTile = { - grid: {xs: 2, sm: 3, md: 3, lg: 5, all: 0}, - slide: 2, - speed: 400, - animation: "lazy", - point: { - visible: true, - }, - load: 2, - touch: true, - easing: "ease", - }; - } - - public close() { - if (this.range.length < 2) { - return; - } - if (!this.range[1]) { - // If we do not have a second date then just set it to now - this.range[1] = new Date(); - } - this.getMovies(); - } - - public change() { - this.getShows(); - } - - private getShows() { - if (this.groupTv) { - this.recentlyAddedService.getRecentlyAddedTvGrouped().subscribe(x => { - this.tv = x; - - this.tv.forEach((t) => { - this.imageService.getTvPoster(t.tvDbId).subscribe(p => { - if (p) { - t.posterPath = p; - } - }); - }); - }); - } else { - this.recentlyAddedService.getRecentlyAddedTv().subscribe(x => { - this.tv = x; - - this.tv.forEach((t) => { - this.imageService.getTvPoster(t.tvDbId).subscribe(p => { - if (p) { - t.posterPath = p; - } - }); - }); - }); - } - } - - private getMovies() { - this.recentlyAddedService.getRecentlyAddedMovies().subscribe(x => { - this.movies = x; - - this.movies.forEach((movie) => { - if (movie.theMovieDbId) { - this.imageService.getMoviePoster(movie.theMovieDbId).subscribe(p => { - movie.posterPath = p; - }); - } else if (movie.imdbId) { - this.imageService.getMoviePoster(movie.imdbId).subscribe(p => { - movie.posterPath = p; - }); - } else { - movie.posterPath = ""; - } - }); - }); - } -} diff --git a/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.module.ts b/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.module.ts deleted file mode 100644 index cf0b423a3..000000000 --- a/src/Ombi/ClientApp/src/app/recentlyAdded/recentlyAdded.module.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { NgModule } from "@angular/core"; -import { RouterModule, Routes } from "@angular/router"; - -import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; -import { OrderModule } from "ngx-order-pipe"; -import { CalendarModule, PaginatorModule, SharedModule, TabViewModule } from "primeng/primeng"; - -import { IdentityService, ImageService, RecentlyAddedService } from "../services"; - -import { AuthGuard } from "../auth/auth.guard"; - -import { SharedModule as OmbiShared } from "../shared/shared.module"; - -import { RecentlyAddedComponent } from "./recentlyAdded.component"; - -import { NguCarouselModule } from "@ngu/carousel"; - -const routes: Routes = [ - { path: "", component: RecentlyAddedComponent, canActivate: [AuthGuard] }, -]; - -@NgModule({ - imports: [ - RouterModule.forChild(routes), - NgbModule.forRoot(), - SharedModule, - OrderModule, - OmbiShared, - PaginatorModule, - TabViewModule, - CalendarModule, - NguCarouselModule, - ], - declarations: [ - RecentlyAddedComponent, - ], - exports: [ - RouterModule, - ], - providers: [ - IdentityService, - RecentlyAddedService, - ImageService, - ], - -}) -export class RecentlyAddedModule { } diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts index 6c451d3ba..90f651164 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/components/movies-grid/movies-grid.component.ts @@ -1,6 +1,7 @@ import { Component, AfterViewInit, ViewChild, EventEmitter, Output, ChangeDetectorRef, OnInit } from "@angular/core"; import { IMovieRequests, IRequestsViewModel } from "../../../interfaces"; -import { MatPaginator, MatSort } from "@angular/material"; +import { MatPaginator } from "@angular/material/paginator"; +import { MatSort } from "@angular/material/sort"; import { merge, Observable, of as observableOf } from 'rxjs'; import { catchError, map, startWith, switchMap } from 'rxjs/operators'; @@ -18,7 +19,7 @@ export class MoviesGridComponent implements OnInit, AfterViewInit { public dataSource: IMovieRequests[] = []; public resultsLength: number; public isLoadingResults = true; - public displayedColumns: string[] = ['requestedUser.requestedBy', 'title', 'requestedDate', 'status', 'requestStatus', 'actions']; + public displayedColumns: string[] = ['title', 'requestedUser.requestedBy', 'status', 'requestStatus','requestedDate', 'actions']; public gridCount: string = "15"; public isAdmin: boolean; public defaultSort: string = "requestedDate"; @@ -35,8 +36,8 @@ export class MoviesGridComponent implements OnInit, AfterViewInit { @Output() public onOpenOptions = new EventEmitter<{ request: any, filter: any, onChange: any }>(); - @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; - @ViewChild(MatSort, { static: false }) sort: MatSort; + @ViewChild(MatPaginator) paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; constructor(private requestService: RequestServiceV2, private ref: ChangeDetectorRef, private auth: AuthService, private storageService: StorageService) { diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts index 8b3b35f90..fc00c39d3 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/components/requests-list.component.ts @@ -1,5 +1,5 @@ import { Component, ViewChild } from "@angular/core"; -import { MatBottomSheet } from "@angular/material"; +import { MatBottomSheet } from "@angular/material/bottom-sheet"; import { RequestOptionsComponent } from "./options/request-options.component"; import { UpdateType } from "../models/UpdateType"; import { MoviesGridComponent } from "./movies-grid/movies-grid.component"; diff --git a/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.ts b/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.ts index 2726bdc91..891331be1 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/components/tv-grid/tv-grid.component.ts @@ -1,6 +1,7 @@ import { Component, AfterViewInit, ViewChild, Output, EventEmitter, ChangeDetectorRef, OnInit } from "@angular/core"; import { IRequestsViewModel, IChildRequests } from "../../../interfaces"; -import { MatPaginator, MatSort } from "@angular/material"; +import { MatPaginator } from "@angular/material/paginator"; +import { MatSort } from "@angular/material/sort"; import { merge, of as observableOf, Observable } from 'rxjs'; import { catchError, map, startWith, switchMap } from 'rxjs/operators'; @@ -34,8 +35,8 @@ export class TvGridComponent implements OnInit, AfterViewInit { @Output() public onOpenOptions = new EventEmitter<{request: any, filter: any, onChange: any}>(); - @ViewChild(MatPaginator, {static: false}) paginator: MatPaginator; - @ViewChild(MatSort, {static: false}) sort: MatSort; + @ViewChild(MatPaginator) paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; constructor(private requestService: RequestServiceV2, private auth: AuthService, private ref: ChangeDetectorRef, private storageService: StorageService) { diff --git a/src/Ombi/ClientApp/src/app/requests-list/requests-list.module.ts b/src/Ombi/ClientApp/src/app/requests-list/requests-list.module.ts index cda77882a..205cc2046 100644 --- a/src/Ombi/ClientApp/src/app/requests-list/requests-list.module.ts +++ b/src/Ombi/ClientApp/src/app/requests-list/requests-list.module.ts @@ -9,7 +9,7 @@ import { AuthGuard } from "../auth/auth.guard"; import * as fromComponents from './components'; import { RequestsListComponent } from "./components/requests-list.component"; -import { MatBottomSheetModule } from "@angular/material"; +import { MatBottomSheetModule } from "@angular/material/bottom-sheet"; const routes: Routes = [ { path: "", component: RequestsListComponent, canActivate: [AuthGuard] }, diff --git a/src/Ombi/ClientApp/src/app/requests/movierequests.component.ts b/src/Ombi/ClientApp/src/app/requests/movierequests.component.ts index c4dd000b4..798600447 100644 --- a/src/Ombi/ClientApp/src/app/requests/movierequests.component.ts +++ b/src/Ombi/ClientApp/src/app/requests/movierequests.component.ts @@ -1,386 +1,386 @@ -import { PlatformLocation, APP_BASE_HREF } from "@angular/common"; -import { Component, Input, OnInit, Inject } from "@angular/core"; -import { DomSanitizer } from "@angular/platform-browser"; -import { Subject } from "rxjs"; -import { debounceTime, distinctUntilChanged } from "rxjs/operators"; +// import { PlatformLocation, APP_BASE_HREF } from "@angular/common"; +// import { Component, Input, OnInit, Inject } from "@angular/core"; +// import { DomSanitizer } from "@angular/platform-browser"; +// import { Subject } from "rxjs"; +// import { debounceTime, distinctUntilChanged } from "rxjs/operators"; -import { AuthService } from "../auth/auth.service"; -import { FilterType, IFilter, IIssueCategory, IMovieRequests, IPagenator, IRadarrProfile, IRadarrRootFolder, OrderType } from "../interfaces"; -import { NotificationService, RadarrService, RequestService } from "../services"; +// import { AuthService } from "../auth/auth.service"; +// import { FilterType, IFilter, IIssueCategory, IMovieRequests, IPagenator, IRadarrProfile, IRadarrRootFolder, OrderType } from "../interfaces"; +// import { NotificationService, RadarrService, RequestService } from "../services"; -@Component({ - selector: "movie-requests", - templateUrl: "./movierequests.component.html", -}) -export class MovieRequestsComponent implements OnInit { - public movieRequests: IMovieRequests[]; - public defaultPoster: string; +// @Component({ +// selector: "movie-requests", +// templateUrl: "./movierequests.component.html", +// }) +// export class MovieRequestsComponent implements OnInit { +// public movieRequests: IMovieRequests[]; +// public defaultPoster: string; - public searchChanged: Subject = new Subject(); - public searchText: string; +// public searchChanged: Subject = new Subject(); +// public searchText: string; - public isAdmin: boolean; // Also PowerUser +// public isAdmin: boolean; // Also PowerUser - public radarrProfiles: IRadarrProfile[]; - public radarrRootFolders: IRadarrRootFolder[]; +// public radarrProfiles: IRadarrProfile[]; +// public radarrRootFolders: IRadarrRootFolder[]; - @Input() public issueCategories: IIssueCategory[]; - @Input() public issuesEnabled: boolean; - public issuesBarVisible = false; - public issueRequest: IMovieRequests; - public issueProviderId: string; - public issueCategorySelected: IIssueCategory; +// @Input() public issueCategories: IIssueCategory[]; +// @Input() public issuesEnabled: boolean; +// public issuesBarVisible = false; +// public issueRequest: IMovieRequests; +// public issueProviderId: string; +// public issueCategorySelected: IIssueCategory; - public filterDisplay: boolean; - public filter: IFilter; - public filterType = FilterType; +// public filterDisplay: boolean; +// public filter: IFilter; +// public filterType = FilterType; - public orderType: OrderType = OrderType.RequestedDateDesc; - public OrderType = OrderType; - public denyDisplay: boolean; - public requestToDeny: IMovieRequests; - public rejectionReason: string; +// public orderType: OrderType = OrderType.RequestedDateDesc; +// public OrderType = OrderType; +// public denyDisplay: boolean; +// public requestToDeny: IMovieRequests; +// public rejectionReason: string; - public totalMovies: number = 100; - public currentlyLoaded: number; - private amountToLoad: number; - private href: string; +// public totalMovies: number = 100; +// public currentlyLoaded: number; +// private amountToLoad: number; +// private href: string; - constructor( - private requestService: RequestService, - private auth: AuthService, - private notificationService: NotificationService, - private radarrService: RadarrService, - private sanitizer: DomSanitizer, - @Inject(APP_BASE_HREF) href:string) { - this.href = href; - 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.href; - if (base) { - this.defaultPoster = "../../.." + base + "/images/default_movie_poster.png"; - } - } +// constructor( +// private requestService: RequestService, +// private auth: AuthService, +// private notificationService: NotificationService, +// private radarrService: RadarrService, +// private sanitizer: DomSanitizer, +// @Inject(APP_BASE_HREF) href:string) { +// this.href = href; +// 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.href; +// if (base) { +// this.defaultPoster = "../../.." + base + "/images/default_movie_poster.png"; +// } +// } - public ngOnInit() { - this.amountToLoad = 10; - this.currentlyLoaded = 10; - this.filter = { - availabilityFilter: FilterType.None, - statusFilter: FilterType.None, - }; - this.loadInit(); - this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); +// public ngOnInit() { +// this.amountToLoad = 10; +// this.currentlyLoaded = 10; +// this.filter = { +// availabilityFilter: FilterType.None, +// statusFilter: FilterType.None, +// }; +// this.loadInit(); +// this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); - } +// } - public paginate(event: IPagenator) { - const skipAmount = event.first; - this.loadRequests(this.amountToLoad, skipAmount); - } +// public paginate(event: IPagenator) { +// const skipAmount = event.first; +// this.loadRequests(this.amountToLoad, skipAmount); +// } - public search(text: any) { - this.searchChanged.next(text.target.value); - } +// public search(text: any) { +// this.searchChanged.next(text.target.value); +// } - public removeRequest(request: IMovieRequests) { - this.requestService.removeMovieRequest(request.id); - this.removeRequestFromUi(request); - this.loadRequests(this.amountToLoad, this.currentlyLoaded = 0); - } +// public removeRequest(request: IMovieRequests) { +// this.requestService.removeMovieRequest(request.id); +// this.removeRequestFromUi(request); +// this.loadRequests(this.amountToLoad, this.currentlyLoaded = 0); +// } - public changeAvailability(request: IMovieRequests, available: boolean) { - request.available = available; +// public changeAvailability(request: IMovieRequests, available: boolean) { +// request.available = available; - if (available) { - this.requestService.markMovieAvailable({ id: request.id }).subscribe(x => { - if (x.result) { - this.notificationService.success( - `${request.title} Is now available`); - } else { - this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } else { - this.requestService.markMovieUnavailable({ id: request.id }).subscribe(x => { - if (x.result) { - this.notificationService.success( - `${request.title} Is now unavailable`); - } else { - this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } - } +// if (available) { +// this.requestService.markMovieAvailable({ id: request.id }).subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `${request.title} Is now available`); +// } else { +// this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } else { +// this.requestService.markMovieUnavailable({ id: request.id }).subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `${request.title} Is now unavailable`); +// } else { +// this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } +// } - public approve(request: IMovieRequests) { - request.approved = true; - this.approveRequest(request); - } +// public approve(request: IMovieRequests) { +// request.approved = true; +// this.approveRequest(request); +// } - public deny(request: IMovieRequests) { - this.requestToDeny = request; - this.denyDisplay = true; - } +// public deny(request: IMovieRequests) { +// this.requestToDeny = request; +// this.denyDisplay = true; +// } - public denyRequest() { - this.requestService.denyMovie({ id: this.requestToDeny.id, reason: this.rejectionReason }) - .subscribe(x => { - this.denyDisplay = false; - if (x.result) { - this.notificationService.success( - `Request for ${this.requestToDeny.title} has been denied successfully`); - const index = this.movieRequests.indexOf(this.requestToDeny, 0); - if (index > -1) { - this.movieRequests[index].denied = true; - } - } else { - this.notificationService.warning("Request Denied", x.message ? x.message : x.errorMessage); - this.requestToDeny.denied = false; - } - }); - } +// public denyRequest() { +// this.requestService.denyMovie({ id: this.requestToDeny.id, reason: this.rejectionReason }) +// .subscribe(x => { +// this.denyDisplay = false; +// if (x.result) { +// this.notificationService.success( +// `Request for ${this.requestToDeny.title} has been denied successfully`); +// const index = this.movieRequests.indexOf(this.requestToDeny, 0); +// if (index > -1) { +// this.movieRequests[index].denied = true; +// } +// } else { +// this.notificationService.warning("Request Denied", x.message ? x.message : x.errorMessage); +// this.requestToDeny.denied = false; +// } +// }); +// } - public selectRootFolder(searchResult: IMovieRequests, rootFolderSelected: IRadarrRootFolder, event: any) { - event.preventDefault(); - searchResult.rootPathOverride = rootFolderSelected.id; - this.setOverride(searchResult); - this.updateRequest(searchResult); - } +// public selectRootFolder(searchResult: IMovieRequests, rootFolderSelected: IRadarrRootFolder, event: any) { +// event.preventDefault(); +// searchResult.rootPathOverride = rootFolderSelected.id; +// this.setOverride(searchResult); +// this.updateRequest(searchResult); +// } - public selectQualityProfile(searchResult: IMovieRequests, profileSelected: IRadarrProfile, event: any) { - event.preventDefault(); - searchResult.qualityOverride = profileSelected.id; - this.setOverride(searchResult); - this.updateRequest(searchResult); - } +// public selectQualityProfile(searchResult: IMovieRequests, profileSelected: IRadarrProfile, event: any) { +// event.preventDefault(); +// searchResult.qualityOverride = profileSelected.id; +// this.setOverride(searchResult); +// this.updateRequest(searchResult); +// } - public reportIssue(catId: IIssueCategory, req: IMovieRequests) { - this.issueRequest = req; - this.issueCategorySelected = catId; - this.issuesBarVisible = true; - this.issueProviderId = req.theMovieDbId.toString(); - } +// public reportIssue(catId: IIssueCategory, req: IMovieRequests) { +// this.issueRequest = req; +// this.issueCategorySelected = catId; +// this.issuesBarVisible = true; +// this.issueProviderId = req.theMovieDbId.toString(); +// } - public ignore(event: any): void { - event.preventDefault(); - } +// public ignore(event: any): void { +// event.preventDefault(); +// } - public clearFilter(el: any) { - el = el.toElement || el.relatedTarget || el.target || el.srcElement; +// public clearFilter(el: any) { +// el = el.toElement || el.relatedTarget || el.target || el.srcElement; - el = el.parentElement; - el = el.querySelectorAll("INPUT"); - for (el of el) { - el.checked = false; - el.parentElement.classList.remove("active"); - } +// el = el.parentElement; +// el = el.querySelectorAll("INPUT"); +// for (el of el) { +// el.checked = false; +// el.parentElement.classList.remove("active"); +// } - this.filterDisplay = false; - this.filter.availabilityFilter = FilterType.None; - this.filter.statusFilter = FilterType.None; +// this.filterDisplay = false; +// this.filter.availabilityFilter = FilterType.None; +// this.filter.statusFilter = FilterType.None; - this.resetSearch(); - } +// this.resetSearch(); +// } - public filterAvailability(filter: FilterType, el: any) { - this.filterActiveStyle(el); - this.filter.availabilityFilter = filter; - this.loadInit(); - } +// public filterAvailability(filter: FilterType, el: any) { +// this.filterActiveStyle(el); +// this.filter.availabilityFilter = filter; +// this.loadInit(); +// } - public filterStatus(filter: FilterType, el: any) { - this.filterActiveStyle(el); - this.filter.statusFilter = filter; - this.loadInit(); - } +// public filterStatus(filter: FilterType, el: any) { +// this.filterActiveStyle(el); +// this.filter.statusFilter = filter; +// this.loadInit(); +// } - public setOrder(value: OrderType, el: any) { - el = el.toElement || el.relatedTarget || el.target || el.srcElement; +// public setOrder(value: OrderType, el: any) { +// el = el.toElement || el.relatedTarget || el.target || el.srcElement; - const parent = el.parentElement; - const previousFilter = parent.querySelector(".active"); +// const parent = el.parentElement; +// const previousFilter = parent.querySelector(".active"); - previousFilter.className = ""; - el.className = "active"; +// previousFilter.className = ""; +// el.className = "active"; - this.orderType = value; +// this.orderType = value; - this.loadInit(); - } +// this.loadInit(); +// } - public subscribe(request: IMovieRequests) { - request.subscribed = true; - this.requestService.subscribeToMovie(request.id) - .subscribe(x => { - this.notificationService.success("Subscribed To Movie!"); - }); - } +// public subscribe(request: IMovieRequests) { +// request.subscribed = true; +// this.requestService.subscribeToMovie(request.id) +// .subscribe(x => { +// this.notificationService.success("Subscribed To Movie!"); +// }); +// } - public unSubscribe(request: IMovieRequests) { - request.subscribed = false; - this.requestService.unSubscribeToMovie(request.id) - .subscribe(x => { - this.notificationService.success("Unsubscribed Movie!"); - }); - } +// public unSubscribe(request: IMovieRequests) { +// request.subscribed = false; +// this.requestService.unSubscribeToMovie(request.id) +// .subscribe(x => { +// this.notificationService.success("Unsubscribed Movie!"); +// }); +// } - public isRequestUser(request: IMovieRequests) { - if (request.requestedUser.userName === this.auth.claims().name) { - return true; - } - return false; - } +// public isRequestUser(request: IMovieRequests) { +// if (request.requestedUser.userName === this.auth.claims().name) { +// return true; +// } +// return false; +// } - private filterActiveStyle(el: any) { - el = el.toElement || el.relatedTarget || el.target || el.srcElement; +// private filterActiveStyle(el: any) { +// el = el.toElement || el.relatedTarget || el.target || el.srcElement; - el = el.parentElement; //gets radio div - el = el.parentElement; //gets form group div - el = el.parentElement; //gets status filter div - el = el.querySelectorAll("INPUT"); - for (el of el) { - if (el.checked) { - if (!el.parentElement.classList.contains("active")) { - el.parentElement.className += " active"; - } - } else { - el.parentElement.classList.remove("active"); - } - } - } +// el = el.parentElement; //gets radio div +// el = el.parentElement; //gets form group div +// el = el.parentElement; //gets status filter div +// el = el.querySelectorAll("INPUT"); +// for (el of el) { +// if (el.checked) { +// if (!el.parentElement.classList.contains("active")) { +// el.parentElement.className += " active"; +// } +// } else { +// el.parentElement.classList.remove("active"); +// } +// } +// } - private loadRequests(amountToLoad: number, currentlyLoaded: number) { - this.requestService.getMovieRequests(amountToLoad, currentlyLoaded, this.orderType, this.filter) - .subscribe(x => { - this.setOverrides(x.collection); - if (!this.movieRequests) { - this.movieRequests = []; - } - this.movieRequests = x.collection; - this.totalMovies = x.total; - this.currentlyLoaded = currentlyLoaded + amountToLoad; - }); - } +// private loadRequests(amountToLoad: number, currentlyLoaded: number) { +// this.requestService.getMovieRequests(amountToLoad, currentlyLoaded, this.orderType, this.filter) +// .subscribe(x => { +// this.setOverrides(x.collection); +// if (!this.movieRequests) { +// this.movieRequests = []; +// } +// this.movieRequests = x.collection; +// this.totalMovies = x.total; +// this.currentlyLoaded = currentlyLoaded + amountToLoad; +// }); +// } - private updateRequest(request: IMovieRequests) { - this.requestService.updateMovieRequest(request) - .subscribe(x => { - this.setOverride(x); - request = x; - }); - } +// private updateRequest(request: IMovieRequests) { +// this.requestService.updateMovieRequest(request) +// .subscribe(x => { +// this.setOverride(x); +// request = x; +// }); +// } - private approveRequest(request: IMovieRequests) { - this.requestService.approveMovie({ id: request.id }) - .subscribe(x => { - request.approved = true; - if (x.result) { - this.notificationService.success( - `Request for ${request.title} has been approved successfully`); - } else { - this.notificationService.warning("Request Approved", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } +// private approveRequest(request: IMovieRequests) { +// this.requestService.approveMovie({ id: request.id }) +// .subscribe(x => { +// request.approved = true; +// if (x.result) { +// this.notificationService.success( +// `Request for ${request.title} has been approved successfully`); +// } else { +// this.notificationService.warning("Request Approved", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } - private loadInit() { - this.requestService.getMovieRequests(this.amountToLoad, 0, this.orderType, this.filter) - .subscribe(x => { - this.movieRequests = x.collection; - this.totalMovies = x.total; +// private loadInit() { +// this.requestService.getMovieRequests(this.amountToLoad, 0, this.orderType, this.filter) +// .subscribe(x => { +// this.movieRequests = x.collection; +// this.totalMovies = x.total; - this.movieRequests.forEach((req) => { - this.setBackground(req); - this.setPoster(req); - }); - if (this.isAdmin) { - this.radarrService.getQualityProfilesFromSettings().subscribe(c => { - this.radarrProfiles = c; - this.movieRequests.forEach((req) => this.setQualityOverrides(req)); - }); - this.radarrService.getRootFoldersFromSettings().subscribe(c => { - this.radarrRootFolders = c; - this.movieRequests.forEach((req) => this.setRootFolderOverrides(req)); - }); - } - }); - } +// this.movieRequests.forEach((req) => { +// this.setBackground(req); +// this.setPoster(req); +// }); +// if (this.isAdmin) { +// this.radarrService.getQualityProfilesFromSettings().subscribe(c => { +// this.radarrProfiles = c; +// this.movieRequests.forEach((req) => this.setQualityOverrides(req)); +// }); +// this.radarrService.getRootFoldersFromSettings().subscribe(c => { +// this.radarrRootFolders = c; +// this.movieRequests.forEach((req) => this.setRootFolderOverrides(req)); +// }); +// } +// }); +// } - private resetSearch() { - this.currentlyLoaded = 5; - this.loadInit(); - } +// private resetSearch() { +// this.currentlyLoaded = 5; +// this.loadInit(); +// } - private removeRequestFromUi(key: IMovieRequests) { - const index = this.movieRequests.indexOf(key, 0); - if (index > -1) { - this.movieRequests.splice(index, 1); - } - } +// private removeRequestFromUi(key: IMovieRequests) { +// const index = this.movieRequests.indexOf(key, 0); +// if (index > -1) { +// this.movieRequests.splice(index, 1); +// } +// } - private setOverrides(requests: IMovieRequests[]): void { - requests.forEach((req) => { - this.setOverride(req); - }); - } +// private setOverrides(requests: IMovieRequests[]): void { +// requests.forEach((req) => { +// this.setOverride(req); +// }); +// } - private setQualityOverrides(req: IMovieRequests): void { - if (this.radarrProfiles) { - const profile = this.radarrProfiles.filter((p) => { - return p.id === req.qualityOverride; - }); - if (profile.length > 0) { - req.qualityOverrideTitle = profile[0].name; - } - } - } - private setRootFolderOverrides(req: IMovieRequests): void { - if (this.radarrRootFolders) { - const path = this.radarrRootFolders.filter((folder) => { - return folder.id === req.rootPathOverride; - }); - if (path.length > 0) { - req.rootPathOverrideTitle = path[0].path; - } - } - } +// private setQualityOverrides(req: IMovieRequests): void { +// if (this.radarrProfiles) { +// const profile = this.radarrProfiles.filter((p) => { +// return p.id === req.qualityOverride; +// }); +// if (profile.length > 0) { +// req.qualityOverrideTitle = profile[0].name; +// } +// } +// } +// private setRootFolderOverrides(req: IMovieRequests): void { +// if (this.radarrRootFolders) { +// const path = this.radarrRootFolders.filter((folder) => { +// return folder.id === req.rootPathOverride; +// }); +// if (path.length > 0) { +// req.rootPathOverrideTitle = path[0].path; +// } +// } +// } - private setOverride(req: IMovieRequests): void { - this.setPoster(req); - this.setBackground(req); - this.setQualityOverrides(req); - this.setRootFolderOverrides(req); - } +// private setOverride(req: IMovieRequests): void { +// this.setPoster(req); +// this.setBackground(req); +// this.setQualityOverrides(req); +// this.setRootFolderOverrides(req); +// } - private setPoster(req: IMovieRequests): void { - if (req.posterPath === null) { - req.posterPath = this.defaultPoster; - } else { - req.posterPath = "https://image.tmdb.org/t/p/w300/" + req.posterPath; - } - } +// private setPoster(req: IMovieRequests): void { +// if (req.posterPath === null) { +// req.posterPath = this.defaultPoster; +// } else { +// req.posterPath = "https://image.tmdb.org/t/p/w300/" + req.posterPath; +// } +// } - private setBackground(req: IMovieRequests): void { - req.backgroundPath = this.sanitizer.bypassSecurityTrustStyle - ("url(" + "https://image.tmdb.org/t/p/w1280" + req.background + ")"); - } +// private setBackground(req: IMovieRequests): void { +// req.backgroundPath = this.sanitizer.bypassSecurityTrustStyle +// ("url(" + "https://image.tmdb.org/t/p/w1280" + req.background + ")"); +// } -} +// } diff --git a/src/Ombi/ClientApp/src/app/requests/music/musicrequests.component.ts b/src/Ombi/ClientApp/src/app/requests/music/musicrequests.component.ts index 54d0ca0c4..ccac00776 100644 --- a/src/Ombi/ClientApp/src/app/requests/music/musicrequests.component.ts +++ b/src/Ombi/ClientApp/src/app/requests/music/musicrequests.component.ts @@ -1,349 +1,349 @@ -import { PlatformLocation, APP_BASE_HREF } from "@angular/common"; -import { Component, Input, OnInit, Inject } from "@angular/core"; -import { DomSanitizer } from "@angular/platform-browser"; -import { Subject } from "rxjs"; -import { debounceTime, distinctUntilChanged } from "rxjs/operators"; +// import { PlatformLocation, APP_BASE_HREF } from "@angular/common"; +// import { Component, Input, OnInit, Inject } from "@angular/core"; +// import { DomSanitizer } from "@angular/platform-browser"; +// import { Subject } from "rxjs"; +// import { debounceTime, distinctUntilChanged } from "rxjs/operators"; -import { AuthService } from "../../auth/auth.service"; -import { FilterType, IAlbumRequest, IFilter, IIssueCategory, IPagenator, OrderType } from "../../interfaces"; -import { NotificationService, RequestService } from "../../services"; +// import { AuthService } from "../../auth/auth.service"; +// import { FilterType, IAlbumRequest, IFilter, IIssueCategory, IPagenator, OrderType } from "../../interfaces"; +// import { NotificationService, RequestService } from "../../services"; -@Component({ - selector: "music-requests", - templateUrl: "./musicrequests.component.html", -}) -export class MusicRequestsComponent implements OnInit { - public albumRequests: IAlbumRequest[]; - public defaultPoster: string; +// @Component({ +// selector: "music-requests", +// templateUrl: "./musicrequests.component.html", +// }) +// export class MusicRequestsComponent implements OnInit { +// public albumRequests: IAlbumRequest[]; +// public defaultPoster: string; - public searchChanged: Subject = new Subject(); - public searchText: string; +// public searchChanged: Subject = new Subject(); +// public searchText: string; - public isAdmin: boolean; // Also PowerUser +// public isAdmin: boolean; // Also PowerUser - @Input() public issueCategories: IIssueCategory[]; - @Input() public issuesEnabled: boolean; - public issuesBarVisible = false; - public issueRequest: IAlbumRequest; - public issueProviderId: string; - public issueCategorySelected: IIssueCategory; +// @Input() public issueCategories: IIssueCategory[]; +// @Input() public issuesEnabled: boolean; +// public issuesBarVisible = false; +// public issueRequest: IAlbumRequest; +// public issueProviderId: string; +// public issueCategorySelected: IIssueCategory; - public filterDisplay: boolean; - public filter: IFilter; - public filterType = FilterType; +// public filterDisplay: boolean; +// public filter: IFilter; +// public filterType = FilterType; - public orderType: OrderType = OrderType.RequestedDateDesc; - public OrderType = OrderType; - public denyDisplay: boolean; - public requestToDeny: IAlbumRequest; - public rejectionReason: string; +// public orderType: OrderType = OrderType.RequestedDateDesc; +// public OrderType = OrderType; +// public denyDisplay: boolean; +// public requestToDeny: IAlbumRequest; +// public rejectionReason: string; - public totalAlbums: number = 100; - public currentlyLoaded: number; - private amountToLoad: number; - private href: string; +// public totalAlbums: number = 100; +// public currentlyLoaded: number; +// private amountToLoad: number; +// private href: string; - constructor( - private requestService: RequestService, - private auth: AuthService, - private notificationService: NotificationService, - private sanitizer: DomSanitizer, - @Inject(APP_BASE_HREF) href:string) { - this.href = href; - 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.searchAlbumRequests(this.searchText) - .subscribe(m => { - this.setOverrides(m); - this.albumRequests = m; - }); - }); - this.defaultPoster = "../../../images/default-music-placeholder.png"; - const base = this.href; - if (base) { - this.defaultPoster = "../../.." + base + "/images/default-music-placeholder.png"; - } - } +// constructor( +// private requestService: RequestService, +// private auth: AuthService, +// private notificationService: NotificationService, +// private sanitizer: DomSanitizer, +// @Inject(APP_BASE_HREF) href:string) { +// this.href = href; +// 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.searchAlbumRequests(this.searchText) +// .subscribe(m => { +// this.setOverrides(m); +// this.albumRequests = m; +// }); +// }); +// this.defaultPoster = "../../../images/default-music-placeholder.png"; +// const base = this.href; +// if (base) { +// this.defaultPoster = "../../.." + base + "/images/default-music-placeholder.png"; +// } +// } - public ngOnInit() { - this.amountToLoad = 10; - this.currentlyLoaded = 10; - this.filter = { - availabilityFilter: FilterType.None, - statusFilter: FilterType.None, - }; - this.loadInit(); - this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); - } +// public ngOnInit() { +// this.amountToLoad = 10; +// this.currentlyLoaded = 10; +// this.filter = { +// availabilityFilter: FilterType.None, +// statusFilter: FilterType.None, +// }; +// this.loadInit(); +// this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); +// } - public paginate(event: IPagenator) { - const skipAmount = event.first; - this.loadRequests(this.amountToLoad, skipAmount); - } +// public paginate(event: IPagenator) { +// const skipAmount = event.first; +// this.loadRequests(this.amountToLoad, skipAmount); +// } - public search(text: any) { - this.searchChanged.next(text.target.value); - } +// public search(text: any) { +// this.searchChanged.next(text.target.value); +// } - public async removeRequest(request: IAlbumRequest) { - await this.requestService.removeAlbumRequest(request).toPromise(); - this.removeRequestFromUi(request); - this.loadRequests(this.amountToLoad, this.currentlyLoaded = 0); - } +// public async removeRequest(request: IAlbumRequest) { +// await this.requestService.removeAlbumRequest(request).toPromise(); +// this.removeRequestFromUi(request); +// this.loadRequests(this.amountToLoad, this.currentlyLoaded = 0); +// } - public changeAvailability(request: IAlbumRequest, available: boolean) { - request.available = available; +// public changeAvailability(request: IAlbumRequest, available: boolean) { +// request.available = available; - if (available) { - this.requestService.markAlbumAvailable({ id: request.id }).subscribe(x => { - if (x.result) { - this.notificationService.success( - `${request.title} Is now available`); - } else { - this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } else { - this.requestService.markAlbumUnavailable({ id: request.id }).subscribe(x => { - if (x.result) { - this.notificationService.success( - `${request.title} Is now unavailable`); - } else { - this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } - } +// if (available) { +// this.requestService.markAlbumAvailable({ id: request.id }).subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `${request.title} Is now available`); +// } else { +// this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } else { +// this.requestService.markAlbumUnavailable({ id: request.id }).subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `${request.title} Is now unavailable`); +// } else { +// this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } +// } - public approve(request: IAlbumRequest) { - request.approved = true; - this.approveRequest(request); - } +// public approve(request: IAlbumRequest) { +// request.approved = true; +// this.approveRequest(request); +// } - public deny(request: IAlbumRequest) { - this.requestToDeny = request; - this.denyDisplay = true; - } +// public deny(request: IAlbumRequest) { +// this.requestToDeny = request; +// this.denyDisplay = true; +// } - public denyRequest() { - this.requestService.denyAlbum({ id: this.requestToDeny.id, reason: this.rejectionReason }) - .subscribe(x => { - if (x.result) { - this.notificationService.success( - `Request for ${this.requestToDeny.title} has been denied successfully`); - } else { - this.notificationService.warning("Request Denied", x.message ? x.message : x.errorMessage); - this.requestToDeny.denied = false; - } - }); - } +// public denyRequest() { +// this.requestService.denyAlbum({ id: this.requestToDeny.id, reason: this.rejectionReason }) +// .subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `Request for ${this.requestToDeny.title} has been denied successfully`); +// } else { +// this.notificationService.warning("Request Denied", x.message ? x.message : x.errorMessage); +// this.requestToDeny.denied = false; +// } +// }); +// } - public reportIssue(catId: IIssueCategory, req: IAlbumRequest) { - this.issueRequest = req; - this.issueCategorySelected = catId; - this.issuesBarVisible = true; - this.issueProviderId = req.foreignAlbumId; - } +// public reportIssue(catId: IIssueCategory, req: IAlbumRequest) { +// this.issueRequest = req; +// this.issueCategorySelected = catId; +// this.issuesBarVisible = true; +// this.issueProviderId = req.foreignAlbumId; +// } - public ignore(event: any): void { - event.preventDefault(); - } +// public ignore(event: any): void { +// event.preventDefault(); +// } - public clearFilter(el: any) { - el = el.toElement || el.relatedTarget || el.target || el.srcElement; +// public clearFilter(el: any) { +// el = el.toElement || el.relatedTarget || el.target || el.srcElement; - el = el.parentElement; - el = el.querySelectorAll("INPUT"); - for (el of el) { - el.checked = false; - el.parentElement.classList.remove("active"); - } +// el = el.parentElement; +// el = el.querySelectorAll("INPUT"); +// for (el of el) { +// el.checked = false; +// el.parentElement.classList.remove("active"); +// } - this.filterDisplay = false; - this.filter.availabilityFilter = FilterType.None; - this.filter.statusFilter = FilterType.None; +// this.filterDisplay = false; +// this.filter.availabilityFilter = FilterType.None; +// this.filter.statusFilter = FilterType.None; - this.resetSearch(); - } +// this.resetSearch(); +// } - public filterAvailability(filter: FilterType, el: any) { - this.filterActiveStyle(el); - this.filter.availabilityFilter = filter; - this.loadInit(); - } +// public filterAvailability(filter: FilterType, el: any) { +// this.filterActiveStyle(el); +// this.filter.availabilityFilter = filter; +// this.loadInit(); +// } - public filterStatus(filter: FilterType, el: any) { - this.filterActiveStyle(el); - this.filter.statusFilter = filter; - this.loadInit(); - } +// public filterStatus(filter: FilterType, el: any) { +// this.filterActiveStyle(el); +// this.filter.statusFilter = filter; +// this.loadInit(); +// } - public setOrder(value: OrderType, el: any) { - el = el.toElement || el.relatedTarget || el.target || el.srcElement; +// public setOrder(value: OrderType, el: any) { +// el = el.toElement || el.relatedTarget || el.target || el.srcElement; - const parent = el.parentElement; - const previousFilter = parent.querySelector(".active"); +// const parent = el.parentElement; +// const previousFilter = parent.querySelector(".active"); - previousFilter.className = ""; - el.className = "active"; +// previousFilter.className = ""; +// el.className = "active"; - this.orderType = value; +// this.orderType = value; - this.loadInit(); - } +// this.loadInit(); +// } - public isRequestUser(request: IAlbumRequest) { - if (request.requestedUser.userName === this.auth.claims().name) { - return true; - } - return false; - } +// public isRequestUser(request: IAlbumRequest) { +// if (request.requestedUser.userName === this.auth.claims().name) { +// return true; +// } +// return false; +// } - // public subscribe(request: IAlbumRequest) { - // request.subscribed = true; - // this.requestService.subscribeToMovie(request.id) - // .subscribe(x => { - // this.notificationService.success("Subscribed To Movie!"); - // }); - // } +// // public subscribe(request: IAlbumRequest) { +// // request.subscribed = true; +// // this.requestService.subscribeToMovie(request.id) +// // .subscribe(x => { +// // this.notificationService.success("Subscribed To Movie!"); +// // }); +// // } - // public unSubscribe(request: IMovieRequests) { - // request.subscribed = false; - // this.requestService.unSubscribeToMovie(request.id) - // .subscribe(x => { - // this.notificationService.success("Unsubscribed Movie!"); - // }); - // } +// // public unSubscribe(request: IMovieRequests) { +// // request.subscribed = false; +// // this.requestService.unSubscribeToMovie(request.id) +// // .subscribe(x => { +// // this.notificationService.success("Unsubscribed Movie!"); +// // }); +// // } - private filterActiveStyle(el: any) { - el = el.toElement || el.relatedTarget || el.target || el.srcElement; +// private filterActiveStyle(el: any) { +// el = el.toElement || el.relatedTarget || el.target || el.srcElement; - el = el.parentElement; //gets radio div - el = el.parentElement; //gets form group div - el = el.parentElement; //gets status filter div - el = el.querySelectorAll("INPUT"); - for (el of el) { - if (el.checked) { - if (!el.parentElement.classList.contains("active")) { - el.parentElement.className += " active"; - } - } else { - el.parentElement.classList.remove("active"); - } - } - } +// el = el.parentElement; //gets radio div +// el = el.parentElement; //gets form group div +// el = el.parentElement; //gets status filter div +// el = el.querySelectorAll("INPUT"); +// for (el of el) { +// if (el.checked) { +// if (!el.parentElement.classList.contains("active")) { +// el.parentElement.className += " active"; +// } +// } else { +// el.parentElement.classList.remove("active"); +// } +// } +// } - private loadRequests(amountToLoad: number, currentlyLoaded: number) { - this.requestService.getAlbumRequests(amountToLoad, currentlyLoaded, this.orderType, this.filter) - .subscribe(x => { - this.setOverrides(x.collection); - if (!this.albumRequests) { - this.albumRequests = []; - } - this.albumRequests = x.collection; - this.totalAlbums = x.total; - this.currentlyLoaded = currentlyLoaded + amountToLoad; - }); - } +// private loadRequests(amountToLoad: number, currentlyLoaded: number) { +// this.requestService.getAlbumRequests(amountToLoad, currentlyLoaded, this.orderType, this.filter) +// .subscribe(x => { +// this.setOverrides(x.collection); +// if (!this.albumRequests) { +// this.albumRequests = []; +// } +// this.albumRequests = x.collection; +// this.totalAlbums = x.total; +// this.currentlyLoaded = currentlyLoaded + amountToLoad; +// }); +// } - private approveRequest(request: IAlbumRequest) { - this.requestService.approveAlbum({ id: request.id }) - .subscribe(x => { - request.approved = true; - if (x.result) { - this.notificationService.success( - `Request for ${request.title} has been approved successfully`); - } else { - this.notificationService.warning("Request Approved", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } +// private approveRequest(request: IAlbumRequest) { +// this.requestService.approveAlbum({ id: request.id }) +// .subscribe(x => { +// request.approved = true; +// if (x.result) { +// this.notificationService.success( +// `Request for ${request.title} has been approved successfully`); +// } else { +// this.notificationService.warning("Request Approved", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } - private loadInit() { - this.requestService.getAlbumRequests(this.amountToLoad, 0, this.orderType, this.filter) - .subscribe(x => { - this.albumRequests = x.collection; - this.totalAlbums = x.total; +// private loadInit() { +// this.requestService.getAlbumRequests(this.amountToLoad, 0, this.orderType, this.filter) +// .subscribe(x => { +// this.albumRequests = x.collection; +// this.totalAlbums = x.total; - this.setOverrides(this.albumRequests); +// this.setOverrides(this.albumRequests); - if (this.isAdmin) { - // this.radarrService.getQualityProfilesFromSettings().subscribe(c => { - // this.radarrProfiles = c; - // this.albumRequests.forEach((req) => this.setQualityOverrides(req)); - // }); - // this.radarrService.getRootFoldersFromSettings().subscribe(c => { - // this.radarrRootFolders = c; - // this.albumRequests.forEach((req) => this.setRootFolderOverrides(req)); - // }); - } - }); - } +// if (this.isAdmin) { +// // this.radarrService.getQualityProfilesFromSettings().subscribe(c => { +// // this.radarrProfiles = c; +// // this.albumRequests.forEach((req) => this.setQualityOverrides(req)); +// // }); +// // this.radarrService.getRootFoldersFromSettings().subscribe(c => { +// // this.radarrRootFolders = c; +// // this.albumRequests.forEach((req) => this.setRootFolderOverrides(req)); +// // }); +// } +// }); +// } - private resetSearch() { - this.currentlyLoaded = 5; - this.loadInit(); - } +// private resetSearch() { +// this.currentlyLoaded = 5; +// this.loadInit(); +// } - private removeRequestFromUi(key: IAlbumRequest) { - const index = this.albumRequests.indexOf(key, 0); - if (index > -1) { - this.albumRequests.splice(index, 1); - } - } +// private removeRequestFromUi(key: IAlbumRequest) { +// const index = this.albumRequests.indexOf(key, 0); +// if (index > -1) { +// this.albumRequests.splice(index, 1); +// } +// } - private setOverrides(requests: IAlbumRequest[]): void { - requests.forEach((req) => { - this.setOverride(req); - }); - } +// private setOverrides(requests: IAlbumRequest[]): void { +// requests.forEach((req) => { +// this.setOverride(req); +// }); +// } - // private setQualityOverrides(req: IMovieRequests): void { - // if (this.radarrProfiles) { - // const profile = this.radarrProfiles.filter((p) => { - // return p.id === req.qualityOverride; - // }); - // if (profile.length > 0) { - // req.qualityOverrideTitle = profile[0].name; - // } - // } - // } - // private setRootFolderOverrides(req: IMovieRequests): void { - // if (this.radarrRootFolders) { - // const path = this.radarrRootFolders.filter((folder) => { - // return folder.id === req.rootPathOverride; - // }); - // if (path.length > 0) { - // req.rootPathOverrideTitle = path[0].path; - // } - // } - // } +// // private setQualityOverrides(req: IMovieRequests): void { +// // if (this.radarrProfiles) { +// // const profile = this.radarrProfiles.filter((p) => { +// // return p.id === req.qualityOverride; +// // }); +// // if (profile.length > 0) { +// // req.qualityOverrideTitle = profile[0].name; +// // } +// // } +// // } +// // private setRootFolderOverrides(req: IMovieRequests): void { +// // if (this.radarrRootFolders) { +// // const path = this.radarrRootFolders.filter((folder) => { +// // return folder.id === req.rootPathOverride; +// // }); +// // if (path.length > 0) { +// // req.rootPathOverrideTitle = path[0].path; +// // } +// // } +// // } - private setOverride(req: IAlbumRequest): void { - this.setAlbumBackground(req); - // this.setQualityOverrides(req); - // this.setRootFolderOverrides(req); - } - private setAlbumBackground(req: IAlbumRequest) { - if (req.disk === null) { - if (req.cover === null) { - req.disk = this.defaultPoster; - } else { - req.disk = req.cover; - } - } - req.background = this.sanitizer.bypassSecurityTrustStyle - ("url(" + req.cover + ")"); - } +// private setOverride(req: IAlbumRequest): void { +// this.setAlbumBackground(req); +// // this.setQualityOverrides(req); +// // this.setRootFolderOverrides(req); +// } +// private setAlbumBackground(req: IAlbumRequest) { +// if (req.disk === null) { +// if (req.cover === null) { +// req.disk = this.defaultPoster; +// } else { +// req.disk = req.cover; +// } +// } +// req.background = this.sanitizer.bypassSecurityTrustStyle +// ("url(" + req.cover + ")"); +// } -} +// } diff --git a/src/Ombi/ClientApp/src/app/requests/remainingrequests.component.ts b/src/Ombi/ClientApp/src/app/requests/remainingrequests.component.ts index b7d23a3df..abdf16c63 100644 --- a/src/Ombi/ClientApp/src/app/requests/remainingrequests.component.ts +++ b/src/Ombi/ClientApp/src/app/requests/remainingrequests.component.ts @@ -1,68 +1,68 @@ -import { IRemainingRequests } from "../interfaces/IRemainingRequests"; -import { RequestService } from "../services"; +// import { IRemainingRequests } from "../interfaces/IRemainingRequests"; +// import { RequestService } from "../services"; -import { Component, Input, OnInit } from "@angular/core"; -import { Observable } from "rxjs"; +// import { Component, Input, OnInit } from "@angular/core"; +// import { Observable } from "rxjs"; -@Component({ - selector: "remaining-requests", - templateUrl: "./remainingrequests.component.html", -}) +// @Component({ +// selector: "remaining-requests", +// templateUrl: "./remainingrequests.component.html", +// }) -export class RemainingRequestsComponent implements OnInit { - public remaining: IRemainingRequests; - @Input() public movie: boolean; - @Input() public tv: boolean; - @Input() public music: boolean; - public daysUntil: number; - public hoursUntil: number; - public minutesUntil: number; - @Input() public quotaRefreshEvents: Observable; +// export class RemainingRequestsComponent implements OnInit { +// public remaining: IRemainingRequests; +// @Input() public movie: boolean; +// @Input() public tv: boolean; +// @Input() public music: boolean; +// public daysUntil: number; +// public hoursUntil: number; +// public minutesUntil: number; +// @Input() public quotaRefreshEvents: Observable; - constructor(private requestService: RequestService) { - } +// constructor(private requestService: RequestService) { +// } - public ngOnInit() { - this.update(); +// public ngOnInit() { +// this.update(); - this.quotaRefreshEvents.subscribe(() => { - this.update(); - }); - } +// this.quotaRefreshEvents.subscribe(() => { +// this.update(); +// }); +// } - public update(): void { - const callback = (remaining => { - this.remaining = remaining; - if(this.remaining) { - this.calculateTime(); - } - }); - if (this.movie) { - this.requestService.getRemainingMovieRequests().subscribe(callback); - } - if(this.tv) { - this.requestService.getRemainingTvRequests().subscribe(callback); - } - if(this.music) { - this.requestService.getRemainingMusicRequests().subscribe(callback); - } - } +// public update(): void { +// const callback = (remaining => { +// this.remaining = remaining; +// if(this.remaining) { +// this.calculateTime(); +// } +// }); +// if (this.movie) { +// this.requestService.getRemainingMovieRequests().subscribe(callback); +// } +// if(this.tv) { +// this.requestService.getRemainingTvRequests().subscribe(callback); +// } +// if(this.music) { +// this.requestService.getRemainingMusicRequests().subscribe(callback); +// } +// } - private calculateTime(): void { - this.daysUntil = Math.ceil(this.daysUntilNextRequest()); - this.hoursUntil = Math.ceil(this.hoursUntilNextRequest()); - this.minutesUntil = Math.ceil(this.minutesUntilNextRequest()); - } +// private calculateTime(): void { +// this.daysUntil = Math.ceil(this.daysUntilNextRequest()); +// this.hoursUntil = Math.ceil(this.hoursUntilNextRequest()); +// this.minutesUntil = Math.ceil(this.minutesUntilNextRequest()); +// } - private daysUntilNextRequest(): number { - return (new Date(this.remaining.nextRequest).getTime() - new Date().getTime()) / 1000 / 60 / 60 / 24; - } +// private daysUntilNextRequest(): number { +// return (new Date(this.remaining.nextRequest).getTime() - new Date().getTime()) / 1000 / 60 / 60 / 24; +// } - private hoursUntilNextRequest(): number { - return (new Date(this.remaining.nextRequest).getTime() - new Date().getTime()) / 1000 / 60 / 60; - } +// private hoursUntilNextRequest(): number { +// return (new Date(this.remaining.nextRequest).getTime() - new Date().getTime()) / 1000 / 60 / 60; +// } - private minutesUntilNextRequest(): number { - return (new Date(this.remaining.nextRequest).getTime() - new Date().getTime()) / 1000 / 60; - } -} +// private minutesUntilNextRequest(): number { +// return (new Date(this.remaining.nextRequest).getTime() - new Date().getTime()) / 1000 / 60; +// } +// } diff --git a/src/Ombi/ClientApp/src/app/requests/remainingrequests.module.ts b/src/Ombi/ClientApp/src/app/requests/remainingrequests.module.ts index 411a94dfd..06a1d79de 100644 --- a/src/Ombi/ClientApp/src/app/requests/remainingrequests.module.ts +++ b/src/Ombi/ClientApp/src/app/requests/remainingrequests.module.ts @@ -2,18 +2,11 @@ import { FormsModule } from "@angular/forms"; import { RouterModule } from "@angular/router"; -import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; - -import { SidebarModule, TooltipModule, TreeTableModule } from "primeng/primeng"; import { RequestService } from "../services"; @NgModule({ imports: [ - FormsModule, - NgbModule.forRoot(), - TreeTableModule, - SidebarModule, - TooltipModule, + FormsModule ], declarations: [ ], diff --git a/src/Ombi/ClientApp/src/app/requests/request.component.ts b/src/Ombi/ClientApp/src/app/requests/request.component.ts index b318d619b..ee92a740e 100644 --- a/src/Ombi/ClientApp/src/app/requests/request.component.ts +++ b/src/Ombi/ClientApp/src/app/requests/request.component.ts @@ -1,48 +1,48 @@  -import { Component, OnInit } from "@angular/core"; +// import { Component, OnInit } from "@angular/core"; -import { IIssueCategory } from "../interfaces"; -import { IssuesService, SettingsService } from "../services"; +// import { IIssueCategory } from "../interfaces"; +// import { IssuesService, SettingsService } from "../services"; -@Component({ - templateUrl: "./request.component.html", -}) -export class RequestComponent implements OnInit { +// @Component({ +// templateUrl: "./request.component.html", +// }) +// export class RequestComponent implements OnInit { - public showMovie = true; - public showTv = false; - public showAlbums = false; +// public showMovie = true; +// public showTv = false; +// public showAlbums = false; - public issueCategories: IIssueCategory[]; - public issuesEnabled = false; - public musicEnabled: boolean; +// public issueCategories: IIssueCategory[]; +// public issuesEnabled = false; +// public musicEnabled: boolean; - constructor(private issuesService: IssuesService, - private settingsService: SettingsService) { +// constructor(private issuesService: IssuesService, +// private settingsService: SettingsService) { - } +// } - public ngOnInit(): void { - this.issuesService.getCategories().subscribe(x => this.issueCategories = x); - this.settingsService.lidarrEnabled().subscribe(x => this.musicEnabled = x); - this.settingsService.getIssueSettings().subscribe(x => this.issuesEnabled = x.enabled); - } +// public ngOnInit(): void { +// this.issuesService.getCategories().subscribe(x => this.issueCategories = x); +// this.settingsService.lidarrEnabled().subscribe(x => this.musicEnabled = x); +// this.settingsService.getIssueSettings().subscribe(x => this.issuesEnabled = x.enabled); +// } - public selectMovieTab() { - this.showMovie = true; - this.showTv = false; - this.showAlbums = false; - } +// public selectMovieTab() { +// this.showMovie = true; +// this.showTv = false; +// this.showAlbums = false; +// } - public selectTvTab() { - this.showMovie = false; - this.showTv = true; - this.showAlbums = false; - } +// public selectTvTab() { +// this.showMovie = false; +// this.showTv = true; +// this.showAlbums = false; +// } - public selectMusicTab() { - this.showMovie = false; - this.showTv = false; - this.showAlbums = true; - } -} +// public selectMusicTab() { +// this.showMovie = false; +// this.showTv = false; +// this.showAlbums = true; +// } +// } diff --git a/src/Ombi/ClientApp/src/app/requests/requests.module.ts b/src/Ombi/ClientApp/src/app/requests/requests.module.ts index 63d7117f5..bb491d5ff 100644 --- a/src/Ombi/ClientApp/src/app/requests/requests.module.ts +++ b/src/Ombi/ClientApp/src/app/requests/requests.module.ts @@ -1,60 +1,49 @@ -import { NgModule } from "@angular/core"; -import { RouterModule, Routes } from "@angular/router"; +// import { NgModule } from "@angular/core"; +// import { RouterModule, Routes } from "@angular/router"; +// import { OrderModule } from "ngx-order-pipe"; -import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; -import { OrderModule } from "ngx-order-pipe"; +// import { InfiniteScrollModule } from "ngx-infinite-scroll"; -import { InfiniteScrollModule } from "ngx-infinite-scroll"; +// import { MovieRequestsComponent } from "./movierequests.component"; +// import { MusicRequestsComponent } from "./music/musicrequests.component"; +// // Request +// import { RequestComponent } from "./request.component"; +// import { TvRequestChildrenComponent } from "./tvrequest-children.component"; +// import { TvRequestsComponent } from "./tvrequests.component"; -import { ButtonModule, DialogModule, PaginatorModule } from "primeng/primeng"; -import { MovieRequestsComponent } from "./movierequests.component"; -import { MusicRequestsComponent } from "./music/musicrequests.component"; -// Request -import { RequestComponent } from "./request.component"; -import { TvRequestChildrenComponent } from "./tvrequest-children.component"; -import { TvRequestsComponent } from "./tvrequests.component"; -import { SidebarModule, TooltipModule, TreeTableModule } from "primeng/primeng"; +// import { IdentityService, RadarrService, RequestService, SonarrService } from "../services"; -import { IdentityService, RadarrService, RequestService, SonarrService } from "../services"; +// import { AuthGuard } from "../auth/auth.guard"; -import { AuthGuard } from "../auth/auth.guard"; +// import { SharedModule } from "../shared/shared.module"; -import { SharedModule } from "../shared/shared.module"; +// const routes: Routes = [ +// { path: "", component: RequestComponent, canActivate: [AuthGuard] }, +// ]; +// @NgModule({ +// imports: [ +// RouterModule.forChild(routes), +// InfiniteScrollModule, +// SharedModule, +// OrderModule, +// ], +// declarations: [ +// RequestComponent, +// MovieRequestsComponent, +// TvRequestsComponent, +// TvRequestChildrenComponent, +// MusicRequestsComponent, +// ], +// exports: [ +// RouterModule, +// ], +// providers: [ +// IdentityService, +// RequestService, +// RadarrService, +// SonarrService, +// ], -const routes: Routes = [ - { path: "", component: RequestComponent, canActivate: [AuthGuard] }, -]; -@NgModule({ - imports: [ - RouterModule.forChild(routes), - NgbModule.forRoot(), - InfiniteScrollModule, - ButtonModule, - DialogModule, - TreeTableModule, - SharedModule, - SidebarModule, - OrderModule, - PaginatorModule, - TooltipModule, - ], - declarations: [ - RequestComponent, - MovieRequestsComponent, - TvRequestsComponent, - TvRequestChildrenComponent, - MusicRequestsComponent, - ], - exports: [ - RouterModule, - ], - providers: [ - IdentityService, - RequestService, - RadarrService, - SonarrService, - ], - -}) -export class RequestsModule { } +// }) +// export class RequestsModule { } diff --git a/src/Ombi/ClientApp/src/app/requests/tvrequest-children.component.ts b/src/Ombi/ClientApp/src/app/requests/tvrequest-children.component.ts index 0e72c682a..fec1222de 100644 --- a/src/Ombi/ClientApp/src/app/requests/tvrequest-children.component.ts +++ b/src/Ombi/ClientApp/src/app/requests/tvrequest-children.component.ts @@ -1,138 +1,138 @@ -import { Component, EventEmitter, Input, Output } from "@angular/core"; -import { IChildRequests } from "../interfaces"; +// import { Component, EventEmitter, Input, Output } from "@angular/core"; +// import { IChildRequests } from "../interfaces"; -import { NotificationService, RequestService } from "../services"; +// import { NotificationService, RequestService } from "../services"; -@Component({ - selector: "tvrequests-children", - templateUrl: "./tvrequest-children.component.html", -}) -export class TvRequestChildrenComponent { - @Input() public childRequests: IChildRequests[]; - @Input() public isAdmin: boolean; - @Input() public currentUser: string; +// @Component({ +// selector: "tvrequests-children", +// templateUrl: "./tvrequest-children.component.html", +// }) +// export class TvRequestChildrenComponent { +// @Input() public childRequests: IChildRequests[]; +// @Input() public isAdmin: boolean; +// @Input() public currentUser: string; - public denyDisplay: boolean; - public requestToDeny: IChildRequests; - public rejectionReason: string; +// public denyDisplay: boolean; +// public requestToDeny: IChildRequests; +// public rejectionReason: string; - @Output() public requestDeleted = new EventEmitter(); +// @Output() public requestDeleted = new EventEmitter(); - constructor(private requestService: RequestService, - private notificationService: NotificationService) { } +// constructor(private requestService: RequestService, +// private notificationService: NotificationService) { } - public removeRequest(request: IChildRequests) { - this.requestService.deleteChild(request.id) - .subscribe(x => { - this.removeRequestFromUi(request); - this.requestDeleted.emit(request.id); - }); - } +// public removeRequest(request: IChildRequests) { +// this.requestService.deleteChild(request.id) +// .subscribe(x => { +// this.removeRequestFromUi(request); +// this.requestDeleted.emit(request.id); +// }); +// } - public changeAvailability(request: IChildRequests, available: boolean) { - request.available = available; - request.seasonRequests.forEach((season) => { - season.episodes.forEach((ep) => { - ep.available = available; - }); - }); - if (available) { - this.requestService.markTvAvailable({ id: request.id }).subscribe(x => { - if (x.result) { - this.notificationService.success( - `This request is now available`); - } else { - this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } else { - this.requestService.markTvUnavailable({ id: request.id }).subscribe(x => { - if (x.result) { - this.notificationService.success( - `This request is now unavailable`); - } else { - this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } - } +// public changeAvailability(request: IChildRequests, available: boolean) { +// request.available = available; +// request.seasonRequests.forEach((season) => { +// season.episodes.forEach((ep) => { +// ep.available = available; +// }); +// }); +// if (available) { +// this.requestService.markTvAvailable({ id: request.id }).subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `This request is now available`); +// } else { +// this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } else { +// this.requestService.markTvUnavailable({ id: request.id }).subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `This request is now unavailable`); +// } else { +// this.notificationService.warning("Request Available", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } +// } - public deny(request: IChildRequests) { - request.denied = true; - this.requestToDeny = request; - this.denyDisplay = true; +// public deny(request: IChildRequests) { +// request.denied = true; +// this.requestToDeny = request; +// this.denyDisplay = true; - request.seasonRequests.forEach((season) => { - season.episodes.forEach((ep) => { - ep.approved = false; - }); - }); - } +// request.seasonRequests.forEach((season) => { +// season.episodes.forEach((ep) => { +// ep.approved = false; +// }); +// }); +// } - public denyRequest() { - this.requestService.denyChild({ id: this.requestToDeny.id, reason: this.rejectionReason }) - .subscribe(x => { - this.denyDisplay = false; - if (x.result) { - this.notificationService.success( - `Request has been denied successfully`); - } else { - this.notificationService.warning("Request Denied", x.message ? x.message : x.errorMessage); - this.requestToDeny.approved = false; - } - }); - } +// public denyRequest() { +// this.requestService.denyChild({ id: this.requestToDeny.id, reason: this.rejectionReason }) +// .subscribe(x => { +// this.denyDisplay = false; +// if (x.result) { +// this.notificationService.success( +// `Request has been denied successfully`); +// } else { +// this.notificationService.warning("Request Denied", x.message ? x.message : x.errorMessage); +// this.requestToDeny.approved = false; +// } +// }); +// } - public approve(request: IChildRequests) { - request.approved = true; - request.denied = false; - request.seasonRequests.forEach((season) => { - season.episodes.forEach((ep) => { - ep.approved = true; - }); - }); - this.requestService.approveChild({ id: request.id }) - .subscribe(x => { - if (x.result) { - this.notificationService.success( - `Request has been approved successfully`); - } else { - this.notificationService.warning("Request Approved", x.message ? x.message : x.errorMessage); - request.approved = false; - } - }); - } +// public approve(request: IChildRequests) { +// request.approved = true; +// request.denied = false; +// request.seasonRequests.forEach((season) => { +// season.episodes.forEach((ep) => { +// ep.approved = true; +// }); +// }); +// this.requestService.approveChild({ id: request.id }) +// .subscribe(x => { +// if (x.result) { +// this.notificationService.success( +// `Request has been approved successfully`); +// } else { +// this.notificationService.warning("Request Approved", x.message ? x.message : x.errorMessage); +// request.approved = false; +// } +// }); +// } - public subscribe(request: IChildRequests) { - request.subscribed = true; - this.requestService.subscribeToTv(request.id) - .subscribe(x => { - this.notificationService.success("Subscribed To TV Show!"); - }); - } +// public subscribe(request: IChildRequests) { +// request.subscribed = true; +// this.requestService.subscribeToTv(request.id) +// .subscribe(x => { +// this.notificationService.success("Subscribed To TV Show!"); +// }); +// } - public unSubscribe(request: IChildRequests) { - request.subscribed = false; - this.requestService.unSubscribeToTv(request.id) - .subscribe(x => { - this.notificationService.success("Unsubscribed TV Show!"); - }); - } +// public unSubscribe(request: IChildRequests) { +// request.subscribed = false; +// this.requestService.unSubscribeToTv(request.id) +// .subscribe(x => { +// this.notificationService.success("Unsubscribed TV Show!"); +// }); +// } - public isRequestUser(request: IChildRequests) { - if (request.requestedUser.userName === this.currentUser) { - return true; - } - return false; - } +// public isRequestUser(request: IChildRequests) { +// if (request.requestedUser.userName === this.currentUser) { +// return true; +// } +// return false; +// } - private removeRequestFromUi(key: IChildRequests) { - const index = this.childRequests.indexOf(key, 0); - if (index > -1) { - this.childRequests.splice(index, 1); - } - } +// private removeRequestFromUi(key: IChildRequests) { +// const index = this.childRequests.indexOf(key, 0); +// if (index > -1) { +// this.childRequests.splice(index, 1); +// } +// } -} +// } diff --git a/src/Ombi/ClientApp/src/app/requests/tvrequests.component.html b/src/Ombi/ClientApp/src/app/requests/tvrequests.component.html index 7c5e13479..889b485d7 100644 --- a/src/Ombi/ClientApp/src/app/requests/tvrequests.component.html +++ b/src/Ombi/ClientApp/src/app/requests/tvrequests.component.html @@ -6,109 +6,107 @@
-
- -
-
-
-
+
+ +
+
+
+
-
+
- poster + poster +
+ +
+ +
+
+ Status: + {{node.status}}
-
- -
-
- Status: - {{node.status}} -
- -
Release Date: {{node.releaseDate | amLocal | amDateFormat: 'LL'}}
-
-
{{ 'Requests.QualityOverride' | translate }} - {{node.qualityOverrideTitle}} -
-
{{ 'Requests.RootFolderOverride' | translate }} - {{node.rootPathOverrideTitle}} -
+
Release Date: {{node.releaseDate | amLocal | amDateFormat: 'LL'}}
+
+
{{ 'Requests.QualityOverride' | translate }} + {{node.qualityOverrideTitle}} +
+
{{ 'Requests.RootFolderOverride' | translate }} + {{node.rootPathOverrideTitle}}
- -
-
-
+
+ + -
- -
- - - -
- - -
- - - -
- -
- + + +
+ + + +
+ +
+
- -
- -
- +
+ +
+ +
+

-
+
- \ No newline at end of file + \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/requests/tvrequests.component.ts b/src/Ombi/ClientApp/src/app/requests/tvrequests.component.ts index 4ecf1e6ac..1386efd1f 100644 --- a/src/Ombi/ClientApp/src/app/requests/tvrequests.component.ts +++ b/src/Ombi/ClientApp/src/app/requests/tvrequests.component.ts @@ -1,226 +1,226 @@ -import { PlatformLocation, APP_BASE_HREF } from "@angular/common"; -import { Component, Input, OnInit, Inject } from "@angular/core"; -import { DomSanitizer } from "@angular/platform-browser"; -import { Subject } from "rxjs"; -import { debounceTime, distinctUntilChanged } from "rxjs/operators"; +// import { PlatformLocation, APP_BASE_HREF } from "@angular/common"; +// import { Component, Input, OnInit, Inject } from "@angular/core"; +// import { DomSanitizer } from "@angular/platform-browser"; +// import { Subject } from "rxjs"; +// import { debounceTime, distinctUntilChanged } from "rxjs/operators"; -import { AuthService } from "../auth/auth.service"; -import { FilterType, IIssueCategory, IPagenator, IRequestsViewModel, ISonarrProfile, ISonarrRootFolder, ITvRequests, OrderType } from "../interfaces"; -import { NotificationService, RequestService, SonarrService } from "../services"; -import { ImageService } from "../services/image.service"; +// import { AuthService } from "../auth/auth.service"; +// import { FilterType, IIssueCategory, IPagenator, IRequestsViewModel, ISonarrProfile, ISonarrRootFolder, ITvRequests, OrderType } from "../interfaces"; +// import { NotificationService, RequestService, SonarrService } from "../services"; +// import { ImageService } from "../services/image.service"; -@Component({ - selector: "tv-requests", - templateUrl: "./tvrequests.component.html", - styleUrls: ["./tvrequests.component.scss"], -}) -export class TvRequestsComponent implements OnInit { +// @Component({ +// selector: "tv-requests", +// templateUrl: "./tvrequests.component.html", +// styleUrls: ["./tvrequests.component.scss"], +// }) +// export class TvRequestsComponent implements OnInit { - public tvRequests: IRequestsViewModel; - public searchChanged = new Subject(); - public searchText: string; - public isAdmin: boolean; - public currentUser: string; - public showChildDialogue = false; // This is for the child modal popup - public selectedSeason: ITvRequests; - public defaultPoster: string; +// public tvRequests: IRequestsViewModel; +// public searchChanged = new Subject(); +// public searchText: string; +// public isAdmin: boolean; +// public currentUser: string; +// public showChildDialogue = false; // This is for the child modal popup +// public selectedSeason: ITvRequests; +// public defaultPoster: string; - @Input() public issueCategories: IIssueCategory[]; - @Input() public issuesEnabled: boolean; - public issueProviderId: string; - public issuesBarVisible = false; - public issueRequest: ITvRequests; - public issueCategorySelected: IIssueCategory; +// @Input() public issueCategories: IIssueCategory[]; +// @Input() public issuesEnabled: boolean; +// public issueProviderId: string; +// public issuesBarVisible = false; +// public issueRequest: ITvRequests; +// public issueCategorySelected: IIssueCategory; - public sonarrProfiles: ISonarrProfile[] = []; - public sonarrRootFolders: ISonarrRootFolder[] = []; +// public sonarrProfiles: ISonarrProfile[] = []; +// public sonarrRootFolders: ISonarrRootFolder[] = []; - public totalTv: number = 100; - private currentlyLoaded: number; - private amountToLoad: number; - private href: string; +// public totalTv: number = 100; +// private currentlyLoaded: number; +// private amountToLoad: number; +// private href: string; - constructor( - private requestService: RequestService, - private auth: AuthService, - private sanitizer: DomSanitizer, - private imageService: ImageService, - private sonarrService: SonarrService, - private notificationService: NotificationService, - @Inject(APP_BASE_HREF) href:string) { - this.href= href; - this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); - this.currentUser = this.auth.claims().name; - if (this.isAdmin) { - this.sonarrService.getQualityProfilesWithoutSettings() - .subscribe(x => this.sonarrProfiles = x); +// constructor( +// private requestService: RequestService, +// private auth: AuthService, +// private sanitizer: DomSanitizer, +// private imageService: ImageService, +// private sonarrService: SonarrService, +// private notificationService: NotificationService, +// @Inject(APP_BASE_HREF) href:string) { +// this.href= href; +// this.isAdmin = this.auth.hasRole("admin") || this.auth.hasRole("poweruser"); +// this.currentUser = this.auth.claims().name; +// if (this.isAdmin) { +// this.sonarrService.getQualityProfilesWithoutSettings() +// .subscribe(x => this.sonarrProfiles = x); - this.sonarrService.getRootFoldersWithoutSettings() - .subscribe(x => this.sonarrRootFolders = x); - } - } +// this.sonarrService.getRootFoldersWithoutSettings() +// .subscribe(x => this.sonarrRootFolders = x); +// } +// } - public openClosestTab(node: ITvRequests,el: any) { - el.preventDefault(); - node.open = !node.open; - } +// public openClosestTab(node: ITvRequests,el: any) { +// el.preventDefault(); +// node.open = !node.open; +// } - public ngOnInit() { - this.amountToLoad = 10; - this.currentlyLoaded = 10; - this.tvRequests = {collection:[], total:0}; +// public ngOnInit() { +// this.amountToLoad = 10; +// this.currentlyLoaded = 10; +// this.tvRequests = {collection:[], total:0}; - 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.searchTvRequests(this.searchText) - .subscribe(m => { - this.tvRequests.collection = m; - this.tvRequests.collection.forEach((val) => this.loadBackdrop(val)); - this.tvRequests.collection.forEach((val) => this.setOverride(val)); - }); - }); - this.defaultPoster = "../../../images/default_tv_poster.png"; - const base = this.href; - if (base) { - this.defaultPoster = "../../.." + base + "/images/default_tv_poster.png"; - } +// 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.searchTvRequests(this.searchText) +// .subscribe(m => { +// this.tvRequests.collection = m; +// this.tvRequests.collection.forEach((val) => this.loadBackdrop(val)); +// this.tvRequests.collection.forEach((val) => this.setOverride(val)); +// }); +// }); +// this.defaultPoster = "../../../images/default_tv_poster.png"; +// const base = this.href; +// if (base) { +// this.defaultPoster = "../../.." + base + "/images/default_tv_poster.png"; +// } - this.loadInit(); - } +// this.loadInit(); +// } - public paginate(event: IPagenator) { - const skipAmount = event.first; +// public paginate(event: IPagenator) { +// const skipAmount = event.first; - this.requestService.getTvRequests(this.amountToLoad, skipAmount, OrderType.RequestedDateDesc, FilterType.None, FilterType.None) - .subscribe(x => { - this.tvRequests = x; - this.currentlyLoaded = this.currentlyLoaded + this.amountToLoad; - }); - } +// this.requestService.getTvRequests(this.amountToLoad, skipAmount, OrderType.RequestedDateDesc, FilterType.None, FilterType.None) +// .subscribe(x => { +// this.tvRequests = x; +// this.currentlyLoaded = this.currentlyLoaded + this.amountToLoad; +// }); +// } - public search(text: any) { - this.searchChanged.next(text.target.value); - } +// public search(text: any) { +// this.searchChanged.next(text.target.value); +// } - public showChildren(request: ITvRequests) { - this.selectedSeason = request; - this.showChildDialogue = true; - } +// public showChildren(request: ITvRequests) { +// this.selectedSeason = request; +// this.showChildDialogue = true; +// } - public childRequestDeleted(childId: number): void { - // Refresh the UI, hackly way around reloading the data - this.ngOnInit(); - } +// public childRequestDeleted(childId: number): void { +// // Refresh the UI, hackly way around reloading the data +// this.ngOnInit(); +// } - public selectRootFolder(searchResult: ITvRequests, rootFolderSelected: ISonarrRootFolder, event: any) { - event.preventDefault(); - searchResult.rootFolder = rootFolderSelected.id; - this.setOverride(searchResult); - this.setRootFolder(searchResult); - } +// public selectRootFolder(searchResult: ITvRequests, rootFolderSelected: ISonarrRootFolder, event: any) { +// event.preventDefault(); +// searchResult.rootFolder = rootFolderSelected.id; +// this.setOverride(searchResult); +// this.setRootFolder(searchResult); +// } - public selectQualityProfile(searchResult: ITvRequests, profileSelected: ISonarrProfile, event: any) { - event.preventDefault(); - searchResult.qualityOverride = profileSelected.id; - this.setOverride(searchResult); - this.setQualityProfile(searchResult); - } +// public selectQualityProfile(searchResult: ITvRequests, profileSelected: ISonarrProfile, event: any) { +// event.preventDefault(); +// searchResult.qualityOverride = profileSelected.id; +// this.setOverride(searchResult); +// this.setQualityProfile(searchResult); +// } - public reportIssue(catId: IIssueCategory, req: ITvRequests) { - this.issueRequest = req; - this.issueCategorySelected = catId; - this.issuesBarVisible = true; - this.issueProviderId = req.id.toString(); - } +// public reportIssue(catId: IIssueCategory, req: ITvRequests) { +// this.issueRequest = req; +// this.issueCategorySelected = catId; +// this.issuesBarVisible = true; +// this.issueProviderId = req.id.toString(); +// } - private setOverride(req: ITvRequests): void { - this.setQualityOverrides(req); - this.setRootFolderOverrides(req); - } +// private setOverride(req: ITvRequests): void { +// this.setQualityOverrides(req); +// this.setRootFolderOverrides(req); +// } - private setQualityProfile(req: ITvRequests) { - this.requestService.setQualityProfile(req.id, req.qualityOverride).subscribe(x => { - if(x) { - this.notificationService.success("Quality profile updated"); - } else { - this.notificationService.error("Could not update the quality profile"); - } - }); - } +// private setQualityProfile(req: ITvRequests) { +// this.requestService.setQualityProfile(req.id, req.qualityOverride).subscribe(x => { +// if(x) { +// this.notificationService.success("Quality profile updated"); +// } else { +// this.notificationService.error("Could not update the quality profile"); +// } +// }); +// } - private setRootFolder(req: ITvRequests) { - this.requestService.setRootFolder(req.id, req.rootFolder).subscribe(x => { - if(x) { - this.notificationService.success("Quality profile updated"); - } else { - this.notificationService.error("Could not update the quality profile"); - } - }); - } +// private setRootFolder(req: ITvRequests) { +// this.requestService.setRootFolder(req.id, req.rootFolder).subscribe(x => { +// if(x) { +// this.notificationService.success("Quality profile updated"); +// } else { +// this.notificationService.error("Could not update the quality profile"); +// } +// }); +// } - private setQualityOverrides(req: ITvRequests): void { - if (this.sonarrProfiles) { - const profile = this.sonarrProfiles.filter((p) => { - return p.id === req.qualityOverride; - }); - if (profile.length > 0) { - req.qualityOverrideTitle = profile[0].name; - } - } - } - private setRootFolderOverrides(req: ITvRequests): void { - if (this.sonarrRootFolders) { - const path = this.sonarrRootFolders.filter((folder) => { - return folder.id === req.rootFolder; - }); - if (path.length > 0) { - req.rootPathOverrideTitle = path[0].path; - } - } - } +// private setQualityOverrides(req: ITvRequests): void { +// if (this.sonarrProfiles) { +// const profile = this.sonarrProfiles.filter((p) => { +// return p.id === req.qualityOverride; +// }); +// if (profile.length > 0) { +// req.qualityOverrideTitle = profile[0].name; +// } +// } +// } +// private setRootFolderOverrides(req: ITvRequests): void { +// if (this.sonarrRootFolders) { +// const path = this.sonarrRootFolders.filter((folder) => { +// return folder.id === req.rootFolder; +// }); +// if (path.length > 0) { +// req.rootPathOverrideTitle = path[0].path; +// } +// } +// } - private loadInit() { - this.requestService.getTotalTv().subscribe(x => this.totalTv = x); - this.requestService.getTvRequests(this.amountToLoad, 0, OrderType.RequestedDateDesc, FilterType.None, FilterType.None) - .subscribe(x => { - this.tvRequests = x; - this.tvRequests.collection.forEach((val, index) => { - this.setDefaults(val); - this.loadBackdrop(val); - this.setOverride(val); - }); - }); - } +// private loadInit() { +// this.requestService.getTotalTv().subscribe(x => this.totalTv = x); +// this.requestService.getTvRequests(this.amountToLoad, 0, OrderType.RequestedDateDesc, FilterType.None, FilterType.None) +// .subscribe(x => { +// this.tvRequests = x; +// this.tvRequests.collection.forEach((val, index) => { +// this.setDefaults(val); +// this.loadBackdrop(val); +// this.setOverride(val); +// }); +// }); +// } - private resetSearch() { - this.currentlyLoaded = 5; - this.loadInit(); - } +// private resetSearch() { +// this.currentlyLoaded = 5; +// this.loadInit(); +// } - private setDefaults(val: ITvRequests) { - if (val.posterPath === null) { - val.posterPath = this.defaultPoster; - } - } +// private setDefaults(val: ITvRequests) { +// if (val.posterPath === null) { +// val.posterPath = this.defaultPoster; +// } +// } - private loadBackdrop(val: ITvRequests): void { - if (val.background != null) { - val.background = this.sanitizer.bypassSecurityTrustStyle - ("url(https://image.tmdb.org/t/p/w1280" + val.background + ")"); - } else { - this.imageService.getTvBanner(val.tvDbId).subscribe(x => { - if (x) { - val.background = this.sanitizer.bypassSecurityTrustStyle - ("url(" + x + ")"); - } - }); - } - } -} +// private loadBackdrop(val: ITvRequests): void { +// if (val.background != null) { +// val.background = this.sanitizer.bypassSecurityTrustStyle +// ("url(https://image.tmdb.org/t/p/w1280" + val.background + ")"); +// } else { +// this.imageService.getTvBanner(val.tvDbId).subscribe(x => { +// if (x) { +// val.background = this.sanitizer.bypassSecurityTrustStyle +// ("url(" + x + ")"); +// } +// }); +// } +// } +// } diff --git a/src/Ombi/ClientApp/src/app/search/search.module.ts b/src/Ombi/ClientApp/src/app/search/search.module.ts index 6490076af..d0a3f0e78 100644 --- a/src/Ombi/ClientApp/src/app/search/search.module.ts +++ b/src/Ombi/ClientApp/src/app/search/search.module.ts @@ -3,7 +3,6 @@ import { NgModule } from "@angular/core"; import { FormsModule } from "@angular/forms"; import { RouterModule, Routes } from "@angular/router"; -import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; import { MovieSearchComponent } from "./moviesearch.component"; import { MovieSearchGridComponent } from "./moviesearchgrid.component"; @@ -16,8 +15,6 @@ import { TvSearchComponent } from "./tvsearch.component"; import { CardsFreeModule } from "angular-bootstrap-md"; -import { SidebarModule, TooltipModule, TreeTableModule } from "primeng/primeng"; - import { RequestService } from "../services"; import { SearchService } from "../services"; @@ -35,7 +32,6 @@ const routes: Routes = [ CommonModule, FormsModule, RouterModule.forChild(routes), - NgbModule.forRoot(), TreeTableModule, SharedModule, SidebarModule, diff --git a/src/Ombi/ClientApp/src/app/services/message.service.ts b/src/Ombi/ClientApp/src/app/services/message.service.ts index 0886e6b78..1c4e6eded 100644 --- a/src/Ombi/ClientApp/src/app/services/message.service.ts +++ b/src/Ombi/ClientApp/src/app/services/message.service.ts @@ -1,5 +1,5 @@ import { Injectable } from "@angular/core"; -import { MatSnackBar, MatSnackBarConfig } from "@angular/material"; +import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar"; @Injectable() export class MessageService { diff --git a/src/Ombi/ClientApp/src/app/services/notification.service.ts b/src/Ombi/ClientApp/src/app/services/notification.service.ts index 95a0a1f81..d72440610 100644 --- a/src/Ombi/ClientApp/src/app/services/notification.service.ts +++ b/src/Ombi/ClientApp/src/app/services/notification.service.ts @@ -1,6 +1,5 @@ import { Injectable } from "@angular/core"; -import { Message } from "primeng/components/common/api"; -import { MatSnackBar, MatSnackBarConfig } from "@angular/material"; +import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar"; @Injectable() export class NotificationService { @@ -10,12 +9,6 @@ export class NotificationService { duration:3000, } - public messages: Message[] = []; - public addMessage(message: Message) { - this.clearMessages(); - this.messages.push(message); - this.messages = JSON.parse(JSON.stringify(this.messages)); // NOTE: THIS IS A HACK AROUND A BUG https://github.com/primefaces/primeng/issues/2943 - } public success(body: string) { this.snackbar.open(body, "OK", this.config); @@ -32,8 +25,4 @@ export class NotificationService { public error(body: string) { this.snackbar.open(body, "OK", this.config); } - - public clearMessages() { - this.messages = []; - } } diff --git a/src/Ombi/ClientApp/src/app/services/request.service.ts b/src/Ombi/ClientApp/src/app/services/request.service.ts index 134f59544..8ac15e4f6 100644 --- a/src/Ombi/ClientApp/src/app/services/request.service.ts +++ b/src/Ombi/ClientApp/src/app/services/request.service.ts @@ -4,7 +4,7 @@ import { Injectable, Inject } from "@angular/core"; import { HttpClient } from "@angular/common/http"; import { Observable } from "rxjs"; -import { TreeNode } from "primeng/primeng"; +import { UITreeNode } from "primeng/tree"; import { FilterType, IAlbumRequest, IAlbumRequestModel, IAlbumUpdateModel, IChildRequests, IDenyAlbumModel, IDenyMovieModel, IFilter, IMovieRequestModel, IMovieRequests, IMovieUpdateModel, IRequestEngineResult, IRequestsViewModel, ITvDenyModel, ITvRequests, ITvUpdateModel, OrderType } from "../interfaces"; import { ITvRequestViewModel } from "../interfaces"; @@ -90,8 +90,8 @@ export class RequestService extends ServiceHelpers { return this.http.get>(`${this.url}tv/${count}/${position}/${order}/${status}/${availability}`, {headers: this.headers}); } - public getTvRequestsTree(count: number, position: number): Observable { - return this.http.get(`${this.url}tv/${count}/${position}/tree`, {headers: this.headers}); + public getTvRequestsTree(count: number, position: number): Observable { + return this.http.get(`${this.url}tv/${count}/${position}/tree`, {headers: this.headers}); } public getChildRequests(requestId: number): Observable { @@ -102,8 +102,8 @@ export class RequestService extends ServiceHelpers { return this.http.get(`${this.url}tv/search/${search}`, {headers: this.headers}); } - public searchTvRequestsTree(search: string): Observable { - return this.http.get(`${this.url}tv/search/${search}/tree`, {headers: this.headers}); + public searchTvRequestsTree(search: string): Observable { + return this.http.get(`${this.url}tv/search/${search}/tree`, {headers: this.headers}); } public removeTvRequest(requestId: number) { diff --git a/src/Ombi/ClientApp/src/app/services/search.service.ts b/src/Ombi/ClientApp/src/app/services/search.service.ts index 3b4da673a..0adfed3ad 100644 --- a/src/Ombi/ClientApp/src/app/services/search.service.ts +++ b/src/Ombi/ClientApp/src/app/services/search.service.ts @@ -4,7 +4,7 @@ import { Injectable, Inject } from "@angular/core"; import { HttpClient } from "@angular/common/http"; import { Observable } from "rxjs"; -import { TreeNode } from "primeng/primeng"; +import { UITreeNode } from "primeng/tree"; import { ISearchMovieResult } from "../interfaces"; import { ISearchTvResult } from "../interfaces"; import { ISearchAlbumResult, ISearchArtistResult } from "../interfaces/ISearchMusicResult"; @@ -58,12 +58,12 @@ export class SearchService extends ServiceHelpers { return this.http.get(`${this.url}/Tv/${searchTerm}`, { headers: this.headers }); } - public searchTvTreeNode(searchTerm: string): Observable { - return this.http.get(`${this.url}/Tv/${searchTerm}/tree`, { headers: this.headers }); + public searchTvTreeNode(searchTerm: string): Observable { + return this.http.get(`${this.url}/Tv/${searchTerm}/tree`, { headers: this.headers }); } - public getShowInformationTreeNode(theTvDbId: number): Observable { - return this.http.get(`${this.url}/Tv/info/${theTvDbId}/Tree`, { headers: this.headers }); + public getShowInformationTreeNode(theTvDbId: number): Observable { + return this.http.get(`${this.url}/Tv/info/${theTvDbId}/Tree`, { headers: this.headers }); } public getShowInformation(theTvDbId: number): Observable { diff --git a/src/Ombi/ClientApp/src/app/settings/authentication/authentication.component.scss b/src/Ombi/ClientApp/src/app/settings/authentication/authentication.component.scss index 09f9b5217..2afbcf328 100644 --- a/src/Ombi/ClientApp/src/app/settings/authentication/authentication.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/authentication/authentication.component.scss @@ -1,20 +1,15 @@ @import "~styles/variables.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; +.control-label { + font-weight: 400; } -.control-label{ - font-weight:400; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; -} +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/couchpotato/couchpotato.component.scss b/src/Ombi/ClientApp/src/app/settings/couchpotato/couchpotato.component.scss index af8994a07..439e9afc8 100644 --- a/src/Ombi/ClientApp/src/app/settings/couchpotato/couchpotato.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/couchpotato/couchpotato.component.scss @@ -1,32 +1,27 @@ -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +.col-md-6 { + display: contents; } -.col-md-6{ - display: contents; -} -.col-md-4{ - display: contents; +.col-md-4 { + display: contents; } @media (min-width:1440px) { - .col-md-6{ - display: inline-table; - } - - .col-md-4{ - display: inline-table; - } -} + .col-md-6 { + display: inline-table; + } + .col-md-4 { + display: inline-table; + } +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/customization/customization.component.scss b/src/Ombi/ClientApp/src/app/settings/customization/customization.component.scss index 3fc3c097e..ba5ee86ff 100644 --- a/src/Ombi/ClientApp/src/app/settings/customization/customization.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/customization/customization.component.scss @@ -1,42 +1,37 @@ @import "~styles/shared.scss"; .col-12 { - display:grid; + display: grid; } textarea { - min-height:100px; + min-height: 100px; height: auto; - max-height:800px; + max-height: 800px; } -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -.control-label{ - font-weight:400; +.control-label { + font-weight: 400; } -.row{ - display:block; +.row { + display: block; } -.btn-danger-outline{ - background-color: #E84C3D; +.btn-danger-outline { + background-color: #E84C3D; } -.btn-success-outline{ - background-color: #1b9d1b; +.btn-success-outline { + background-color: #1b9d1b; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/dognzb/dognzb.component.scss b/src/Ombi/ClientApp/src/app/settings/dognzb/dognzb.component.scss index 345e1a9ab..aa1beaebc 100644 --- a/src/Ombi/ClientApp/src/app/settings/dognzb/dognzb.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/dognzb/dognzb.component.scss @@ -1,16 +1,11 @@ @import "~styles/shared.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/emby/emby.component.scss b/src/Ombi/ClientApp/src/app/settings/emby/emby.component.scss index a019432da..649201f48 100644 --- a/src/Ombi/ClientApp/src/app/settings/emby/emby.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/emby/emby.component.scss @@ -1,45 +1,41 @@ @import "~styles/shared.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -.col-md-10{ - display: grid; +.col-md-10 { + display: grid; } -.col-md-2{ - display: contents; -} -.control-label{ - font-weight:400; +.col-md-2 { + display: contents; } -.row{ - display:block; +.control-label { + font-weight: 400; } -.btn-danger-outline{ - background-color: #E84C3D; +.row { + display: block; } -.btn-success-outline{ - background-color: #1b9d1b; +.btn-danger-outline { + background-color: #E84C3D; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; +.btn-success-outline { + background-color: #1b9d1b; } -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } @media (min-width:1440px) { - .col-md-2{ - display: inline-table; - } + .col-md-2 { + display: inline-table; + } } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/emby/emby.component.ts b/src/Ombi/ClientApp/src/app/settings/emby/emby.component.ts index 858f3846c..52595d1d3 100644 --- a/src/Ombi/ClientApp/src/app/settings/emby/emby.component.ts +++ b/src/Ombi/ClientApp/src/app/settings/emby/emby.component.ts @@ -2,7 +2,7 @@ import { IEmbyServer, IEmbySettings } from "../../interfaces"; import { EmbyService, JobService, NotificationService, SettingsService, TesterService } from "../../services"; -import { MatTabChangeEvent, MatTabGroup } from "@angular/material"; +import { MatTabChangeEvent, MatTabGroup } from "@angular/material/tabs"; import {FormControl} from '@angular/forms'; @Component({ diff --git a/src/Ombi/ClientApp/src/app/settings/issues/issues.component.scss b/src/Ombi/ClientApp/src/app/settings/issues/issues.component.scss index abd043d0f..ddf1eb4d8 100644 --- a/src/Ombi/ClientApp/src/app/settings/issues/issues.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/issues/issues.component.scss @@ -1,52 +1,50 @@ @import "~styles/shared.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -.control-label{ - font-weight:400; +.control-label { + font-weight: 400; } -.col-md-6{ - display: contents; -} -.col-md-9{ - display: inline-table; -} -.col-md-3{ - display: inline-table; +.col-md-6 { + display: contents; } -.row{ - display:block; +.col-md-9 { + display: inline-table; } -.btn-danger-outline{ - background-color: #E84C3D; +.col-md-3 { + display: inline-table; } -.btn-success-outline{ - background-color: #1b9d1b; +.row { + display: block; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; +.btn-danger-outline { + background-color: #E84C3D; } -::ng-deep .dark .categoryResults{ - background-color: rgba(0, 0, 0, 0.05); - padding: 1em; +.btn-success-outline { + background-color: #1b9d1b; } -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .categoryResults { + background-color: rgba(0, 0, 0, 0.05); + padding: 1em; } + +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; +} + @media (min-width:1440px) { - .col-md-6{ - display: inline-table; - } + .col-md-6 { + display: inline-table; + } } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/lidarr/lidarr.component.scss b/src/Ombi/ClientApp/src/app/settings/lidarr/lidarr.component.scss index b6f3d1014..5bc0ad204 100644 --- a/src/Ombi/ClientApp/src/app/settings/lidarr/lidarr.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/lidarr/lidarr.component.scss @@ -1,50 +1,44 @@ @import "~styles/shared.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -.col-md-6{ - display: contents; +.col-md-6 { + display: contents; } -.col-md-5{ - display: contents; +.col-md-5 { + display: contents; } -.control-label{ - font-weight:400; +.control-label { + font-weight: 400; } -.row{ - display:block; +.row { + display: block; } -.btn-danger-outline{ - background-color: #E84C3D; +.btn-danger-outline { + background-color: #E84C3D; } -.btn-success-outline{ - background-color: #1b9d1b; +.btn-success-outline { + background-color: #1b9d1b; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } @media (min-width:1440px) { - .col-md-6{ - display: inline-table; - } - - .col-md-5{ - display: inline-table; - } -} + .col-md-6 { + display: inline-table; + } + .col-md-5 { + display: inline-table; + } +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/notifications/cloudmobile.coponent.ts b/src/Ombi/ClientApp/src/app/settings/notifications/cloudmobile.coponent.ts index c10ab97b6..e78860e09 100644 --- a/src/Ombi/ClientApp/src/app/settings/notifications/cloudmobile.coponent.ts +++ b/src/Ombi/ClientApp/src/app/settings/notifications/cloudmobile.coponent.ts @@ -7,7 +7,7 @@ import { NotificationService } from "../../services"; import { MobileService, SettingsService } from "../../services"; import { CloudMobileService } from "../../services/cloudmobile.service"; import { SelectionModel } from "@angular/cdk/collections"; -import { MatTableDataSource } from "@angular/material"; +import { MatTableDataSource } from "@angular/material/table"; @Component({ templateUrl: "./cloudmobile.component.html", diff --git a/src/Ombi/ClientApp/src/app/settings/plex/plex.component.scss b/src/Ombi/ClientApp/src/app/settings/plex/plex.component.scss index b6f3d1014..5bc0ad204 100644 --- a/src/Ombi/ClientApp/src/app/settings/plex/plex.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/plex/plex.component.scss @@ -1,50 +1,44 @@ @import "~styles/shared.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -.col-md-6{ - display: contents; +.col-md-6 { + display: contents; } -.col-md-5{ - display: contents; +.col-md-5 { + display: contents; } -.control-label{ - font-weight:400; +.control-label { + font-weight: 400; } -.row{ - display:block; +.row { + display: block; } -.btn-danger-outline{ - background-color: #E84C3D; +.btn-danger-outline { + background-color: #E84C3D; } -.btn-success-outline{ - background-color: #1b9d1b; +.btn-success-outline { + background-color: #1b9d1b; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } @media (min-width:1440px) { - .col-md-6{ - display: inline-table; - } - - .col-md-5{ - display: inline-table; - } -} + .col-md-6 { + display: inline-table; + } + .col-md-5 { + display: inline-table; + } +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/plex/plex.component.ts b/src/Ombi/ClientApp/src/app/settings/plex/plex.component.ts index cacdd76c8..7509fb45a 100644 --- a/src/Ombi/ClientApp/src/app/settings/plex/plex.component.ts +++ b/src/Ombi/ClientApp/src/app/settings/plex/plex.component.ts @@ -4,7 +4,7 @@ import { takeUntil } from "rxjs/operators"; import { IPlexLibrariesSettings, IPlexServer, IPlexServerResponse, IPlexServerViewModel, IPlexSettings } from "../../interfaces"; import { JobService, NotificationService, PlexService, SettingsService, TesterService } from "../../services"; -import { MatTabChangeEvent, MatTabGroup } from "@angular/material"; +import { MatTabChangeEvent, MatTabGroup } from "@angular/material/tabs"; import {FormControl} from '@angular/forms'; @Component({ diff --git a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html index 9bc7c95b1..362077673 100644 --- a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html +++ b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.html @@ -2,12 +2,18 @@
Radarr Settings -
-
Enable
-
Advanced
-
-
-
+ + +
+
+ Enable +
+
+ Advanced +
+ +
+
@@ -77,16 +83,17 @@
- -
-
-
Do not search
+
+
+ + +
@@ -103,7 +110,7 @@
- -
+
+
\ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.scss b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.scss index b35e0be95..2d51f1403 100644 --- a/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/radarr/radarr.component.scss @@ -1,56 +1,49 @@ @import "~styles/shared.scss"; -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -.col-md-6{ - display: contents; +.col-md-6 { + display: contents; } -.col-md-5{ - display: contents; +.col-md-5 { + display: contents; } -.col-md-4{ - display: contents; +.col-md-4 { + display: contents; } -.control-label{ - font-weight:400; +.control-label { + font-weight: 400; } -.row{ - display:block; +.row { + display: block; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } ::ng-deep .load { - max-width: fit-content; - margin-left:3em; - padding: 0.5rem 1.14rem; + max-width: fit-content; + margin-left: 3em; + padding: 0.5rem 1.14rem; } @media (min-width:1440px) { - .col-md-6{ - display: inline-table; - } - - .col-md-5{ - display: inline-table; - } - - .col-md-4{ - display: inline-table; - } + .col-md-6 { + display: inline-table; + } + .col-md-5 { + display: inline-table; + } + .col-md-4 { + display: inline-table; + } } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/settings.module.ts b/src/Ombi/ClientApp/src/app/settings/settings.module.ts index daef3edf7..58ceb9c64 100644 --- a/src/Ombi/ClientApp/src/app/settings/settings.module.ts +++ b/src/Ombi/ClientApp/src/app/settings/settings.module.ts @@ -2,7 +2,6 @@ import { CommonModule } from "@angular/common"; import { NgModule } from "@angular/core"; import { FormsModule, ReactiveFormsModule } from "@angular/forms"; import { RouterModule, Routes } from "@angular/router"; -import { NgbAccordionModule, NgbModule } from "@ng-bootstrap/ng-bootstrap"; // import { TagInputModule } from "ngx-chips"; import { ClipboardModule } from "ngx-clipboard"; @@ -51,8 +50,16 @@ import { WikiComponent } from "./wiki.component"; import { SettingsMenuComponent } from "./settingsmenu.component"; -import { AutoCompleteModule, CalendarModule, DialogModule, InputSwitchModule, InputTextModule, MenuModule, RadioButtonModule, TooltipModule } from "primeng/primeng"; -import { MatMenuModule} from "@angular/material"; +import {AutoCompleteModule } from "primeng/autocomplete"; +import {CalendarModule } from "primeng/calendar"; +import {InputSwitchModule } from "primeng/inputswitch"; +import {InputTextModule } from "primeng/inputtext"; +import {DialogModule } from "primeng/dialog"; +import {MenuModule } from "primeng/menu"; +import {RadioButtonModule } from "primeng/radiobutton"; +import {TooltipModule } from "primeng/tooltip"; + +import { MatMenuModule } from "@angular/material/menu"; import { SharedModule } from "../shared/shared.module"; import { HubService } from "../services/hub.service"; import { LogsComponent } from "./logs/logs.component"; @@ -108,9 +115,7 @@ const routes: Routes = [ MenuModule, InputSwitchModule, InputTextModule, - NgbModule, TooltipModule, - NgbAccordionModule, AutoCompleteModule, CalendarModule, // TagInputModule, diff --git a/src/Ombi/ClientApp/src/app/settings/sickrage/sickrage.component.scss b/src/Ombi/ClientApp/src/app/settings/sickrage/sickrage.component.scss index 990deaa0b..05f28b202 100644 --- a/src/Ombi/ClientApp/src/app/settings/sickrage/sickrage.component.scss +++ b/src/Ombi/ClientApp/src/app/settings/sickrage/sickrage.component.scss @@ -1,15 +1,10 @@ -.small-middle-container{ - margin: auto; - width: 95%; - margin-top:10px; +.small-middle-container { + margin: auto; + width: 95%; + margin-top: 10px; } -::ng-deep .dark .small-middle-container{ - background-color: rgba(0, 0, 0, 0.10); - padding: 2em; -} - -::ng-deep .dark .btn:hover{ - box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); - color: inherit; +::ng-deep .dark .btn:hover { + box-shadow: 0 5px 11px 0 rgba(255, 255, 255, 0.18), 0 4px 15px 0 rgba(255, 255, 255, 0.15); + color: inherit; } \ No newline at end of file diff --git a/src/Ombi/ClientApp/src/app/settings/sonarr/sonarr.component.html b/src/Ombi/ClientApp/src/app/settings/sonarr/sonarr.component.html index 320b38363..e18b42fd1 100644 --- a/src/Ombi/ClientApp/src/app/settings/sonarr/sonarr.component.html +++ b/src/Ombi/ClientApp/src/app/settings/sonarr/sonarr.component.html @@ -2,11 +2,11 @@
Sonarr Settings -
- Advanced - -
+
+ Advanced + +
@@ -43,8 +43,7 @@ - +
@@ -53,8 +52,7 @@ - +
@@ -64,35 +62,32 @@ - +
- +
- +
-
- + +
+
@@ -110,8 +105,7 @@
-