diff --git a/src/Ombi/ClientApp/src/app/settings/plex/components/models/PlexServerDialogData.ts b/src/Ombi/ClientApp/src/app/settings/plex/components/models/PlexServerDialogData.ts
new file mode 100644
index 000000000..703ab297a
--- /dev/null
+++ b/src/Ombi/ClientApp/src/app/settings/plex/components/models/PlexServerDialogData.ts
@@ -0,0 +1,7 @@
+import { IPlexServer } from "../../../../interfaces";
+
+export interface PlexServerDialogData {
+ server: IPlexServer;
+ deleted?: boolean;
+ closed?: boolean;
+}
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/settings/plex/components/models/index.ts b/src/Ombi/ClientApp/src/app/settings/plex/components/models/index.ts
index 1569393f8..e6ffcfb23 100644
--- a/src/Ombi/ClientApp/src/app/settings/plex/components/models/index.ts
+++ b/src/Ombi/ClientApp/src/app/settings/plex/components/models/index.ts
@@ -1,2 +1,3 @@
export * from './PlexSyncType';
-export * from './PlexCreds';
\ No newline at end of file
+export * from './PlexCreds';
+export * from './PlexServerDialogData';
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.html b/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.html
new file mode 100644
index 000000000..606dda639
--- /dev/null
+++ b/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.html
@@ -0,0 +1,121 @@
+
Server Configuration
+
+
Connection
+
+
+
+ Server Name
+
+
+
+
+
+ Hostname / IP
+
+ Must be specified.
+
+
+
+ Port
+
+ Must be specified.
+ Must be a number.
+
+
+
+ SSL
+
+
+
+
+ Plex Authorization Token
+
+ Must be specified.
+
+
+
+ Machine Identifier
+
+ Must be specified.
+
+
+
+ Externally Facing Hostname
+
+
+ This will be the external address that users will navigate to when they press the 'View On Plex' button
+
+ Current URL: "{{this.data.server.serverHostname}}/web/app#!/server/{{this.data.server.machineIdentifier}}/details?key=%2flibrary%2Fmetadata%2F53334"
+ Current URL: "https://app.plex.tv/web/app#!/server/{{this.data.server.machineIdentifier}}/details?key=%2flibrary%2Fmetadata%2F53334"
+
+
+
+
+
+ Episode Batch Size
+
+
+ 150 by default, you shouldn't need to change this, this sets how many episodes we request from Plex at a single time.
+
+
+
+
Libraries
+
+
+
+
0">
+
+
+
+
+ {{lib.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.scss b/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.scss
new file mode 100644
index 000000000..33ad7a09b
--- /dev/null
+++ b/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.scss
@@ -0,0 +1,27 @@
+@media (max-width: 978px) {
+ ::ng-deep .mat-dialog-container {
+ overflow: unset;
+ display: flex;
+ flex-direction: column;
+
+ .mat-dialog-content{
+ max-height: unset;
+ }
+
+ .mat-dialog-actions{
+ min-height: unset;
+ }
+
+ emby-server-dialog-component {
+ display: flex;
+ flex-direction: column;
+ min-height: 1px;
+ }
+ }
+}
+
+::ng-deep mat-form-field .mat-form-field {
+ &-subscript-wrapper {
+ position: static;
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.ts b/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.ts
new file mode 100644
index 000000000..851b5d287
--- /dev/null
+++ b/src/Ombi/ClientApp/src/app/settings/plex/components/plex-server-dialog/plex-server-dialog.component.ts
@@ -0,0 +1,79 @@
+import { Component, Inject } from "@angular/core";
+import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
+
+import {
+ PlexService,
+ NotificationService,
+ TesterService,
+} from "../../../../services";
+import { take } from "rxjs";
+import { IPlexLibrariesSettings } from "../../../../interfaces";
+import { PlexServerDialogData } from "../models";
+
+@Component({
+ selector: "plex-server-dialog-component",
+ templateUrl: "plex-server-dialog.component.html",
+ styleUrls: ["plex-server-dialog.component.scss"],
+})
+export class PlexServerDialogComponent {
+
+
+ public password: string;
+ public username: string;
+
+ constructor(
+ private dialogRef: MatDialogRef,
+ @Inject(MAT_DIALOG_DATA) public data: PlexServerDialogData,
+ private notificationService: NotificationService,
+ private testerService: TesterService,
+ private plexService: PlexService
+ ) {
+ }
+
+
+ public cancel() {
+ this.dialogRef.close({closed: true});
+ }
+
+ public testPlex() {
+ this.testerService.plexTest(this.data.server).pipe(take(1))
+ .subscribe(x => {
+ if (x === true) {
+ this.notificationService.success(`Successfully connected to the Plex server ${this.data.server.name}!`);
+ } else {
+ this.notificationService.error(`We could not connect to the Plex server ${this.data.server.name}!`);
+ }
+ });
+}
+
+ public delete() {
+ this.dialogRef.close({deleted: true});
+ }
+
+ public save() {
+ this.dialogRef.close({server: this.data.server});
+ }
+
+ public loadLibraries() {
+ if (this.data.server.ip == null) {
+ this.notificationService.error("Plex is not yet configured correctly");
+ return;
+ }
+ this.plexService.getLibraries(this.data.server).subscribe(x => {
+ this.data.server.plexSelectedLibraries = [];
+ if (x.successful) {
+ x.data.mediaContainer.directory.forEach((item) => {
+ const lib: IPlexLibrariesSettings = {
+ key: item.key,
+ title: item.title,
+ enabled: false,
+ };
+ this.data.server.plexSelectedLibraries.push(lib);
+ });
+ } else {
+ this.notificationService.error(x.message);
+ }
+ });
+ }
+
+}
diff --git a/src/Ombi/ClientApp/src/app/settings/plex/plex.component.html b/src/Ombi/ClientApp/src/app/settings/plex/plex.component.html
index 23c02be58..8bd1629e3 100644
--- a/src/Ombi/ClientApp/src/app/settings/plex/plex.component.html
+++ b/src/Ombi/ClientApp/src/app/settings/plex/plex.component.html
@@ -2,54 +2,71 @@