diff --git a/appveyor.yml b/appveyor.yml index 75667e6f9..10be3a859 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -41,6 +41,12 @@ after_build: - copy "%APPVEYOR_BUILD_FOLDER%\src\Ombi.Updater\bin\release\netcoreapp1.1\centos.7-x64\publish\Ombi.Updater.dll" "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp1.1\centos.7-x64\publish\Ombi.Updater.dll" - copy "%APPVEYOR_BUILD_FOLDER%\src\Ombi.Updater\bin\release\netcoreapp1.1\centos.7-x64\publish\Ombi.Updater.dll" "%APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp1.1\centos.7-x64\publish\Ombi.Updater.exe" - cmd: >- + dir %APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp1.1\win10-x64\publish + + + dir %APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp1.1\win10-x64 + + 7z a Ombi_windows.zip %APPVEYOR_BUILD_FOLDER%\src\Ombi\bin\Release\netcoreapp1.1\win10-x64\publish diff --git a/src/Ombi.Api.Emby/Models/Media/Tv/EpisodeInformation.cs b/src/Ombi.Api.Emby/Models/Media/Tv/EpisodeInformation.cs index cb0a16086..2d31679ce 100644 --- a/src/Ombi.Api.Emby/Models/Media/Tv/EpisodeInformation.cs +++ b/src/Ombi.Api.Emby/Models/Media/Tv/EpisodeInformation.cs @@ -67,6 +67,5 @@ namespace Ombi.Api.Emby.Models.Media.Tv public string MediaType { get; set; } public object[] LockedFields { get; set; } public bool LockData { get; set; } - } } \ No newline at end of file diff --git a/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs b/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs index 3d708dab0..fc0afef12 100644 --- a/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs +++ b/src/Ombi.Core/Engine/Interfaces/ITvRequestEngine.cs @@ -15,5 +15,6 @@ namespace Ombi.Core.Engine.Interfaces Task> SearchTvRequest(string search); Task UpdateTvRequest(TvRequests request); + Task> GetAllChldren(int tvId); } } \ No newline at end of file diff --git a/src/Ombi.Core/Engine/TvRequestEngine.cs b/src/Ombi.Core/Engine/TvRequestEngine.cs index b6a71aac4..b79b65cfc 100644 --- a/src/Ombi.Core/Engine/TvRequestEngine.cs +++ b/src/Ombi.Core/Engine/TvRequestEngine.cs @@ -114,6 +114,11 @@ namespace Ombi.Core.Engine return await allRequests.ToListAsync(); } + public async Task> GetAllChldren(int tvId) + { + return await TvRepository.GetChild().Where(x => x.ParentRequestId == tvId).ToListAsync(); + } + public async Task> SearchTvRequest(string search) { var allRequests = TvRepository.Get(); diff --git a/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs b/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs index de678af78..8312b4e9a 100644 --- a/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs +++ b/src/Ombi.Core/Rule/Rules/Request/ExistingMovieRequestRule.cs @@ -25,8 +25,9 @@ namespace Ombi.Core.Rule.Rules.Request { if (obj.RequestType == RequestType.Movie) { + var movie = (MovieRequests) obj; var movieRequests = Movie.Get(); - var existing = await movieRequests.FirstOrDefaultAsync(x => x.TheMovieDbId == obj.Id); + var existing = await movieRequests.FirstOrDefaultAsync(x => x.TheMovieDbId == movie.TheMovieDbId); if (existing != null) // Do we already have a request for this? { diff --git a/src/Ombi.Schedule/Jobs/Emby/EmbyContentCacher.cs b/src/Ombi.Schedule/Jobs/Emby/EmbyContentCacher.cs index 25f6a61d0..729a55393 100644 --- a/src/Ombi.Schedule/Jobs/Emby/EmbyContentCacher.cs +++ b/src/Ombi.Schedule/Jobs/Emby/EmbyContentCacher.cs @@ -1,7 +1,29 @@ -namespace Ombi.Schedule.Jobs.Emby +using Microsoft.Extensions.Logging; +using Ombi.Api.Emby; +using Ombi.Core.Settings; +using Ombi.Core.Settings.Models.External; +using Serilog; + +namespace Ombi.Schedule.Jobs.Emby { public class EmbyContentCacher { - + public EmbyContentCacher(ISettingsService settings, IEmbyApi api, ILogger logger) + { + + } + private bool ValidateSettings(EmbySettings emby) + { + if (emby.Enable) + { + if (emby?.Ip == null || string.IsNullOrEmpty(emby?.ApiKey)) + { + //Log.Warn("A setting is null, Ensure Emby is configured correctly, and we have a Emby Auth token."); + return false; + } + } + return emby.Enable; + } + } } \ No newline at end of file diff --git a/src/Ombi.Schedule/Ombi.Schedule.csproj b/src/Ombi.Schedule/Ombi.Schedule.csproj index ea37ee864..9756a2525 100644 --- a/src/Ombi.Schedule/Ombi.Schedule.csproj +++ b/src/Ombi.Schedule/Ombi.Schedule.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Ombi/ClientApp/app/app.module.ts b/src/Ombi/ClientApp/app/app.module.ts index a49844bd1..64353b859 100644 --- a/src/Ombi/ClientApp/app/app.module.ts +++ b/src/Ombi/ClientApp/app/app.module.ts @@ -10,22 +10,12 @@ import { HttpModule } from '@angular/http'; import { ButtonModule, DialogModule } from 'primeng/primeng'; import { GrowlModule } from 'primeng/components/growl/growl'; import { DataTableModule, SharedModule } from 'primeng/primeng'; -import { InfiniteScrollModule } from 'ngx-infinite-scroll'; //import { DragulaModule, DragulaService } from 'ng2-dragula/ng2-dragula'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; // Components import { AppComponent } from './app.component'; -// Search - -// Request -import { RequestComponent } from './requests/request.component'; -import { MovieRequestsComponent } from './requests/movierequests.component'; -import { TvRequestsComponent } from './requests/tvrequests.component'; -//import { RequestGridComponent } from './request-grid/request-grid.component'; -import { RequestCardComponent } from './request-grid/request-card.component'; - import { LoginComponent } from './login/login.component'; import { LandingPageComponent } from './landingpage/landingpage.component'; import { PageNotFoundComponent } from './errors/not-found.component'; @@ -46,11 +36,12 @@ import { SettingsModule } from './settings/settings.module'; import { WizardModule } from './wizard/wizard.module'; import { SearchModule } from './search/search.module'; import { UserManagementModule } from './usermanagement/usermanagement.module'; +import { RequestsModule } from './requests/requests.module'; const routes: Routes = [ { path: '*', component: PageNotFoundComponent }, { path: '', redirectTo: '/search', pathMatch: 'full' }, - { path: 'requests', component: RequestComponent, canActivate: [AuthGuard] }, + //{ path: 'requests-grid', component: RequestGridComponent }, { path: 'login', component: LoginComponent }, { path: 'landingpage', component: LandingPageComponent } @@ -68,7 +59,6 @@ const routes: Routes = [ SettingsModule, DataTableModule, SharedModule, - InfiniteScrollModule, AuthModule, WizardModule, SearchModule, @@ -80,18 +70,14 @@ const routes: Routes = [ MdInputModule, MdTabsModule, ReactiveFormsModule, - UserManagementModule + UserManagementModule, + RequestsModule ], declarations: [ AppComponent, PageNotFoundComponent, - RequestComponent, LoginComponent, LandingPageComponent, - MovieRequestsComponent, - TvRequestsComponent, - //RequestGridComponent, - RequestCardComponent, ], providers: [ RequestService, diff --git a/src/Ombi/ClientApp/app/requests/requests.module.ts b/src/Ombi/ClientApp/app/requests/requests.module.ts new file mode 100644 index 000000000..776da325e --- /dev/null +++ b/src/Ombi/ClientApp/app/requests/requests.module.ts @@ -0,0 +1,54 @@ +import { NgModule, } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { RouterModule, Routes } from '@angular/router'; + +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; + +import { InfiniteScrollModule } from 'ngx-infinite-scroll'; + +import { ButtonModule, DialogModule } from 'primeng/primeng'; +// Request +import { RequestComponent } from './request.component'; +import { MovieRequestsComponent } from './movierequests.component'; +import { TvRequestsComponent } from './tvrequests.component'; +import { TvRequestManageComponent } from './tvrequest-manage.component'; +//import { RequestGridComponent } from '../request-grid/request-grid.component'; +// import { RequestCardComponent } from '../request-grid/request-card.component'; + +import { IdentityService } from '../services/identity.service'; +import { RequestService } from '../services/request.service'; + +import { AuthGuard } from '../auth/auth.guard'; + +const routes: Routes = [ + { path: 'requests', component: RequestComponent, canActivate: [AuthGuard] }, + { path: 'requests/:id', component: TvRequestManageComponent, canActivate: [AuthGuard] }, +]; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + RouterModule.forChild(routes), + NgbModule.forRoot(), + InfiniteScrollModule, + ButtonModule, + DialogModule, + ], + declarations: [ + RequestComponent, + MovieRequestsComponent, + TvRequestsComponent, + TvRequestManageComponent, + ], + exports: [ + RouterModule + ], + providers: [ + IdentityService, + RequestService + ], + +}) +export class RequestsModule { } \ No newline at end of file diff --git a/src/Ombi/ClientApp/app/requests/tvrequest-manage.component.html b/src/Ombi/ClientApp/app/requests/tvrequest-manage.component.html new file mode 100644 index 000000000..73b4be136 --- /dev/null +++ b/src/Ombi/ClientApp/app/requests/tvrequest-manage.component.html @@ -0,0 +1,9 @@ +
+
+ +
+ +
+ +
+
\ No newline at end of file diff --git a/src/Ombi/ClientApp/app/requests/tvrequest-manage.component.ts b/src/Ombi/ClientApp/app/requests/tvrequest-manage.component.ts new file mode 100644 index 000000000..5c4d77399 --- /dev/null +++ b/src/Ombi/ClientApp/app/requests/tvrequest-manage.component.ts @@ -0,0 +1,72 @@ +import { Component } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +import { RequestService } from '../services/request.service'; +import { IdentityService } from '../services/identity.service'; + +import { IChildRequests } from '../interfaces/IRequestModel'; + +@Component({ + templateUrl: './tvrequest-manage.component.html' +}) +export class TvRequestManageComponent { + constructor(private requestService: RequestService, private identityService: IdentityService, + private route: ActivatedRoute) { + + this.route.params + .subscribe(params => { + this.tvId = +params['id']; // (+) converts string 'id' to a number + this.requestService.getChildRequests(this.tvId).subscribe(x => { + this.childRequests = x; + }); + }); + + this.isAdmin = this.identityService.hasRole('admin'); + } + + tvId: number; + childRequests: IChildRequests[]; + isAdmin: boolean; + + public removeRequest(request: IChildRequests) { + //this.requestService.removeTvRequest(request); + this.removeRequestFromUi(request); + } + + public changeAvailability(request: IChildRequests, available: boolean) { + request.available = available; + } + + public approve(request: IChildRequests) { + request.approved = true; + request.denied = false; + } + + public deny(request: IChildRequests) { + request.approved = false; + request.denied = true; + } + + public approveSeasonRequest(request: IChildRequests) { + request.approved = true; + request.denied = false; + // this.requestService.updateTvRequest(this.selectedSeason) + // .subscribe(); + } + + public denySeasonRequest(request: IChildRequests) { + request.approved = false; + request.denied = true; + // this.requestService.updateTvRequest(this.selectedSeason) + // .subscribe(); + } + + + + private removeRequestFromUi(key: IChildRequests) { + var index = this.childRequests.indexOf(key, 0); + if (index > -1) { + this.childRequests.splice(index, 1); + } + } +} \ No newline at end of file diff --git a/src/Ombi/ClientApp/app/requests/tvrequests.component.html b/src/Ombi/ClientApp/app/requests/tvrequests.component.html index 17d6e97f0..4f874559d 100644 --- a/src/Ombi/ClientApp/app/requests/tvrequests.component.html +++ b/src/Ombi/ClientApp/app/requests/tvrequests.component.html @@ -17,7 +17,7 @@
- poster + poster
@@ -32,240 +32,25 @@ Status: {{request.status}}
-
-
- Request status: - Available - Processing Request - Request Denied - - Pending Approval -
-
- Denied: - -
- - -
Release Date: {{request.releaseDate | date}}
-
- - - - -
Requested Date: {{request.requestedDate | date}}
- +
+ Request status: + Available + Processing Request + Request Denied + + Pending Approval
- - - - - +
Release Date: {{request.releaseDate | date}}
+
+
Requested Date: {{request.requestedDate | date}}
-
-
-
- -
- - - - -
- - - -
- - - - - - - - - - -
-
- -
- -
- - -
-
- - - - +

- - - - - -
-
- -
- Requested By: {{child.requestedUser.username}} - - - - Processing Request - Request Denied - - Pending Approval -
- - - Season: {{seasons.seasonNumber}} -
- Episodes: - -
- - # {{episode.episodeNumber}} | {{episode.title}} - Available -
-
-
-
-
- - - -
-
-
-
-
- diff --git a/src/Ombi/ClientApp/app/services/request.service.ts b/src/Ombi/ClientApp/app/services/request.service.ts index 0417d1738..30c15bb64 100644 --- a/src/Ombi/ClientApp/app/services/request.service.ts +++ b/src/Ombi/ClientApp/app/services/request.service.ts @@ -7,7 +7,7 @@ import { ServiceAuthHelpers } from './service.helpers'; import { IRequestEngineResult } from '../interfaces/IRequestEngineResult'; import { ISearchMovieResult } from '../interfaces/ISearchMovieResult'; import { ISearchTvResult } from '../interfaces/ISearchTvResult'; -import { IMovieRequests, ITvRequests, IRequestCountModel, IRequestGrid } from '../interfaces/IRequestModel'; +import { IMovieRequests, ITvRequests, IRequestCountModel, IRequestGrid, IChildRequests } from '../interfaces/IRequestModel'; @Injectable() export class RequestService extends ServiceAuthHelpers { @@ -42,6 +42,11 @@ export class RequestService extends ServiceAuthHelpers { getTvRequests(count: number, position: number): Observable { return this.http.get(`${this.url}tv/${count}/${position}`).map(this.extractData) .catch(this.handleError); + } + + getChildRequests(requestId: number): Observable { + return this.http.get(`${this.url}tv/${requestId}/child`).map(this.extractData) + .catch(this.handleError); } searchTvRequests(search: string): Observable { diff --git a/src/Ombi/Controllers/RequestController.cs b/src/Ombi/Controllers/RequestController.cs index 442ae89e9..c4f4df034 100644 --- a/src/Ombi/Controllers/RequestController.cs +++ b/src/Ombi/Controllers/RequestController.cs @@ -162,6 +162,17 @@ namespace Ombi.Controllers return await TvRequestEngine.UpdateTvRequest(model); } + /// + /// Retuns all children requests for the request id + /// + /// The Request Id + /// + [HttpGet("tv/{requestId:int}/child")] + public async Task> GetAllChildren(int requestId) + { + return await TvRequestEngine.GetAllChldren(requestId); + } + /// /// Gets the count of total requests ///