diff --git a/src/Ombi/ClientApp/app/app.component.html b/src/Ombi/ClientApp/app/app.component.html
index 6a5ea4f52..4cb2c3bdd 100644
--- a/src/Ombi/ClientApp/app/app.component.html
+++ b/src/Ombi/ClientApp/app/app.component.html
@@ -34,6 +34,13 @@
{{ 'NavigationBar.Requests' | translate }}
+
+
+
-
diff --git a/src/Ombi/ClientApp/app/app.module.ts b/src/Ombi/ClientApp/app/app.module.ts
index 081e0524d..731fa383b 100644
--- a/src/Ombi/ClientApp/app/app.module.ts
+++ b/src/Ombi/ClientApp/app/app.module.ts
@@ -52,6 +52,7 @@ const routes: Routes = [
{ loadChildren: "./usermanagement/usermanagement.module#UserManagementModule", path: "usermanagement" },
{ loadChildren: "./requests/requests.module#RequestsModule", path: "requests" },
{ loadChildren: "./search/search.module#SearchModule", path: "search" },
+ { loadChildren: "./recentlyAdded/recentlyAdded.module#RecentlyAddedModule", path: "recentlyadded" },
];
// AoT requires an exported function for factories
diff --git a/src/Ombi/ClientApp/app/interfaces/IRecentlyAdded.ts b/src/Ombi/ClientApp/app/interfaces/IRecentlyAdded.ts
new file mode 100644
index 000000000..a81a9db50
--- /dev/null
+++ b/src/Ombi/ClientApp/app/interfaces/IRecentlyAdded.ts
@@ -0,0 +1,20 @@
+export interface IRecentlyAddedMovies {
+ id: number;
+ title: string;
+ overview: string;
+ imdbId: string;
+ theMovieDbId: string;
+ releaseYear: string;
+ addedAt: Date;
+ quality: string;
+}
+
+export interface IRecentlyAddedRangeModel {
+ from: Date;
+ to: Date;
+}
+
+export enum RecentlyAddedType {
+ Plex,
+ Emby,
+}
diff --git a/src/Ombi/ClientApp/app/interfaces/index.ts b/src/Ombi/ClientApp/app/interfaces/index.ts
index 510542fae..538e1bd95 100644
--- a/src/Ombi/ClientApp/app/interfaces/index.ts
+++ b/src/Ombi/ClientApp/app/interfaces/index.ts
@@ -13,3 +13,4 @@ export * from "./ISettings";
export * from "./ISonarr";
export * from "./IUser";
export * from "./IIssues";
+export * from "./IRecentlyAdded";
diff --git a/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.html b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.html
new file mode 100644
index 000000000..eb2c40dbe
--- /dev/null
+++ b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.html
@@ -0,0 +1,6 @@
+
Recently Added
+
+
+
+
+{{movies | json}}
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts
new file mode 100644
index 000000000..c48b1ae3d
--- /dev/null
+++ b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.component.ts
@@ -0,0 +1,36 @@
+import { Component, OnInit } from "@angular/core";
+
+import { RecentlyAddedService } from "../services/index";
+import { IRecentlyAddedMovies, IRecentlyAddedRangeModel } from "./../interfaces";
+
+@Component({
+ templateUrl: "recentlyAdded.component.html",
+})
+
+export class RecentlyAddedComponent implements OnInit {
+ public movies: IRecentlyAddedMovies[];
+ public range: Date[];
+
+ constructor(private recentlyAddedService: RecentlyAddedService) {}
+
+ public ngOnInit() {
+ const weekAgo = new Date();
+ weekAgo.setDate(weekAgo.getDate() - 7);
+
+ const today =new Date();
+ const initModel = {from: weekAgo, to: today};
+ this.recentlyAddedService.getRecentlyAddedMovies(initModel).subscribe(x => this.movies = x);
+ }
+
+ 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();
+ }
+ const initModel = {from: this.range[0], to: this.range[1]};
+ this.recentlyAddedService.getRecentlyAddedMovies(initModel).subscribe(x => this.movies = x);
+ }
+}
diff --git a/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.module.ts b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.module.ts
new file mode 100644
index 000000000..0b0cb96bf
--- /dev/null
+++ b/src/Ombi/ClientApp/app/recentlyAdded/recentlyAdded.module.ts
@@ -0,0 +1,43 @@
+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, RecentlyAddedService } from "../services";
+
+import { AuthGuard } from "../auth/auth.guard";
+
+import { SharedModule as OmbiShared } from "../shared/shared.module";
+
+import { RecentlyAddedComponent } from "./recentlyAdded.component";
+
+const routes: Routes = [
+ { path: "", component: RecentlyAddedComponent, canActivate: [AuthGuard] },
+];
+
+@NgModule({
+ imports: [
+ RouterModule.forChild(routes),
+ NgbModule.forRoot(),
+ SharedModule,
+ OrderModule,
+ OmbiShared,
+ PaginatorModule,
+ TabViewModule,
+ CalendarModule,
+ ],
+ declarations: [
+ RecentlyAddedComponent,
+ ],
+ exports: [
+ RouterModule,
+ ],
+ providers: [
+ IdentityService,
+ RecentlyAddedService,
+ ],
+
+})
+export class RecentlyAddedModule { }
diff --git a/src/Ombi/ClientApp/app/services/index.ts b/src/Ombi/ClientApp/app/services/index.ts
index b5d7372a6..bc4af577e 100644
--- a/src/Ombi/ClientApp/app/services/index.ts
+++ b/src/Ombi/ClientApp/app/services/index.ts
@@ -12,3 +12,4 @@ export * from "./status.service";
export * from "./job.service";
export * from "./issues.service";
export * from "./mobile.service";
+export * from "./recentlyAdded.service";
diff --git a/src/Ombi/ClientApp/app/services/recentlyAdded.service.ts b/src/Ombi/ClientApp/app/services/recentlyAdded.service.ts
new file mode 100644
index 000000000..55059ec76
--- /dev/null
+++ b/src/Ombi/ClientApp/app/services/recentlyAdded.service.ts
@@ -0,0 +1,18 @@
+import { PlatformLocation } from "@angular/common";
+import { Injectable } from "@angular/core";
+
+import { HttpClient } from "@angular/common/http";
+import { Observable } from "rxjs/Rx";
+
+import { IRecentlyAddedMovies, IRecentlyAddedRangeModel } from "./../interfaces";
+import { ServiceHelpers } from "./service.helpers";
+
+@Injectable()
+export class RecentlyAddedService extends ServiceHelpers {
+ constructor(http: HttpClient, public platformLocation: PlatformLocation) {
+ super(http, "/api/v1/recentlyadded/", platformLocation);
+ }
+ public getRecentlyAddedMovies(model: IRecentlyAddedRangeModel): Observable {
+ return this.http.post(`${this.url}movies/`,JSON.stringify(model), {headers: this.headers});
+ }
+}
diff --git a/src/Ombi/package-lock.json b/src/Ombi/package-lock.json
index f22330c79..279be0ba3 100644
--- a/src/Ombi/package-lock.json
+++ b/src/Ombi/package-lock.json
@@ -103,9 +103,9 @@
}
},
"@auth0/angular-jwt": {
- "version": "1.0.0-beta.10",
- "resolved": "https://registry.npmjs.org/@auth0/angular-jwt/-/angular-jwt-1.0.0-beta.10.tgz",
- "integrity": "sha512-8ilDlQvXePuOAjIlPOeJg0SRSbalNvsRtwbInjS2ND8krma4rqLv8KR5ORsxe01yc8z5vZa69m838pyhFEdPfA=="
+ "version": "1.0.0-beta.9",
+ "resolved": "https://registry.npmjs.org/@auth0/angular-jwt/-/angular-jwt-1.0.0-beta.9.tgz",
+ "integrity": "sha1-ZQIsNJ7ck97DMS+TO5VccZ6GKmI="
},
"@ng-bootstrap/ng-bootstrap": {
"version": "1.0.0",
@@ -9745,9 +9745,9 @@
"integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
},
"primeng": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/primeng/-/primeng-5.2.0.tgz",
- "integrity": "sha512-70+QSR5bCtYV+jmqmsYIdE1pkBse/pCSgU7m71d0VNEagmyY1JNKIp9mKdL7MSbUE/fGdbqfkhkmUeP+x4N2jw=="
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/primeng/-/primeng-5.0.2.tgz",
+ "integrity": "sha1-BcSkUC79TDvF1QaqAa6Osw+XZNs="
},
"private": {
"version": "0.1.8",
diff --git a/src/Ombi/package.json b/src/Ombi/package.json
index 1213c6833..5b2834745 100644
--- a/src/Ombi/package.json
+++ b/src/Ombi/package.json
@@ -22,7 +22,7 @@
"@angular/platform-browser-dynamic": "^5.2.5",
"@angular/platform-server": "^5.2.5",
"@angular/router": "^5.2.5",
- "@auth0/angular-jwt": "^1.0.0-beta.10",
+ "@auth0/angular-jwt": "1.0.0-beta.9",
"@ng-bootstrap/ng-bootstrap": "^1.0.0",
"@ngx-translate/core": "^8.0.0",
"@ngx-translate/http-loader": "^2.0.1",
@@ -59,7 +59,7 @@
"node-sass": "^4.7.2",
"npm": "^5.6.0",
"pace-progress": "^1.0.2",
- "primeng": "~5.2.0",
+ "primeng": "5.0.2",
"reflect-metadata": "0.1.10",
"run-sequence": "^2.2.1",
"rxjs": "5.5.2",
diff --git a/src/Ombi/wwwroot/translations/en.json b/src/Ombi/wwwroot/translations/en.json
index 160916bfa..31d5006e4 100644
--- a/src/Ombi/wwwroot/translations/en.json
+++ b/src/Ombi/wwwroot/translations/en.json
@@ -67,7 +67,8 @@
"Dutch": "Dutch",
"Norwegian":"Norwegian"
},
- "OpenMobileApp":"Open Mobile App"
+ "OpenMobileApp":"Open Mobile App",
+ "RecentlyAdded":"Recently Added"
},
"Search": {
"Title": "Search",