mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-23 15:30:34 -04:00
Cleaning up
This commit is contained in:
parent
cf2196b153
commit
cfd9f114e1
@ -2,10 +2,10 @@ import {NgModule} from '@angular/core';
|
|||||||
import {RouterModule, Routes} from '@angular/router';
|
import {RouterModule, Routes} from '@angular/router';
|
||||||
import {ItemsGridComponent} from './components/items-grid/items-grid.component';
|
import {ItemsGridComponent} from './components/items-grid/items-grid.component';
|
||||||
import {NotFoundComponent} from './pages/not-found/not-found.component';
|
import {NotFoundComponent} from './pages/not-found/not-found.component';
|
||||||
import {PageResolver} from './services/resolvers/page-resolver.service';
|
import {PageResolver} from './services/page-resolver.service';
|
||||||
import {ShowDetailsComponent} from './pages/show-details/show-details.component';
|
import {ShowDetailsComponent} from './pages/show-details/show-details.component';
|
||||||
import {AuthGuard} from "./auth/misc/authenticated-guard.service";
|
import {AuthGuard} from "./auth/misc/authenticated-guard.service";
|
||||||
import {LibraryItem} from "../models/library-item";
|
import {LibraryItem} from "../models/resources/library-item";
|
||||||
import {
|
import {
|
||||||
EpisodeService,
|
EpisodeService,
|
||||||
LibraryItemService,
|
LibraryItemService,
|
||||||
@ -14,12 +14,14 @@ import {
|
|||||||
SeasonService,
|
SeasonService,
|
||||||
ShowService
|
ShowService
|
||||||
} from "./services/api.service";
|
} from "./services/api.service";
|
||||||
import {Show} from "../models/show";
|
import {Show} from "../models/resources/show";
|
||||||
import {ItemResolver} from "./services/resolvers/item-resolver.service";
|
import {ItemResolver} from "./services/item-resolver.service";
|
||||||
import {CollectionComponent} from "./pages/collection/collection.component";
|
import {CollectionComponent} from "./pages/collection/collection.component";
|
||||||
import {Collection} from "../models/collection";
|
import {Collection} from "../models/resources/collection";
|
||||||
import {SearchComponent} from "./pages/search/search.component";
|
import {SearchComponent} from "./pages/search/search.component";
|
||||||
import {SearchResult} from "../models/search-result";
|
import {SearchResult} from "../models/search-result";
|
||||||
|
import {PlayerComponent} from "./pages/player/player.component";
|
||||||
|
import {WatchItem} from "../models/watch-item";
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{path: "browse", component: ItemsGridComponent, pathMatch: "full",
|
{path: "browse", component: ItemsGridComponent, pathMatch: "full",
|
||||||
@ -63,8 +65,15 @@ const routes: Routes = [
|
|||||||
canActivate: [AuthGuard.forPermissions("read")]
|
canActivate: [AuthGuard.forPermissions("read")]
|
||||||
},
|
},
|
||||||
|
|
||||||
// {path: "watch/:item", component: PlayerComponent, resolve: { item: StreamResolverService }, canLoad: [AuthGuard.forPermissions("play")], canActivate: [AuthGuard.forPermissions("play")]},
|
{path: "watch/:item", component: PlayerComponent,
|
||||||
|
resolve: { item: ItemResolver.forResource<WatchItem>("watch/:item") },
|
||||||
|
canLoad: [AuthGuard.forPermissions("play")],
|
||||||
|
canActivate: [AuthGuard.forPermissions("play")]
|
||||||
|
},
|
||||||
|
|
||||||
// TODO implement missing pages: /genre, /studio & an home page.
|
// TODO implement missing pages: /genre, /studio & an home page.
|
||||||
|
|
||||||
|
{path: "", pathMatch: 'full', redirectTo: "/browse"},
|
||||||
{path: "**", component: NotFoundComponent}
|
{path: "**", component: NotFoundComponent}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import {MatDialog} from "@angular/material/dialog";
|
|||||||
import {Account} from "../models/account";
|
import {Account} from "../models/account";
|
||||||
import {AccountComponent} from "./auth/account/account.component";
|
import {AccountComponent} from "./auth/account/account.component";
|
||||||
import {AuthService} from "./auth/auth.service";
|
import {AuthService} from "./auth/auth.service";
|
||||||
import {Library} from "../models/library";
|
import {Library} from "../models/resources/library";
|
||||||
import {LibraryService} from "./services/api.service";
|
import {LibraryService} from "./services/api.service";
|
||||||
import * as $ from "jquery";
|
import * as $ from "jquery";
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ import {MatChipsModule} from "@angular/material/chips";
|
|||||||
import {MatAutocompleteModule} from "@angular/material/autocomplete";
|
import {MatAutocompleteModule} from "@angular/material/autocomplete";
|
||||||
import {MatExpansionModule} from "@angular/material/expansion";
|
import {MatExpansionModule} from "@angular/material/expansion";
|
||||||
import {InfiniteScrollModule} from "ngx-infinite-scroll";
|
import {InfiniteScrollModule} from "ngx-infinite-scroll";
|
||||||
|
import {ShowGridComponent} from "./components/show-grid/show-grid.component";
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
@ -57,6 +58,7 @@ import {InfiniteScrollModule} from "ngx-infinite-scroll";
|
|||||||
TrailerDialogComponent,
|
TrailerDialogComponent,
|
||||||
ItemsListComponent,
|
ItemsListComponent,
|
||||||
MetadataEditComponent,
|
MetadataEditComponent,
|
||||||
|
ShowGridComponent
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Component, Input} from '@angular/core';
|
import { Component, Input} from '@angular/core';
|
||||||
import { DomSanitizer } from "@angular/platform-browser";
|
import { DomSanitizer } from "@angular/platform-browser";
|
||||||
import { Episode } from "../../../models/episode";
|
import { Episode } from "../../../models/resources/episode";
|
||||||
import {HorizontalScroller} from "../../misc/horizontal-scroller";
|
import {HorizontalScroller} from "../../misc/horizontal-scroller";
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../../models/page";
|
||||||
import {HttpClient} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
import {Component, Input} from '@angular/core';
|
import {Component, Input} from '@angular/core';
|
||||||
import {ActivatedRoute} from '@angular/router';
|
import {ActivatedRoute} from '@angular/router';
|
||||||
import {DomSanitizer} from '@angular/platform-browser';
|
import {DomSanitizer} from '@angular/platform-browser';
|
||||||
import {LibraryItem} from "../../../models/library-item";
|
import {LibraryItem} from "../../../models/resources/library-item";
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../../models/page";
|
||||||
import {HttpClient} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
import {Show, ShowRole} from "../../../models/show";
|
import {Show, ShowRole} from "../../../models/resources/show";
|
||||||
import {Collection} from "../../../models/collection";
|
import {Collection} from "../../../models/resources/collection";
|
||||||
import {ItemsUtils} from "../../misc/items-utils";
|
import {ItemsUtils} from "../../misc/items-utils";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-items',
|
selector: 'app-items-grid',
|
||||||
templateUrl: './items-grid.component.html',
|
templateUrl: './items-grid.component.html',
|
||||||
styleUrls: ['./items-grid.component.scss']
|
styleUrls: ['./items-grid.component.scss']
|
||||||
})
|
})
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import {Component, Input} from "@angular/core";
|
import {Component, Input} from "@angular/core";
|
||||||
import {Collection} from "../../../models/collection";
|
import {Collection} from "../../../models/resources/collection";
|
||||||
import {DomSanitizer} from "@angular/platform-browser";
|
import {DomSanitizer} from "@angular/platform-browser";
|
||||||
import {HorizontalScroller} from "../../misc/horizontal-scroller";
|
import {HorizontalScroller} from "../../misc/horizontal-scroller";
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../../models/page";
|
||||||
import {HttpClient} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
import {Show, ShowRole} from "../../../models/show";
|
import {Show, ShowRole} from "../../../models/resources/show";
|
||||||
import {LibraryItem} from "../../../models/library-item";
|
import {LibraryItem} from "../../../models/resources/library-item";
|
||||||
import {ItemsUtils} from "../../misc/items-utils";
|
import {ItemsUtils} from "../../misc/items-utils";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Component, ElementRef, Input, ViewChild } from '@angular/core';
|
import { Component, ElementRef, Input, ViewChild } from '@angular/core';
|
||||||
import { MatButton } from "@angular/material/button";
|
import { MatButton } from "@angular/material/button";
|
||||||
import { DomSanitizer } from "@angular/platform-browser";
|
import { DomSanitizer } from "@angular/platform-browser";
|
||||||
import { People } from "../../../models/people";
|
import { People } from "../../../models/resources/people";
|
||||||
import {HorizontalScroller} from "../../misc/horizontal-scroller";
|
import {HorizontalScroller} from "../../misc/horizontal-scroller";
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../../models/page";
|
||||||
import {HttpClient} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
|
22
src/app/components/show-grid/show-grid.component.html
Normal file
22
src/app/components/show-grid/show-grid.component.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<div class="container-fluid">
|
||||||
|
<div *ngFor="let show of this.shows?.items" class="show-container">
|
||||||
|
<mat-card class="show">
|
||||||
|
<a [href]="getLink(show)" [routerLink]="getLink(show)" class="d-flex" (click)="this.clickCallback.emit(show)">
|
||||||
|
<div class="thumb">
|
||||||
|
<div [style.background-image]="getThumb(show)"> </div>
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<p class="title">{{show.title}}</p>
|
||||||
|
<p class="date" *ngIf="show.endYear && show.startYear != show.endYear; else elseBlock">{{show.startYear}} - {{show.endYear}}</p>
|
||||||
|
<ng-template #elseBlock><p class="date">{{show.startYear}}</p></ng-template>
|
||||||
|
<p class="overview">{{show.overview}}</p>
|
||||||
|
<ul>
|
||||||
|
<li class="provider" *ngFor="let id of this.show.externalIDs">
|
||||||
|
<a [href]="id.link"><img [src]="id.provider.logo" [alt]="id.provider.name"/></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</mat-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
144
src/app/components/show-grid/show-grid.component.scss
Normal file
144
src/app/components/show-grid/show-grid.component.scss
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
@import "~bootstrap/scss/functions";
|
||||||
|
@import "~bootstrap/scss/variables";
|
||||||
|
@import "~bootstrap/scss/mixins/breakpoints";
|
||||||
|
|
||||||
|
button
|
||||||
|
{
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow
|
||||||
|
{
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container-fluid
|
||||||
|
{
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-container
|
||||||
|
{
|
||||||
|
width: 100%;
|
||||||
|
min-width: 300px;
|
||||||
|
list-style: none;
|
||||||
|
padding: .5em;
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg)
|
||||||
|
{
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl)
|
||||||
|
{
|
||||||
|
width: 33%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show
|
||||||
|
{
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
> a
|
||||||
|
{
|
||||||
|
text-decoration: none;
|
||||||
|
color: inherit;
|
||||||
|
outline: none;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:focus, &:hover
|
||||||
|
{
|
||||||
|
|
||||||
|
> .data > .title
|
||||||
|
{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .thumb
|
||||||
|
{
|
||||||
|
width: 33%;
|
||||||
|
|
||||||
|
> div
|
||||||
|
{
|
||||||
|
width: 100%;
|
||||||
|
height: 0;
|
||||||
|
padding-top: 147.0588%;
|
||||||
|
background-size: cover;
|
||||||
|
background-color: #333333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .data
|
||||||
|
{
|
||||||
|
width: 67%;
|
||||||
|
padding: .5rem;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
|
||||||
|
> p:not(.overview)
|
||||||
|
{
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 0;
|
||||||
|
opacity: 1;
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
&.date
|
||||||
|
{
|
||||||
|
opacity: 0.8;
|
||||||
|
font-size: 0.8em;
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .overview
|
||||||
|
{
|
||||||
|
overflow-y: auto;
|
||||||
|
height: calc(100% - 4rem);
|
||||||
|
text-align: justify;
|
||||||
|
padding-right: .5rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:host-context(.hoverEnabled) &:hover
|
||||||
|
{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.provider
|
||||||
|
{
|
||||||
|
display: inline-block;
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
margin: .25rem;
|
||||||
|
|
||||||
|
> a
|
||||||
|
{
|
||||||
|
width: 2.5rem;
|
||||||
|
height: 2.5rem;
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
> img
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
max-width: 2.5rem;
|
||||||
|
max-height: 2.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
30
src/app/components/show-grid/show-grid.component.ts
Normal file
30
src/app/components/show-grid/show-grid.component.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import {Component, EventEmitter, Input, Output} from '@angular/core';
|
||||||
|
import {DomSanitizer} from "@angular/platform-browser";
|
||||||
|
import {Show} from "../../../models/resources/show";
|
||||||
|
import {Page} from "../../../models/page";
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-shows-grid',
|
||||||
|
templateUrl: './show-grid.component.html',
|
||||||
|
styleUrls: ['./show-grid.component.scss']
|
||||||
|
})
|
||||||
|
export class ShowGridComponent
|
||||||
|
{
|
||||||
|
@Input() shows: Page<Show>
|
||||||
|
@Input() externalShows: boolean = false;
|
||||||
|
@Output() clickCallback: EventEmitter<Show> = new EventEmitter();
|
||||||
|
|
||||||
|
constructor(private sanitizer: DomSanitizer) { }
|
||||||
|
|
||||||
|
getThumb(show: Show)
|
||||||
|
{
|
||||||
|
return this.sanitizer.bypassSecurityTrustStyle(`url(${show.poster})`);
|
||||||
|
}
|
||||||
|
|
||||||
|
getLink(show: Show)
|
||||||
|
{
|
||||||
|
if (this.externalShows)
|
||||||
|
return null;
|
||||||
|
return `/show/${show.slug}`;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import {ItemType, LibraryItem} from "../../models/library-item";
|
import {ItemType, LibraryItem} from "../../models/resources/library-item";
|
||||||
import {Show, ShowRole} from "../../models/show";
|
import {Show, ShowRole} from "../../models/resources/show";
|
||||||
import {Collection} from "../../models/collection";
|
import {Collection} from "../../models/resources/collection";
|
||||||
|
|
||||||
export class ItemsUtils
|
export class ItemsUtils
|
||||||
{
|
{
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<h5 class="date" *ngIf="collection.endYear; else elseBlock">{{collection.startYear}} - {{collection.endYear}}</h5>
|
<h5 class="date" *ngIf="collection.endYear; else elseBlock">{{collection.startYear}} - {{collection.endYear}}</h5>
|
||||||
<ng-template #elseBlock><h5 class="date">{{collection.startYear}}</h5></ng-template>
|
<ng-template #elseBlock><h5 class="date">{{collection.startYear}}</h5></ng-template>
|
||||||
<hr />
|
<hr />
|
||||||
<app-items [page]="shows"></app-items>
|
<app-items-grid [page]="shows"></app-items-grid>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import {Component} from '@angular/core';
|
import {Component} from '@angular/core';
|
||||||
import {Collection} from "../../../models/collection";
|
import {Collection} from "../../../models/resources/collection";
|
||||||
import {ActivatedRoute} from "@angular/router";
|
import {ActivatedRoute} from "@angular/router";
|
||||||
import {DomSanitizer} from "@angular/platform-browser";
|
import {DomSanitizer} from "@angular/platform-browser";
|
||||||
import {Show} from "../../../models/show";
|
import {Show} from "../../../models/resources/show";
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../../models/page";
|
||||||
import {People} from "../../../models/people";
|
import {People} from "../../../models/resources/people";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-collection',
|
selector: 'app-collection',
|
||||||
|
@ -92,7 +92,7 @@
|
|||||||
<mat-label>{{provider.name}} ID</mat-label>
|
<mat-label>{{provider.name}} ID</mat-label>
|
||||||
<input matInput [value]="this.getMetadataID(provider)?.dataID" (input)="this.setMetadataID(provider, $event.target.value)" >
|
<input matInput [value]="this.getMetadataID(provider)?.dataID" (input)="this.setMetadataID(provider, $event.target.value)" >
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<app-show-grid #identifyGrid [externalShows]="true" (clickCallback)="this.identifyID($event)"></app-show-grid>
|
<app-shows-grid #identifyGrid [externalShows]="true" (clickCallback)="this.identifyID($event)"></app-shows-grid>
|
||||||
</mat-expansion-panel>
|
</mat-expansion-panel>
|
||||||
</mat-accordion>
|
</mat-accordion>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
import {Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';
|
import {Component, ElementRef, Inject, ViewChild} from '@angular/core';
|
||||||
import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog";
|
import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog";
|
||||||
import {HttpClient, HttpErrorResponse} from "@angular/common/http";
|
import {HttpClient} from "@angular/common/http";
|
||||||
import {Show} from "../../../models/show";
|
import {Show} from "../../../models/resources/show";
|
||||||
import {Genre} from "../../../models/genre";
|
import {Genre} from "../../../models/resources/genre";
|
||||||
import {MatChipInputEvent} from "@angular/material/chips";
|
import {MatChipInputEvent} from "@angular/material/chips";
|
||||||
import {MatAutocompleteSelectedEvent} from "@angular/material/autocomplete";
|
import {MatAutocompleteSelectedEvent} from "@angular/material/autocomplete";
|
||||||
import {Observable, of} from "rxjs";
|
import {Observable, of} from "rxjs";
|
||||||
import {catchError, tap} from "rxjs/operators";
|
import {tap} from "rxjs/operators";
|
||||||
import {Studio} from "../../../models/studio";
|
import {Studio} from "../../../models/resources/studio";
|
||||||
import {ShowGridComponent} from "../../components/show-grid/show-grid.component";
|
|
||||||
import {Provider} from "../../../models/provider";
|
import {Provider} from "../../../models/provider";
|
||||||
import {MatSnackBar} from "@angular/material/snack-bar";
|
import {MatSnackBar} from "@angular/material/snack-bar";
|
||||||
|
import {ShowGridComponent} from "../../components/show-grid/show-grid.component";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-metadata-edit',
|
selector: 'app-metadata-edit',
|
||||||
@ -124,7 +124,7 @@ export class MetadataEditComponent
|
|||||||
|
|
||||||
reIdentify(search: string)
|
reIdentify(search: string)
|
||||||
{
|
{
|
||||||
this.identityShow(search).subscribe(x => this.identifyGrid.shows = x);
|
// this.identityShow(search).subscribe(x => this.identifyGrid.shows = x);
|
||||||
}
|
}
|
||||||
|
|
||||||
getMetadataID(provider: Provider)
|
getMetadataID(provider: Provider)
|
||||||
|
@ -2,15 +2,15 @@ import { Component, OnInit } from '@angular/core';
|
|||||||
import { MatSnackBar } from "@angular/material/snack-bar";
|
import { MatSnackBar } from "@angular/material/snack-bar";
|
||||||
import { Title } from '@angular/platform-browser';
|
import { Title } from '@angular/platform-browser';
|
||||||
import {ActivatedRoute, Router} from '@angular/router';
|
import {ActivatedRoute, Router} from '@angular/router';
|
||||||
import { Episode } from "../../../models/episode";
|
import { Episode } from "../../../models/resources/episode";
|
||||||
import { Show } from "../../../models/show";
|
import { Show } from "../../../models/resources/show";
|
||||||
import {MatDialog} from "@angular/material/dialog";
|
import {MatDialog} from "@angular/material/dialog";
|
||||||
import {TrailerDialogComponent} from "../trailer-dialog/trailer-dialog.component";
|
import {TrailerDialogComponent} from "../trailer-dialog/trailer-dialog.component";
|
||||||
import {MetadataEditComponent} from "../metadata-edit/metadata-edit.component";
|
import {MetadataEditComponent} from "../metadata-edit/metadata-edit.component";
|
||||||
import {Season} from "../../../models/season";
|
import {Season} from "../../../models/resources/season";
|
||||||
import {EpisodeService, PeopleService, SeasonService} from "../../services/api.service";
|
import {EpisodeService, PeopleService, SeasonService} from "../../services/api.service";
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../../models/page";
|
||||||
import {People} from "../../../models/people";
|
import {People} from "../../../models/resources/people";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-show-details',
|
selector: 'app-show-details',
|
||||||
|
@ -3,13 +3,13 @@ import {HttpClient} from "@angular/common/http";
|
|||||||
import {Observable} from "rxjs"
|
import {Observable} from "rxjs"
|
||||||
import {Page} from "../../models/page";
|
import {Page} from "../../models/page";
|
||||||
import {IResource} from "../../models/resources/resource";
|
import {IResource} from "../../models/resources/resource";
|
||||||
import {Library} from "../../models/library";
|
import {Library} from "../../models/resources/library";
|
||||||
import {LibraryItem} from "../../models/library-item";
|
import {LibraryItem} from "../../models/resources/library-item";
|
||||||
import {map} from "rxjs/operators";
|
import {map} from "rxjs/operators";
|
||||||
import {Season} from "../../models/season";
|
import {Season} from "../../models/resources/season";
|
||||||
import {Episode} from "../../models/episode";
|
import {Episode} from "../../models/resources/episode";
|
||||||
import {People} from "../../models/people";
|
import {People} from "../../models/resources/people";
|
||||||
import {Show} from "../../models/show";
|
import {Show} from "../../models/resources/show";
|
||||||
|
|
||||||
export interface ApiArgs
|
export interface ApiArgs
|
||||||
{
|
{
|
||||||
@ -116,7 +116,7 @@ export class EpisodeService extends CrudApi<Episode>
|
|||||||
|
|
||||||
getFromSeasonNumber(show: string | number, seasonNumber: number, args?: ApiArgs): Observable<Page<Episode>>
|
getFromSeasonNumber(show: string | number, seasonNumber: number, args?: ApiArgs): Observable<Page<Episode>>
|
||||||
{
|
{
|
||||||
return this.client.get(`/api/seasons/${show}-${seasonNumber}/episodes${this.ArgsAsQuery(args)}`)
|
return this.client.get(`/api/seasons/${show}-s${seasonNumber}/episodes${this.ArgsAsQuery(args)}`)
|
||||||
.pipe(map(x => Object.assign(new Page<Episode>(), x)));
|
.pipe(map(x => Object.assign(new Page<Episode>(), x)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@ import {MatSnackBar} from '@angular/material/snack-bar';
|
|||||||
import {ActivatedRouteSnapshot, Resolve} from '@angular/router';
|
import {ActivatedRouteSnapshot, Resolve} from '@angular/router';
|
||||||
import {Observable, EMPTY} from 'rxjs';
|
import {Observable, EMPTY} from 'rxjs';
|
||||||
import {catchError, map} from 'rxjs/operators';
|
import {catchError, map} from 'rxjs/operators';
|
||||||
import {Page} from "../../../models/page";
|
import {Page} from "../../models/page";
|
||||||
import {IResource} from "../../../models/resources/resource";
|
import {IResource} from "../../models/resources/resource";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PageResolver
|
export class PageResolver
|
@ -1,26 +0,0 @@
|
|||||||
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
|
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
||||||
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
|
|
||||||
import { EMPTY, Observable } from 'rxjs';
|
|
||||||
import { catchError } from 'rxjs/operators';
|
|
||||||
import { SearchResult } from "../../../models/search-result";
|
|
||||||
|
|
||||||
@Injectable({
|
|
||||||
providedIn: 'root'
|
|
||||||
})
|
|
||||||
export class SearchResolverService implements Resolve<SearchResult>
|
|
||||||
{
|
|
||||||
constructor(private http: HttpClient, private snackBar: MatSnackBar) { }
|
|
||||||
|
|
||||||
resolve(route: ActivatedRouteSnapshot): SearchResult | Observable<SearchResult> | Promise<SearchResult>
|
|
||||||
{
|
|
||||||
let query: string = route.paramMap.get("query");
|
|
||||||
return this.http.get<SearchResult>("api/search/" + query).pipe(catchError((error: HttpErrorResponse) =>
|
|
||||||
{
|
|
||||||
console.log(error.status + " - " + error.message);
|
|
||||||
this.snackBar.open("An unknow error occured.", null, { horizontalPosition: "left", panelClass: ['snackError'], duration: 2500 });
|
|
||||||
return EMPTY;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
|
|
||||||
import { Injectable } from '@angular/core';
|
|
||||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
||||||
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
|
|
||||||
import { EMPTY, Observable } from 'rxjs';
|
|
||||||
import { catchError } from 'rxjs/operators';
|
|
||||||
import { WatchItem } from "../../../models/watch-item";
|
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
|
||||||
export class StreamResolverService implements Resolve<WatchItem>
|
|
||||||
{
|
|
||||||
constructor(private http: HttpClient, private snackBar: MatSnackBar) { }
|
|
||||||
|
|
||||||
resolve(route: ActivatedRouteSnapshot): WatchItem | Observable<WatchItem> | Promise<WatchItem>
|
|
||||||
{
|
|
||||||
let item: string = route.paramMap.get("item");
|
|
||||||
return this.http.get<WatchItem>("api/watch/" + item).pipe(catchError((error: HttpErrorResponse) =>
|
|
||||||
{
|
|
||||||
console.log(error.status + " - " + error.message);
|
|
||||||
if (error.status == 404)
|
|
||||||
{
|
|
||||||
this.snackBar.open("Episode \"" + item + "\" not found.", null, { horizontalPosition: "left", panelClass: ['snackError'], duration: 2500 });
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.snackBar.open("An unknow error occured.", null, { horizontalPosition: "left", panelClass: ['snackError'], duration: 2500 });
|
|
||||||
}
|
|
||||||
return EMPTY;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
import { Show } from "./show";
|
import { Show } from "./show";
|
||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
|
|
||||||
export interface Collection extends IResource
|
export interface Collection extends IResource
|
||||||
{
|
{
|
@ -1,5 +1,5 @@
|
|||||||
import {ExternalID} from "./external-id";
|
import {ExternalID} from "../external-id";
|
||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
|
|
||||||
export interface Episode extends IResource
|
export interface Episode extends IResource
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
|
|
||||||
export enum ItemType
|
export enum ItemType
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
|
|
||||||
export interface Library extends IResource
|
export interface Library extends IResource
|
||||||
{
|
{
|
@ -1,5 +1,5 @@
|
|||||||
import {ExternalID} from "./external-id";
|
import {ExternalID} from "../external-id";
|
||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
import {Show} from "./show";
|
import {Show} from "./show";
|
||||||
|
|
||||||
export interface People extends IResource
|
export interface People extends IResource
|
@ -1,6 +1,6 @@
|
|||||||
import { Episode } from "./episode";
|
import { Episode } from "./episode";
|
||||||
import {ExternalID} from "./external-id";
|
import {ExternalID} from "../external-id";
|
||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
|
|
||||||
export interface Season extends IResource
|
export interface Season extends IResource
|
||||||
{
|
{
|
@ -2,8 +2,8 @@ import {Season} from "./season";
|
|||||||
import {Genre} from "./genre";
|
import {Genre} from "./genre";
|
||||||
import {People} from "./people";
|
import {People} from "./people";
|
||||||
import {Studio} from "./studio";
|
import {Studio} from "./studio";
|
||||||
import {ExternalID} from "./external-id";
|
import {ExternalID} from "../external-id";
|
||||||
import {IResource} from "./resources/resource";
|
import {IResource} from "./resource";
|
||||||
|
|
||||||
export interface Show extends IResource
|
export interface Show extends IResource
|
||||||
{
|
{
|
@ -1,9 +1,9 @@
|
|||||||
import { Show } from "./show";
|
import { Show } from "./resources/show";
|
||||||
import { Episode } from "./episode";
|
import { Episode } from "./resources/episode";
|
||||||
import { People } from "./people";
|
import { People } from "./resources/people";
|
||||||
import { Studio } from "./studio";
|
import { Studio } from "./resources/studio";
|
||||||
import { Genre } from "./genre";
|
import { Genre } from "./resources/genre";
|
||||||
import {Collection} from "./collection";
|
import {Collection} from "./resources/collection";
|
||||||
|
|
||||||
export interface SearchResult
|
export interface SearchResult
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Episode } from "./episode";
|
import { Episode } from "./resources/episode";
|
||||||
|
|
||||||
export interface WatchItem
|
export interface WatchItem
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user