mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-24 06:55:23 -07:00
Compare commits
No commits in common. "develop" and "v1.5.0" have entirely different histories.
2216 changed files with 51151 additions and 264903 deletions
65
.gitattributes
vendored
65
.gitattributes
vendored
|
@ -1,65 +0,0 @@
|
||||||
###############################################################################
|
|
||||||
# Set default behavior to automatically normalize line endings.
|
|
||||||
###############################################################################
|
|
||||||
* text=auto
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Set default behavior for command prompt diff.
|
|
||||||
#
|
|
||||||
# This is need for earlier builds of msysgit that does not have it on by
|
|
||||||
# default for csharp files.
|
|
||||||
# Note: This is only used by command line
|
|
||||||
###############################################################################
|
|
||||||
#*.cs diff=csharp
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# Set the merge driver for project and solution files
|
|
||||||
#
|
|
||||||
# Merging from the command prompt will add diff markers to the files if there
|
|
||||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
|
||||||
# the diff markers are never inserted). Diff markers may cause the following
|
|
||||||
# file extensions to fail to load in VS. An alternative would be to treat
|
|
||||||
# these files as binary and thus will always conflict and require user
|
|
||||||
# intervention with every merge. To do so, just uncomment the entries below
|
|
||||||
###############################################################################
|
|
||||||
#*.sln merge=binary
|
|
||||||
#*.csproj merge=binary
|
|
||||||
#*.vbproj merge=binary
|
|
||||||
#*.vcxproj merge=binary
|
|
||||||
#*.vcproj merge=binary
|
|
||||||
#*.dbproj merge=binary
|
|
||||||
#*.fsproj merge=binary
|
|
||||||
#*.lsproj merge=binary
|
|
||||||
#*.wixproj merge=binary
|
|
||||||
#*.modelproj merge=binary
|
|
||||||
#*.sqlproj merge=binary
|
|
||||||
#*.wwaproj merge=binary
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# behavior for image files
|
|
||||||
#
|
|
||||||
# image files are treated as binary by default.
|
|
||||||
###############################################################################
|
|
||||||
#*.jpg binary
|
|
||||||
#*.png binary
|
|
||||||
#*.gif binary
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
# diff behavior for common document formats
|
|
||||||
#
|
|
||||||
# Convert binary document formats to text before diffing them. This feature
|
|
||||||
# is only available from the command line. Turn it on by uncommenting the
|
|
||||||
# entries below.
|
|
||||||
###############################################################################
|
|
||||||
#*.doc diff=astextplain
|
|
||||||
#*.DOC diff=astextplain
|
|
||||||
#*.docx diff=astextplain
|
|
||||||
#*.DOCX diff=astextplain
|
|
||||||
#*.dot diff=astextplain
|
|
||||||
#*.DOT diff=astextplain
|
|
||||||
#*.pdf diff=astextplain
|
|
||||||
#*.PDF diff=astextplain
|
|
||||||
#*.rtf diff=astextplain
|
|
||||||
#*.RTF diff=astextplain
|
|
||||||
|
|
||||||
Old/* linguist-vendored
|
|
8
.github/FUNDING.yml
vendored
8
.github/FUNDING.yml
vendored
|
@ -1,8 +0,0 @@
|
||||||
# These are supported funding model platforms
|
|
||||||
|
|
||||||
github: [tidusjar]
|
|
||||||
patreon: tidusjar
|
|
||||||
#open_collective: # Replace with a single Open Collective username
|
|
||||||
#ko_fi: # Replace with a single Ko-fi username
|
|
||||||
#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
||||||
custom: https://paypal.me/PlexRequestsNet
|
|
50
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
50
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
@ -1,50 +0,0 @@
|
||||||
name: "\U0001F41B Bug report"
|
|
||||||
description: 'Report a reproducible bug in Ombi'
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: Thanks for taking the time to file a bug report! Please fill out this form as completely as possible.
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
If you leave out sections there is a high likelihood your issue will be closed.
|
|
||||||
If you have a question or you think your issue might be caused by your application code, you can get help from the community on [Discord](https://discord.gg/Sa7wNWb).
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Summary
|
|
||||||
description: |
|
|
||||||
Clearly describe what the expected behavior is vs. what is actually happening. Please include any reproduction steps that is required to reproduce this issue.
|
|
||||||
If your summary is simply, for example: "I cannot setup Plex", then you will need to [continue debugging on your own](https://docs.ombi.app/) to more precisely define your issue before proceeding.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Ombi Version
|
|
||||||
description: What version of ombi are you running?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: What platform(s) does this occur on?
|
|
||||||
multiple: true
|
|
||||||
options:
|
|
||||||
- Docker
|
|
||||||
- Windows
|
|
||||||
- Linux
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: What database are you using?
|
|
||||||
options:
|
|
||||||
- SQLite (Default)
|
|
||||||
- MySQL
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: logs
|
|
||||||
attributes:
|
|
||||||
label: Relevant log output
|
|
||||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
|
||||||
render: shell
|
|
11
.github/ISSUE_TEMPLATE/config.yml
vendored
11
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -1,11 +0,0 @@
|
||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Docs
|
|
||||||
url: https://docs.ombi.app/
|
|
||||||
about: The Ombi documentation should help guide you through installation and setup as well as help resolve common problems and answer frequently asked questions
|
|
||||||
- name: Discord support
|
|
||||||
url: https://discord.gg/Sa7wNWb
|
|
||||||
about: Ask questions about Ombi
|
|
||||||
- name: Feature suggestions
|
|
||||||
url: https://ombifeatures.featureupvote.com
|
|
||||||
about: Share your suggestions or ideas to make Ombi better!
|
|
7
.github/labeler.yml
vendored
7
.github/labeler.yml
vendored
|
@ -1,7 +0,0 @@
|
||||||
automation: tests/**/*
|
|
||||||
|
|
||||||
frontend: src/Ombi/ClientApp/**/*
|
|
||||||
|
|
||||||
backend: src/**/*.cs
|
|
||||||
|
|
||||||
devops: .github/workflows/*
|
|
23
.github/stale.yml
vendored
23
.github/stale.yml
vendored
|
@ -1,23 +0,0 @@
|
||||||
# Number of days of inactivity before an issue becomes stale
|
|
||||||
daysUntilStale: 60
|
|
||||||
# Number of days of inactivity before a stale issue is closed
|
|
||||||
daysUntilClose: 7
|
|
||||||
# Issues with these labels will never be considered stale
|
|
||||||
exemptLabels:
|
|
||||||
- pinned
|
|
||||||
- security
|
|
||||||
- bug / issue
|
|
||||||
- help wanted
|
|
||||||
- possible feature
|
|
||||||
- planned
|
|
||||||
- in progress
|
|
||||||
- enhancement
|
|
||||||
# Label to use when marking an issue as stale
|
|
||||||
staleLabel: wontfix
|
|
||||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
|
||||||
markComment: >
|
|
||||||
This issue has been automatically marked as stale because it has not had
|
|
||||||
recent activity. It will be closed if no further activity occurs. Thank you
|
|
||||||
for your contributions.
|
|
||||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
|
||||||
closeComment: false
|
|
81
.github/workflows/automation-tests.yml
vendored
81
.github/workflows/automation-tests.yml
vendored
|
@ -1,81 +0,0 @@
|
||||||
name: Automation Tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ develop, feature/** ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ develop ]
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
automation-tests:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Setup .NET
|
|
||||||
uses: actions/setup-dotnet@v1
|
|
||||||
with:
|
|
||||||
dotnet-version: 6.0.x
|
|
||||||
- uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: '20'
|
|
||||||
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
'**/node_modules'
|
|
||||||
'/home/runner/.cache/Cypress'
|
|
||||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
|
|
||||||
|
|
||||||
- name: Install Frontend Deps
|
|
||||||
run: yarn --cwd ./src/Ombi/ClientApp install
|
|
||||||
|
|
||||||
- name: Build Frontend
|
|
||||||
run: yarn --cwd ./src/Ombi/ClientApp build
|
|
||||||
|
|
||||||
- name: Build Docker Image
|
|
||||||
run: docker build -t ombi src/
|
|
||||||
|
|
||||||
- name: Run Docker Image
|
|
||||||
run: nohup docker run --rm -p 5000:5000 ombi &
|
|
||||||
|
|
||||||
- name: Run Wiremock
|
|
||||||
run: nohup docker run --rm -p 32400:8080 --name wiremock wiremock/wiremock:2.35.0 &
|
|
||||||
|
|
||||||
- name: Sleep for server to start
|
|
||||||
run: sleep 20
|
|
||||||
|
|
||||||
# - name: Start Frontend
|
|
||||||
# run: |
|
|
||||||
# nohup yarn --cwd ./src/Ombi/ClientApp start &
|
|
||||||
|
|
||||||
# - name: Install Automation Deps
|
|
||||||
# run: yarn --cwd ./tests install
|
|
||||||
|
|
||||||
# - name: Start Backend
|
|
||||||
# run: |
|
|
||||||
# nohup dotnet run --project ./src/Ombi -- --host http://*:3577 &
|
|
||||||
|
|
||||||
- name: Cypress Tests
|
|
||||||
uses: cypress-io/github-action@v4
|
|
||||||
with:
|
|
||||||
record: true
|
|
||||||
browser: chrome
|
|
||||||
headless: true
|
|
||||||
working-directory: tests
|
|
||||||
wait-on: http://localhost:5000/
|
|
||||||
# 10 minutes
|
|
||||||
wait-on-timeout: 600
|
|
||||||
env:
|
|
||||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Stop Docker
|
|
||||||
if: always()
|
|
||||||
run: |
|
|
||||||
docker ps -q | xargs -I {} docker logs {}
|
|
||||||
docker container kill $(docker ps -q)
|
|
214
.github/workflows/build.yml
vendored
214
.github/workflows/build.yml
vendored
|
@ -1,214 +0,0 @@
|
||||||
name: CI Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ develop, master ]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-ui:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: '20'
|
|
||||||
|
|
||||||
- name: NodeModules Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: '**/node_modules'
|
|
||||||
key: node_modules-${{ hashFiles('**/yarn.lock') }}
|
|
||||||
|
|
||||||
- name: UI Install
|
|
||||||
run: yarn --cwd ./src/Ombi/ClientApp install
|
|
||||||
|
|
||||||
- name: Build UI
|
|
||||||
run: yarn --cwd ./src/Ombi/ClientApp run build
|
|
||||||
|
|
||||||
- name: Publish UI Artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: angular_dist
|
|
||||||
path: |
|
|
||||||
./src/Ombi/ClientApp/dist
|
|
||||||
|
|
||||||
unit-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-dotnet@v1
|
|
||||||
with:
|
|
||||||
dotnet-version: '8.0.x'
|
|
||||||
|
|
||||||
- name: Nuget Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.nuget/packages
|
|
||||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-nuget
|
|
||||||
|
|
||||||
- name: Run Unit Tests
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
dotnet test -c NonUiBuild --logger trx --results-directory "TestResults"
|
|
||||||
|
|
||||||
versioning:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [ build-ui, unit-test ]
|
|
||||||
outputs:
|
|
||||||
changelog: ${{ steps.changelog.outputs.clean_changelog }}
|
|
||||||
tag: ${{ steps.changelog.outputs.tag }}
|
|
||||||
version: ${{ steps.changelog.outputs.version }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Conventional Changelog Action
|
|
||||||
id: changelog
|
|
||||||
uses: TriPSs/conventional-changelog-action@v3
|
|
||||||
with:
|
|
||||||
version-file: 'version.json'
|
|
||||||
release-count: 40
|
|
||||||
skip-on-empty: 'false'
|
|
||||||
git-message: 'chore(release): :rocket: {version}'
|
|
||||||
|
|
||||||
- name: Output version
|
|
||||||
run: |
|
|
||||||
echo "outputs: ${{ steps.changelog.outputs.tag }}"
|
|
||||||
echo "Version: ${{ steps.changelog.outputs.version }}"
|
|
||||||
echo "log: ${{ steps.changelog.outputs.clean_changelog }}"
|
|
||||||
|
|
||||||
publish:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [ build-ui, versioning ]
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: win-x64
|
|
||||||
format: zip
|
|
||||||
compression: zip
|
|
||||||
- os: win-x86
|
|
||||||
format: zip
|
|
||||||
compression: zip
|
|
||||||
- os: linux-x64
|
|
||||||
format: tar.gz
|
|
||||||
compression: tar
|
|
||||||
- os: linux-arm
|
|
||||||
format: tar.gz
|
|
||||||
compression: tar
|
|
||||||
- os: linux-arm64
|
|
||||||
compression: tar
|
|
||||||
format: tar.gz
|
|
||||||
- os: osx-x64
|
|
||||||
compression: tar
|
|
||||||
format: tar.gz
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-dotnet@v1
|
|
||||||
with:
|
|
||||||
dotnet-version: '8.0.x'
|
|
||||||
- uses: actions/setup-dotnet@v1
|
|
||||||
with:
|
|
||||||
dotnet-version: '5.0.x'
|
|
||||||
|
|
||||||
- name: Nuget Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.nuget/packages
|
|
||||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-nuget
|
|
||||||
|
|
||||||
- name: Set Backend Version
|
|
||||||
run: |
|
|
||||||
dotnet tool install -g dotnet-setversion
|
|
||||||
setversion -r ${{ needs.versioning.outputs.version }}
|
|
||||||
working-directory: src
|
|
||||||
|
|
||||||
- name: Publish Backend ${{ matrix.os }}
|
|
||||||
run: dotnet publish -c Release -r ${{ matrix.os }} -o "${{ matrix.os }}" --self-contained true -p:PublishSingleFile=true
|
|
||||||
working-directory: src/Ombi
|
|
||||||
|
|
||||||
- name: Download Angular
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: angular_dist
|
|
||||||
path: ~/src/Ombi/dist
|
|
||||||
|
|
||||||
- name: Copy Dist to Artifacts
|
|
||||||
run: |
|
|
||||||
cd ${{ matrix.os }}
|
|
||||||
sudo mkdir -p ClientApp/dist
|
|
||||||
echo "mkdir /ClientApp"
|
|
||||||
echo "list os (ClientApp should be here)"
|
|
||||||
ls
|
|
||||||
cd ..
|
|
||||||
echo "Copy dist to /ClientApp"
|
|
||||||
sudo mv ~/src/Ombi/dist/* ${{ matrix.os }}/ClientApp/dist
|
|
||||||
working-directory: src/Ombi
|
|
||||||
|
|
||||||
- name: Archive Release
|
|
||||||
uses: thedoctor0/zip-release@master
|
|
||||||
with:
|
|
||||||
type: '${{ matrix.compression }}'
|
|
||||||
filename: '../${{ matrix.os }}.${{ matrix.format }}'
|
|
||||||
path: '.'
|
|
||||||
directory: 'src/Ombi/${{ matrix.os }}'
|
|
||||||
|
|
||||||
- name: Publish Release
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.os }}
|
|
||||||
path: |
|
|
||||||
./src/Ombi/${{ matrix.os }}.${{ matrix.format }}
|
|
||||||
|
|
||||||
release:
|
|
||||||
needs: [ publish, unit-test, versioning ]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Download Artifacts
|
|
||||||
id: download
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: artifacts
|
|
||||||
|
|
||||||
- name: Publish to GitHub Master
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
if: contains(github.ref, 'master')
|
|
||||||
with:
|
|
||||||
body: ${{ needs.versioning.outputs.changelog }}
|
|
||||||
name: ${{ needs.versioning.outputs.tag }}
|
|
||||||
tag_name: ${{ needs.versioning.outputs.tag }}
|
|
||||||
files: |
|
|
||||||
artifacts/**/*.tar.gz
|
|
||||||
artifacts/**/*.zip
|
|
||||||
|
|
||||||
- name: Publish to GitHub Develop
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
if: contains(github.ref, 'develop')
|
|
||||||
with:
|
|
||||||
prerelease: true
|
|
||||||
generate_release_notes: false
|
|
||||||
body: ${{ needs.versioning.outputs.changelog }}
|
|
||||||
name: ${{ needs.versioning.outputs.tag }}
|
|
||||||
tag_name: ${{ needs.versioning.outputs.tag }}
|
|
||||||
files: |
|
|
||||||
artifacts/**/*.tar.gz
|
|
||||||
artifacts/**/*.zip
|
|
||||||
|
|
||||||
update-apt:
|
|
||||||
needs: [ release, versioning ]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Trigger APT Build
|
|
||||||
uses: fjogeleit/http-request-action@master
|
|
||||||
with:
|
|
||||||
url: 'https://api.github.com/repos/Ombi-app/Ombi.Apt/actions/workflows/build-deb.yml/dispatches'
|
|
||||||
method: 'POST'
|
|
||||||
contentType: 'application/json'
|
|
||||||
data: '{ "ref":"main", "inputs": { "version": "${{ needs.versioning.outputs.tag }}"} }'
|
|
||||||
customHeaders: '{"Accept":"application/vnd.github.v3+json", "Authorization":"Bearer ${{secrets.APT_PAT}}", "User-Agent":"Ombi"}'
|
|
||||||
|
|
||||||
|
|
47
.github/workflows/chromatic.yml
vendored
47
.github/workflows/chromatic.yml
vendored
|
@ -1,47 +0,0 @@
|
||||||
# name: 'Chromatic'
|
|
||||||
|
|
||||||
# # Event for the workflow
|
|
||||||
# on:
|
|
||||||
# push:
|
|
||||||
# workflow_dispatch:
|
|
||||||
|
|
||||||
# # List of jobs
|
|
||||||
# jobs:
|
|
||||||
# storybook-build:
|
|
||||||
# # Operating System
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# steps:
|
|
||||||
# - name: Checkout repository
|
|
||||||
# uses: actions/checkout@v2
|
|
||||||
# with:
|
|
||||||
# fetch-depth: 0
|
|
||||||
|
|
||||||
# - name: NodeModules Cache
|
|
||||||
# uses: actions/cache@v4
|
|
||||||
# with:
|
|
||||||
# path: '**/node_modules'
|
|
||||||
# key: node_modules-${{ hashFiles('**/yarn.lock') }}
|
|
||||||
|
|
||||||
# - name: Install dependencies
|
|
||||||
# working-directory: ./src/Ombi/ClientApp
|
|
||||||
# run: yarn
|
|
||||||
|
|
||||||
# - name: Publish to Chromatic
|
|
||||||
# if: github.ref != 'refs/heads/master'
|
|
||||||
# uses: chromaui/action@v1
|
|
||||||
# with:
|
|
||||||
# projectToken: 7c47e1a1a4bd
|
|
||||||
# exitZeroOnChanges: true
|
|
||||||
# workingDir: ./src/Ombi/ClientApp
|
|
||||||
# buildScriptName: storybookbuild
|
|
||||||
# exitOnceUploaded: true
|
|
||||||
|
|
||||||
# - name: Publish to Chromatic and auto accept changes
|
|
||||||
# if: github.ref == 'refs/heads/develop'
|
|
||||||
# uses: chromaui/action@v1
|
|
||||||
# with:
|
|
||||||
# projectToken: 7c47e1a1a4bd
|
|
||||||
# autoAcceptChanges: true # 👈 Option to accept all changes
|
|
||||||
# workingDir: ./src/Ombi/ClientApp
|
|
||||||
# buildScriptName: storybookbuild
|
|
||||||
# exitOnceUploaded: true
|
|
65
.github/workflows/codeql-analysis.yml
vendored
65
.github/workflows/codeql-analysis.yml
vendored
|
@ -1,65 +0,0 @@
|
||||||
# For most projects, this workflow file will not need changing; you simply need
|
|
||||||
# to commit it to your repository.
|
|
||||||
#
|
|
||||||
# You may wish to alter this file to override the set of languages analyzed,
|
|
||||||
# or to provide custom queries or build logic.
|
|
||||||
#
|
|
||||||
# ******** NOTE ********
|
|
||||||
# We have attempted to detect the languages in your repository. Please check
|
|
||||||
# the `language` matrix defined below to confirm you have the correct set of
|
|
||||||
# supported CodeQL languages.
|
|
||||||
#
|
|
||||||
name: "CodeQL"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ develop, master ]
|
|
||||||
pull_request:
|
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: [ develop ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analyze:
|
|
||||||
name: Analyze
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
language: [ 'csharp', 'javascript' ]
|
|
||||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
|
||||||
# Learn more:
|
|
||||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v3
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
|
||||||
- name: Autobuild
|
|
||||||
uses: github/codeql-action/autobuild@v3
|
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
|
||||||
# 📚 https://git.io/JvXDl
|
|
||||||
|
|
||||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
|
||||||
# and modify them (or add more) to build your code if your project
|
|
||||||
# uses a compiled language
|
|
||||||
|
|
||||||
#- run: |
|
|
||||||
# make bootstrap
|
|
||||||
# make release
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v3
|
|
20
.github/workflows/contributors.yml
vendored
20
.github/workflows/contributors.yml
vendored
|
@ -1,20 +0,0 @@
|
||||||
name: Contributors
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ develop ]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update-contributors:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Contribute List
|
|
||||||
uses: akhilmhdh/contributors-readme-action@v2.2.1
|
|
||||||
with:
|
|
||||||
commit_message: "chore: :busts_in_silhouette: Updated Contributors [skip ci]"
|
|
||||||
image_size: 50
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
32
.github/workflows/issue-check.yml
vendored
32
.github/workflows/issue-check.yml
vendored
|
@ -1,32 +0,0 @@
|
||||||
name: 'Issue Check'
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [opened]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
issueCheck:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- if: startsWith(github.event.issue.body , '**Describe the bug**') == false
|
|
||||||
name: Close Issue
|
|
||||||
uses: peter-evans/close-issue@v1
|
|
||||||
with:
|
|
||||||
comment: |
|
|
||||||
Hello, Please use the Github template to report an issue. If this is a feature request, please take a look at the readme. <br/> Thanks, <br/> Ombi Bot
|
|
||||||
|
|
||||||
- if: startsWith(github.event.issue.body , '**Describe the bug**') == true
|
|
||||||
name: Create comment
|
|
||||||
uses: peter-evans/create-or-update-comment@v1
|
|
||||||
with:
|
|
||||||
issue-number: ${{ github.event.issue.number }}
|
|
||||||
body: |
|
|
||||||
Hi!
|
|
||||||
<br/>Thanks for the issue report. Before a real human comes by, please make sure you used our bug report format.
|
|
||||||
<br/>Have you looked at the wiki yet? https://docs.ombi.app/
|
|
||||||
<br/>Before posting make sure you also read our [FAQ](https://docs.ombi.app/info/faq/).
|
|
||||||
<br/> Make the title describe your issue. Having 'not working' or 'I get this bug' for 100 issues, isn't really helpful.
|
|
||||||
<br/> If we need more information or there is some progress we tag the issue or update the tag and keep you updated.
|
|
||||||
<br/> Thanks!
|
|
||||||
<br/> Ombi Bot.
|
|
21
.github/workflows/label.yml
vendored
21
.github/workflows/label.yml
vendored
|
@ -1,21 +0,0 @@
|
||||||
# This workflow will triage pull requests and apply a label based on the
|
|
||||||
# paths that are modified in the pull request.
|
|
||||||
#
|
|
||||||
# To use this workflow, you will need to set up a .github/labeler.yml
|
|
||||||
# file with configuration. For more information, see:
|
|
||||||
# https://github.com/actions/labeler
|
|
||||||
|
|
||||||
name: Labeler
|
|
||||||
on: [pull_request]
|
|
||||||
|
|
||||||
permissions: write-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
label:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/labeler@v2
|
|
||||||
with:
|
|
||||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
116
.github/workflows/pr.yml
vendored
116
.github/workflows/pr.yml
vendored
|
@ -1,116 +0,0 @@
|
||||||
name: PR Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened]
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
repository-projects: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-ui:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-node@v2
|
|
||||||
with:
|
|
||||||
node-version: '20'
|
|
||||||
|
|
||||||
- name: NodeModules Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: '**/node_modules'
|
|
||||||
key: node_modules-${{ hashFiles('**/yarn.lock') }}
|
|
||||||
|
|
||||||
- name: UI Install
|
|
||||||
run: yarn --cwd ./src/Ombi/ClientApp install
|
|
||||||
|
|
||||||
- name: Build UI
|
|
||||||
run: yarn --cwd ./src/Ombi/ClientApp run build
|
|
||||||
|
|
||||||
unit-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-dotnet@v1
|
|
||||||
with:
|
|
||||||
dotnet-version: '8.0.x'
|
|
||||||
|
|
||||||
- name: Nuget Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.nuget/packages
|
|
||||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-nuget
|
|
||||||
|
|
||||||
- name: Run Unit Tests
|
|
||||||
run: |
|
|
||||||
cd src
|
|
||||||
dotnet test --configuration "Release" --logger "trx;LogFileName=test-results.trx"
|
|
||||||
|
|
||||||
analysis:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
# Disabling shallow clone is recommended for improving relevancy of reporting
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: SonarCloud Scan
|
|
||||||
uses: sonarsource/sonarcloud-github-action@master
|
|
||||||
with:
|
|
||||||
args: >
|
|
||||||
-Dsonar.organization=ombi-app
|
|
||||||
-Dsonar.projectKey=Ombi-app_Ombi
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
|
||||||
|
|
||||||
publish:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: [ unit-test ]
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: win-x64
|
|
||||||
format: zip
|
|
||||||
compression: zip
|
|
||||||
- os: win-x86
|
|
||||||
format: zip
|
|
||||||
compression: zip
|
|
||||||
- os: linux-x64
|
|
||||||
format: tar.gz
|
|
||||||
compression: tar
|
|
||||||
- os: linux-arm
|
|
||||||
format: tar.gz
|
|
||||||
compression: tar
|
|
||||||
- os: linux-arm64
|
|
||||||
compression: tar
|
|
||||||
format: tar.gz
|
|
||||||
- os: osx-x64
|
|
||||||
compression: tar
|
|
||||||
format: tar.gz
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-dotnet@v1
|
|
||||||
with:
|
|
||||||
dotnet-version: '8.0.x'
|
|
||||||
|
|
||||||
- name: Nuget Cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.nuget/packages
|
|
||||||
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-nuget
|
|
||||||
|
|
||||||
- name: Publish Backend ${{ matrix.os }}
|
|
||||||
run: dotnet publish -c Release -r ${{ matrix.os }} -o "${{ matrix.os }}" --self-contained true -p:PublishSingleFile=true
|
|
||||||
working-directory: src/Ombi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
50
.github/workflows/sonarscan.yml
vendored
50
.github/workflows/sonarscan.yml
vendored
|
@ -1,50 +0,0 @@
|
||||||
name: Sonar Scanner
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
jobs:
|
|
||||||
sonarcloud:
|
|
||||||
name: SonarCloud
|
|
||||||
runs-on: windows-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
# Shallow clones should be disabled for a better relevancy of analysis
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# Speed-up analysis by caching the scanner workspace
|
|
||||||
- name: Cache SonarCloud workspace
|
|
||||||
uses: actions/cache@v1
|
|
||||||
with:
|
|
||||||
path: ~\.sonar\cache
|
|
||||||
key: ${{ runner.os }}-sonar-cache
|
|
||||||
restore-keys: ${{ runner.os }}-sonar-cache
|
|
||||||
|
|
||||||
# Speed-up analysis by caching the scanner installation
|
|
||||||
- name: Cache SonarCloud scanner
|
|
||||||
id: cache-sonar-scanner
|
|
||||||
uses: actions/cache@v1
|
|
||||||
with:
|
|
||||||
path: .\.sonar\scanner
|
|
||||||
key: ${{ runner.os }}-sonar-scanner
|
|
||||||
restore-keys: ${{ runner.os }}-sonar-scanner
|
|
||||||
|
|
||||||
- name: Install SonarCloud scanner
|
|
||||||
if: steps.cache-sonar-scanner.outputs.cache-hit != 'true'
|
|
||||||
shell: powershell
|
|
||||||
# The --version argument is optional. If it is omitted the latest version will be installed.
|
|
||||||
run: |
|
|
||||||
New-Item -Path .\.sonar\scanner -ItemType Directory
|
|
||||||
dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner --version 4.8.0
|
|
||||||
- name: Build
|
|
||||||
shell: powershell
|
|
||||||
env:
|
|
||||||
# Needed to get some information about the pull request, if any
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
# The secret referenced in the command-line by SONAR_TOKEN should be generated
|
|
||||||
# from https://sonarcloud.io/account/security/
|
|
||||||
# The organization and project arguments (see /o and /k) are displayed
|
|
||||||
# on the project dashboard in SonarCloud.
|
|
||||||
run: |
|
|
||||||
.\.sonar\scanner\dotnet-sonarscanner begin /k:"Ombi-app_Ombi" /o:"ombi-app" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io"
|
|
||||||
dotnet build src/Ombi.sln -c NonUiBuild
|
|
||||||
.\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}"
|
|
23
.gitignore
vendored
23
.gitignore
vendored
|
@ -7,7 +7,7 @@
|
||||||
*.userosscache
|
*.userosscache
|
||||||
*.sln.docstates
|
*.sln.docstates
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
*.userprefs
|
*.userprefs
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
|
@ -20,7 +20,6 @@ x86/
|
||||||
bld/
|
bld/
|
||||||
[Bb]in/
|
[Bb]in/
|
||||||
[Oo]bj/
|
[Oo]bj/
|
||||||
.sonarqube/
|
|
||||||
|
|
||||||
# Visual Studio 2015 cache/options directory
|
# Visual Studio 2015 cache/options directory
|
||||||
.vs/
|
.vs/
|
||||||
|
@ -235,21 +234,5 @@ _Pvt_Extensions
|
||||||
|
|
||||||
# FAKE - F# Make
|
# FAKE - F# Make
|
||||||
.fake/
|
.fake/
|
||||||
*.ncrunchproject
|
*.ncrunchproject
|
||||||
*.ncrunchsolution
|
*.ncrunchsolution
|
||||||
|
|
||||||
*.txt
|
|
||||||
|
|
||||||
|
|
||||||
# CAKE - C# Make
|
|
||||||
/Tools/*
|
|
||||||
*.db-journal
|
|
||||||
|
|
||||||
# Ignore local vscode config
|
|
||||||
*.vscode
|
|
||||||
/src/Ombi/database.json
|
|
||||||
/src/Ombi/databases.json
|
|
||||||
/src/Ombi/healthchecksdb
|
|
||||||
/src/Ombi/ClientApp/package-lock.json
|
|
||||||
/src/Ombi.Core/Properties/launchSettings.json
|
|
||||||
.yarn
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
pull_request_rules:
|
|
||||||
- name: Automatic merge on approval
|
|
||||||
conditions:
|
|
||||||
- "#approved-reviews-by>=1"
|
|
||||||
actions:
|
|
||||||
merge:
|
|
||||||
method: merge
|
|
7
.travis.yml
Normal file
7
.travis.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
language: csharp
|
||||||
|
solution: PlexRequests.sln
|
||||||
|
install:
|
||||||
|
- mono Tools/nuget.exe restore PlexRequests.sln
|
||||||
|
- nuget install NUnit.Runners -OutputDirectory testrunner
|
||||||
|
script:
|
||||||
|
- xbuild /p:Configuration=Release PlexRequests.sln /p:TargetFrameworkVersion="v4.5"
|
BIN
Assemblies/Mono.Data.Sqlite.dll
Normal file
BIN
Assemblies/Mono.Data.Sqlite.dll
Normal file
Binary file not shown.
1324
CHANGELOG.md
1324
CHANGELOG.md
File diff suppressed because it is too large
Load diff
|
@ -1,128 +0,0 @@
|
||||||
# Contributor Covenant Code of Conduct
|
|
||||||
|
|
||||||
## Our Pledge
|
|
||||||
|
|
||||||
We as members, contributors, and leaders pledge to make participation in our
|
|
||||||
community a harassment-free experience for everyone, regardless of age, body
|
|
||||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
||||||
identity and expression, level of experience, education, socio-economic status,
|
|
||||||
nationality, personal appearance, race, religion, or sexual identity
|
|
||||||
and orientation.
|
|
||||||
|
|
||||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
||||||
diverse, inclusive, and healthy community.
|
|
||||||
|
|
||||||
## Our Standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to a positive environment for our
|
|
||||||
community include:
|
|
||||||
|
|
||||||
* Demonstrating empathy and kindness toward other people
|
|
||||||
* Being respectful of differing opinions, viewpoints, and experiences
|
|
||||||
* Giving and gracefully accepting constructive feedback
|
|
||||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
|
||||||
and learning from the experience
|
|
||||||
* Focusing on what is best not just for us as individuals, but for the
|
|
||||||
overall community
|
|
||||||
|
|
||||||
Examples of unacceptable behavior include:
|
|
||||||
|
|
||||||
* The use of sexualized language or imagery, and sexual attention or
|
|
||||||
advances of any kind
|
|
||||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
||||||
* Public or private harassment
|
|
||||||
* Publishing others' private information, such as a physical or email
|
|
||||||
address, without their explicit permission
|
|
||||||
* Other conduct which could reasonably be considered inappropriate in a
|
|
||||||
professional setting
|
|
||||||
|
|
||||||
## Enforcement Responsibilities
|
|
||||||
|
|
||||||
Community leaders are responsible for clarifying and enforcing our standards of
|
|
||||||
acceptable behavior and will take appropriate and fair corrective action in
|
|
||||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
||||||
or harmful.
|
|
||||||
|
|
||||||
Community leaders have the right and responsibility to remove, edit, or reject
|
|
||||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
|
||||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
|
||||||
decisions when appropriate.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies within all community spaces, and also applies when
|
|
||||||
an individual is officially representing the community in public spaces.
|
|
||||||
Examples of representing our community include using an official e-mail address,
|
|
||||||
posting via an official social media account, or acting as an appointed
|
|
||||||
representative at an online or offline event.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
||||||
reported to the community leaders responsible for enforcement at
|
|
||||||
tidusjar@gmail.com.
|
|
||||||
All complaints will be reviewed and investigated promptly and fairly.
|
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the
|
|
||||||
reporter of any incident.
|
|
||||||
|
|
||||||
## Enforcement Guidelines
|
|
||||||
|
|
||||||
Community leaders will follow these Community Impact Guidelines in determining
|
|
||||||
the consequences for any action they deem in violation of this Code of Conduct:
|
|
||||||
|
|
||||||
### 1. Correction
|
|
||||||
|
|
||||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
|
||||||
unprofessional or unwelcome in the community.
|
|
||||||
|
|
||||||
**Consequence**: A private, written warning from community leaders, providing
|
|
||||||
clarity around the nature of the violation and an explanation of why the
|
|
||||||
behavior was inappropriate. A public apology may be requested.
|
|
||||||
|
|
||||||
### 2. Warning
|
|
||||||
|
|
||||||
**Community Impact**: A violation through a single incident or series
|
|
||||||
of actions.
|
|
||||||
|
|
||||||
**Consequence**: A warning with consequences for continued behavior. No
|
|
||||||
interaction with the people involved, including unsolicited interaction with
|
|
||||||
those enforcing the Code of Conduct, for a specified period of time. This
|
|
||||||
includes avoiding interactions in community spaces as well as external channels
|
|
||||||
like social media. Violating these terms may lead to a temporary or
|
|
||||||
permanent ban.
|
|
||||||
|
|
||||||
### 3. Temporary Ban
|
|
||||||
|
|
||||||
**Community Impact**: A serious violation of community standards, including
|
|
||||||
sustained inappropriate behavior.
|
|
||||||
|
|
||||||
**Consequence**: A temporary ban from any sort of interaction or public
|
|
||||||
communication with the community for a specified period of time. No public or
|
|
||||||
private interaction with the people involved, including unsolicited interaction
|
|
||||||
with those enforcing the Code of Conduct, is allowed during this period.
|
|
||||||
Violating these terms may lead to a permanent ban.
|
|
||||||
|
|
||||||
### 4. Permanent Ban
|
|
||||||
|
|
||||||
**Community Impact**: Demonstrating a pattern of violation of community
|
|
||||||
standards, including sustained inappropriate behavior, harassment of an
|
|
||||||
individual, or aggression toward or disparagement of classes of individuals.
|
|
||||||
|
|
||||||
**Consequence**: A permanent ban from any sort of public interaction within
|
|
||||||
the community.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
||||||
version 2.0, available at
|
|
||||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
|
||||||
|
|
||||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
|
||||||
enforcement ladder](https://github.com/mozilla/diversity).
|
|
||||||
|
|
||||||
[homepage]: https://www.contributor-covenant.org
|
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the FAQ at
|
|
||||||
https://www.contributor-covenant.org/faq. Translations are available at
|
|
||||||
https://www.contributor-covenant.org/translations.
|
|
39
PlexRequests.Api.Interfaces/IApiRequest.cs
Normal file
39
PlexRequests.Api.Interfaces/IApiRequest.cs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: IApiRequest.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Interfaces
|
||||||
|
{
|
||||||
|
public interface IApiRequest
|
||||||
|
{
|
||||||
|
T Execute<T>(IRestRequest request, Uri baseUri) where T : new();
|
||||||
|
T ExecuteXml<T>(IRestRequest request, Uri baseUri) where T : class;
|
||||||
|
T ExecuteJson<T>(IRestRequest request, Uri baseUri) where T : new();
|
||||||
|
}
|
||||||
|
}
|
40
PlexRequests.Api.Interfaces/ICouchPotatoApi.cs
Normal file
40
PlexRequests.Api.Interfaces/ICouchPotatoApi.cs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: ICouchPotatoApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Models.Movie;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Interfaces
|
||||||
|
{
|
||||||
|
public interface ICouchPotatoApi
|
||||||
|
{
|
||||||
|
bool AddMovie(string imdbid, string apiKey, string title, Uri baseUrl, string profileID = default(string));
|
||||||
|
CouchPotatoStatus GetStatus(Uri url, string apiKey);
|
||||||
|
CouchPotatoProfiles GetProfiles(Uri url, string apiKey);
|
||||||
|
}
|
||||||
|
}
|
42
PlexRequests.Api.Interfaces/IPlexApi.cs
Normal file
42
PlexRequests.Api.Interfaces/IPlexApi.cs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: IPlexApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Models;
|
||||||
|
using PlexRequests.Api.Models.Plex;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Interfaces
|
||||||
|
{
|
||||||
|
public interface IPlexApi
|
||||||
|
{
|
||||||
|
PlexAuthentication SignIn(string username, string password);
|
||||||
|
PlexFriends GetUsers(string authToken);
|
||||||
|
PlexSearch SearchContent(string authToken, string searchTerm, Uri plexFullHost);
|
||||||
|
PlexStatus GetStatus(string authToken, Uri uri);
|
||||||
|
PlexAccount GetAccount(string authToken);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,47 +1,45 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: EmbyUser.cs
|
// File: IPushbulletApi.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
using System.Threading.Tasks;
|
||||||
using System;
|
|
||||||
|
using PlexRequests.Api.Models.Notifications;
|
||||||
namespace Ombi.Api.Emby.Models
|
|
||||||
{
|
namespace PlexRequests.Api.Interfaces
|
||||||
public class EmbyUser
|
{
|
||||||
{
|
public interface IPushbulletApi
|
||||||
public string Name { get; set; }
|
{
|
||||||
public string ServerId { get; set; }
|
/// <summary>
|
||||||
public string ConnectUserName { get; set; }
|
/// Pushes the specified message.
|
||||||
public string ConnectLinkType { get; set; }
|
/// </summary>
|
||||||
public string Id { get; set; }
|
/// <param name="accessToken">The access token.</param>
|
||||||
public bool HasPassword { get; set; }
|
/// <param name="title">The title.</param>
|
||||||
public bool HasConfiguredPassword { get; set; }
|
/// <param name="message">The message.</param>
|
||||||
public bool HasConfiguredEasyPassword { get; set; }
|
/// <param name="deviceIdentifier">The device identifier.</param>
|
||||||
public DateTime LastLoginDate { get; set; }
|
/// <returns></returns>
|
||||||
public DateTime LastActivityDate { get; set; }
|
Task<PushbulletResponse> PushAsync(string accessToken, string title, string message, string deviceIdentifier = default(string));
|
||||||
public EmbyConfiguration Configuration { get; set; }
|
}
|
||||||
public EmbyPolicy Policy { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
37
PlexRequests.Api.Interfaces/IPushoverApi.cs
Normal file
37
PlexRequests.Api.Interfaces/IPushoverApi.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: IPushoverApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Models.Notifications;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Interfaces
|
||||||
|
{
|
||||||
|
public interface IPushoverApi
|
||||||
|
{
|
||||||
|
Task<PushoverResponse> PushAsync(string accessToken, string message, string userToken);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,46 +1,43 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: RequestLog.cs
|
// File: ISickRageApi.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.Threading.Tasks;
|
||||||
|
using PlexRequests.Api.Models.SickRage;
|
||||||
namespace Ombi.Store.Entities.Requests
|
|
||||||
{
|
namespace PlexRequests.Api.Interfaces
|
||||||
[Table("RequestLog")]
|
{
|
||||||
public class RequestLog : Entity
|
public interface ISickRageApi
|
||||||
{
|
{
|
||||||
public string UserId { get; set; }
|
Task<SickRageTvAdd> AddSeries(int tvdbId, int seasoncount, int[] seasons, string quality, string apiKey,
|
||||||
public RequestType RequestType { get; set; }
|
Uri baseUrl);
|
||||||
public DateTime RequestDate { get; set; }
|
|
||||||
public int RequestId { get; set; }
|
SickRagePing Ping(string apiKey, Uri baseUrl);
|
||||||
|
|
||||||
public int EpisodeCount { get; set; }
|
Task<SickRageTvAdd> AddSeason(int tvdbId, int season, string apiKey, Uri baseUrl);
|
||||||
|
}
|
||||||
[ForeignKey(nameof(UserId))]
|
|
||||||
public OmbiUser User { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,44 +1,43 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: EmbyContent.cs
|
// File: ISonarrApi.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
using System;
|
||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using PlexRequests.Api.Models.Sonarr;
|
||||||
|
|
||||||
namespace Ombi.Store.Entities
|
namespace PlexRequests.Api.Interfaces
|
||||||
{
|
{
|
||||||
[Table("EmbyContent")]
|
public interface ISonarrApi
|
||||||
public class EmbyContent : MediaServerContent
|
{
|
||||||
{
|
List<SonarrProfile> GetProfiles(string apiKey, Uri baseUrl);
|
||||||
|
|
||||||
[Obsolete("Cannot delete due to DB migration issues with SQLite")]
|
SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath,
|
||||||
public string ProviderId { get; set; }
|
int seasonCount, int[] seasons, string apiKey, Uri baseUrl);
|
||||||
public string EmbyId { get; set; }
|
|
||||||
public override RecentlyAddedType RecentlyAddedType => RecentlyAddedType.Emby;
|
SystemStatus SystemStatus(string apiKey, Uri baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{95834072-A675-415D-AA8F-877C91623810}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PlexRequests.Api.Interfaces</RootNamespace>
|
||||||
|
<AssemblyName>PlexRequests.Api.Interfaces</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="RestSharp, Version=105.2.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\RestSharp.105.2.3\lib\net452\RestSharp.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="IApiRequest.cs" />
|
||||||
|
<Compile Include="ICouchPotatoApi.cs" />
|
||||||
|
<Compile Include="IPlexApi.cs" />
|
||||||
|
<Compile Include="IPushbulletApi.cs" />
|
||||||
|
<Compile Include="IPushoverApi.cs" />
|
||||||
|
<Compile Include="ISickRageApi.cs" />
|
||||||
|
<Compile Include="ISonarrApi.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Api.Models\PlexRequests.Api.Models.csproj">
|
||||||
|
<Project>{CB37A5F8-6DFC-4554-99D3-A42B502E4591}</Project>
|
||||||
|
<Name>PlexRequests.Api.Models</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
38
PlexRequests.Api.Interfaces/Properties/AssemblyInfo.cs
Normal file
38
PlexRequests.Api.Interfaces/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("PlexRequests.Api.Interfaces")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("PlexRequests.Api.Interfaces")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("95834072-a675-415d-aa8f-877c91623810")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
||||||
|
[assembly: AssemblyInformationalVersionAttribute("1.0.0.0")]
|
4
PlexRequests.Api.Interfaces/packages.config
Normal file
4
PlexRequests.Api.Interfaces/packages.config
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="RestSharp" version="105.2.3" targetFramework="net452" requireReinstallation="true" />
|
||||||
|
</packages>
|
83
PlexRequests.Api.Models/Movie/CouchPotatoAdd.cs
Normal file
83
PlexRequests.Api.Models/Movie/CouchPotatoAdd.cs
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Movie
|
||||||
|
{
|
||||||
|
|
||||||
|
public class CouchPotatoAdd
|
||||||
|
{
|
||||||
|
public Movie movie { get; set; }
|
||||||
|
public bool success { get; set; }
|
||||||
|
}
|
||||||
|
public class Rating
|
||||||
|
{
|
||||||
|
public List<double> imdb { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class Images
|
||||||
|
{
|
||||||
|
public List<object> disc_art { get; set; }
|
||||||
|
public List<string> poster { get; set; }
|
||||||
|
public List<object> extra_thumbs { get; set; }
|
||||||
|
public List<string> poster_original { get; set; }
|
||||||
|
public List<object> landscape { get; set; }
|
||||||
|
public string[] actors { get; set; }
|
||||||
|
public List<string> backdrop_original { get; set; }
|
||||||
|
public List<object> clear_art { get; set; }
|
||||||
|
public List<object> logo { get; set; }
|
||||||
|
public List<object> banner { get; set; }
|
||||||
|
public List<string> backdrop { get; set; }
|
||||||
|
public List<object> extra_fanart { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Info
|
||||||
|
{
|
||||||
|
public Rating rating { get; set; }
|
||||||
|
public List<string> genres { get; set; }
|
||||||
|
public int tmdb_id { get; set; }
|
||||||
|
public string plot { get; set; }
|
||||||
|
public string tagline { get; set; }
|
||||||
|
public string original_title { get; set; }
|
||||||
|
public string[] actor_roles { get; set; }
|
||||||
|
public bool via_imdb { get; set; }
|
||||||
|
public string mpaa { get; set; }
|
||||||
|
public bool via_tmdb { get; set; }
|
||||||
|
public List<string> directors { get; set; }
|
||||||
|
public List<string> titles { get; set; }
|
||||||
|
public string imdb { get; set; }
|
||||||
|
public int year { get; set; }
|
||||||
|
public Images images { get; set; }
|
||||||
|
public List<string> actors { get; set; }
|
||||||
|
public List<string> writers { get; set; }
|
||||||
|
public int runtime { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
public string released { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Identifiers
|
||||||
|
{
|
||||||
|
public string imdb { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Movie
|
||||||
|
{
|
||||||
|
public string status { get; set; }
|
||||||
|
public Info info { get; set; }
|
||||||
|
public string _t { get; set; }
|
||||||
|
public List<object> releases { get; set; }
|
||||||
|
public string title { get; set; }
|
||||||
|
public string _rev { get; set; }
|
||||||
|
public string profile_id { get; set; }
|
||||||
|
public string _id { get; set; }
|
||||||
|
public object category_id { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
public Identifiers identifiers { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
53
PlexRequests.Api.Models/Movie/CouchPotatoProfiles.cs
Normal file
53
PlexRequests.Api.Models/Movie/CouchPotatoProfiles.cs
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: CouchPotatoProfiles.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Movie
|
||||||
|
{
|
||||||
|
public class ProfileList
|
||||||
|
{
|
||||||
|
public bool core { get; set; }
|
||||||
|
public string _rev { get; set; }
|
||||||
|
public List<bool> finish { get; set; }
|
||||||
|
public List<string> qualities { get; set; }
|
||||||
|
public string _id { get; set; }
|
||||||
|
public string _t { get; set; }
|
||||||
|
public string label { get; set; }
|
||||||
|
public int minimum_score { get; set; }
|
||||||
|
public List<int> stop_after { get; set; }
|
||||||
|
public List<int> wait_for { get; set; }
|
||||||
|
public int order { get; set; }
|
||||||
|
public List<object> __invalid_name__3d { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CouchPotatoProfiles
|
||||||
|
{
|
||||||
|
public List<ProfileList> list { get; set; }
|
||||||
|
public bool success { get; set; }
|
||||||
|
}
|
||||||
|
}
|
13
PlexRequests.Api.Models/Movie/CouchPotatoStatus.cs
Normal file
13
PlexRequests.Api.Models/Movie/CouchPotatoStatus.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Movie
|
||||||
|
{
|
||||||
|
public class CouchPotatoStatus
|
||||||
|
{
|
||||||
|
public bool success { get; set; }
|
||||||
|
}
|
||||||
|
}
|
38
PlexRequests.Api.Models/Notifications/PushbulletPush.cs
Normal file
38
PlexRequests.Api.Models/Notifications/PushbulletPush.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PushbulletPush.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Notifications
|
||||||
|
{
|
||||||
|
public class PushbulletPush
|
||||||
|
{
|
||||||
|
public string body { get; set; }
|
||||||
|
public string title { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
public string device_iden { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,49 +1,48 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: SearchResult.cs
|
// File: PushbulletResponse.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
namespace Ombi.TheMovieDbApi.Models
|
namespace PlexRequests.Api.Models.Notifications
|
||||||
{
|
{
|
||||||
public class SearchResult
|
public class PushbulletResponse
|
||||||
{
|
{
|
||||||
public string poster_path { get; set; }
|
public bool active { get; set; }
|
||||||
public bool adult { get; set; }
|
public string iden { get; set; }
|
||||||
public string overview { get; set; }
|
public double created { get; set; }
|
||||||
public string release_date { get; set; }
|
public double modified { get; set; }
|
||||||
public string first_air_date { get; set; }
|
public string type { get; set; }
|
||||||
public int?[] genre_ids { get; set; }
|
public bool dismissed { get; set; }
|
||||||
public int id { get; set; }
|
public string direction { get; set; }
|
||||||
public string original_title { get; set; }
|
public string sender_iden { get; set; }
|
||||||
public string original_name { get; set; }
|
public string sender_email { get; set; }
|
||||||
public string name { get; set; }
|
public string sender_email_normalized { get; set; }
|
||||||
public string original_language { get; set; }
|
public string sender_name { get; set; }
|
||||||
public string title { get; set; }
|
public string receiver_iden { get; set; }
|
||||||
public string backdrop_path { get; set; }
|
public string receiver_email { get; set; }
|
||||||
public float popularity { get; set; }
|
public string receiver_email_normalized { get; set; }
|
||||||
public int vote_count { get; set; }
|
public string title { get; set; }
|
||||||
public bool video { get; set; }
|
public string body { get; set; }
|
||||||
public float vote_average { get; set; }
|
}
|
||||||
}
|
|
||||||
}
|
}
|
34
PlexRequests.Api.Models/Notifications/PushoverResponse.cs
Normal file
34
PlexRequests.Api.Models/Notifications/PushoverResponse.cs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PushoverResponse.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
namespace PlexRequests.Api.Models.Notifications
|
||||||
|
{
|
||||||
|
public class PushoverResponse
|
||||||
|
{
|
||||||
|
public int status { get; set; }
|
||||||
|
public string request { get; set; }
|
||||||
|
}
|
||||||
|
}
|
22
PlexRequests.Api.Models/Plex/PlexAccount.cs
Normal file
22
PlexRequests.Api.Models/Plex/PlexAccount.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Plex
|
||||||
|
{
|
||||||
|
[XmlRoot(ElementName = "user")]
|
||||||
|
public class PlexAccount
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "username")]
|
||||||
|
public string Username { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "email")]
|
||||||
|
public string Email { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "authenticationToken")]
|
||||||
|
public string AuthToken { get; set; }
|
||||||
|
}
|
||||||
|
}
|
63
PlexRequests.Api.Models/Plex/PlexAuthentication.cs
Normal file
63
PlexRequests.Api.Models/Plex/PlexAuthentication.cs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexAuthentication.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Plex
|
||||||
|
{
|
||||||
|
public class PlexAuthentication
|
||||||
|
{
|
||||||
|
public User user { get; set; }
|
||||||
|
}
|
||||||
|
public class Subscription
|
||||||
|
{
|
||||||
|
public bool active { get; set; }
|
||||||
|
public string status { get; set; }
|
||||||
|
public object plan { get; set; }
|
||||||
|
public object features { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Roles
|
||||||
|
{
|
||||||
|
public List<object> roles { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class User
|
||||||
|
{
|
||||||
|
public string email { get; set; }
|
||||||
|
public string joined_at { get; set; }
|
||||||
|
public string username { get; set; }
|
||||||
|
public string title { get; set; }
|
||||||
|
public string authentication_token { get; set; }
|
||||||
|
public Subscription subscription { get; set; }
|
||||||
|
public Roles roles { get; set; }
|
||||||
|
public List<string> entitlements { get; set; }
|
||||||
|
public object confirmed_at { get; set; }
|
||||||
|
public int forum_id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
39
PlexRequests.Api.Models/Plex/PlexError.cs
Normal file
39
PlexRequests.Api.Models/Plex/PlexError.cs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexError.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Plex
|
||||||
|
{
|
||||||
|
[XmlRoot(ElementName = "errors")]
|
||||||
|
public class PlexError
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "error")]
|
||||||
|
public string Error { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
87
PlexRequests.Api.Models/Plex/PlexFriends.cs
Normal file
87
PlexRequests.Api.Models/Plex/PlexFriends.cs
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexFriends.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Plex
|
||||||
|
{
|
||||||
|
[XmlRoot(ElementName = "Server")]
|
||||||
|
public class Server
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "serverId")]
|
||||||
|
public string ServerId { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "machineIdentifier")]
|
||||||
|
public string MachineIdentifier { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "lastSeenAt")]
|
||||||
|
public string LastSeenAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "numLibraries")]
|
||||||
|
public string NumLibraries { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "owned")]
|
||||||
|
public string Owned { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "User")]
|
||||||
|
public class UserFriends
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "Server")]
|
||||||
|
public Server Server { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "title")]
|
||||||
|
public string Title { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "username")]
|
||||||
|
public string Username { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "email")]
|
||||||
|
public string Email { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "recommendationsPlaylistId")]
|
||||||
|
public string RecommendationsPlaylistId { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "thumb")]
|
||||||
|
public string Thumb { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MediaContainer")]
|
||||||
|
public class PlexFriends
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "User")]
|
||||||
|
public UserFriends[] User { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "friendlyName")]
|
||||||
|
public string FriendlyName { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "identifier")]
|
||||||
|
public string Identifier { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "machineIdentifier")]
|
||||||
|
public string MachineIdentifier { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "totalSize")]
|
||||||
|
public string TotalSize { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "size")]
|
||||||
|
public string Size { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
327
PlexRequests.Api.Models/Plex/PlexSearch.cs
Normal file
327
PlexRequests.Api.Models/Plex/PlexSearch.cs
Normal file
|
@ -0,0 +1,327 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexSearch.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Plex
|
||||||
|
{
|
||||||
|
[XmlRoot(ElementName = "Part")]
|
||||||
|
public class Part
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "key")]
|
||||||
|
public string Key { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "duration")]
|
||||||
|
public string Duration { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "file")]
|
||||||
|
public string File { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "size")]
|
||||||
|
public string Size { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "audioProfile")]
|
||||||
|
public string AudioProfile { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "container")]
|
||||||
|
public string Container { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "videoProfile")]
|
||||||
|
public string VideoProfile { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "has64bitOffsets")]
|
||||||
|
public string Has64bitOffsets { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "hasChapterTextStream")]
|
||||||
|
public string HasChapterTextStream { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "optimizedForStreaming")]
|
||||||
|
public string OptimizedForStreaming { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Media")]
|
||||||
|
public class Media
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "Part")]
|
||||||
|
public Part Part { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "videoResolution")]
|
||||||
|
public string VideoResolution { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "duration")]
|
||||||
|
public string Duration { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "bitrate")]
|
||||||
|
public string Bitrate { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "width")]
|
||||||
|
public string Width { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "height")]
|
||||||
|
public string Height { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "aspectRatio")]
|
||||||
|
public string AspectRatio { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "audioChannels")]
|
||||||
|
public string AudioChannels { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "audioCodec")]
|
||||||
|
public string AudioCodec { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "videoCodec")]
|
||||||
|
public string VideoCodec { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "container")]
|
||||||
|
public string Container { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "videoFrameRate")]
|
||||||
|
public string VideoFrameRate { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "audioProfile")]
|
||||||
|
public string AudioProfile { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "videoProfile")]
|
||||||
|
public string VideoProfile { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "optimizedForStreaming")]
|
||||||
|
public string OptimizedForStreaming { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "has64bitOffsets")]
|
||||||
|
public string Has64bitOffsets { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Genre")]
|
||||||
|
public class Genre
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "tag")]
|
||||||
|
public string Tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Writer")]
|
||||||
|
public class Writer
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "tag")]
|
||||||
|
public string Tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Director")]
|
||||||
|
public class Director
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "tag")]
|
||||||
|
public string Tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Country")]
|
||||||
|
public class Country
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "tag")]
|
||||||
|
public string Tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Role")]
|
||||||
|
public class Role
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "tag")]
|
||||||
|
public string Tag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Video")]
|
||||||
|
public class Video
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "Media")]
|
||||||
|
public List<Media> Media { get; set; }
|
||||||
|
[XmlElement(ElementName = "Genre")]
|
||||||
|
public List<Genre> Genre { get; set; }
|
||||||
|
[XmlElement(ElementName = "Writer")]
|
||||||
|
public List<Writer> Writer { get; set; }
|
||||||
|
[XmlElement(ElementName = "Director")]
|
||||||
|
public Director Director { get; set; }
|
||||||
|
[XmlElement(ElementName = "Country")]
|
||||||
|
public Country Country { get; set; }
|
||||||
|
[XmlElement(ElementName = "Role")]
|
||||||
|
public List<Role> Role { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "allowSync")]
|
||||||
|
public string AllowSync { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "librarySectionID")]
|
||||||
|
public string LibrarySectionID { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "librarySectionTitle")]
|
||||||
|
public string LibrarySectionTitle { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "librarySectionUUID")]
|
||||||
|
public string LibrarySectionUUID { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "personal")]
|
||||||
|
public string Personal { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "sourceTitle")]
|
||||||
|
public string SourceTitle { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "ratingKey")]
|
||||||
|
public string RatingKey { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "key")]
|
||||||
|
public string Key { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "studio")]
|
||||||
|
public string Studio { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "type")]
|
||||||
|
public string Type { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "title")]
|
||||||
|
public string Title { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "contentRating")]
|
||||||
|
public string ContentRating { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "summary")]
|
||||||
|
public string Summary { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "rating")]
|
||||||
|
public string Rating { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "audienceRating")]
|
||||||
|
public string AudienceRating { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "year")]
|
||||||
|
public string Year { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "tagline")]
|
||||||
|
public string Tagline { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "thumb")]
|
||||||
|
public string Thumb { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "art")]
|
||||||
|
public string Art { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "duration")]
|
||||||
|
public string Duration { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "originallyAvailableAt")]
|
||||||
|
public string OriginallyAvailableAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "addedAt")]
|
||||||
|
public string AddedAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "updatedAt")]
|
||||||
|
public string UpdatedAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "audienceRatingImage")]
|
||||||
|
public string AudienceRatingImage { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "chapterSource")]
|
||||||
|
public string ChapterSource { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "ratingImage")]
|
||||||
|
public string RatingImage { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "titleSort")]
|
||||||
|
public string TitleSort { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "parentRatingKey")]
|
||||||
|
public string ParentRatingKey { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "grandparentRatingKey")]
|
||||||
|
public string GrandparentRatingKey { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "grandparentKey")]
|
||||||
|
public string GrandparentKey { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "parentKey")]
|
||||||
|
public string ParentKey { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "grandparentTitle")]
|
||||||
|
public string GrandparentTitle { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "index")]
|
||||||
|
public string Index { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "parentIndex")]
|
||||||
|
public string ParentIndex { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "parentThumb")]
|
||||||
|
public string ParentThumb { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "grandparentThumb")]
|
||||||
|
public string GrandparentThumb { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "grandparentArt")]
|
||||||
|
public string GrandparentArt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "viewCount")]
|
||||||
|
public string ViewCount { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "lastViewedAt")]
|
||||||
|
public string LastViewedAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "grandparentTheme")]
|
||||||
|
public string GrandparentTheme { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Provider")]
|
||||||
|
public class Provider
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "key")]
|
||||||
|
public string Key { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "title")]
|
||||||
|
public string Title { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "type")]
|
||||||
|
public string Type { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "Directory")]
|
||||||
|
public class Directory1
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "Genre")]
|
||||||
|
public List<Genre> Genre { get; set; }
|
||||||
|
[XmlElement(ElementName = "Role")]
|
||||||
|
public List<Role> Role { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "allowSync")]
|
||||||
|
public string AllowSync { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "librarySectionID")]
|
||||||
|
public string LibrarySectionID { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "librarySectionTitle")]
|
||||||
|
public string LibrarySectionTitle { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "librarySectionUUID")]
|
||||||
|
public string LibrarySectionUUID { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "personal")]
|
||||||
|
public string Personal { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "sourceTitle")]
|
||||||
|
public string SourceTitle { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "ratingKey")]
|
||||||
|
public string RatingKey { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "key")]
|
||||||
|
public string Key { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "studio")]
|
||||||
|
public string Studio { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "type")]
|
||||||
|
public string Type { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "title")]
|
||||||
|
public string Title { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "contentRating")]
|
||||||
|
public string ContentRating { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "summary")]
|
||||||
|
public string Summary { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "index")]
|
||||||
|
public string Index { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "rating")]
|
||||||
|
public string Rating { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "viewCount")]
|
||||||
|
public string ViewCount { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "lastViewedAt")]
|
||||||
|
public string LastViewedAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "year")]
|
||||||
|
public string Year { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "thumb")]
|
||||||
|
public string Thumb { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "art")]
|
||||||
|
public string Art { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "banner")]
|
||||||
|
public string Banner { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "theme")]
|
||||||
|
public string Theme { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "duration")]
|
||||||
|
public string Duration { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "originallyAvailableAt")]
|
||||||
|
public string OriginallyAvailableAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "leafCount")]
|
||||||
|
public string LeafCount { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "viewedLeafCount")]
|
||||||
|
public string ViewedLeafCount { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "childCount")]
|
||||||
|
public string ChildCount { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "addedAt")]
|
||||||
|
public string AddedAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "updatedAt")]
|
||||||
|
public string UpdatedAt { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MediaContainer")]
|
||||||
|
public class PlexSearch
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "Directory")]
|
||||||
|
public Directory1 Directory { get; set; }
|
||||||
|
[XmlElement(ElementName = "Video")]
|
||||||
|
public List<Video> Video { get; set; }
|
||||||
|
[XmlElement(ElementName = "Provider")]
|
||||||
|
public List<Provider> Provider { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "size")]
|
||||||
|
public string Size { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "identifier")]
|
||||||
|
public string Identifier { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "mediaTagPrefix")]
|
||||||
|
public string MediaTagPrefix { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "mediaTagVersion")]
|
||||||
|
public string MediaTagVersion { get; set; }
|
||||||
|
}
|
||||||
|
}
|
89
PlexRequests.Api.Models/Plex/PlexStatus.cs
Normal file
89
PlexRequests.Api.Models/Plex/PlexStatus.cs
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Plex
|
||||||
|
{
|
||||||
|
[XmlRoot(ElementName = "Directory")]
|
||||||
|
public class Directory
|
||||||
|
{
|
||||||
|
[XmlAttribute(AttributeName = "count")]
|
||||||
|
public string Count { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "key")]
|
||||||
|
public string Key { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "title")]
|
||||||
|
public string Title { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[XmlRoot(ElementName = "MediaContainer")]
|
||||||
|
public class PlexStatus
|
||||||
|
{
|
||||||
|
[XmlElement(ElementName = "Directory")]
|
||||||
|
public List<Directory> Directory { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "size")]
|
||||||
|
public string Size { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "allowCameraUpload")]
|
||||||
|
public string AllowCameraUpload { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "allowChannelAccess")]
|
||||||
|
public string AllowChannelAccess { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "allowMediaDeletion")]
|
||||||
|
public string AllowMediaDeletion { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "allowSync")]
|
||||||
|
public string AllowSync { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "backgroundProcessing")]
|
||||||
|
public string BackgroundProcessing { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "certificate")]
|
||||||
|
public string Certificate { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "companionProxy")]
|
||||||
|
public string CompanionProxy { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "friendlyName")]
|
||||||
|
public string FriendlyName { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "machineIdentifier")]
|
||||||
|
public string MachineIdentifier { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "multiuser")]
|
||||||
|
public string Multiuser { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "myPlex")]
|
||||||
|
public string MyPlex { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "myPlexMappingState")]
|
||||||
|
public string MyPlexMappingState { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "myPlexSigninState")]
|
||||||
|
public string MyPlexSigninState { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "myPlexSubscription")]
|
||||||
|
public string MyPlexSubscription { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "myPlexUsername")]
|
||||||
|
public string MyPlexUsername { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "platform")]
|
||||||
|
public string Platform { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "platformVersion")]
|
||||||
|
public string PlatformVersion { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "requestParametersInCookie")]
|
||||||
|
public string RequestParametersInCookie { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "sync")]
|
||||||
|
public string Sync { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderActiveVideoSessions")]
|
||||||
|
public string TranscoderActiveVideoSessions { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderAudio")]
|
||||||
|
public string TranscoderAudio { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderLyrics")]
|
||||||
|
public string TranscoderLyrics { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderPhoto")]
|
||||||
|
public string TranscoderPhoto { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderSubtitles")]
|
||||||
|
public string TranscoderSubtitles { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderVideo")]
|
||||||
|
public string TranscoderVideo { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderVideoBitrates")]
|
||||||
|
public string TranscoderVideoBitrates { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderVideoQualities")]
|
||||||
|
public string TranscoderVideoQualities { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "transcoderVideoResolutions")]
|
||||||
|
public string TranscoderVideoResolutions { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "updatedAt")]
|
||||||
|
public string UpdatedAt { get; set; }
|
||||||
|
[XmlAttribute(AttributeName = "version")]
|
||||||
|
public string Version { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,33 +1,40 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: PlexUserRequest.cs
|
// File: PlexUserRequest.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
namespace Ombi.Api.Plex.Models
|
|
||||||
{
|
namespace PlexRequests.Api.Models.Plex
|
||||||
public class PlexUserRequest
|
{
|
||||||
{
|
public class PlexUserRequest
|
||||||
public UserRequest user { get; set; }
|
{
|
||||||
}
|
public UserRequest user { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class UserRequest
|
||||||
|
{
|
||||||
|
public string login { get; set; }
|
||||||
|
public string password { get; set; }
|
||||||
|
}
|
||||||
|
}
|
88
PlexRequests.Api.Models/PlexRequests.Api.Models.csproj
Normal file
88
PlexRequests.Api.Models/PlexRequests.Api.Models.csproj
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{CB37A5F8-6DFC-4554-99D3-A42B502E4591}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PlexRequests.Api.Models</RootNamespace>
|
||||||
|
<AssemblyName>PlexRequests.Api.Models</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Movie\CouchPotatoAdd.cs" />
|
||||||
|
<Compile Include="Movie\CouchPotatoProfiles.cs" />
|
||||||
|
<Compile Include="Movie\CouchPotatoStatus.cs" />
|
||||||
|
<Compile Include="Notifications\PushbulletPush.cs" />
|
||||||
|
<Compile Include="Notifications\PushbulletResponse.cs" />
|
||||||
|
<Compile Include="Notifications\PushoverResponse.cs" />
|
||||||
|
<Compile Include="Plex\PlexAccount.cs" />
|
||||||
|
<Compile Include="Plex\PlexAuthentication.cs" />
|
||||||
|
<Compile Include="Plex\PlexError.cs" />
|
||||||
|
<Compile Include="Plex\PlexFriends.cs" />
|
||||||
|
<Compile Include="Plex\PlexSearch.cs" />
|
||||||
|
<Compile Include="Plex\PlexStatus.cs" />
|
||||||
|
<Compile Include="Plex\PlexUserRequest.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="SickRage\SickRagePing.cs" />
|
||||||
|
<Compile Include="SickRage\SickRageShowInformation.cs" />
|
||||||
|
<Compile Include="SickRage\SickRageStatus.cs" />
|
||||||
|
<Compile Include="SickRage\SickRageTvAdd.cs" />
|
||||||
|
<Compile Include="Sonarr\SonarrAddSeries.cs" />
|
||||||
|
<Compile Include="Sonarr\SonarrProfile.cs" />
|
||||||
|
<Compile Include="Sonarr\SystemStatus.cs" />
|
||||||
|
<Compile Include="Tv\Authentication.cs" />
|
||||||
|
<Compile Include="Tv\TvMazeSearch.cs" />
|
||||||
|
<Compile Include="Tv\TvMazeSeasons.cs" />
|
||||||
|
<Compile Include="Tv\TVMazeShow.cs" />
|
||||||
|
<Compile Include="Tv\TvSearchResult.cs" />
|
||||||
|
<Compile Include="Tv\TvShow.cs" />
|
||||||
|
<Compile Include="Tv\TvShowImages.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
38
PlexRequests.Api.Models/Properties/AssemblyInfo.cs
Normal file
38
PlexRequests.Api.Models/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("PlexRequests.Api.Models")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("PlexRequests.Api.Models")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("cb37a5f8-6dfc-4554-99d3-a42b502e4591")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
|
||||||
|
[assembly: AssemblyInformationalVersionAttribute("1.0.0.0")]
|
|
@ -1,41 +1,40 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: DogNzbError.cs
|
// File: SickRagePing.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
namespace PlexRequests.Api.Models.SickRage
|
||||||
using System.Xml.Serialization;
|
{
|
||||||
|
public class SickRagePingData
|
||||||
namespace Ombi.Api.DogNzb.Models
|
{
|
||||||
{
|
public int pid { get; set; }
|
||||||
|
}
|
||||||
[XmlRoot(ElementName = "error")]
|
|
||||||
public class DogNzbError
|
public class SickRagePing
|
||||||
{
|
{
|
||||||
[XmlAttribute(AttributeName = "code")]
|
public SickRagePingData data { get; set; }
|
||||||
public string Code { get; set; }
|
public string message { get; set; }
|
||||||
[XmlAttribute(AttributeName = "description")]
|
public string result { get; set; }
|
||||||
public string Description { get; set; }
|
}
|
||||||
}
|
|
||||||
}
|
}
|
85
PlexRequests.Api.Models/SickRage/SickRageShowInformation.cs
Normal file
85
PlexRequests.Api.Models/SickRage/SickRageShowInformation.cs
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: SickRageShowInformation.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.SickRage
|
||||||
|
{
|
||||||
|
public class Cache
|
||||||
|
{
|
||||||
|
public int banner { get; set; }
|
||||||
|
public int poster { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class QualityDetails
|
||||||
|
{
|
||||||
|
public List<object> archive { get; set; }
|
||||||
|
public List<string> initial { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SeasonList
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Data
|
||||||
|
{
|
||||||
|
public int air_by_date { get; set; }
|
||||||
|
public string airs { get; set; }
|
||||||
|
public int anime { get; set; }
|
||||||
|
public int archive_firstmatch { get; set; }
|
||||||
|
public Cache cache { get; set; }
|
||||||
|
public int dvdorder { get; set; }
|
||||||
|
public int flatten_folders { get; set; }
|
||||||
|
public List<string> genre { get; set; }
|
||||||
|
public string imdbid { get; set; }
|
||||||
|
public int indexerid { get; set; }
|
||||||
|
public string language { get; set; }
|
||||||
|
public string location { get; set; }
|
||||||
|
public string network { get; set; }
|
||||||
|
public string next_ep_airdate { get; set; }
|
||||||
|
public int paused { get; set; }
|
||||||
|
public string quality { get; set; }
|
||||||
|
public QualityDetails quality_details { get; set; }
|
||||||
|
public List<object> rls_ignore_words { get; set; }
|
||||||
|
public List<object> rls_require_words { get; set; }
|
||||||
|
public int scene { get; set; }
|
||||||
|
public SeasonList season_list { get; set; }
|
||||||
|
public string show_name { get; set; }
|
||||||
|
public int sports { get; set; }
|
||||||
|
public string status { get; set; }
|
||||||
|
public int subtitles { get; set; }
|
||||||
|
public int tvdbid { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SickRageShowInformation
|
||||||
|
{
|
||||||
|
public Data data { get; set; }
|
||||||
|
public string message { get; set; }
|
||||||
|
public string result { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
PlexRequests.Api.Models/SickRage/SickRageStatus.cs
Normal file
35
PlexRequests.Api.Models/SickRage/SickRageStatus.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: SickRageStatus.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
namespace PlexRequests.Api.Models.SickRage
|
||||||
|
{
|
||||||
|
public static class SickRageStatus
|
||||||
|
{
|
||||||
|
public const string Wanted = "wanted";
|
||||||
|
public const string Skipped = "skipped";
|
||||||
|
public const string Ignored = "Ignored";
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,41 +1,41 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: SeasonPass.cs
|
// File: SickRageTvAdd.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
namespace Ombi.Api.Sonarr.Models
|
namespace PlexRequests.Api.Models.SickRage
|
||||||
{
|
{
|
||||||
|
public class SickRageTvAddData
|
||||||
public class SeasonPass
|
{
|
||||||
{
|
public string name { get; set; }
|
||||||
public SonarrSeries[] series { get; set; }
|
}
|
||||||
public Monitoringoptions monitoringOptions { get; set; }
|
|
||||||
}
|
public class SickRageTvAdd
|
||||||
|
{
|
||||||
public class Monitoringoptions
|
public SickRageTvAddData data { get; set; }
|
||||||
{
|
public string message { get; set; }
|
||||||
public bool ignoreEpisodesWithFiles { get; set; }
|
public string result { get; set; }
|
||||||
public bool ignoreEpisodesWithoutFiles { get; set; }
|
}
|
||||||
}
|
|
||||||
}
|
}
|
37
PlexRequests.Api.Models/Sonarr/SonarrAddSeries.cs
Normal file
37
PlexRequests.Api.Models/Sonarr/SonarrAddSeries.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Sonarr
|
||||||
|
{
|
||||||
|
public class Season
|
||||||
|
{
|
||||||
|
public int seasonNumber { get; set; }
|
||||||
|
public bool monitored { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SonarrAddSeries
|
||||||
|
{
|
||||||
|
public AddOptions addOptions { get; set; }
|
||||||
|
public string title { get; set; }
|
||||||
|
public List<Season> seasons { get; set; }
|
||||||
|
public string rootFolderPath { get; set; }
|
||||||
|
public int qualityProfileId { get; set; }
|
||||||
|
public bool seasonFolder { get; set; }
|
||||||
|
public bool monitored { get; set; }
|
||||||
|
public int tvdbId { get; set; }
|
||||||
|
public int tvRageId { get; set; }
|
||||||
|
public string cleanTitle { get; set; }
|
||||||
|
public string imdbId { get; set; }
|
||||||
|
public string titleSlug { get; set; }
|
||||||
|
public int id { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AddOptions
|
||||||
|
{
|
||||||
|
public bool ignoreEpisodesWithFiles { get; set; }
|
||||||
|
public bool ignoreEpisodesWithoutFiles { get; set; }
|
||||||
|
public bool searchForMissingEpisodes { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
57
PlexRequests.Api.Models/Sonarr/SonarrProfile.cs
Normal file
57
PlexRequests.Api.Models/Sonarr/SonarrProfile.cs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: SonarrProfile.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Sonarr
|
||||||
|
{
|
||||||
|
public class Cutoff
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Quality
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Item
|
||||||
|
{
|
||||||
|
public Quality quality { get; set; }
|
||||||
|
public bool allowed { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SonarrProfile
|
||||||
|
{
|
||||||
|
public string name { get; set; }
|
||||||
|
public Cutoff cutoff { get; set; }
|
||||||
|
public List<Item> items { get; set; }
|
||||||
|
public int id { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,45 +1,51 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: EmbyConfiguration.cs
|
// File: SystemStatus.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
namespace Ombi.Api.Emby.Models
|
namespace PlexRequests.Api.Models.Sonarr
|
||||||
{
|
{
|
||||||
public class EmbyConfiguration
|
public class SystemStatus
|
||||||
{
|
{
|
||||||
public bool PlayDefaultAudioTrack { get; set; }
|
public string version { get; set; }
|
||||||
public bool DisplayMissingEpisodes { get; set; }
|
public string buildTime { get; set; }
|
||||||
public bool DisplayUnairedEpisodes { get; set; }
|
public bool isDebug { get; set; }
|
||||||
public object[] GroupedFolders { get; set; }
|
public bool isProduction { get; set; }
|
||||||
public string SubtitleMode { get; set; }
|
public bool isAdmin { get; set; }
|
||||||
public bool DisplayCollectionsView { get; set; }
|
public bool isUserInteractive { get; set; }
|
||||||
public bool EnableLocalPassword { get; set; }
|
public string startupPath { get; set; }
|
||||||
public object[] OrderedViews { get; set; }
|
public string appData { get; set; }
|
||||||
public object[] LatestItemsExcludes { get; set; }
|
public string osVersion { get; set; }
|
||||||
public bool HidePlayedInLatest { get; set; }
|
public bool isMonoRuntime { get; set; }
|
||||||
public bool RememberAudioSelections { get; set; }
|
public bool isMono { get; set; }
|
||||||
public bool RememberSubtitleSelections { get; set; }
|
public bool isLinux { get; set; }
|
||||||
public bool EnableNextEpisodeAutoPlay { get; set; }
|
public bool isOsx { get; set; }
|
||||||
}
|
public bool isWindows { get; set; }
|
||||||
|
public string branch { get; set; }
|
||||||
|
public string authentication { get; set; }
|
||||||
|
public string sqliteVersion { get; set; }
|
||||||
|
public string urlBase { get; set; }
|
||||||
|
public string runtimeVersion { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,34 +1,33 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: PlexStatus.cs
|
// File: Authentication.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
namespace Ombi.Api.Plex.Models.Status
|
namespace PlexRequests.Api.Models.Tv
|
||||||
{
|
{
|
||||||
|
public class Authentication
|
||||||
public class PlexStatus
|
{
|
||||||
{
|
public string token { get; set; }
|
||||||
public Mediacontainer MediaContainer { get; set; }
|
}
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,27 +1,28 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Ombi.Api.TvMaze.Models
|
namespace PlexRequests.Api.Models.Tv
|
||||||
{
|
{
|
||||||
public class Show
|
public class TvMazeShow
|
||||||
{
|
{
|
||||||
public Links _links { get; set; }
|
public int id { get; set; }
|
||||||
public Externals externals { get; set; }
|
public string url { get; set; }
|
||||||
public List<object> genres { get; set; }
|
public string name { get; set; }
|
||||||
public int id { get; set; }
|
public string type { get; set; }
|
||||||
public Image image { get; set; }
|
public string language { get; set; }
|
||||||
public string language { get; set; }
|
public List<string> genres { get; set; }
|
||||||
public string name { get; set; }
|
public string status { get; set; }
|
||||||
public Network network { get; set; }
|
public int runtime { get; set; }
|
||||||
public string premiered { get; set; }
|
public string premiered { get; set; }
|
||||||
public Rating rating { get; set; }
|
public Schedule schedule { get; set; }
|
||||||
public int? runtime { get; set; }
|
public Rating rating { get; set; }
|
||||||
public Schedule schedule { get; set; }
|
public int weight { get; set; }
|
||||||
public string status { get; set; }
|
public Network network { get; set; }
|
||||||
public string summary { get; set; }
|
public object webChannel { get; set; }
|
||||||
public string type { get; set; }
|
public Externals externals { get; set; }
|
||||||
public int updated { get; set; }
|
public Image image { get; set; }
|
||||||
public string url { get; set; }
|
public string summary { get; set; }
|
||||||
public object webChannel { get; set; }
|
public int updated { get; set; }
|
||||||
public int weight { get; set; }
|
public Links _links { get; set; }
|
||||||
}
|
public int seasonCount { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
97
PlexRequests.Api.Models/Tv/TvMazeSearch.cs
Normal file
97
PlexRequests.Api.Models/Tv/TvMazeSearch.cs
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Tv
|
||||||
|
{
|
||||||
|
public class Schedule
|
||||||
|
{
|
||||||
|
public string time { get; set; }
|
||||||
|
public List<object> days { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Rating
|
||||||
|
{
|
||||||
|
public double? average { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Country
|
||||||
|
{
|
||||||
|
public string name { get; set; }
|
||||||
|
public string code { get; set; }
|
||||||
|
public string timezone { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Network
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
public Country country { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Externals
|
||||||
|
{
|
||||||
|
public int? tvrage { get; set; }
|
||||||
|
public int? thetvdb { get; set; }
|
||||||
|
public string imdb { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Image
|
||||||
|
{
|
||||||
|
public string medium { get; set; }
|
||||||
|
public string original { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Self
|
||||||
|
{
|
||||||
|
public string href { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Previousepisode
|
||||||
|
{
|
||||||
|
public string href { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Nextepisode
|
||||||
|
{
|
||||||
|
public string href { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Links
|
||||||
|
{
|
||||||
|
public Self self { get; set; }
|
||||||
|
public Previousepisode previousepisode { get; set; }
|
||||||
|
public Nextepisode nextepisode { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Show
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string url { get; set; }
|
||||||
|
public string name { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
public string language { get; set; }
|
||||||
|
public List<object> genres { get; set; }
|
||||||
|
public string status { get; set; }
|
||||||
|
public int? runtime { get; set; }
|
||||||
|
public string premiered { get; set; }
|
||||||
|
public Schedule schedule { get; set; }
|
||||||
|
public Rating rating { get; set; }
|
||||||
|
public int weight { get; set; }
|
||||||
|
public Network network { get; set; }
|
||||||
|
public object webChannel { get; set; }
|
||||||
|
public Externals externals { get; set; }
|
||||||
|
public Image image { get; set; }
|
||||||
|
public string summary { get; set; }
|
||||||
|
public int updated { get; set; }
|
||||||
|
public Links _links { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TvMazeSearch
|
||||||
|
{
|
||||||
|
public double score { get; set; }
|
||||||
|
public Show show { get; set; }
|
||||||
|
}
|
||||||
|
}
|
13
PlexRequests.Api.Models/Tv/TvMazeSeasons.cs
Normal file
13
PlexRequests.Api.Models/Tv/TvMazeSeasons.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Tv
|
||||||
|
{
|
||||||
|
public class TvMazeSeasons : TvMazeShow
|
||||||
|
{
|
||||||
|
public int number { get; set; }
|
||||||
|
}
|
||||||
|
}
|
68
PlexRequests.Api.Models/Tv/TvSearchResult.cs
Normal file
68
PlexRequests.Api.Models/Tv/TvSearchResult.cs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TvSearchResult.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Tv
|
||||||
|
{
|
||||||
|
public class TvShowSearchResult
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public int airedSeason { get; set; }
|
||||||
|
public int airedEpisodeNumber { get; set; }
|
||||||
|
public string episodeName { get; set; }
|
||||||
|
public string firstAired { get; set; }
|
||||||
|
public string guestStars { get; set; }
|
||||||
|
public string director { get; set; }
|
||||||
|
public List<string> writers { get; set; }
|
||||||
|
public string overview { get; set; }
|
||||||
|
public string productionCode { get; set; }
|
||||||
|
public string showUrl { get; set; }
|
||||||
|
public int lastUpdated { get; set; }
|
||||||
|
public string dvdDiscid { get; set; }
|
||||||
|
public int dvdSeason { get; set; }
|
||||||
|
public int dvdEpisodeNumber { get; set; }
|
||||||
|
public int dvdChapter { get; set; }
|
||||||
|
public int absoluteNumber { get; set; }
|
||||||
|
public string filename { get; set; }
|
||||||
|
public string seriesId { get; set; }
|
||||||
|
public string lastUpdatedBy { get; set; }
|
||||||
|
public int airsAfterSeason { get; set; }
|
||||||
|
public int airsBeforeSeason { get; set; }
|
||||||
|
public int airsBeforeEpisode { get; set; }
|
||||||
|
public string thumbAuthor { get; set; }
|
||||||
|
public string thumbAdded { get; set; }
|
||||||
|
public string thumbWidth { get; set; }
|
||||||
|
public string thumbHeight { get; set; }
|
||||||
|
public string imdbId { get; set; }
|
||||||
|
public int siteRating { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TvSearchResult
|
||||||
|
{
|
||||||
|
public List<TvShow> data { get; set; }
|
||||||
|
}
|
||||||
|
}
|
61
PlexRequests.Api.Models/Tv/TvShow.cs
Normal file
61
PlexRequests.Api.Models/Tv/TvShow.cs
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TvShow.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Tv
|
||||||
|
{
|
||||||
|
public class TvShow
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string seriesName { get; set; }
|
||||||
|
public List<string> aliases { get; set; }
|
||||||
|
public string banner { get; set; }
|
||||||
|
public string seriesId { get; set; }
|
||||||
|
public string status { get; set; }
|
||||||
|
public string firstAired { get; set; }
|
||||||
|
public string network { get; set; }
|
||||||
|
public string networkId { get; set; }
|
||||||
|
public string runtime { get; set; }
|
||||||
|
public List<string> genre { get; set; }
|
||||||
|
public string overview { get; set; }
|
||||||
|
public int lastUpdated { get; set; }
|
||||||
|
public string airsDayOfWeek { get; set; }
|
||||||
|
public string airsTime { get; set; }
|
||||||
|
public string rating { get; set; }
|
||||||
|
public string imdbId { get; set; }
|
||||||
|
public string zap2itId { get; set; }
|
||||||
|
public string added { get; set; }
|
||||||
|
public int addedBy { get; set; }
|
||||||
|
public int siteRating { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TvShowInformation
|
||||||
|
{
|
||||||
|
public TvShow data { get; set; }
|
||||||
|
}
|
||||||
|
}
|
54
PlexRequests.Api.Models/Tv/TvShowImages.cs
Normal file
54
PlexRequests.Api.Models/Tv/TvShowImages.cs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TvShowImages.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api.Models.Tv
|
||||||
|
{
|
||||||
|
public class RatingsInfo
|
||||||
|
{
|
||||||
|
public double average { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Datum
|
||||||
|
{
|
||||||
|
public int id { get; set; }
|
||||||
|
public string keyType { get; set; }
|
||||||
|
public string subKey { get; set; }
|
||||||
|
public string fileName { get; set; }
|
||||||
|
public string resolution { get; set; }
|
||||||
|
public RatingsInfo ratingsInfo { get; set; }
|
||||||
|
public string thumbnail { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TvShowImages
|
||||||
|
{
|
||||||
|
public List<Datum> data { get; set; }
|
||||||
|
public object errors { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
4
PlexRequests.Api.Models/packages.config
Normal file
4
PlexRequests.Api.Models/packages.config
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net46" />
|
||||||
|
</packages>
|
128
PlexRequests.Api/ApiRequest.cs
Normal file
128
PlexRequests.Api/ApiRequest.cs
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: ApiRequest.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class ApiRequest : IApiRequest
|
||||||
|
{
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
/// <summary>
|
||||||
|
/// An API request handler
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">The type of class you want to deserialize</typeparam>
|
||||||
|
/// <param name="request">The request.</param>
|
||||||
|
/// <param name="baseUri">The base URI.</param>
|
||||||
|
/// <returns>The type of class you want to deserialize</returns>
|
||||||
|
public T Execute<T>(IRestRequest request, Uri baseUri) where T : new()
|
||||||
|
{
|
||||||
|
var client = new RestClient { BaseUrl = baseUri };
|
||||||
|
|
||||||
|
var response = client.Execute<T>(request);
|
||||||
|
|
||||||
|
if (response.ErrorException != null)
|
||||||
|
{
|
||||||
|
var message = "Error retrieving response. Check inner details for more info.";
|
||||||
|
throw new ApplicationException(message, response.ErrorException);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.Data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public T ExecuteXml<T>(IRestRequest request, Uri baseUri) where T : class
|
||||||
|
{
|
||||||
|
var client = new RestClient { BaseUrl = baseUri };
|
||||||
|
|
||||||
|
var response = client.Execute(request);
|
||||||
|
|
||||||
|
if (response.ErrorException != null)
|
||||||
|
{
|
||||||
|
var message = "Error retrieving response. Check inner details for more info.";
|
||||||
|
throw new ApplicationException(message, response.ErrorException);
|
||||||
|
}
|
||||||
|
|
||||||
|
var result = DeserializeXml<T>(response.Content);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T ExecuteJson<T>(IRestRequest request, Uri baseUri) where T : new()
|
||||||
|
{
|
||||||
|
var client = new RestClient { BaseUrl = baseUri };
|
||||||
|
|
||||||
|
var response = client.Execute(request);
|
||||||
|
|
||||||
|
if (response.ErrorException != null)
|
||||||
|
{
|
||||||
|
var message = "Error retrieving response. Check inner details for more info.";
|
||||||
|
throw new ApplicationException(message, response.ErrorException);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var json = JsonConvert.DeserializeObject<T>(response.Content);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Fatal(e);
|
||||||
|
Log.Info(response.Content);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T DeserializeXml<T>(string input)
|
||||||
|
where T : class
|
||||||
|
{
|
||||||
|
var ser = new XmlSerializer(typeof(T));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var sr = new StringReader(input))
|
||||||
|
return (T)ser.Deserialize(sr);
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
119
PlexRequests.Api/CouchPotatoApi.cs
Normal file
119
PlexRequests.Api/CouchPotatoApi.cs
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: CouchPotatoApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
using NLog;
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models.Movie;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class CouchPotatoApi : ICouchPotatoApi
|
||||||
|
{
|
||||||
|
public CouchPotatoApi()
|
||||||
|
{
|
||||||
|
Api = new ApiRequest();
|
||||||
|
}
|
||||||
|
private ApiRequest Api { get; set; }
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public bool AddMovie(string imdbid, string apiKey, string title, Uri baseUrl, string profileId = default(string))
|
||||||
|
{
|
||||||
|
RestRequest request;
|
||||||
|
request = string.IsNullOrEmpty(profileId)
|
||||||
|
? new RestRequest {Resource = "/api/{apikey}/movie.add?title={title}&identifier={imdbid}"}
|
||||||
|
: new RestRequest { Resource = "/api/{apikey}/movie.add?title={title}&identifier={imdbid}&profile_id={profileId}" };
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(profileId))
|
||||||
|
{
|
||||||
|
request.AddUrlSegment("profileId", profileId);
|
||||||
|
}
|
||||||
|
|
||||||
|
request.AddUrlSegment("apikey", apiKey);
|
||||||
|
request.AddUrlSegment("imdbid", imdbid);
|
||||||
|
request.AddUrlSegment("title", title);
|
||||||
|
|
||||||
|
var obj = Api.ExecuteJson<JObject>(request, baseUrl);
|
||||||
|
Log.Trace("CP movie Add result count {0}", obj.Count);
|
||||||
|
|
||||||
|
if (obj.Count > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Log.Trace("CP movie obj[\"success\"] = {0}", obj["success"]);
|
||||||
|
var result = (bool)obj["success"];
|
||||||
|
Log.Trace("CP movie Add result {0}", result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Fatal(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the status.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="url">The URL.</param>
|
||||||
|
/// <param name="apiKey">The API key.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public CouchPotatoStatus GetStatus(Uri url, string apiKey)
|
||||||
|
{
|
||||||
|
Log.Trace("Getting CP Status, ApiKey = {0}", apiKey);
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "api/{apikey}/app.available/",
|
||||||
|
Method = Method.GET
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddUrlSegment("apikey", apiKey);
|
||||||
|
|
||||||
|
return Api.Execute<CouchPotatoStatus>(request,url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CouchPotatoProfiles GetProfiles(Uri url, string apiKey)
|
||||||
|
{
|
||||||
|
Log.Trace("Getting CP Profiles, ApiKey = {0}", apiKey);
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "api/{apikey}/profile.list/",
|
||||||
|
Method = Method.GET
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddUrlSegment("apikey", apiKey);
|
||||||
|
|
||||||
|
return Api.Execute<CouchPotatoProfiles>(request, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
139
PlexRequests.Api/MockApiData.Designer.cs
generated
Normal file
139
PlexRequests.Api/MockApiData.Designer.cs
generated
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace PlexRequests.Api {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class MockApiData {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal MockApiData() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PlexRequests.Api.MockApiData", typeof(MockApiData).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to {
|
||||||
|
/// "title": "Archer (2009)",
|
||||||
|
/// "seasons": [
|
||||||
|
/// {
|
||||||
|
/// "seasonNumber": 5,
|
||||||
|
/// "monitored": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "seasonNumber": 4,
|
||||||
|
/// "monitored": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "seasonNumber": 3,
|
||||||
|
/// "monitored": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "seasonNumber": 2,
|
||||||
|
/// "monitored": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "seasonNumber": 1,
|
||||||
|
/// "monitored": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "seasonNumber": 0,
|
||||||
|
/// "monitored": false
|
||||||
|
/// }
|
||||||
|
/// ],
|
||||||
|
/// "pat [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Sonarr_AddSeriesResult {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Sonarr_AddSeriesResult", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to [
|
||||||
|
/// {
|
||||||
|
/// "name": "SD",
|
||||||
|
/// "cutoff": {
|
||||||
|
/// "id": 1,
|
||||||
|
/// "name": "SDTV"
|
||||||
|
/// },
|
||||||
|
/// "items": [
|
||||||
|
/// {
|
||||||
|
/// "quality": {
|
||||||
|
/// "id": 1,
|
||||||
|
/// "name": "SDTV"
|
||||||
|
/// },
|
||||||
|
/// "allowed": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "quality": {
|
||||||
|
/// "id": 8,
|
||||||
|
/// "name": "WEBDL-480p"
|
||||||
|
/// },
|
||||||
|
/// "allowed": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "quality": {
|
||||||
|
/// "id": 2,
|
||||||
|
/// "name": "DVD"
|
||||||
|
/// },
|
||||||
|
/// "allowed": true
|
||||||
|
/// },
|
||||||
|
/// {
|
||||||
|
/// "quality": { [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Sonarr_Profiles {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Sonarr_Profiles", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
485
PlexRequests.Api/MockApiData.resx
Normal file
485
PlexRequests.Api/MockApiData.resx
Normal file
|
@ -0,0 +1,485 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="Sonarr_AddSeriesResult" xml:space="preserve">
|
||||||
|
<value>{
|
||||||
|
"title": "Archer (2009)",
|
||||||
|
"seasons": [
|
||||||
|
{
|
||||||
|
"seasonNumber": 5,
|
||||||
|
"monitored": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"seasonNumber": 4,
|
||||||
|
"monitored": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"seasonNumber": 3,
|
||||||
|
"monitored": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"seasonNumber": 2,
|
||||||
|
"monitored": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"seasonNumber": 1,
|
||||||
|
"monitored": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"seasonNumber": 0,
|
||||||
|
"monitored": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"path": "T:\\Archer (2009)",
|
||||||
|
"qualityProfileId": 1,
|
||||||
|
"seasonFolder": true,
|
||||||
|
"monitored": true,
|
||||||
|
"tvdbId": 110381,
|
||||||
|
"tvRageId": 23354,
|
||||||
|
"cleanTitle": "archer2009",
|
||||||
|
"imdbId": "tt1486217",
|
||||||
|
"titleSlug": "archer-2009",
|
||||||
|
"id": 1
|
||||||
|
}</value>
|
||||||
|
</data>
|
||||||
|
<data name="Sonarr_Profiles" xml:space="preserve">
|
||||||
|
<value>[
|
||||||
|
{
|
||||||
|
"name": "SD",
|
||||||
|
"cutoff": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "SDTV"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "SDTV"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 8,
|
||||||
|
"name": "WEBDL-480p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 2,
|
||||||
|
"name": "DVD"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 4,
|
||||||
|
"name": "HDTV-720p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 9,
|
||||||
|
"name": "HDTV-1080p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 10,
|
||||||
|
"name": "Raw-HD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "WEBDL-720p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 6,
|
||||||
|
"name": "Bluray-720p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "WEBDL-1080p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 7,
|
||||||
|
"name": "Bluray-1080p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HD 720p",
|
||||||
|
"cutoff": {
|
||||||
|
"id": 4,
|
||||||
|
"name": "HDTV-720p"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "SDTV"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 8,
|
||||||
|
"name": "WEBDL-480p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 2,
|
||||||
|
"name": "DVD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 4,
|
||||||
|
"name": "HDTV-720p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 9,
|
||||||
|
"name": "HDTV-1080p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 10,
|
||||||
|
"name": "Raw-HD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "WEBDL-720p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 6,
|
||||||
|
"name": "Bluray-720p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "WEBDL-1080p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 7,
|
||||||
|
"name": "Bluray-1080p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HD 1080p",
|
||||||
|
"cutoff": {
|
||||||
|
"id": 9,
|
||||||
|
"name": "HDTV-1080p"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "SDTV"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 8,
|
||||||
|
"name": "WEBDL-480p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 2,
|
||||||
|
"name": "DVD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 4,
|
||||||
|
"name": "HDTV-720p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 9,
|
||||||
|
"name": "HDTV-1080p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 10,
|
||||||
|
"name": "Raw-HD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "WEBDL-720p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 6,
|
||||||
|
"name": "Bluray-720p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "WEBDL-1080p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 7,
|
||||||
|
"name": "Bluray-1080p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HD - All",
|
||||||
|
"cutoff": {
|
||||||
|
"id": 4,
|
||||||
|
"name": "HDTV-720p"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 1,
|
||||||
|
"name": "SDTV"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 8,
|
||||||
|
"name": "WEBDL-480p"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 2,
|
||||||
|
"name": "DVD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 4,
|
||||||
|
"name": "HDTV-720p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 9,
|
||||||
|
"name": "HDTV-1080p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 10,
|
||||||
|
"name": "Raw-HD"
|
||||||
|
},
|
||||||
|
"allowed": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 5,
|
||||||
|
"name": "WEBDL-720p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 6,
|
||||||
|
"name": "Bluray-720p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 3,
|
||||||
|
"name": "WEBDL-1080p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"quality": {
|
||||||
|
"id": 7,
|
||||||
|
"name": "Bluray-1080p"
|
||||||
|
},
|
||||||
|
"allowed": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"id": 4
|
||||||
|
}
|
||||||
|
]</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -1,62 +1,59 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: JellyfinEpisode.cs
|
// File: MockSonarrApi.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
using System;
|
||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using Newtonsoft.Json;
|
||||||
using System.Linq;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models.Sonarr;
|
||||||
namespace Ombi.Store.Entities
|
|
||||||
{
|
namespace PlexRequests.Api.Mocks
|
||||||
[Table("JellyfinEpisode")]
|
{
|
||||||
public class JellyfinEpisode : MediaServerEpisode
|
public class MockSonarrApi : ISonarrApi
|
||||||
{
|
{
|
||||||
public string JellyfinId { get; set; }
|
public List<SonarrProfile> GetProfiles(string apiKey, Uri baseUrl)
|
||||||
public string ParentId { get; set; }
|
{
|
||||||
/// <summary>
|
var json = MockApiData.Sonarr_Profiles;
|
||||||
/// NOT USED
|
var obj = JsonConvert.DeserializeObject<List<SonarrProfile>>(json);
|
||||||
/// </summary>
|
return obj;
|
||||||
public string ProviderId { get; set; }
|
}
|
||||||
public DateTime AddedAt { get; set; }
|
|
||||||
public string TvDbId { get; set; }
|
public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, int seasonCount, int[] seasons,
|
||||||
public string ImdbId { get; set; }
|
string apiKey, Uri baseUrl)
|
||||||
public string TheMovieDbId { get; set; }
|
{
|
||||||
[NotMapped]
|
var json = MockApiData.Sonarr_AddSeriesResult;
|
||||||
public JellyfinContent JellyfinSeries
|
var obj = JsonConvert.DeserializeObject<SonarrAddSeries>(json);
|
||||||
{
|
return obj;
|
||||||
get => (JellyfinContent)Series;
|
}
|
||||||
set => Series = value;
|
|
||||||
}
|
public SystemStatus SystemStatus(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
public override IMediaServerContent SeriesIsIn(ICollection<IMediaServerContent> content)
|
throw new NotImplementedException();
|
||||||
{
|
}
|
||||||
return content.OfType<JellyfinContent>().FirstOrDefault(
|
}
|
||||||
x => x.JellyfinId == this.JellyfinSeries.JellyfinId);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
36
PlexRequests.Api/MovieBase.cs
Normal file
36
PlexRequests.Api/MovieBase.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TvBase.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using PlexRequests.Helpers;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public abstract class MovieBase
|
||||||
|
{
|
||||||
|
private static readonly string Encrypted = "0T3QNSseexLO7n7UPiJvl70Y+KKnvbeTlsusl7Kwq0hPH0BHOuFNGwksNCjkwqWedyDdI/MJeUR4wtL4bIl0Z+//uHXEaYM/4H2pjeLbH5EWdUe5TTj1AhaIR5PQweamvcienRyFD/3YPCC/+qL5mHkKXBkPumMod3Zb/4yN0Ik=";
|
||||||
|
protected string ApiKey = StringCipher.Decrypt(Encrypted, "ApiKey");
|
||||||
|
}
|
||||||
|
}
|
158
PlexRequests.Api/PlexApi.cs
Normal file
158
PlexRequests.Api/PlexApi.cs
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models;
|
||||||
|
using PlexRequests.Api.Models.Plex;
|
||||||
|
using PlexRequests.Helpers;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class PlexApi : IPlexApi
|
||||||
|
{
|
||||||
|
static PlexApi()
|
||||||
|
{
|
||||||
|
Version = AssemblyHelper.GetAssemblyVersion();
|
||||||
|
}
|
||||||
|
private static string Version { get; }
|
||||||
|
|
||||||
|
public PlexAuthentication SignIn(string username, string password)
|
||||||
|
{
|
||||||
|
var userModel = new PlexUserRequest
|
||||||
|
{
|
||||||
|
user = new UserRequest
|
||||||
|
{
|
||||||
|
password = password,
|
||||||
|
login = username
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.POST
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddHeader("X-Plex-Client-Identifier", "Test213"); // TODO need something unique to the users version/installation
|
||||||
|
request.AddHeader("X-Plex-Product", "Request Plex");
|
||||||
|
request.AddHeader("X-Plex-Version", Version);
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
request.AddJsonBody(userModel);
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
return api.Execute<PlexAuthentication>(request, new Uri("https://plex.tv/users/sign_in.json"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlexFriends GetUsers(string authToken)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddHeader("X-Plex-Client-Identifier", "Test213");
|
||||||
|
request.AddHeader("X-Plex-Product", "Request Plex");
|
||||||
|
request.AddHeader("X-Plex-Version", Version);
|
||||||
|
request.AddHeader("X-Plex-Token", authToken);
|
||||||
|
request.AddHeader("Content-Type", "application/xml");
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
var users = api.ExecuteXml<PlexFriends>(request, new Uri("https://plex.tv/pms/friends/all"));
|
||||||
|
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the users.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="authToken">The authentication token.</param>
|
||||||
|
/// <param name="searchTerm">The search term.</param>
|
||||||
|
/// <param name="plexFullHost">The full plex host.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public PlexSearch SearchContent(string authToken, string searchTerm, Uri plexFullHost)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "search?query={searchTerm}"
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddUrlSegment("searchTerm", searchTerm);
|
||||||
|
request.AddHeader("X-Plex-Client-Identifier", "Test213");
|
||||||
|
request.AddHeader("X-Plex-Product", "Request Plex");
|
||||||
|
request.AddHeader("X-Plex-Version", Version);
|
||||||
|
request.AddHeader("X-Plex-Token", authToken);
|
||||||
|
request.AddHeader("Content-Type", "application/xml");
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
var search = api.ExecuteXml<PlexSearch>(request, plexFullHost);
|
||||||
|
|
||||||
|
return search;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlexStatus GetStatus(string authToken, Uri uri)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddHeader("X-Plex-Client-Identifier", "Test213");
|
||||||
|
request.AddHeader("X-Plex-Product", "Request Plex");
|
||||||
|
request.AddHeader("X-Plex-Version", Version);
|
||||||
|
request.AddHeader("X-Plex-Token", authToken);
|
||||||
|
request.AddHeader("Content-Type", "application/xml");
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
var users = api.ExecuteXml<PlexStatus>(request, uri);
|
||||||
|
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlexAccount GetAccount(string authToken)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddHeader("X-Plex-Client-Identifier", "Test213");
|
||||||
|
request.AddHeader("X-Plex-Product", "Request Plex");
|
||||||
|
request.AddHeader("X-Plex-Version", Version);
|
||||||
|
request.AddHeader("X-Plex-Token", authToken);
|
||||||
|
request.AddHeader("Content-Type", "application/xml");
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
var account = api.ExecuteXml<PlexAccount>(request, new Uri("https://plex.tv/users/account"));
|
||||||
|
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
121
PlexRequests.Api/PlexRequests.Api.csproj
Normal file
121
PlexRequests.Api/PlexRequests.Api.csproj
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{8CB8D235-2674-442D-9C6A-35FCAEEB160D}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PlexRequests.Api</RootNamespace>
|
||||||
|
<AssemblyName>PlexRequests.Api</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Dapper, Version=1.40.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Dapper.1.42\lib\net45\Dapper.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Nancy, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Nancy.1.4.3\lib\net40\Nancy.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="RestSharp, Version=105.2.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\RestSharp.105.2.3\lib\net452\RestSharp.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="TMDbLib, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\TMDbLib.0.9.0.0-alpha\lib\net45\TMDbLib.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="ApiRequest.cs" />
|
||||||
|
<Compile Include="MockApiData.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>MockApiData.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Mocks\MockSonarrApi.cs" />
|
||||||
|
<Compile Include="PushoverApi.cs" />
|
||||||
|
<Compile Include="PushbulletApi.cs" />
|
||||||
|
<Compile Include="SickrageApi.cs" />
|
||||||
|
<Compile Include="SonarrApi.cs" />
|
||||||
|
<Compile Include="CouchPotatoApi.cs" />
|
||||||
|
<Compile Include="MovieBase.cs" />
|
||||||
|
<Compile Include="PlexApi.cs" />
|
||||||
|
<Compile Include="TheMovieDbApi.cs" />
|
||||||
|
<Compile Include="TvBase.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="TheTvDbApi.cs" />
|
||||||
|
<Compile Include="TvMazeApi.cs" />
|
||||||
|
<Compile Include="TvMazeBase.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Api.Interfaces\PlexRequests.Api.Interfaces.csproj">
|
||||||
|
<Project>{95834072-A675-415D-AA8F-877C91623810}</Project>
|
||||||
|
<Name>PlexRequests.Api.Interfaces</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Api.Models\PlexRequests.Api.Models.csproj">
|
||||||
|
<Project>{CB37A5F8-6DFC-4554-99D3-A42B502E4591}</Project>
|
||||||
|
<Name>PlexRequests.Api.Models</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Helpers\PlexRequests.Helpers.csproj">
|
||||||
|
<Project>{1252336D-42A3-482A-804C-836E60173DFA}</Project>
|
||||||
|
<Name>PlexRequests.Helpers</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="MockApiData.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>MockApiData.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
37
PlexRequests.Api/Properties/AssemblyInfo.cs
Normal file
37
PlexRequests.Api/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("PlexRequests.Api")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("PlexRequests.Api")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("8cb8d235-2674-442d-9c6a-35fcaeeb160d")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyInformationalVersionAttribute("1.0.0.0")]
|
64
PlexRequests.Api/PushbulletApi.cs
Normal file
64
PlexRequests.Api/PushbulletApi.cs
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models.Notifications;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class PushbulletApi : IPushbulletApi
|
||||||
|
{
|
||||||
|
public async Task<PushbulletResponse> PushAsync(string accessToken, string title, string message, string deviceIdentifier = default(string))
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.POST,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddHeader("Access-Token", accessToken);
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
var push = new PushbulletPush { title = title, body = message, type = "note"};
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(deviceIdentifier))
|
||||||
|
{
|
||||||
|
push.device_iden = deviceIdentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.AddJsonBody(push);
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
return await Task.Run(() => api.ExecuteJson<PushbulletResponse>(request, new Uri("https://api.pushbullet.com/v2/pushes")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
57
PlexRequests.Api/PushoverApi.cs
Normal file
57
PlexRequests.Api/PushoverApi.cs
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: PlexApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models.Notifications;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class PushoverApi : IPushoverApi
|
||||||
|
{
|
||||||
|
public async Task<PushoverResponse> PushAsync(string accessToken, string message, string userToken)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.POST,
|
||||||
|
Resource = "messages.json?token={token}&user={user}&message={message}"
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddUrlSegment("token", accessToken);
|
||||||
|
request.AddUrlSegment("message", message);
|
||||||
|
request.AddUrlSegment("user", userToken);
|
||||||
|
|
||||||
|
|
||||||
|
var api = new ApiRequest();
|
||||||
|
return await Task.Run(() => api.ExecuteJson<PushoverResponse>(request, new Uri("https://api.pushover.net/1")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
158
PlexRequests.Api/SickrageApi.cs
Normal file
158
PlexRequests.Api/SickrageApi.cs
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
#region Copyright
|
||||||
|
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: CouchPotatoApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using NLog;
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models.SickRage;
|
||||||
|
using PlexRequests.Helpers;
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class SickrageApi : ISickRageApi
|
||||||
|
{
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public SickrageApi()
|
||||||
|
{
|
||||||
|
Api = new ApiRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApiRequest Api { get; }
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<SickRageTvAdd> AddSeries(int tvdbId, int seasonCount, int[] seasons, string quality, string apiKey,
|
||||||
|
Uri baseUrl)
|
||||||
|
{
|
||||||
|
var futureStatus = seasons.Length > 0 && !seasons.Any(x => x == seasonCount) ? SickRageStatus.Skipped : SickRageStatus.Wanted;
|
||||||
|
var status = seasons.Length > 0 ? SickRageStatus.Skipped : SickRageStatus.Wanted;
|
||||||
|
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "/api/{apiKey}/?cmd=show.addnew",
|
||||||
|
Method = Method.GET
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("apiKey", apiKey);
|
||||||
|
request.AddQueryParameter("tvdbid", tvdbId.ToString());
|
||||||
|
request.AddQueryParameter("status", status);
|
||||||
|
request.AddQueryParameter("future_status", futureStatus);
|
||||||
|
if (!quality.Equals("default", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
request.AddQueryParameter("initial", quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
var obj = Api.Execute<SickRageTvAdd>(request, baseUrl);
|
||||||
|
|
||||||
|
|
||||||
|
if (obj.result != "failure")
|
||||||
|
{
|
||||||
|
var sw = new Stopwatch();
|
||||||
|
sw.Start();
|
||||||
|
|
||||||
|
// Check to see if it's been added yet.
|
||||||
|
var showInfo = new SickRageShowInformation { message = "Show not found" };
|
||||||
|
while (showInfo.message.Equals("Show not found", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
showInfo = CheckShowHasBeenAdded(tvdbId, apiKey, baseUrl);
|
||||||
|
if (sw.ElapsedMilliseconds > 30000) // Break out after 30 seconds, it's not going to get added
|
||||||
|
{
|
||||||
|
Log.Warn("Couldn't find out if the show had been added after 10 seconds. I doubt we can change the status to wanted.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sw.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (seasons.Length > 0)
|
||||||
|
{
|
||||||
|
//handle the seasons requested
|
||||||
|
foreach (var s in seasons)
|
||||||
|
{
|
||||||
|
var result = await AddSeason(tvdbId, s, apiKey, baseUrl);
|
||||||
|
Log.Trace("SickRage adding season results: ");
|
||||||
|
Log.Trace(result.DumpJson());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SickRagePing Ping(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "/api/{apiKey}/?cmd=sb.ping",
|
||||||
|
Method = Method.GET
|
||||||
|
};
|
||||||
|
|
||||||
|
request.AddUrlSegment("apiKey", apiKey);
|
||||||
|
var obj = Api.ExecuteJson<SickRagePing>(request, baseUrl);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<SickRageTvAdd> AddSeason(int tvdbId, int season, string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "/api/{apiKey}/?cmd=episode.setstatus",
|
||||||
|
Method = Method.GET
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("apiKey", apiKey);
|
||||||
|
request.AddQueryParameter("tvdbid", tvdbId.ToString());
|
||||||
|
request.AddQueryParameter("season", season.ToString());
|
||||||
|
request.AddQueryParameter("status", SickRageStatus.Wanted);
|
||||||
|
|
||||||
|
await Task.Run(() => Thread.Sleep(2000));
|
||||||
|
return await Task.Run(() => Api.Execute<SickRageTvAdd>(request, baseUrl)).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SickRageShowInformation CheckShowHasBeenAdded(int tvdbId, string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "/api/{apiKey}/?cmd=show",
|
||||||
|
Method = Method.GET
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("apiKey", apiKey);
|
||||||
|
request.AddQueryParameter("tvdbid", tvdbId.ToString());
|
||||||
|
|
||||||
|
var obj = Api.Execute<SickRageShowInformation>(request, baseUrl);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
106
PlexRequests.Api/SonarrApi.cs
Normal file
106
PlexRequests.Api/SonarrApi.cs
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: CouchPotatoApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using NLog;
|
||||||
|
using PlexRequests.Api.Interfaces;
|
||||||
|
using PlexRequests.Api.Models.Sonarr;
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class SonarrApi : ISonarrApi
|
||||||
|
{
|
||||||
|
public SonarrApi()
|
||||||
|
{
|
||||||
|
Api = new ApiRequest();
|
||||||
|
}
|
||||||
|
private ApiRequest Api { get; set; }
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
public List<SonarrProfile> GetProfiles(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new RestRequest { Resource = "/api/profile", Method = Method.GET };
|
||||||
|
|
||||||
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
|
|
||||||
|
var obj = Api.ExecuteJson<List<SonarrProfile>>(request, baseUrl);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, int seasonCount, int[] seasons, string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Resource = "/api/Series?",
|
||||||
|
Method = Method.POST
|
||||||
|
};
|
||||||
|
|
||||||
|
var options = new SonarrAddSeries
|
||||||
|
{
|
||||||
|
seasonFolder = seasonFolders,
|
||||||
|
title = title,
|
||||||
|
qualityProfileId = qualityId,
|
||||||
|
tvdbId = tvdbId,
|
||||||
|
titleSlug = title,
|
||||||
|
seasons = new List<Season>(),
|
||||||
|
rootFolderPath = rootPath
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
for (var i = 1; i <= seasonCount; i++)
|
||||||
|
{
|
||||||
|
var season = new Season
|
||||||
|
{
|
||||||
|
seasonNumber = i,
|
||||||
|
monitored = seasons.Length == 0 || seasons.Any(x => x == i)
|
||||||
|
};
|
||||||
|
options.seasons.Add(season);
|
||||||
|
}
|
||||||
|
|
||||||
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
|
request.AddJsonBody(options);
|
||||||
|
|
||||||
|
var obj = Api.ExecuteJson<SonarrAddSeries>(request, baseUrl);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SystemStatus SystemStatus(string apiKey, Uri baseUrl)
|
||||||
|
{
|
||||||
|
var request = new RestRequest { Resource = "/api/system/status", Method = Method.GET };
|
||||||
|
request.AddHeader("X-Api-Key", apiKey);
|
||||||
|
|
||||||
|
var obj = Api.ExecuteJson<SystemStatus>(request, baseUrl);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
84
PlexRequests.Api/TheMovieDbApi.cs
Normal file
84
PlexRequests.Api/TheMovieDbApi.cs
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TheMovieDbApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using TMDbLib.Client;
|
||||||
|
using TMDbLib.Objects.General;
|
||||||
|
using TMDbLib.Objects.Movies;
|
||||||
|
using TMDbLib.Objects.Search;
|
||||||
|
using TMDbLib.Objects.TvShows;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class TheMovieDbApi : MovieBase
|
||||||
|
{
|
||||||
|
public TheMovieDbApi()
|
||||||
|
{
|
||||||
|
Client = new TMDbClient(ApiKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TMDbClient Client { get; set; }
|
||||||
|
public async Task<List<SearchMovie>> SearchMovie(string searchTerm)
|
||||||
|
{
|
||||||
|
var results = await Client.SearchMovie(searchTerm);
|
||||||
|
return results.Results;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Should use TheTvDbApi for TV")]
|
||||||
|
public async Task<List<SearchTv>> SearchTv(string searchTerm)
|
||||||
|
{
|
||||||
|
var results = await Client.SearchTvShow(searchTerm);
|
||||||
|
return results.Results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<MovieResult>> GetCurrentPlayingMovies()
|
||||||
|
{
|
||||||
|
var movies = await Client.GetMovieList(MovieListType.NowPlaying);
|
||||||
|
return movies.Results;
|
||||||
|
}
|
||||||
|
public async Task<List<MovieResult>> GetUpcomingMovies()
|
||||||
|
{
|
||||||
|
var movies = await Client.GetMovieList(MovieListType.Upcoming);
|
||||||
|
return movies.Results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Movie> GetMovieInformation(int tmdbId)
|
||||||
|
{
|
||||||
|
var movies = await Client.GetMovie(tmdbId);
|
||||||
|
return movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Should use TheTvDbApi for TV")]
|
||||||
|
public async Task<TvShow> GetTvShowInformation(int tmdbId)
|
||||||
|
{
|
||||||
|
var show = await Client.GetTvShow(tmdbId);
|
||||||
|
return show;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
141
PlexRequests.Api/TheTvDbApi.cs
Normal file
141
PlexRequests.Api/TheTvDbApi.cs
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TheTvDbApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using PlexRequests.Api.Models.Tv;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class TheTvDbApi : TvBase
|
||||||
|
{
|
||||||
|
public TheTvDbApi()
|
||||||
|
{
|
||||||
|
Api = new ApiRequest();
|
||||||
|
}
|
||||||
|
private ApiRequest Api { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Authenticates against TheTVDB.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string Authenticate()
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.POST,
|
||||||
|
Resource = "login",
|
||||||
|
RequestFormat = DataFormat.Json,
|
||||||
|
|
||||||
|
};
|
||||||
|
var apiKey = new { apikey = ApiKey };
|
||||||
|
|
||||||
|
request.AddBody(apiKey);
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<Authentication>(request, Url).token;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Refreshes the token.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="oldToken">The old token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Authentication RefreshToken(string oldToken)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.POST,
|
||||||
|
Resource = "refresh_token"
|
||||||
|
};
|
||||||
|
request.AddHeader("Authorization", $"Bearer {oldToken}");
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<Authentication>(request, Url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Searches for a tv series.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchTerm">The search term.</param>
|
||||||
|
/// <param name="token">The token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public TvSearchResult SearchTv(string searchTerm, string token)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "search/series?name={searchTerm}"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("searchTerm", searchTerm);
|
||||||
|
request.AddHeader("Authorization", $"Bearer {token}");
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<TvSearchResult>(request, Url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the tv images.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="seriesId">The series identifier.</param>
|
||||||
|
/// <param name="token">The token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public TvShowImages GetTvImages(int seriesId, string token)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "/series/{id}/images/query?keyType=poster"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("id", seriesId.ToString());
|
||||||
|
request.AddHeader("Authorization", $"Bearer {token}");
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<TvShowImages>(request, Url);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the information for a TV Series.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tvdbId">The TVDB identifier.</param>
|
||||||
|
/// <param name="token">The token.</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public TvShowInformation GetInformation(int tvdbId, string token)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "series/{id}"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("id", tvdbId.ToString());
|
||||||
|
request.AddHeader("Authorization", $"Bearer {token}");
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<TvShowInformation>(request, Url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,45 +1,39 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: JellyfinContent.cs
|
// File: MovieBase.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
using System;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using PlexRequests.Helpers;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
namespace Ombi.Store.Entities
|
{
|
||||||
{
|
public abstract class TvBase
|
||||||
[Table("JellyfinContent")]
|
{
|
||||||
public class JellyfinContent : MediaServerContent
|
private static readonly string Encrypted = "AVdhrVK6XX8anvrQgEyN/qNr9rk8ZPwy7/r1t5t5cKyUEzxcyk0L1v6dSxgE7hTCxvITUX2cWa6VlFMlTMgJWyuPZml7fN3csCHntgd/VGYro6VfNf24snZ/rQ3mf005";
|
||||||
{
|
protected string ApiKey = StringCipher.Decrypt(Encrypted, "ApiKey");
|
||||||
|
protected Uri Url = new Uri("https://api-beta.thetvdb.com/");
|
||||||
|
}
|
||||||
[Obsolete("Cannot delete due to DB migration issues with SQLite")]
|
}
|
||||||
public string ProviderId { get; set; }
|
|
||||||
public string JellyfinId { get; set; }
|
|
||||||
public override RecentlyAddedType RecentlyAddedType => RecentlyAddedType.Jellyfin;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
104
PlexRequests.Api/TvMazeApi.cs
Normal file
104
PlexRequests.Api/TvMazeApi.cs
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: TvMazeApi.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
using PlexRequests.Api.Models.Tv;
|
||||||
|
|
||||||
|
using RestSharp;
|
||||||
|
|
||||||
|
namespace PlexRequests.Api
|
||||||
|
{
|
||||||
|
public class TvMazeApi : TvMazeBase
|
||||||
|
{
|
||||||
|
public TvMazeApi()
|
||||||
|
{
|
||||||
|
Api = new ApiRequest();
|
||||||
|
}
|
||||||
|
private ApiRequest Api { get; }
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
public List<TvMazeSearch> Search(string searchTerm)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "search/shows?q={searchTerm}"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("searchTerm", searchTerm);
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<List<TvMazeSearch>>(request, new Uri(Uri));
|
||||||
|
}
|
||||||
|
|
||||||
|
public TvMazeShow ShowLookup(int showId)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "shows/{id}"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("id", showId.ToString());
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
return Api.Execute<TvMazeShow>(request, new Uri(Uri));
|
||||||
|
}
|
||||||
|
|
||||||
|
public TvMazeShow ShowLookupByTheTvDbId(int theTvDbId)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "lookup/shows?thetvdb={id}"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("id", theTvDbId.ToString());
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
var obj = Api.Execute<TvMazeShow>(request, new Uri(Uri));
|
||||||
|
obj.seasonCount = GetSeasonCount(obj.id);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetSeasonCount(int id)
|
||||||
|
{
|
||||||
|
var request = new RestRequest
|
||||||
|
{
|
||||||
|
Method = Method.GET,
|
||||||
|
Resource = "shows/{id}/seasons"
|
||||||
|
};
|
||||||
|
request.AddUrlSegment("id", id.ToString());
|
||||||
|
request.AddHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
var obj = Api.Execute<List<TvMazeSeasons>>(request, new Uri(Uri));
|
||||||
|
var seasons = obj.Select(x => x.number > 0);
|
||||||
|
return seasons.Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,37 +1,33 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2018 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: IBaseJob.cs
|
// File: TvMazeBase.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
namespace PlexRequests.Api
|
||||||
using Quartz;
|
{
|
||||||
using System;
|
public class TvMazeBase
|
||||||
|
{
|
||||||
namespace Ombi.Schedule
|
protected string Uri = "http://api.tvmaze.com";
|
||||||
{
|
}
|
||||||
public interface IBaseJob : IJob, IDisposable
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
11
PlexRequests.Api/app.config
Normal file
11
PlexRequests.Api/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /></startup></configuration>
|
9
PlexRequests.Api/packages.config
Normal file
9
PlexRequests.Api/packages.config
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Dapper" version="1.42" targetFramework="net452" />
|
||||||
|
<package id="Nancy" version="1.4.3" targetFramework="net452" />
|
||||||
|
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net452" />
|
||||||
|
<package id="NLog" version="4.2.3" targetFramework="net452" />
|
||||||
|
<package id="RestSharp" version="105.2.3" targetFramework="net452" requireReinstallation="true" />
|
||||||
|
<package id="TMDbLib" version="0.9.0.0-alpha" targetFramework="net452" />
|
||||||
|
</packages>
|
59
PlexRequests.Core.Tests/AuthenticationSettingsTests.cs
Normal file
59
PlexRequests.Core.Tests/AuthenticationSettingsTests.cs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: AuthenticationSettingsTests.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
using PlexRequests.Core.SettingModels;
|
||||||
|
|
||||||
|
namespace PlexRequests.Core.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class AuthenticationSettingsTests
|
||||||
|
{
|
||||||
|
[Test, TestCaseSource(nameof(UserData))]
|
||||||
|
public void DeniedUserListTest(string users, string[] expected)
|
||||||
|
{
|
||||||
|
var model = new AuthenticationSettings { DeniedUsers = users };
|
||||||
|
|
||||||
|
var result = model.DeniedUserList;
|
||||||
|
|
||||||
|
Assert.That(result.Count, Is.EqualTo(expected.Length));
|
||||||
|
for (var i = 0; i < expected.Length; i++)
|
||||||
|
{
|
||||||
|
Assert.That(result[i], Is.EqualTo(expected[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static readonly object[] UserData =
|
||||||
|
{
|
||||||
|
new object[] { "john", new [] {"john"} },
|
||||||
|
new object[] { "john , abc ,", new [] {"john", "abc"} },
|
||||||
|
new object[] { "john,, cde", new [] {"john", "cde"} },
|
||||||
|
new object[] { "john,,, aaa , baaa , ", new [] {"john","aaa","baaa"} },
|
||||||
|
new object[] { "john, aaa , baaa , maaa, caaa", new [] {"john","aaa","baaa", "maaa", "caaa"} },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
107
PlexRequests.Core.Tests/PlexRequests.Core.Tests.csproj
Normal file
107
PlexRequests.Core.Tests/PlexRequests.Core.Tests.csproj
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{FCFECD5D-47F6-454D-8692-E27A921BE655}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PlexRequests.Core.Tests</RootNamespace>
|
||||||
|
<AssemblyName>PlexRequests.Core.Tests</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||||
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
|
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||||
|
<IsCodedUITest>False</IsCodedUITest>
|
||||||
|
<TestProjectType>UnitTest</TestProjectType>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Moq, Version=4.2.1510.2205, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="nunit.framework, Version=3.0.5813.39031, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NUnit.3.0.1\lib\net45\nunit.framework.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Ploeh.AutoFixture, Version=3.40.0.0, Culture=neutral, PublicKeyToken=b24654c590009d4f, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\AutoFixture.3.40.0\lib\net40\Ploeh.AutoFixture.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Choose>
|
||||||
|
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||||
|
</ItemGroup>
|
||||||
|
</When>
|
||||||
|
<Otherwise />
|
||||||
|
</Choose>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="StatusCheckerTests.cs" />
|
||||||
|
<Compile Include="AuthenticationSettingsTests.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Core\PlexRequests.Core.csproj">
|
||||||
|
<Project>{DD7DC444-D3BF-4027-8AB9-EFC71F5EC581}</Project>
|
||||||
|
<Name>PlexRequests.Core</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Helpers\PlexRequests.Helpers.csproj">
|
||||||
|
<Project>{1252336D-42A3-482A-804C-836E60173DFA}</Project>
|
||||||
|
<Name>PlexRequests.Helpers</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Choose>
|
||||||
|
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
</When>
|
||||||
|
</Choose>
|
||||||
|
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
37
PlexRequests.Core.Tests/Properties/AssemblyInfo.cs
Normal file
37
PlexRequests.Core.Tests/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("PlexRequests.Core.Tests")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("PlexRequests.Core.Tests")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("fcfecd5d-47f6-454d-8692-e27a921be655")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyInformationalVersionAttribute("1.0.0.0")]
|
46
PlexRequests.Core.Tests/StatusCheckerTests.cs
Normal file
46
PlexRequests.Core.Tests/StatusCheckerTests.cs
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: AuthenticationSettingsTests.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace PlexRequests.Core.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class StatusCheckerTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
[Ignore("API Limit")]
|
||||||
|
public void CheckStatusTest()
|
||||||
|
{
|
||||||
|
var checker = new StatusChecker();
|
||||||
|
var status = checker.GetStatus();
|
||||||
|
|
||||||
|
Assert.That(status, Is.Not.Null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
PlexRequests.Core.Tests/app.config
Normal file
11
PlexRequests.Core.Tests/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /></startup></configuration>
|
6
PlexRequests.Core.Tests/packages.config
Normal file
6
PlexRequests.Core.Tests/packages.config
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="AutoFixture" version="3.40.0" targetFramework="net452" />
|
||||||
|
<package id="Moq" version="4.2.1510.2205" targetFramework="net452" />
|
||||||
|
<package id="NUnit" version="3.0.1" targetFramework="net452" />
|
||||||
|
</packages>
|
|
@ -1,33 +1,33 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: Library.cs
|
// File: CacheKeys.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
namespace Ombi.Api.Plex.Models
|
namespace PlexRequests.Core
|
||||||
{
|
{
|
||||||
public class PlexContainer
|
public class CacheKeys
|
||||||
{
|
{
|
||||||
public Mediacontainer MediaContainer { get; set; }
|
public const string TvDbToken = "TheTvDbApiToken";
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,46 +1,43 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: PlexLibrariesResponse.cs
|
// File: IRequestService.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Ombi.Api.Plex.Models;
|
using PlexRequests.Store;
|
||||||
|
|
||||||
namespace Ombi.Models.External
|
namespace PlexRequests.Core
|
||||||
{
|
{
|
||||||
public class PlexLibrariesResponse
|
public interface IRequestService
|
||||||
{
|
{
|
||||||
public PlexContainer Data { get; set; }
|
long AddRequest(RequestedModel model);
|
||||||
public bool Successful { get; set; }
|
bool CheckRequest(int providerId);
|
||||||
public string Message { get; set; }
|
void DeleteRequest(RequestedModel request);
|
||||||
}
|
bool UpdateRequest(RequestedModel model);
|
||||||
|
RequestedModel Get(int id);
|
||||||
public class PlexLibrariesLiteResponse
|
IEnumerable<RequestedModel> GetAll();
|
||||||
{
|
bool BatchUpdate(List<RequestedModel> model);
|
||||||
public List<SectionLite> Data { get; set; }
|
}
|
||||||
public bool Successful { get; set; }
|
|
||||||
public string Message { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
35
PlexRequests.Core/ISettingsService.cs
Normal file
35
PlexRequests.Core/ISettingsService.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: ISettingsService.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
namespace PlexRequests.Core
|
||||||
|
{
|
||||||
|
public interface ISettingsService<T>
|
||||||
|
{
|
||||||
|
T GetSettings();
|
||||||
|
bool SaveSettings(T model);
|
||||||
|
bool Delete(T model);
|
||||||
|
}
|
||||||
|
}
|
100
PlexRequests.Core/JsonRequestService.cs
Normal file
100
PlexRequests.Core/JsonRequestService.cs
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: JsonRequestService.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
using PlexRequests.Helpers;
|
||||||
|
using PlexRequests.Store;
|
||||||
|
using PlexRequests.Store.Models;
|
||||||
|
using PlexRequests.Store.Repository;
|
||||||
|
|
||||||
|
namespace PlexRequests.Core
|
||||||
|
{
|
||||||
|
public class JsonRequestService : IRequestService
|
||||||
|
{
|
||||||
|
public JsonRequestService(IRequestRepository repo)
|
||||||
|
{
|
||||||
|
Repo = repo;
|
||||||
|
}
|
||||||
|
private IRequestRepository Repo { get; }
|
||||||
|
public long AddRequest(RequestedModel model)
|
||||||
|
{
|
||||||
|
var entity = new RequestBlobs { Type = model.Type, Content = ByteConverterHelper.ReturnBytes(model), ProviderId = model.ProviderId };
|
||||||
|
var id = Repo.Insert(entity);
|
||||||
|
|
||||||
|
// TODO Keep an eye on this, since we are now doing 2 DB update for 1 single request, inserting and then updating
|
||||||
|
model.Id = (int)id;
|
||||||
|
|
||||||
|
entity = new RequestBlobs { Type = model.Type, Content = ByteConverterHelper.ReturnBytes(model), ProviderId = model.ProviderId, Id = (int)id };
|
||||||
|
var result = Repo.Update(entity);
|
||||||
|
|
||||||
|
return result ? id : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CheckRequest(int providerId)
|
||||||
|
{
|
||||||
|
var blobs = Repo.GetAll();
|
||||||
|
return blobs.Any(x => x.ProviderId == providerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DeleteRequest(RequestedModel request)
|
||||||
|
{
|
||||||
|
var blob = Repo.Get(request.Id);
|
||||||
|
Repo.Delete(blob);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UpdateRequest(RequestedModel model)
|
||||||
|
{
|
||||||
|
var entity = new RequestBlobs { Type = model.Type, Content = ByteConverterHelper.ReturnBytes(model), ProviderId = model.ProviderId, Id = model.Id };
|
||||||
|
return Repo.Update(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequestedModel Get(int id)
|
||||||
|
{
|
||||||
|
var blob = Repo.Get(id);
|
||||||
|
var model = ByteConverterHelper.ReturnObject<RequestedModel>(blob.Content);
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<RequestedModel> GetAll()
|
||||||
|
{
|
||||||
|
var blobs = Repo.GetAll();
|
||||||
|
return blobs.Select(b => Encoding.UTF8.GetString(b.Content))
|
||||||
|
.Select(JsonConvert.DeserializeObject<RequestedModel>)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool BatchUpdate(List<RequestedModel> model)
|
||||||
|
{
|
||||||
|
var entities = model.Select(m => new RequestBlobs { Type = m.Type, Content = ByteConverterHelper.ReturnBytes(m), ProviderId = m.ProviderId, Id = m.Id }).ToList();
|
||||||
|
return Repo.UpdateAll(entities);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
PlexRequests.Core/Models/StatusModel.cs
Normal file
39
PlexRequests.Core/Models/StatusModel.cs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: StatusModel.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
namespace PlexRequests.Core.Models
|
||||||
|
{
|
||||||
|
public class StatusModel
|
||||||
|
{
|
||||||
|
public string Version { get; set; }
|
||||||
|
public bool UpdateAvailable { get; set; }
|
||||||
|
public string UpdateUri { get; set; }
|
||||||
|
public string DownloadUri { get; set; }
|
||||||
|
public string ReleaseNotes { get; set; }
|
||||||
|
public string ReleaseTitle { get; set; }
|
||||||
|
}
|
||||||
|
}
|
35
PlexRequests.Core/Models/UserProperties.cs
Normal file
35
PlexRequests.Core/Models/UserProperties.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: UserProperties.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
namespace PlexRequests.Core.Models
|
||||||
|
{
|
||||||
|
public class UserProperties
|
||||||
|
{
|
||||||
|
public string EmailAddress { get; set; }
|
||||||
|
public bool NotifyOnRelease { get; set; }
|
||||||
|
public bool NotifyOnApprove { get; set; }
|
||||||
|
}
|
||||||
|
}
|
123
PlexRequests.Core/PlexRequests.Core.csproj
Normal file
123
PlexRequests.Core/PlexRequests.Core.csproj
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{DD7DC444-D3BF-4027-8AB9-EFC71F5EC581}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>PlexRequests.Core</RootNamespace>
|
||||||
|
<AssemblyName>PlexRequests.Core</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Mono.Data.Sqlite">
|
||||||
|
<HintPath>..\Assemblies\Mono.Data.Sqlite.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Nancy, Version=1.4.2.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Nancy.1.4.3\lib\net40\Nancy.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Nancy.Authentication.Forms, Version=1.4.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Nancy.Authentication.Forms.1.4.1\lib\net40\Nancy.Authentication.Forms.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Octokit, Version=0.19.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Octokit.0.19.0\lib\net45\Octokit.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Omu.ValueInjecter, Version=3.1.1.0, Culture=neutral, PublicKeyToken=c7694541b0ac80e4, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\valueinjecter.3.1.1.2\lib\net40\Omu.ValueInjecter.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="TMDbLib">
|
||||||
|
<HintPath>..\packages\TMDbLib.0.9.0.0-alpha\lib\net45\TMDbLib.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="CacheKeys.cs" />
|
||||||
|
<Compile Include="IRequestService.cs" />
|
||||||
|
<Compile Include="ISettingsService.cs" />
|
||||||
|
<Compile Include="JsonRequestService.cs" />
|
||||||
|
<Compile Include="Models\StatusModel.cs" />
|
||||||
|
<Compile Include="Models\UserProperties.cs" />
|
||||||
|
<Compile Include="SettingModels\AuthenticationSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\PushoverNotificationSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\PushBulletNotificationSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\EmailNotificationSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\PlexSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\SonarrSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\SickRageSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\CouchPotatoSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\PlexRequestSettings.cs" />
|
||||||
|
<Compile Include="SettingModels\Settings.cs" />
|
||||||
|
<Compile Include="SettingsServiceV2.cs" />
|
||||||
|
<Compile Include="Setup.cs" />
|
||||||
|
<Compile Include="StatusChecker.cs" />
|
||||||
|
<Compile Include="UserIdentity.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="UserMapper.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Api.Models\PlexRequests.Api.Models.csproj">
|
||||||
|
<Project>{CB37A5F8-6DFC-4554-99D3-A42B502E4591}</Project>
|
||||||
|
<Name>PlexRequests.Api.Models</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Api\PlexRequests.Api.csproj">
|
||||||
|
<Project>{8CB8D235-2674-442D-9C6A-35FCAEEB160D}</Project>
|
||||||
|
<Name>PlexRequests.Api</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Helpers\PlexRequests.Helpers.csproj">
|
||||||
|
<Project>{1252336D-42A3-482A-804C-836E60173DFA}</Project>
|
||||||
|
<Name>PlexRequests.Helpers</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PlexRequests.Store\PlexRequests.Store.csproj">
|
||||||
|
<Project>{92433867-2B7B-477B-A566-96C382427525}</Project>
|
||||||
|
<Name>PlexRequests.Store</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
37
PlexRequests.Core/Properties/AssemblyInfo.cs
Normal file
37
PlexRequests.Core/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("PlexRequests.Core")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("PlexRequests.Core")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2016")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("dd7dc444-d3bf-4027-8ab9-efc71f5ec581")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyInformationalVersionAttribute("1.0.0.0")]
|
67
PlexRequests.Core/SettingModels/AuthenticationSettings.cs
Normal file
67
PlexRequests.Core/SettingModels/AuthenticationSettings.cs
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: AuthenticationSettings.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace PlexRequests.Core.SettingModels
|
||||||
|
{
|
||||||
|
public class AuthenticationSettings : Settings
|
||||||
|
{
|
||||||
|
public bool UserAuthentication { get; set; }
|
||||||
|
public bool UsePassword { get; set; }
|
||||||
|
public string PlexAuthToken { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A comma separated list of users.
|
||||||
|
/// </summary>
|
||||||
|
public string DeniedUsers { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public List<string> DeniedUserList
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var users = new List<string>();
|
||||||
|
if (string.IsNullOrEmpty(DeniedUsers))
|
||||||
|
{
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
var splitUsers = DeniedUsers.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var user in splitUsers)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(user))
|
||||||
|
users.Add(user.Trim());
|
||||||
|
}
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
PlexRequests.Core/SettingModels/CouchPotatoSettings.cs
Normal file
59
PlexRequests.Core/SettingModels/CouchPotatoSettings.cs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: CouchPotatoSettings.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using PlexRequests.Helpers;
|
||||||
|
|
||||||
|
namespace PlexRequests.Core.SettingModels
|
||||||
|
{
|
||||||
|
public class CouchPotatoSettings : Settings
|
||||||
|
{
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
public string Ip { get; set; }
|
||||||
|
public int Port { get; set; }
|
||||||
|
public string ApiKey { get; set; }
|
||||||
|
public bool Ssl { get; set; }
|
||||||
|
public string ProfileId { get; set; }
|
||||||
|
public string SubDir { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public Uri FullUri
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(SubDir))
|
||||||
|
{
|
||||||
|
var formattedSubDir = Ip.ReturnUriWithSubDir(Port, Ssl, SubDir);
|
||||||
|
return formattedSubDir;
|
||||||
|
}
|
||||||
|
var formatted = Ip.ReturnUri(Port, Ssl);
|
||||||
|
return formatted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
PlexRequests.Core/SettingModels/EmailNotificationSettings.cs
Normal file
14
PlexRequests.Core/SettingModels/EmailNotificationSettings.cs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
namespace PlexRequests.Core.SettingModels
|
||||||
|
{
|
||||||
|
public class EmailNotificationSettings : Settings
|
||||||
|
{
|
||||||
|
public string EmailHost { get; set; }
|
||||||
|
public int EmailPort { get; set; }
|
||||||
|
public bool Ssl { get; set; }
|
||||||
|
public string RecipientEmail { get; set; }
|
||||||
|
public string EmailSender { get; set; }
|
||||||
|
public string EmailUsername { get; set; }
|
||||||
|
public string EmailPassword { get; set; }
|
||||||
|
public bool Enabled { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,44 +1,38 @@
|
||||||
#region Copyright
|
#region Copyright
|
||||||
// /************************************************************************
|
// /************************************************************************
|
||||||
// Copyright (c) 2017 Jamie Rees
|
// Copyright (c) 2016 Jamie Rees
|
||||||
// File: TheMovieDbContainer.cs
|
// File: PlexRequestSettings.cs
|
||||||
// Created By: Jamie Rees
|
// Created By: Jamie Rees
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
// a copy of this software and associated documentation files (the
|
// a copy of this software and associated documentation files (the
|
||||||
// "Software"), to deal in the Software without restriction, including
|
// "Software"), to deal in the Software without restriction, including
|
||||||
// without limitation the rights to use, copy, modify, merge, publish,
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
// permit persons to whom the Software is furnished to do so, subject to
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
// the following conditions:
|
// the following conditions:
|
||||||
//
|
//
|
||||||
// The above copyright notice and this permission notice shall be
|
// The above copyright notice and this permission notice shall be
|
||||||
// included in all copies or substantial portions of the Software.
|
// included in all copies or substantial portions of the Software.
|
||||||
//
|
//
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
|
namespace PlexRequests.Core.SettingModels
|
||||||
using System.Collections.Generic;
|
{
|
||||||
|
public class PlexRequestSettings : Settings
|
||||||
namespace Ombi.TheMovieDbApi.Models
|
{
|
||||||
{
|
public int Port { get; set; }
|
||||||
public class TheMovieDbContainer<T>
|
|
||||||
{
|
public bool SearchForMovies { get; set; }
|
||||||
public int page { get; set; }
|
public bool SearchForTvShows { get; set; }
|
||||||
public List<T> results { get; set; }
|
public bool RequireApproval { get; set; }
|
||||||
public int total_results { get; set; }
|
public int WeeklyRequestLimit { get; set; }
|
||||||
public int total_pages { get; set; }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GenreContainer<T>
|
|
||||||
{
|
|
||||||
public List<T> genres { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
56
PlexRequests.Core/SettingModels/PlexSettings.cs
Normal file
56
PlexRequests.Core/SettingModels/PlexSettings.cs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
#region Copyright
|
||||||
|
// /************************************************************************
|
||||||
|
// Copyright (c) 2016 Jamie Rees
|
||||||
|
// File: CouchPotatoSettings.cs
|
||||||
|
// Created By: Jamie Rees
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
// a copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
// permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
// the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be
|
||||||
|
// included in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
// ************************************************************************/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using PlexRequests.Helpers;
|
||||||
|
|
||||||
|
namespace PlexRequests.Core.SettingModels
|
||||||
|
{
|
||||||
|
public class PlexSettings : Settings
|
||||||
|
{
|
||||||
|
public string Ip { get; set; }
|
||||||
|
public int Port { get; set; }
|
||||||
|
public bool Ssl { get; set; }
|
||||||
|
public string SubDir { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public Uri FullUri
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(SubDir))
|
||||||
|
{
|
||||||
|
var formattedSubDir = Ip.ReturnUriWithSubDir(Port, Ssl, SubDir);
|
||||||
|
return formattedSubDir;
|
||||||
|
}
|
||||||
|
var formatted = Ip.ReturnUri(Port, Ssl);
|
||||||
|
return formatted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue