Merge branch 'master' into #85-no-buefy
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG]"
|
||||
labels: Support
|
||||
assignees: ukdtom
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS, Windows 10, OpenSuse Leap 15.2 etc.]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
||||
**Logs**
|
||||
Please provide WebTools-NG logs in a zip
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: "[RFE]"
|
||||
labels: enhancement
|
||||
assignees: ukdtom
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
|
@ -7,6 +7,7 @@
|
|||
[![master](https://img.shields.io/badge/master-stable-green.svg?maxAge=2592000)]()
|
||||
![Maintenance](https://img.shields.io/badge/Maintained-Yes-green.svg)
|
||||
|
||||
NOTE: This is **NOT** ready for production yet....In fact not even in beta ;)
|
||||
|
||||
Please see the wiki for futher information
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ For security issues, we only support the latest version.
|
|||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.0.0 | :white_check_mark: |
|
||||
| < 1.0.0 | :x: |
|
||||
| Latest | :white_check_mark: |
|
||||
| < Latest | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
|
|
442
package-lock.json
generated
|
@ -1,8 +1,10 @@
|
|||
{
|
||||
"name": "webtools-ng",
|
||||
"version": "0.1.0",
|
||||
"version": "0.1.2",
|
||||
"description": "WebTools Next Generation 4 Plex",
|
||||
"author": "dane22 & CPSO",
|
||||
"license": "MPL-2.0",
|
||||
"homepage": "https://github.com/WebTools-NG/WebTools-NG",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service electron:serve",
|
||||
|
|
Before Width: | Height: | Size: 4.2 KiB |
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
<title><%= htmlWebpackPlugin.options.title %> V<%= process.env.VUE_APP_VERSION %></title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
|
|
@ -69,11 +69,11 @@
|
|||
"menuGithub": "Github",
|
||||
"menuManual": "Manual"
|
||||
},
|
||||
"NavSections":{
|
||||
"Tools": "Tools",
|
||||
"Options": "Options"
|
||||
},
|
||||
"Modules": {
|
||||
"Sidebar": {
|
||||
"NavSections":{
|
||||
"Tools": "Tools",
|
||||
"Options": "Options"
|
||||
},
|
||||
"ET": {
|
||||
"Settings": "Settings"
|
||||
},
|
||||
|
@ -101,11 +101,12 @@
|
|||
"Description": "@:Modules.ET.Name allows you to export detail information about the media in your libraries",
|
||||
"Name": "ExportTool",
|
||||
"HSelectMedia": "Select Library Type",
|
||||
"HSelectSelection": "Select Media Libary",
|
||||
"SelectSelection": "Select Selection",
|
||||
"HSelectSelection": "Select Media Libary",
|
||||
"HExportMedia": "Export Media",
|
||||
"RadioMovies": "Movies",
|
||||
"RadioTVSeries": "TV Series",
|
||||
"RadioTVEpisodes": "TV Episodes",
|
||||
"RadioTVShowEpisodes": "TV Shows and Episodes",
|
||||
"RadioMusic": "Music",
|
||||
"RadioPhotos": "Photos",
|
||||
"RadioOtherVideos": "Other Videos",
|
||||
|
@ -120,6 +121,7 @@
|
|||
"ArraySep": "Delimiter for multiple info in same field",
|
||||
"ColumnSep": "Delimiter between columns in CSV file (Use 9 for TAB)",
|
||||
"TimeOut": "Timeout when requesting info from PMS in sec (Global setting)",
|
||||
"ExportToExcel": "Export to xlsx as well as csv",
|
||||
"OrgTitleNull": "Default \"Original Title\" to \"Title\", if empty",
|
||||
"SortTitleNull": "Default \"Sort Title\" to \"Title\", if empty",
|
||||
"AutoXLSCol": "Autosize column (xlsx only)",
|
||||
|
@ -143,7 +145,9 @@
|
|||
"GetSectionItems": "Fetching items {idx} in chunks of {chunck}"
|
||||
},
|
||||
"ErrorNoOutDirTitle": "No output directory defined",
|
||||
"ErrorNoOutDirMsg": "You need to define an output directory in the settings page first"
|
||||
"ErrorNoOutDirMsg": "You need to define an output directory in the settings page first",
|
||||
"ErrorBadSepTitle": "Column separator issue",
|
||||
"ErrorBadSep": "Column separator can only be one character"
|
||||
},
|
||||
"About": {
|
||||
"Description": "@:Modules.About.Name",
|
||||
|
@ -151,7 +155,7 @@
|
|||
"Name": "About us and credits",
|
||||
"MainDevelopers": "Main Developers",
|
||||
"Devdane22": "Tommy (aka dane22), a Plex community member (ukdtom on GitHub)",
|
||||
"DevCPSO": "Casper (aka CPSO), a soon-to-be Plex community member (CPSO on GitHub)",
|
||||
"DevCPSO": "Casper (aka CPSO), a Plex community member (CPSO on GitHub)",
|
||||
"TranslationBetaTestersTitle": "Translators and Beta Testers",
|
||||
"TranslationBetaTestersText": "A huge thanks goes out to all the people who helped in translating and testing @:Common.AppName",
|
||||
"PlexPoCredits": "And many thanks to the authors/developers and staff at Plex. We are eternally grateful for your dedication, talent and hard work! And to our friends at POEditor.com, who provide a free translation site because we are an Open-Source project."
|
||||
|
|
Before Width: | Height: | Size: 6.7 KiB |
|
@ -101,14 +101,16 @@ export default {
|
|||
this.getOnlineLangs();
|
||||
},
|
||||
methods: {
|
||||
forcedownload() {
|
||||
this.$store.dispatch("updateAndSetLang", { "langCode": i18n.locale, "forceDownload": true});
|
||||
async forcedownload() {
|
||||
this.olLangs = [];
|
||||
await this.$store.dispatch("updateAndSetLang", { "langCode": i18n.locale, "forceDownload": true});
|
||||
this.getOnlineLangs();
|
||||
},
|
||||
joinPOE() {
|
||||
shell.openExternal("https://poeditor.com/join/project/yFjdfkDfup")
|
||||
shell.openExternal("https://github.com/WebTools-NG/WebTools-NG/wiki/Translator")
|
||||
},
|
||||
getOnlineLangs() {
|
||||
var onlineLangs = this.$store.getters.getLanguages
|
||||
async getOnlineLangs() {
|
||||
var onlineLangs = await this.$store.getters.getLanguages
|
||||
for (var i=0; i<onlineLangs.length; i++) {
|
||||
var langName = onlineLangs[i]['name'] + ' (' + onlineLangs[i]['percentage'] + '%)';
|
||||
const entry = {}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
<script>
|
||||
const log = require('electron-log');
|
||||
import '@fortawesome/fontawesome-free/css/all.css'
|
||||
import etIcon from '@/assets/ET-256.png';
|
||||
import i18n from '../../i18n'
|
||||
export default {
|
||||
data() {
|
||||
|
@ -16,22 +17,27 @@ import i18n from '../../i18n'
|
|||
menu: [
|
||||
{
|
||||
href: { path: '/home' },
|
||||
title: i18n.t("Common.Menu.Modules.Home.NavTitle"),
|
||||
title: i18n.t("Common.Menu.Sidebar.Home.NavTitle"),
|
||||
icon: 'fa fa-home'
|
||||
},
|
||||
{
|
||||
header: true,
|
||||
title: i18n.t("Common.Menu.NavSections.Tools"),
|
||||
title: i18n.t("Common.Menu.Sidebar.NavSections.Tools"),
|
||||
hiddenOnCollapse: true
|
||||
},
|
||||
{
|
||||
href: { path: '/export' },
|
||||
title: 'Export',
|
||||
icon: 'fas fa-file-export',
|
||||
// icon: 'fas fa-file-export',
|
||||
icon: {
|
||||
//adjust element
|
||||
element: 'img',
|
||||
attributes: { src: etIcon },
|
||||
},
|
||||
child: [
|
||||
{
|
||||
href: '/export/settings',
|
||||
title: i18n.t("Common.Menu.Modules.ET.Settings"),
|
||||
title: i18n.t("Common.Menu.Sidebar.ET.Settings"),
|
||||
icon: 'fa fa-cog'
|
||||
}
|
||||
]
|
||||
|
@ -39,28 +45,28 @@ import i18n from '../../i18n'
|
|||
},
|
||||
{
|
||||
header: true,
|
||||
title: i18n.t("Common.Menu.NavSections.Options"),
|
||||
title: i18n.t("Common.Menu.Sidebar.NavSections.Options"),
|
||||
hiddenOnCollapse: true
|
||||
},
|
||||
{
|
||||
href: { path: '/language' },
|
||||
title: i18n.t("Common.Menu.Modules.Language.NavTitle"),
|
||||
title: i18n.t("Common.Menu.Sidebar.Language.NavTitle"),
|
||||
icon: 'fas fa-language'
|
||||
},
|
||||
{
|
||||
href: { path: '/about' },
|
||||
title: i18n.t("Common.Menu.Modules.About.NavTitle"),
|
||||
title: i18n.t("Common.Menu.Sidebar.About.NavTitle"),
|
||||
icon: 'fas fa-question-circle'
|
||||
},
|
||||
{
|
||||
href: { path: '/' },
|
||||
title: i18n.t("Common.Menu.Modules.Theme.NavTitle"),
|
||||
title: i18n.t("Common.Menu.Sidebar.Theme.NavTitle"),
|
||||
icon: 'fas fa-palette',
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
href: { path: '/' },
|
||||
title: i18n.t("Common.Menu.Modules.Reset.NavTitle"),
|
||||
title: i18n.t("Common.Menu.Sidebar.Reset.NavTitle"),
|
||||
icon: 'fas fa-power-off',
|
||||
hidden: true
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
<small>{{ $t("Modules.ET.Description") }}</small>
|
||||
</h2>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
<div> <!-- Media type to export -->
|
||||
<b-form-group id="etTypeGroup" v-bind:label="$t('Modules.ET.HSelectMedia')" label-size="lg" label-class="font-weight-bold pt-0">
|
||||
|
@ -19,10 +21,12 @@
|
|||
name="mediaType"
|
||||
></b-form-radio-group>
|
||||
</b-form-group>
|
||||
</div>
|
||||
|
||||
<div> <!-- Select Library -->
|
||||
<b-form-group id="etLibraryGroup" v-bind:label="$t('Modules.ET.HSelectSelection')" label-size="lg" label-class="font-weight-bold pt-0">
|
||||
</div>
|
||||
<div class="d-flex align-items-center">
|
||||
<b-form-group id="etLibraryGroup" v-bind:label="$t('Modules.ET.HSelectSelection')" label-size="lg" label-class="font-weight-bold pt-0">
|
||||
<div ref="libSpinner" id="libSpinner" :hidden="selLibraryWait">
|
||||
<b-spinner id="libLoad" class="ml-auto text-danger"></b-spinner>
|
||||
</div>
|
||||
<b-tooltip target="etLibraryGroup" triggers="hover">
|
||||
{{ $t('Modules.ET.TT-ETLibrary') }}
|
||||
</b-tooltip>
|
||||
|
@ -30,10 +34,10 @@
|
|||
v-model="selLibrary"
|
||||
id="selLibrary"
|
||||
@change.native="enableBtnExport"
|
||||
:options="pmsSections"
|
||||
:options="selLibraryOptions"
|
||||
name="selLibrary">
|
||||
</b-form-select>
|
||||
</b-form-group>
|
||||
</b-form-group>
|
||||
</div>
|
||||
|
||||
<div> <!-- Select Export Level -->
|
||||
|
@ -89,26 +93,42 @@
|
|||
import i18n from '../../../i18n';
|
||||
import store from '../../../store';
|
||||
import { wtconfig } from '../../../wtutils';
|
||||
|
||||
|
||||
|
||||
const log = require("electron-log");
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
return {
|
||||
selLibraryWait: true,
|
||||
btnDisable: true,
|
||||
selMediaType: "movie",
|
||||
selLibrary: "",
|
||||
selLibraryOptions: [],
|
||||
selLevel: "",
|
||||
selLevelName: "",
|
||||
optionsMediaType: [
|
||||
{ text: 'Movies', value: 'movie', disabled: false },
|
||||
{ text: 'Shows', value: 'show', disabled: true },
|
||||
{ text: 'Artist', value: 'artist', disabled: true },
|
||||
{ text: 'Photos', value: 'photo', disabled: true },
|
||||
{ text: 'Other Videos', value: 'other', disabled: true }
|
||||
]
|
||||
{ text: i18n.t('Modules.ET.RadioMovies'), value: 'movie', disabled: false },
|
||||
{ text: i18n.t('Modules.ET.RadioTVSeries'), value: 'show', disabled: true },
|
||||
{ text: i18n.t('Modules.ET.RadioTVEpisodes'), value: 'episode', disabled: false },
|
||||
{ text: i18n.t('Modules.ET.RadioTVShowEpisodes'), value: 'showepisode', disabled: true },
|
||||
{ text: i18n.t('Modules.ET.RadioMusic'), value: 'artist', disabled: true },
|
||||
{ text: i18n.t('Modules.ET.RadioPhotos'), value: 'photo', disabled: true },
|
||||
{ text: i18n.t('Modules.ET.RadioOtherVideos'), value: 'other', disabled: true }
|
||||
]
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
// Watch for when selected server address is updated
|
||||
selectedServerAddress: async function(){
|
||||
// Changed, so we need to update the libraries
|
||||
this.selLibraryWait = false;
|
||||
this.selLibrary = '';
|
||||
await this.getPMSSections();
|
||||
this.selLibraryWait = true;
|
||||
},
|
||||
selectedServerAddressUpdateInProgress: async function(){
|
||||
this.selLibraryWait = false;
|
||||
}
|
||||
},
|
||||
created() {
|
||||
log.info("ET Created");
|
||||
this.$store.commit("UPDATE_SELECTEDLIBTYPE", this.selMediaType);
|
||||
|
@ -116,30 +136,17 @@
|
|||
this.fetchSelection();
|
||||
},
|
||||
computed: {
|
||||
pmsSections: function() {
|
||||
const sections = this.$store.getters.getPmsSections;
|
||||
const result = [];
|
||||
if (Array.isArray(sections) && sections.length) {
|
||||
sections.forEach(req => {
|
||||
if (req.type == this.selMediaType) {
|
||||
log.debug(`pushing library: ${req.title} to results`);
|
||||
let item = {};
|
||||
item['text']=req.title;
|
||||
item['value']=req.key;
|
||||
result.push(item);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
log.error("No Library found");
|
||||
result.push["No Library found"];
|
||||
}
|
||||
return result;
|
||||
},
|
||||
exportLevels: function() {
|
||||
|
||||
et.getLevelDisplayName('My Level', this.selMediaType)
|
||||
selectedServerAddress: function(){
|
||||
return this.$store.getters.getSelectedServerAddress
|
||||
},
|
||||
selectedServerAddressUpdateInProgress(){
|
||||
return this.$store.getters.getSelectedServerAddressUpdateInProgress
|
||||
},
|
||||
exportLevels: function() {
|
||||
et.getLevelDisplayName('My Level', this.selMediaType);
|
||||
// Returns valid levels for selected media type
|
||||
const etLevel = et.getLevels(this.selMediaType);
|
||||
let targetType = this.selMediaType;
|
||||
const etLevel = et.getLevels(targetType);
|
||||
const etCustomLevel = et.getCustomLevels(this.selMediaType);
|
||||
const options = []
|
||||
const item = {}
|
||||
|
@ -181,6 +188,33 @@
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
getPMSSections: async function(){
|
||||
this.selLibrary = "Loading...";
|
||||
await this.$store.dispatch('fetchSections')
|
||||
const sections = await this.$store.getters.getPmsSections;
|
||||
const result = [];
|
||||
// If episodes, we need to show shows
|
||||
let targetType = this.selMediaType;
|
||||
if (targetType == 'episode')
|
||||
{
|
||||
targetType = 'show'
|
||||
}
|
||||
if (Array.isArray(sections) && sections.length) {
|
||||
sections.forEach(req => {
|
||||
if (req.type == targetType) {
|
||||
log.debug(`pushing library: ${req.title} to results`);
|
||||
let item = [];
|
||||
item['text']=req.title;
|
||||
item['value']=req.key;
|
||||
result.push(Object.assign({}, item));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
log.error("No Library found");
|
||||
result.push["No Library found"];
|
||||
}
|
||||
this.selLibraryOptions = result;
|
||||
},
|
||||
selectSelection: function(selected) {
|
||||
log.debug(selected);
|
||||
this.$store.commit("UPDATE_SELECTEDSECTION", selected);
|
||||
|
@ -192,13 +226,13 @@
|
|||
changeType: function() {
|
||||
// Triggers when lib type is changed
|
||||
this.selLibrary = '';
|
||||
this.selLevel = '';
|
||||
this.selLevel = '';
|
||||
this.getPMSSections();
|
||||
this.$store.commit("UPDATE_SELECTEDLIBTYPE", this.selMediaType);
|
||||
},
|
||||
selectExportLevel: function() {
|
||||
this.enableBtnExport();
|
||||
},
|
||||
|
||||
},
|
||||
getMedia() {
|
||||
log.info("getMedia Called");
|
||||
if (wtconfig.get('ET.OutPath', "") == "")
|
||||
|
@ -218,12 +252,13 @@
|
|||
this.$store.commit("UPDATE_EXPORTSTATUS", i18n.t("Modules.ET.Status.StartExport"));
|
||||
this.$store.dispatch("exportMedias");
|
||||
},
|
||||
fetchSelection() {
|
||||
async fetchSelection() {
|
||||
log.debug("fetchSelection");
|
||||
let serverCheck = this.$store.getters.getSelectedServer;
|
||||
if (serverCheck !== "none") {
|
||||
log.debug("serverCheck is not null, running fetchSections ");
|
||||
this.$store.dispatch("fetchSections");
|
||||
this.getPMSSections();
|
||||
//await this.$store.dispatch("fetchSections");
|
||||
} else {
|
||||
log.debug("serverCheck is none");
|
||||
this.$bvToast.toast(this.$t("Modules.ET.ErrorNoServerSelectedMsg"), {
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
[
|
||||
{"Title":
|
||||
{"key":"title","call":1,"type":"string"}
|
||||
},
|
||||
{"Media ID":
|
||||
{"key":"ratingKey","call":1,"type":"string"}
|
||||
},
|
||||
{"Subtitle Stream Default":
|
||||
{
|
||||
"key":"$.Media[*].Part[*].Stream[?(@.streamType==3)].default",
|
||||
"call":2,
|
||||
"type":"array",
|
||||
"subtype":"string",
|
||||
"subkey":"default"
|
||||
}
|
||||
}
|
||||
]
|
|
@ -1,648 +0,0 @@
|
|||
{
|
||||
"MediaContainer":{
|
||||
"size":1,
|
||||
"allowSync":true,
|
||||
"identifier":"com.plexapp.plugins.library",
|
||||
"librarySectionID":4,
|
||||
"librarySectionTitle":"Movies",
|
||||
"librarySectionUUID":"611d44e2-c4cc-4cec-8b65-d77b037e1b3d",
|
||||
"mediaTagPrefix":"/system/bundle/media/flags/",
|
||||
"mediaTagVersion":1576869286,
|
||||
"Metadata":[
|
||||
{
|
||||
"ratingKey":"9050",
|
||||
"key":"/library/metadata/9050",
|
||||
"guid":"com.plexapp.agents.imdb://tt0463854?lang=en",
|
||||
"studio":"DNA Films",
|
||||
"type":"movie",
|
||||
"title":"28 Weeks Later",
|
||||
"librarySectionTitle":"Movies",
|
||||
"librarySectionID":4,
|
||||
"librarySectionKey":"/library/sections/4",
|
||||
"contentRating":"dk/15",
|
||||
"summary":"The inhabitants of the British Isles have lost their battle against the onslaught of disease, as the deadly rage virus has killed every citizen there. Six months later, a group of Americans dare to set foot on the isles, convinced the danger has come and gone. But it soon becomes all too clear that the scourge continues to live, waiting to pounce on its next victims.",
|
||||
"rating":7.1,
|
||||
"audienceRating":6.7,
|
||||
"year":2007,
|
||||
"tagline":"When days turn to weeks... the horror returns.",
|
||||
"thumb":"/library/metadata/9050/thumb/1575678555",
|
||||
"art":"/library/metadata/9050/art/1575678555",
|
||||
"duration":5757240,
|
||||
"originallyAvailableAt":"2007-04-26",
|
||||
"addedAt":1186162396,
|
||||
"updatedAt":1575678555,
|
||||
"audienceRatingImage":"rottentomatoes://image.rating.upright",
|
||||
"chapterSource":"agent",
|
||||
"primaryExtraKey":"/library/metadata/9454",
|
||||
"ratingImage":"rottentomatoes://image.rating.ripe",
|
||||
"Media":[
|
||||
{
|
||||
"id":9333,
|
||||
"duration":5757240,
|
||||
"bitrate":1022,
|
||||
"width":592,
|
||||
"height":320,
|
||||
"aspectRatio":1.85,
|
||||
"audioChannels":2,
|
||||
"audioCodec":"mp3",
|
||||
"videoCodec":"mpeg4",
|
||||
"videoResolution":"sd",
|
||||
"container":"avi",
|
||||
"videoFrameRate":"PAL",
|
||||
"videoProfile":"advanced simple",
|
||||
"Part":[
|
||||
{
|
||||
"id":29662,
|
||||
"key":"/library/parts/29662/1186162396/file.avi",
|
||||
"duration":5757240,
|
||||
"file":"/share/CACHEDEV1_DATA/video/old-movies/#/28 Weeks Later (2007)/28 Weeks Later.avi",
|
||||
"size":735303680,
|
||||
"container":"avi",
|
||||
"videoProfile":"advanced simple",
|
||||
"Stream":[
|
||||
{
|
||||
"id":67012,
|
||||
"streamType":1,
|
||||
"codec":"mpeg4",
|
||||
"index":0,
|
||||
"bitrate":879,
|
||||
"bitDepth":8,
|
||||
"chromaLocation":"left",
|
||||
"chromaSubsampling":"4:2:0",
|
||||
"frameRate":25,
|
||||
"height":320,
|
||||
"level":5,
|
||||
"profile":"advanced simple",
|
||||
"refFrames":1,
|
||||
"width":592,
|
||||
"displayTitle":"SD (MPEG4)"
|
||||
},
|
||||
{
|
||||
"id":67013,
|
||||
"streamType":2,
|
||||
"selected":true,
|
||||
"codec":"mp3",
|
||||
"index":1,
|
||||
"channels":2,
|
||||
"bitrate":129,
|
||||
"audioChannelLayout":"stereo",
|
||||
"samplingRate":44100,
|
||||
"streamIdentifier":"1",
|
||||
"displayTitle":"Unknown (MP3 Stereo)"
|
||||
},
|
||||
{
|
||||
"id":87333,
|
||||
"key":"/library/streams/87333",
|
||||
"streamType":3,
|
||||
"selected":true,
|
||||
"codec":"srt",
|
||||
"language":"Dansk",
|
||||
"languageCode":"dan",
|
||||
"format":"srt",
|
||||
"displayTitle":"Dansk (SRT External)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre":[
|
||||
{
|
||||
"id":66,
|
||||
"filter":"genre=66",
|
||||
"tag":"Drama"
|
||||
},
|
||||
{
|
||||
"id":425,
|
||||
"filter":"genre=425",
|
||||
"tag":"Horror"
|
||||
},
|
||||
{
|
||||
"id":13303,
|
||||
"filter":"genre=13303",
|
||||
"tag":"Sci-Fi"
|
||||
}
|
||||
],
|
||||
"Director":[
|
||||
{
|
||||
"id":707,
|
||||
"filter":"director=707",
|
||||
"tag":"Juan Carlos Fresnadillo"
|
||||
}
|
||||
],
|
||||
"Writer":[
|
||||
{
|
||||
"id":15263,
|
||||
"filter":"writer=15263",
|
||||
"tag":"Juan Carlos Fresnadillo"
|
||||
},
|
||||
{
|
||||
"id":15261,
|
||||
"filter":"writer=15261",
|
||||
"tag":"Enrique López Lavigne"
|
||||
},
|
||||
{
|
||||
"id":15264,
|
||||
"filter":"writer=15264",
|
||||
"tag":"Rowan Joffe"
|
||||
},
|
||||
{
|
||||
"id":15262,
|
||||
"filter":"writer=15262",
|
||||
"tag":"Jesús Olmo"
|
||||
}
|
||||
],
|
||||
"Producer":[
|
||||
{
|
||||
"id":15212,
|
||||
"filter":"producer=15212",
|
||||
"tag":"Andrew Macdonald"
|
||||
},
|
||||
{
|
||||
"id":15314,
|
||||
"filter":"producer=15314",
|
||||
"tag":"Allon Reich"
|
||||
},
|
||||
{
|
||||
"id":15315,
|
||||
"filter":"producer=15315",
|
||||
"tag":"Bernard Bellew"
|
||||
},
|
||||
{
|
||||
"id":15316,
|
||||
"filter":"producer=15316",
|
||||
"tag":"Enrique López Lavigne"
|
||||
}
|
||||
],
|
||||
"Country":[
|
||||
{
|
||||
"id":13562,
|
||||
"filter":"country=13562",
|
||||
"tag":"United Kingdom"
|
||||
}
|
||||
],
|
||||
"Collection":[
|
||||
{
|
||||
"id":15213,
|
||||
"filter":"collection=15213",
|
||||
"tag":"28 Days/Weeks Later"
|
||||
}
|
||||
],
|
||||
"Role":[
|
||||
{
|
||||
"id":15281,
|
||||
"filter":"actor=15281",
|
||||
"tag":"Imogen Poots",
|
||||
"role":"Tammy Harris",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/kJOUQP0I5HzyenTLWUTCdx6mIAk.jpg"
|
||||
},
|
||||
{
|
||||
"id":5195,
|
||||
"filter":"actor=5195",
|
||||
"tag":"Robert Carlyle",
|
||||
"role":"Don",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/dLNeFPfJACiCiUz3oEdAjeKIwvZ.jpg"
|
||||
},
|
||||
{
|
||||
"id":15302,
|
||||
"filter":"actor=15302",
|
||||
"tag":"Rose Byrne",
|
||||
"role":"Scarlet",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/4oQWCLK7gd6RNKF0WJipJo7TyFP.jpg"
|
||||
},
|
||||
{
|
||||
"id":15286,
|
||||
"filter":"actor=15286",
|
||||
"tag":"Jeremy Renner",
|
||||
"role":"Sergeant Doyle",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/g8gheNEdPSXWH5SnjfjTYWj5ziU.jpg"
|
||||
},
|
||||
{
|
||||
"id":3146,
|
||||
"filter":"actor=3146",
|
||||
"tag":"Harold Perrineau",
|
||||
"role":"Flynn",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/dvvViqumTolGoCut6YiGow666z2.jpg"
|
||||
},
|
||||
{
|
||||
"id":15269,
|
||||
"filter":"actor=15269",
|
||||
"tag":"Catherine McCormack",
|
||||
"role":"Alice",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/a8Jszh3rHQ2T4u1VyE4lXrb0uDI.jpg"
|
||||
},
|
||||
{
|
||||
"id":13551,
|
||||
"filter":"actor=13551",
|
||||
"tag":"Idris Elba",
|
||||
"role":"General Stone",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/be1bVF7qGX91a6c5WeRPs5pKXln.jpg"
|
||||
},
|
||||
{
|
||||
"id":15294,
|
||||
"filter":"actor=15294",
|
||||
"tag":"Mackintosh Muggleton",
|
||||
"role":"Andy",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/iQFNTcNVfgHE4CZ4UoLhpNQoNmB.jpg"
|
||||
},
|
||||
{
|
||||
"id":15266,
|
||||
"filter":"actor=15266",
|
||||
"tag":"Amanda Walker",
|
||||
"role":"Sally",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/bOjEahLqTmhO6gFBTLnN5g2xOpn.jpg"
|
||||
},
|
||||
{
|
||||
"id":15305,"filter":"actor=15305",
|
||||
"tag":"Shahid Ahmed",
|
||||
"role":"Jacob",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/uwepvgBhG6AgTl4hqOapKcQsGK3.jpg"
|
||||
},
|
||||
{
|
||||
"id":15280,
|
||||
"filter":"actor=15280",
|
||||
"tag":"Garfield Morgan",
|
||||
"role":"Geoff",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/hbCQsxjwJEjx7evHmIVX3No9WSM.jpg"
|
||||
},
|
||||
{
|
||||
"id":15278,
|
||||
"filter":"actor=15278",
|
||||
"tag":"Emily Beecham",
|
||||
"role":"Karen",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/cwBsTcY0FLnVYvRUY6cTutZsfPs.jpg"
|
||||
},
|
||||
{
|
||||
"id":15268,
|
||||
"filter":"actor=15268",
|
||||
"tag":"Beans El-Balawi",
|
||||
"role":"Boy in Cottage",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/gKKgurTC5zBJDiNSUnSxTWLmT4N.jpg"
|
||||
},
|
||||
{
|
||||
"id":15297,
|
||||
"filter":"actor=15297",
|
||||
"tag":"Meghan Popiel",
|
||||
"role":"DLR Soldier",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/3clr9teZrczPM3lTwHKXH14De21.jpg"
|
||||
},
|
||||
{
|
||||
"id":15307,
|
||||
"filter":"actor=15307",
|
||||
"tag":"Stewart Alexander",
|
||||
"role":"Military Officer",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/hCnwlefK3ws4zYacepkUH9r3xlp.jpg"
|
||||
},
|
||||
{
|
||||
"id":15298,
|
||||
"filter":"actor=15298",
|
||||
"tag":"Philip Bulcock",
|
||||
"role":"Senior Medical Officer",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/1HTTFGHLopYndPS5aYucpG79wTO.jpg"
|
||||
},
|
||||
{
|
||||
"id":15270,
|
||||
"filter":"actor=15270",
|
||||
"tag":"Chris Ryman",
|
||||
"role":"Rooftop Sniper",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/qTXI6K6TrbJiUxOp9dbgd4mLKJg.jpg"
|
||||
},
|
||||
{
|
||||
"id":15312,
|
||||
"filter":"actor=15312",
|
||||
"tag":"Tristan Tait",
|
||||
"role":"Soldier",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/8XDYVxAyJq81qysTzE5p0KCgSKY.jpg"
|
||||
},
|
||||
{
|
||||
"id":15313,
|
||||
"filter":"actor=15313",
|
||||
"tag":"William Meredith",
|
||||
"role":"Medical Officer",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/5AFiiW7d8MBsnhJhjcVE2LmlqPg.jpg"
|
||||
},
|
||||
{
|
||||
"id":15309,
|
||||
"filter":"actor=15309",
|
||||
"tag":"Thomas Garvey",
|
||||
"role":"Bunker Major"
|
||||
},
|
||||
{
|
||||
"id":15310,
|
||||
"filter":"actor=15310",
|
||||
"tag":"Tom Bodell",
|
||||
"role":"Medical Centre Lobby Soldier"
|
||||
},
|
||||
{
|
||||
"id":15267,
|
||||
"filter":"actor=15267",
|
||||
"tag":"Andrew Byron",
|
||||
"role":"Carpark Soldier",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/yOoY7YAfKzLfJIw9dOyvczH2xmi.jpg"
|
||||
},
|
||||
{
|
||||
"id":15303,
|
||||
"filter":"actor=15303",
|
||||
"tag":"Sarah Finigan",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/77UiRlRRT3792HxusFxuPMrkNaW.jpg"
|
||||
},
|
||||
{
|
||||
"id":15301,
|
||||
"filter":"actor=15301",
|
||||
"tag":"Roderic Culver",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/pN6V2Ga9N8qwyzcD7yrlIMhU3CH.jpg"
|
||||
},
|
||||
{
|
||||
"id":15295,
|
||||
"filter":"actor=15295",
|
||||
"tag":"Maeve Malley-Ryan",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/8idtel3Nk44EUrwZI1voUMQdmoO.jpg"
|
||||
},
|
||||
{
|
||||
"id":15277,
|
||||
"filter":"actor=15277",
|
||||
"tag":"Ed Coleman",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/gFRjKe4QfoilRuXTZFsRZ4Eo0Gb.jpg"
|
||||
},
|
||||
{
|
||||
"id":15290,
|
||||
"filter":"actor=15290",
|
||||
"tag":"Karen Meagher",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/iIhQNJCYVsOmiMmP40FDub1CSBW.jpg"
|
||||
},
|
||||
{
|
||||
"id":15265,
|
||||
"filter":"actor=15265",
|
||||
"tag":"Amanda Lawrence",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/n0RmDWYo266XvrNlS0aZCXSOihn.jpg"
|
||||
},
|
||||
{
|
||||
"id":15276,
|
||||
"filter":"actor=15276",
|
||||
"tag":"Drew Rhys-Williams",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/7GmTgiU4qrQTpJyL9a6hsvaSE7x.jpg"
|
||||
},
|
||||
{
|
||||
"id":15300,
|
||||
"filter":"actor=15300",
|
||||
"tag":"Raymond Waring",
|
||||
"role":"Sam",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/iI9pw8ukPkgLRF20YVonTO5VQp8.jpg"
|
||||
},
|
||||
{
|
||||
"id":15292,
|
||||
"filter":"actor=15292",
|
||||
"tag":"Kish Sharma",
|
||||
"role":"Depot Man"
|
||||
},
|
||||
{
|
||||
"id":15284,
|
||||
"filter":"actor=15284",
|
||||
"tag":"Jane Thorne",
|
||||
"role":"Depot Woman",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/wZnyLVOfkIrhEsNQFADSa5bAeBw.jpg"
|
||||
},
|
||||
{
|
||||
"id":15273,
|
||||
"filter":"actor=15273",
|
||||
"tag":"Dean Alexandrou",
|
||||
"role":"Infected Person (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/kr1WMrKVCx9eGJm4thT19gtrpA6.jpg"
|
||||
},
|
||||
{
|
||||
"id":15275,
|
||||
"filter":"actor=15275",
|
||||
"tag":"Didier Dell Benjamin",
|
||||
"role":"Civilian (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/ckwkBkKsC2Wt2GOrILtDBDFLY8X.jpg"
|
||||
},
|
||||
{
|
||||
"id":15279,
|
||||
"filter":"actor=15279",
|
||||
"tag":"Gareth Clarke",
|
||||
"role":"Infected Person (uncredited)"
|
||||
},
|
||||
{
|
||||
"id":15282,
|
||||
"filter":"actor=15282",
|
||||
"tag":"James Fiddy",
|
||||
"role":"Victim (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/8RYvhkfNCuWiZOeWrzl46QWTCSU.jpg"
|
||||
},
|
||||
{
|
||||
"id":15311,
|
||||
"filter":"actor=15311",
|
||||
"tag":"Tommy Gunn",
|
||||
"role":"Marine (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/yiBD0BrDZIsSN4m8f0d8Hl76Eo9.jpg"
|
||||
},
|
||||
{
|
||||
"id":15272,
|
||||
"filter":"actor=15272",
|
||||
"tag":"Daniel Jefferson",
|
||||
"role":"Civilian (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/lWy5MZMXcLuzsGdAeT9GuDdo4F9.jpg"
|
||||
},
|
||||
{
|
||||
"id":15274,
|
||||
"filter":"actor=15274",
|
||||
"tag":"Debbie Kurup",
|
||||
"role":"Infected Person (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/orhBknLRtV7AGXVkEAlol0p7ncq.jpg"
|
||||
},
|
||||
{
|
||||
"id":15304,
|
||||
"filter":"actor=15304",
|
||||
"tag":"Selina Lo",
|
||||
"role":"Infected Person (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/vz3r7SYYWSp4Lte0JwvtTqxXsh9.jpg"
|
||||
},
|
||||
{
|
||||
"id":15288,
|
||||
"filter":"actor=15288",
|
||||
"tag":"João Costa Menezes",
|
||||
"role":"Infected Person (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/xDnd4tnHZAgdMgmt443E4nG7Ko0.jpg"
|
||||
},
|
||||
{
|
||||
"id":15283,
|
||||
"filter":"actor=15283",
|
||||
"tag":"Jane Osborn",
|
||||
"role":"Infected Person (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/tCXL4SuqvDH0wk0J6A7OEADKY2L.jpg"
|
||||
},
|
||||
{
|
||||
"id":15289,
|
||||
"filter":"actor=15289",
|
||||
"tag":"Jude Poyer",
|
||||
"role":"Infected Person (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/quUa0O1fTgPH5aRRq3RNYL6pg8b.jpg"
|
||||
},
|
||||
{
|
||||
"id":15287,
|
||||
"filter":"actor=15287",
|
||||
"tag":"Joseph Ripley",
|
||||
"role":"Infected person (uncredited)"
|
||||
},
|
||||
{
|
||||
"id":15306,
|
||||
"filter":"actor=15306",
|
||||
"tag":"Simon Delaney",
|
||||
"role":"Carpark Civilian",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/x74QVhesWL0nM0EFIosl6awxcIu.jpg"
|
||||
},
|
||||
{
|
||||
"id":15308,
|
||||
"filter":"actor=15308",
|
||||
"tag":"Stuart Adams",
|
||||
"role":"Don"
|
||||
},
|
||||
{
|
||||
"id":15271,
|
||||
"filter":"actor=15271",
|
||||
"tag":"Daniel Baggs",
|
||||
"role":"Jeremy Renner - Double (uncredited)"
|
||||
},
|
||||
{
|
||||
"id":15291,"filter":"actor=15291","tag":"Katie Borland",
|
||||
"role":"Infected (uncredited)",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/vRtWKZJKwTtkF8ZQAl56WIwSCid.jpg"
|
||||
},
|
||||
{
|
||||
"id":15285,
|
||||
"filter":"actor=15285",
|
||||
"tag":"Jason Curle",
|
||||
"role":"Infected Person (uncredited)"
|
||||
},
|
||||
{
|
||||
"id":15293,
|
||||
"filter":"actor=15293",
|
||||
"tag":"Laine Edwards",
|
||||
"role":"Civilian (uncredited)"
|
||||
},
|
||||
{
|
||||
"id":15299,
|
||||
"filter":"actor=15299",
|
||||
"tag":"Pip Henderson",
|
||||
"role":"Infected (uncredited)"
|
||||
},
|
||||
{
|
||||
"id":15296,
|
||||
"filter":"actor=15296",
|
||||
"tag":"Matt Reeves",
|
||||
"role":"Bunker Soldier",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/fj2OSoBhVepDZSfLXisGJmMXDNo.jpg"
|
||||
}
|
||||
],
|
||||
"Similar":[
|
||||
{
|
||||
"id":13343,
|
||||
"filter":"similar=13343",
|
||||
"tag":"28 Days Later"
|
||||
},
|
||||
{
|
||||
"id":14197,
|
||||
"filter":"similar=14197",
|
||||
"tag":"30 Days of Night"
|
||||
},
|
||||
{
|
||||
"id":15252,
|
||||
"filter":"similar=15252",
|
||||
"tag":"Dawn of the Dead"
|
||||
},
|
||||
{
|
||||
"id":15255,
|
||||
"filter":"similar=15255",
|
||||
"tag":"Land of the Dead"
|
||||
},
|
||||
{
|
||||
"id":14209,
|
||||
"filter":"similar=14209",
|
||||
"tag":"The Crazies"
|
||||
},
|
||||
{
|
||||
"id":15350,"filter":"similar=15350",
|
||||
"tag":"Pandorum"
|
||||
},
|
||||
{
|
||||
"id":15258,
|
||||
"filter":"similar=15258",
|
||||
"tag":"Sunshine"
|
||||
},
|
||||
{
|
||||
"id":15253,
|
||||
"filter":"similar=15253",
|
||||
"tag":"Daybreakers"
|
||||
},
|
||||
{
|
||||
"id":755,
|
||||
"filter":"similar=755",
|
||||
"tag":"The Mist"
|
||||
},
|
||||
{
|
||||
"id":13355,
|
||||
"filter":"similar=13355",
|
||||
"tag":"The Descent"
|
||||
},
|
||||
{
|
||||
"id":15254,
|
||||
"filter":"similar=15254",
|
||||
"tag":"Event Horizon"
|
||||
},
|
||||
{
|
||||
"id":14210,
|
||||
"filter":"similar=14210",
|
||||
"tag":"The Hills Have Eyes"
|
||||
},
|
||||
{
|
||||
"id":15256,
|
||||
"filter":"similar=15256",
|
||||
"tag":"Planet Terror"
|
||||
},
|
||||
{
|
||||
"id":14207,
|
||||
"filter":"similar=14207",
|
||||
"tag":"Silent Hill"
|
||||
},
|
||||
{
|
||||
"id":15349,
|
||||
"filter":"similar=15349",
|
||||
"tag":"Monsters"
|
||||
},
|
||||
{
|
||||
"id":15353,
|
||||
"filter":"similar=15353",
|
||||
"tag":"The Happening"
|
||||
},
|
||||
{
|
||||
"id":15517,
|
||||
"filter":"similar=15517",
|
||||
"tag":"1408"
|
||||
},
|
||||
{
|
||||
"id":15348,
|
||||
"filter":"similar=15348",
|
||||
"tag":"Doomsday"
|
||||
},
|
||||
{
|
||||
"id":53994,
|
||||
"filter":"similar=53994",
|
||||
"tag":"Resident Evil"
|
||||
},
|
||||
{
|
||||
"id":14199,
|
||||
"filter":"similar=14199",
|
||||
"tag":"Drag Me to Hell"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
{
|
||||
"ratingKey":"9050",
|
||||
"key":"/library/metadata/9050",
|
||||
"guid":"com.plexapp.agents.imdb://tt0463854?lang=en",
|
||||
"studio":"DNA Films",
|
||||
"type":"movie",
|
||||
"title":"28 Weeks Later",
|
||||
"contentRating":"dk/15",
|
||||
"summary":"The inhabitants of the British Isles have lost their battle against the onslaught of disease, as the deadly rage virus has killed every citizen there. Six months later, a group of Americans dare to set foot on the isles, convinced the danger has come and gone. But it soon becomes all too clear that the scourge continues to live, waiting to pounce on its next victims.",
|
||||
"rating":7.1,
|
||||
"audienceRating":6.7,
|
||||
"year":2007,
|
||||
"tagline":"When days turn to weeks... the horror returns.",
|
||||
"thumb":"/library/metadata/9050/thumb/1575678555",
|
||||
"art":"/library/metadata/9050/art/1575678555",
|
||||
"duration":5757240,
|
||||
"originallyAvailableAt":"2007-04-26",
|
||||
"addedAt":1186162396,
|
||||
"updatedAt":1575678555,
|
||||
"lastViewedAt":1575678555,
|
||||
"audienceRatingImage":"rottentomatoes://image.rating.upright",
|
||||
"chapterSource":"agent",
|
||||
"primaryExtraKey":"/library/metadata/9454",
|
||||
"ratingImage":"rottentomatoes://image.rating.ripe",
|
||||
"Media":[
|
||||
{
|
||||
"id":9333,
|
||||
"duration":5757240,
|
||||
"bitrate":1022,
|
||||
"width":592,
|
||||
"height":320,
|
||||
"aspectRatio":1.85,
|
||||
"audioChannels":2,
|
||||
"audioCodec":"mp3",
|
||||
"videoCodec":"mpeg4",
|
||||
"videoResolution":"sd",
|
||||
"container":"avi",
|
||||
"videoFrameRate":"PAL",
|
||||
"videoProfile":"advanced simple",
|
||||
"Part":[
|
||||
{
|
||||
"id":29662,
|
||||
"key":"/library/parts/29662/1186162396/file.avi",
|
||||
"duration":5757240,
|
||||
"file":"/share/CACHEDEV1_DATA/video/old-movies/#/28 Weeks Later (2007)/28 Weeks Later.avi",
|
||||
"size":735303680,
|
||||
"container":"avi",
|
||||
"videoProfile":"advanced simple"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre":[
|
||||
{
|
||||
"tag":"Drama"
|
||||
},
|
||||
{
|
||||
"tag":"Horror"
|
||||
}
|
||||
],
|
||||
"Director":[{"tag":"Juan Carlos Fresnadillo"}],
|
||||
"Writer":[{"tag":"Enrique López Lavigne"},{"tag":"Jesús Olmo"}],
|
||||
"Country":[{"tag":"United Kingdom"}],
|
||||
"Collection":[{"tag":"28 Days/Weeks Later"}],
|
||||
"Role":[
|
||||
{
|
||||
"tag":"Amanda Lawrence"
|
||||
},
|
||||
{
|
||||
"tag":"Amanda Walker"
|
||||
},
|
||||
{
|
||||
"tag":"Andrew Byron"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
{
|
||||
"MediaContainer":{
|
||||
"size":30,
|
||||
"totalSize":2570,
|
||||
"allowSync":true,
|
||||
"art":"/:/resources/movie-fanart.jpg",
|
||||
"identifier":"com.plexapp.plugins.library",
|
||||
"librarySectionID":4,
|
||||
"librarySectionTitle":"Movies",
|
||||
"librarySectionUUID":"611d44e2-c4cc-4cec-8b65-d77b037e1b3d",
|
||||
"mediaTagPrefix":"/system/bundle/media/flags/",
|
||||
"mediaTagVersion":1576869286,
|
||||
"offset":31,
|
||||
"thumb":"/:/resources/movie.png",
|
||||
"title1":"Movies",
|
||||
"title2":"All Movies",
|
||||
"viewGroup":"movie",
|
||||
"viewMode":65592,
|
||||
"Metadata":[
|
||||
{
|
||||
"ratingKey":"9042",
|
||||
"key":"/library/metadata/9042",
|
||||
"guid":"com.plexapp.agents.imdb://tt4385888?lang=en",
|
||||
"studio":"Annapurna Pictures",
|
||||
"type":"movie",
|
||||
"title":"20th Century Women",
|
||||
"contentRating":"dk/fr.u.7",
|
||||
"summary":"In 1979 Santa Barbara, California, Dorothea Fields is a determined single mother in her mid-50s who is raising her adolescent son, Jamie, at a moment brimming with cultural change and rebellion. Dorothea enlists the help of two younger women – Abbie, a free-spirited punk artist living as a boarder in the Fields' home and Julie, a savvy and provocative teenage neighbour – to help with Jamie's upbringing.",
|
||||
"rating":8.9,
|
||||
"audienceRating":7.3,
|
||||
"year":2016,
|
||||
"thumb":"/library/metadata/9042/thumb/1575678525",
|
||||
"art":"/library/metadata/9042/art/1575678525",
|
||||
"duration":7124159,
|
||||
"originallyAvailableAt":"2016-12-28",
|
||||
"addedAt":1490792202,
|
||||
"updatedAt":1575678525,
|
||||
"audienceRatingImage":"rottentomatoes://image.rating.upright",
|
||||
"chapterSource":"media",
|
||||
"primaryExtraKey":"/library/metadata/9421",
|
||||
"ratingImage":"rottentomatoes://image.rating.ripe",
|
||||
"Media":[
|
||||
{
|
||||
"id":9325,
|
||||
"duration":7124159,
|
||||
"bitrate":10980,
|
||||
"width":1920,
|
||||
"height":960,
|
||||
"aspectRatio":1.85,
|
||||
"audioChannels":6,
|
||||
"audioCodec":"ac3",
|
||||
"videoCodec":"h264",
|
||||
"videoResolution":"1080",
|
||||
"container":"mkv",
|
||||
"videoFrameRate":"24p",
|
||||
"audioProfile":"dts",
|
||||
"videoProfile":"high",
|
||||
"Part":[
|
||||
{
|
||||
"id":29623,
|
||||
"key":"/library/parts/29623/1567348678/file.mkv",
|
||||
"duration":7124159,
|
||||
"file":"/share/CACHEDEV1_DATA/video/old-movies/#/20th Century Women (2016)/20th.Century.Women.2016.1080p.BluRay.x264-GECKOS.mkv",
|
||||
"size":9777930144,
|
||||
"audioProfile":"dts",
|
||||
"container":"mkv",
|
||||
"videoProfile":"high"
|
||||
}]
|
||||
}],
|
||||
"Genre":[
|
||||
{
|
||||
"tag":"Comedy"
|
||||
},
|
||||
{
|
||||
"tag":"Drama"
|
||||
}
|
||||
],
|
||||
"Director":[
|
||||
{
|
||||
"tag":"Mike Mills"
|
||||
}
|
||||
],
|
||||
"Writer":[
|
||||
{
|
||||
"tag":"Mike Mills"
|
||||
}
|
||||
],
|
||||
"Country":[
|
||||
{
|
||||
"tag":"USA"
|
||||
}
|
||||
],
|
||||
"Role":[
|
||||
{
|
||||
"tag":"Alia Shawkat"
|
||||
},
|
||||
{
|
||||
"tag":"Alison Elliott"
|
||||
},
|
||||
{
|
||||
"tag":"Annette Bening"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ratingKey":"9050","key":"/library/metadata/9050","guid":"com.plexapp.agents.imdb://tt0463854?lang=en","studio":"DNA Films","type":"movie","title":"28 Weeks Later","contentRating":"dk/15","summary":"The inhabitants of the British Isles have lost their battle against the onslaught of disease, as the deadly rage virus has killed every citizen there. Six months later, a group of Americans dare to set foot on the isles, convinced the danger has come and gone. But it soon becomes all too clear that the scourge continues to live, waiting to pounce on its next victims.","rating":7.1,"audienceRating":6.7,"year":2007,"tagline":"When days turn to weeks... the horror returns.","thumb":"/library/metadata/9050/thumb/1575678555","art":"/library/metadata/9050/art/1575678555","duration":5757240,"originallyAvailableAt":"2007-04-26","addedAt":1186162396,"updatedAt":1575678555,"lastViewedAt":1575678555,"audienceRatingImage":"rottentomatoes://image.rating.upright","chapterSource":"agent","primaryExtraKey":"/library/metadata/9454","ratingImage":"rottentomatoes://image.rating.ripe","Media":[{"id":9333,"duration":5757240,"bitrate":1022,"width":592,"height":320,"aspectRatio":1.85,"audioChannels":2,"audioCodec":"mp3","videoCodec":"mpeg4","videoResolution":"sd","container":"avi","videoFrameRate":"PAL","videoProfile":"advanced simple","Part":[{"id":29662,"key":"/library/parts/29662/1186162396/file.avi","duration":5757240,"file":"/share/CACHEDEV1_DATA/video/old-movies/#/28 Weeks Later (2007)/28 Weeks Later.avi","size":735303680,"container":"avi","videoProfile":"advanced simple"}]}],"Genre":[{"tag":"Drama"},{"tag":"Horror"}],"Director":[{"tag":"Juan Carlos Fresnadillo"}],"Writer":[{"tag":"Enrique López Lavigne"},{"tag":"Jesús Olmo"}],"Country":[{"tag":"United Kingdom"}],"Collection":[{"tag":"28 Days/Weeks Later"}],"Role":[{"tag":"Amanda Lawrence"},{"tag":"Amanda Walker"},{"tag":"Andrew Byron"}]}]}}
|
|
@ -1,122 +0,0 @@
|
|||
{
|
||||
"ratingKey":"9042",
|
||||
"key":"/library/metadata/9042",
|
||||
"guid":"com.plexapp.agents.imdb://tt4385888?lang=en",
|
||||
"studio":"Annapurna Pictures",
|
||||
"type":"movie",
|
||||
"title":"20th Century Women",
|
||||
"librarySectionTitle":"Movies",
|
||||
"librarySectionID":4,
|
||||
"librarySectionKey":"/library/sections/4",
|
||||
"contentRating":"dk/fr.u.7",
|
||||
"summary":"In 1979 Santa Barbara, California, Dorothea Fields is a determined single mother in her mid-50s who is raising her adolescent son, Jamie, at a moment brimming with cultural change and rebellion. Dorothea enlists the help of two younger women – Abbie, a free-spirited punk artist living as a boarder in the Fields' home and Julie, a savvy and provocative teenage neighbour – to help with Jamie's upbringing.",
|
||||
"rating":8.9,
|
||||
"audienceRating":7.3,
|
||||
"year":2016,
|
||||
"thumb":"/library/metadata/9042/thumb/1575678525",
|
||||
"art":"/library/metadata/9042/art/1575678525",
|
||||
"duration":7124159,
|
||||
"originallyAvailableAt":"2016-12-28",
|
||||
"addedAt":1490792202,
|
||||
"updatedAt":1575678525,
|
||||
"audienceRatingImage":"rottentomatoes://image.rating.upright",
|
||||
"chapterSource":"media",
|
||||
"primaryExtraKey":"/library/metadata/9421",
|
||||
"ratingImage":"rottentomatoes://image.rating.ripe",
|
||||
"Media":[
|
||||
{
|
||||
"id":9325,
|
||||
"duration":7124159,
|
||||
"bitrate":10980,
|
||||
"width":1920,
|
||||
"height":960,
|
||||
"aspectRatio":1.85,
|
||||
"audioChannels":6,
|
||||
"audioCodec":"ac3",
|
||||
"videoCodec":"h264",
|
||||
"videoResolution":"1080",
|
||||
"container":"mkv",
|
||||
"videoFrameRate":"24p",
|
||||
"audioProfile":"dts",
|
||||
"videoProfile":"high",
|
||||
"Part":[
|
||||
{
|
||||
"id":29623,
|
||||
"key":"/library/parts/29623/1567348678/file.mkv",
|
||||
"duration":7124159,
|
||||
"file":"/share/CACHEDEV1_DATA/video/old-movies/#/20th Century Women (2016)/20th.Century.Women.2016.1080p.BluRay.x264-GECKOS.mkv",
|
||||
"size":9777930144,
|
||||
"audioProfile":"dts",
|
||||
"container":"mkv",
|
||||
"videoProfile":"high",
|
||||
"Stream":[
|
||||
{
|
||||
"id":66877,
|
||||
"streamType":1,
|
||||
"default":true,
|
||||
"codec":"h264",
|
||||
"index":0,
|
||||
"bitrate":8996,
|
||||
"bitDepth":8,
|
||||
"chromaLocation":"left",
|
||||
"chromaSubsampling":"4:2:0",
|
||||
"frameRate":23.976,
|
||||
"hasScalingMatrix":false,
|
||||
"height":960,
|
||||
"level":41,
|
||||
"profile":"high",
|
||||
"refFrames":4,
|
||||
"scanType":"progressive",
|
||||
"width":1920,
|
||||
"displayTitle":"1080p (H.264)"
|
||||
},
|
||||
{
|
||||
"id":66878,"streamType":2,"selected":true,"default":true,
|
||||
"codec":"ac3","index":1,"channels":6,"bitrate":448,
|
||||
"language":"English","languageCode":"eng",
|
||||
"audioChannelLayout":"5.1(side)","samplingRate":48000,
|
||||
"displayTitle":"English (AC3 5.1)"
|
||||
},
|
||||
{
|
||||
"id":145278,"streamType":2,"codec":"dca","index":2,
|
||||
"channels":6,"bitrate":1536,"language":"English",
|
||||
"languageCode":"eng","audioChannelLayout":"5.1(side)",
|
||||
"bitDepth":24,"profile":"dts","samplingRate":48000,
|
||||
"displayTitle":"English (DTS 5.1)"},{"id":66880,
|
||||
"streamType":3,"codec":"srt","index":3,"bitrate":0,
|
||||
"language":"English","languageCode":"eng",
|
||||
"displayTitle":"English (SRT)"},{"id":145279,
|
||||
"streamType":3,"codec":"srt","index":4,"bitrate":0,
|
||||
"language":"English","languageCode":"eng","title":"SDH",
|
||||
"displayTitle":"English (SRT)"
|
||||
},
|
||||
{
|
||||
"id":87315,"key":"/library/streams/87315",
|
||||
"streamType":3,"selected":true,"codec":"srt",
|
||||
"language":"Dansk","languageCode":"dan","format":"srt",
|
||||
"displayTitle":"Dansk (SRT External)"
|
||||
},
|
||||
{
|
||||
"id":87314,"key":"/library/streams/87314","streamType":3,
|
||||
"codec":"srt","language":"English","languageCode":"eng",
|
||||
"format":"srt","displayTitle":"English (SRT External)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre":[
|
||||
{
|
||||
"id":7,"filter":"genre=7","tag":"Comedy"
|
||||
},
|
||||
{
|
||||
"id":66,"filter":"genre=66","tag":"Drama"
|
||||
}
|
||||
],
|
||||
"Director":[
|
||||
{
|
||||
"id":14818,"filter":"director=14818","tag":"Mike Mills"
|
||||
}
|
||||
],"Writer":[{"id":14819,"filter":"writer=14819","tag":"Mike Mills"}],"Producer":[{"id":14840,"filter":"producer=14840","tag":"Anne Carey"},{"id":14841,"filter":"producer=14841","tag":"Megan Ellison"},{"id":14842,"filter":"producer=14842","tag":"Youree Henley"}],"Country":[{"id":13306,"filter":"country=13306","tag":"USA"}],"Role":[{"id":14822,"filter":"actor=14822","tag":"Annette Bening","role":"Dorothea Fields","thumb":"http://image.tmdb.org/t/p/original/vVAvoiE6FQ4couqaB0ogaHR6Ef7.jpg"},{"id":14827,"filter":"actor=14827","tag":"Elle Fanning","role":"Julie Miller","thumb":"http://image.tmdb.org/t/p/original/e8CUyxQSE99y5IOfzSLtHC0B0Ch.jpg"},{"id":14830,"filter":"actor=14830","tag":"Greta Gerwig","role":"Abbie Porter","thumb":"http://image.tmdb.org/t/p/original/3H0xzU12GTNJyQTpGysEuI9KyiQ.jpg"},{"id":14834,"filter":"actor=14834","tag":"Lucas Jade Zumann","role":"Jamie Fields","thumb":"http://image.tmdb.org/t/p/original/7ocQJdexgzKx4Yqk0qs9fChIniV.jpg"},{"id":14823,"filter":"actor=14823","tag":"Billy Crudup","role":"William","thumb":"http://image.tmdb.org/t/p/original/2fuCSqWskRaHNBJQsfb0iDPfnWa.jpg"},{"id":14820,"filter":"actor=14820","tag":"Alia Shawkat","role":"Trish","thumb":"http://image.tmdb.org/t/p/original/3A9fLNoFLkbMlSpzoOCWlVIdKKw.jpg"},{"id":14826,"filter":"actor=14826","tag":"Darrell Britt-Gibson","role":"Julian","thumb":"http://image.tmdb.org/t/p/original/cCfTL6qkctE088J3qr8qtgGrZa1.jpg"},{"id":14837,"filter":"actor=14837","tag":"Thea Gill","role":"Gail Porter","thumb":"http://image.tmdb.org/t/p/original/xFG4j3Ll0iVjLaR6jzSNysymxPx.jpg"},{"id":96315,"filter":"actor=96315","tag":"Laura Slade Wiggins","role":"Lynette Winters","thumb":"http://image.tmdb.org/t/p/original/xaDDy9Lsn8CEZe7b1JbdK5GKE8Z.jpg"},{"id":14836,"filter":"actor=14836","tag":"Nathalie Love","role":"Cindy","thumb":"http://image.tmdb.org/t/p/original/8PcM8xE8bSpfQkoNBhVPjPlOX1Z.jpg"},{"id":14821,"filter":"actor=14821","tag":"Alison Elliott","role":"Julie's Mother","thumb":"http://image.tmdb.org/t/p/original/lu5ePooNr1mXNPoEJbxcdmZNqEz.jpg"},{"id":14828,"filter":"actor=14828","tag":"Finn Roberts","role":"Tim Drammer","thumb":"http://image.tmdb.org/t/p/original/pt6b2kHhXpHQ93ROWXAgwfD3YFo.jpg"},{"id":14831,"filter":"actor=14831","tag":"Kirk Bovill","role":"Dorothea's Dinner Guest"},{"id":825,"filter":"actor=825","tag":"Waleed Zuaiter","role":"Charlie","thumb":"http://image.tmdb.org/t/p/original/b7NMq4XyyFkZRKKCag3mpR74jJX.jpg"},{"id":14767,"filter":"actor=14767","tag":"John Billingsley","role":"Doctor","thumb":"http://image.tmdb.org/t/p/original/fHQ6ecMufxLwUAbN3dX3yxFAn5d.jpg"},{"id":14825,"filter":"actor=14825","tag":"Curran Walters","role":"Matt","thumb":"http://image.tmdb.org/t/p/original/aCQvYZwxzteT1gAqHc3eFLYQBDj.jpg"},{"id":14838,"filter":"actor=14838","tag":"Vitaly Andrew LeBeau","role":"Young Jamie"},{"id":14824,"filter":"actor=14824","tag":"Cameron Gellman","role":"Mark","thumb":"http://image.tmdb.org/t/p/original/czeicsWwYVJDTqiZLgx9sDl98O8.jpg"},{"id":14829,"filter":"actor=14829","tag":"Finnegan Seeker Bell","role":"Brian"},{"id":14839,"filter":"actor=14839","tag":"Zoë Nanos","role":"Tanya"},{"id":14833,"filter":"actor=14833","tag":"Lauren Foley","role":"Michelle"},{"id":14835,"filter":"actor=14835","tag":"Matthew Cardarople","role":"Bartender","thumb":"http://image.tmdb.org/t/p/original/1PYYUktSJYQP9JZKeQC2rhmhoYD.jpg"}],"Similar":[{"id":14851,"filter":"similar=14851","tag":"Certain Women"},{"id":14858,"filter":"similar=14858","tag":"Mistress America"},{"id":14860,"filter":"similar=14860","tag":"Paterson"},{"id":14856,"filter":"similar=14856","tag":"Loving"},{"id":14865,"filter":"similar=14865","tag":"Toni Erdmann"},{"id":14854,"filter":"similar=14854","tag":"Frances Ha"},{"id":14857,"filter":"similar=14857","tag":"Maggie's Plan"},{"id":14850,"filter":"similar=14850","tag":"American Honey"},{"id":14855,"filter":"similar=14855","tag":"Jackie"},{"id":14861,"filter":"similar=14861","tag":"Personal Shopper"},{"id":59785,"filter":"similar=59785","tag":"Beginners"},{"id":17005,"filter":"similar=17005","tag":"The Florida Project"},{"id":14862,"filter":"similar=14862","tag":"Sing Street"},{"id":14863,"filter":"similar=14863","tag":"Tangerine"},{"id":16995,"filter":"similar=16995","tag":"Columbus"},{"id":14847,"filter":"similar=14847","tag":"45 Years"},{"id":14852,"filter":"similar=14852","tag":"Christine"},{"id":14848,"filter":"similar=14848","tag":"A Bigger Splash"},{"id":14853,"filter":"similar=14853","tag":"Elle"},
|
||||
{"id":14859,"filter":"similar=14859","tag":"Other People"}]}
|
|
@ -1,344 +0,0 @@
|
|||
{
|
||||
"ratingKey":"34765",
|
||||
"key":"/library/metadata/34765",
|
||||
"guid":"com.plexapp.agents.imdb://tt1131724?lang=en",
|
||||
"studio":"Screen Australia",
|
||||
"type":"movie",
|
||||
"title":"2:22",
|
||||
"librarySectionTitle":"Movies",
|
||||
"librarySectionID":4,
|
||||
"librarySectionKey":"/library/sections/4",
|
||||
"contentRating":"PG-13",
|
||||
"summary":"A man's life is derailed when an ominous pattern of events repeats itself in exactly the same manner every day, ending at precisely 2:22 p.m.",
|
||||
"rating":5.8,
|
||||
"year":2017,
|
||||
"thumb":"/library/metadata/34765/thumb/1583190431",
|
||||
"art":"/library/metadata/34765/art/1583190431",
|
||||
"duration":5933984,
|
||||
"originallyAvailableAt":"2017-06-29",
|
||||
"addedAt":1583190383,
|
||||
"updatedAt":1583190431,
|
||||
"chapterSource":"media",
|
||||
"primaryExtraKey":"/library/metadata/34766",
|
||||
"ratingImage":"imdb://image.rating",
|
||||
"Media":[
|
||||
{
|
||||
"id":59928,
|
||||
"duration":5933984,
|
||||
"bitrate":4934,
|
||||
"width":1920,
|
||||
"height":796,
|
||||
"aspectRatio":2.35,
|
||||
"audioChannels":6,
|
||||
"audioCodec":"ac3",
|
||||
"videoCodec":"h264",
|
||||
"videoResolution":"1080",
|
||||
"container":"mkv",
|
||||
"videoFrameRate":"24p",
|
||||
"videoProfile":"high",
|
||||
"Part":[
|
||||
{
|
||||
"accessible":true,
|
||||
"exists":true,
|
||||
"id":63448,
|
||||
"key":"/library/parts/63448/1583190312/file.mkv",
|
||||
"duration":5933984,
|
||||
"file":"/share/CACHEDEV1_DATA/video/old-movies/#/2-22 (2017)/2-22 (2017).mkv",
|
||||
"size":3659878640,
|
||||
"container":"mkv",
|
||||
"hasThumbnail":"1",
|
||||
"videoProfile":"high",
|
||||
"Stream":[
|
||||
{
|
||||
"id":158470,
|
||||
"streamType":1,
|
||||
"default":true,
|
||||
"codec":"h264",
|
||||
"index":0,
|
||||
"bitrate":4550,
|
||||
"language":"English",
|
||||
"languageCode":"eng",
|
||||
"bitDepth":8,
|
||||
"chromaLocation":"topleft",
|
||||
"chromaSubsampling":"4:2:0",
|
||||
"codedHeight":"800",
|
||||
"codedWidth":"1920",
|
||||
"colorPrimaries":"bt709",
|
||||
"colorRange":"tv",
|
||||
"colorSpace":"bt709",
|
||||
"colorTrc":"bt709",
|
||||
"frameRate":23.976,
|
||||
"hasScalingMatrix":false,
|
||||
"height":796,
|
||||
"level":40,
|
||||
"profile":"high",
|
||||
"refFrames":5,
|
||||
"scanType":"progressive",
|
||||
"title":"2.22.2017.1080p.WEB-DL.DD5.1.H264-FGT",
|
||||
"width":1920,
|
||||
"displayTitle":"1080p (H.264)"
|
||||
},
|
||||
{
|
||||
"id":158471,
|
||||
"streamType":2,
|
||||
"selected":true,
|
||||
"default":true,
|
||||
"codec":"ac3",
|
||||
"index":1,
|
||||
"channels":6,
|
||||
"bitrate":384,
|
||||
"language":"English",
|
||||
"languageCode":"eng",
|
||||
"audioChannelLayout":"5.1(side)",
|
||||
"samplingRate":48000,
|
||||
"title":"2.22.2017.1080p.WEB-DL.DD5.1.H264-FGT",
|
||||
"displayTitle":"English (AC3 5.1)"
|
||||
},
|
||||
{
|
||||
"id":158472,
|
||||
"streamType":3,
|
||||
"default":true,
|
||||
"codec":"srt",
|
||||
"index":2,
|
||||
"language":"Dansk",
|
||||
"languageCode":"dan",
|
||||
"displayTitle":"Dansk (SRT)"
|
||||
},
|
||||
{
|
||||
"id":158479,
|
||||
"key":"/library/streams/158479",
|
||||
"streamType":3,
|
||||
"selected":true,
|
||||
"codec":"srt",
|
||||
"language":"Dansk",
|
||||
"languageCode":"dan",
|
||||
"format":"srt",
|
||||
"displayTitle":"Dansk (SRT External)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre":[
|
||||
{
|
||||
"id":66,
|
||||
"filter":"genre=66",
|
||||
"tag":"Drama"
|
||||
},
|
||||
{
|
||||
"id":13303,
|
||||
"filter":"genre=13303",
|
||||
"tag":"Sci-Fi"
|
||||
},
|
||||
{
|
||||
"id":152,
|
||||
"filter":"genre=152",
|
||||
"tag":"Thriller"
|
||||
}
|
||||
],
|
||||
"Director":[
|
||||
{
|
||||
"id":105448,
|
||||
"filter":"director=105448",
|
||||
"tag":"Paul Currie"
|
||||
}
|
||||
],
|
||||
"Writer":[
|
||||
{
|
||||
"id":27748,
|
||||
"filter":"writer=27748",
|
||||
"tag":"Nathan Parker"
|
||||
},
|
||||
{
|
||||
"id":105449,
|
||||
"filter":"writer=105449",
|
||||
"tag":"Todd Stein"
|
||||
}
|
||||
],
|
||||
"Producer":[
|
||||
{
|
||||
"id":105466,
|
||||
"filter":"producer=105466",
|
||||
"tag":"Steve Hutensky"
|
||||
},
|
||||
{
|
||||
"id":42213,
|
||||
"filter":"producer=42213",
|
||||
"tag":"Paul Currie"
|
||||
},
|
||||
{
|
||||
"id":105467,
|
||||
"filter":"producer=105467",
|
||||
"tag":"Jodi Matterson"
|
||||
}
|
||||
],
|
||||
"Country":[
|
||||
{
|
||||
"id":16788,
|
||||
"filter":"country=16788",
|
||||
"tag":"Australia"
|
||||
}
|
||||
],
|
||||
"Role":[
|
||||
{
|
||||
"id":2594,
|
||||
"filter":"actor=2594",
|
||||
"tag":"Michiel Huisman",
|
||||
"role":"Dylan Branson",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/tDv9whdA3nG5Q0pgwzXPTHnu84z.jpg"
|
||||
},
|
||||
{
|
||||
"id":42205,
|
||||
"filter":"actor=42205",
|
||||
"tag":"Teresa Palmer",
|
||||
"role":"Sarah",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/rbGnqOmLieJctfjmdcWIVQTiwhT.jpg"
|
||||
},
|
||||
{
|
||||
"id":22071,"filter":"actor=22071","tag":"Sam Reid","role":"Jonas",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/apMtm8JeZbyI6ZCdbqkAfUNr0SW.jpg"
|
||||
},
|
||||
{
|
||||
"id":71110,"filter":"actor=71110","tag":"John Waters","role":"Bill","thumb":"http://image.tmdb.org/t/p/original/9OhnYEPX1COFLuzSjxdNk7HbzxW.jpg"},{"id":40552,"filter":"actor=40552","tag":"Richard Davies","role":"Inky","thumb":"http://image.tmdb.org/t/p/original/tviPclkgyNe1yDURc3xe5wkWijg.jpg"
|
||||
},
|
||||
{
|
||||
"id":872,"filter":"actor=872","tag":"Maeve Dermody","role":"Sandy","thumb":"http://image.tmdb.org/t/p/original/7C6xwwXBPERnVAst9SlfcqlK8bL.jpg"},{"id":105450,"filter":"actor=105450","tag":"Kerry Armstrong","role":"Catherine","thumb":"http://image.tmdb.org/t/p/original/fGAUJ4fDhGFr3eIbFYZ5Tyxr9A.jpg"},{"id":80752,"filter":"actor=80752","tag":"Simone Kessell","role":"Serena","thumb":"http://image.tmdb.org/t/p/original/8jHLphmnbYPymIm9ta1RmefLzdW.jpg"
|
||||
},
|
||||
{
|
||||
"id":3021,"filter":"actor=3021","tag":"Remy Hii","role":"Benny","thumb":"http://image.tmdb.org/t/p/original/l6K5S3Pnxtj9JBz7qPhiHEekGpg.jpg"},{"id":105451,"filter":"actor=105451","tag":"Jessica Clarke","role":"Evelyn","thumb":"http://image.tmdb.org/t/p/original/eEvUjiC9KdLKSBmvd9nUV1sJWBb.jpg"},{"id":105452,"filter":"actor=105452","tag":"Zara Michales","role":"Ellie","thumb":"http://image.tmdb.org/t/p/original/dTJopTPVQVv6Hvm839vWJAdMayS.jpg"},{"id":33976,"filter":"actor=33976","tag":"Mitchell Butel","role":"Howard Pace","thumb":"http://image.tmdb.org/t/p/original/eGPy25wuJB8DvtkCbQfBz8xlPxm.jpg"},{"id":43180,"filter":"actor=43180","tag":"Dean Kyrwood","role":"Jeff Eggby","thumb":"http://image.tmdb.org/t/p/original/lPomK4tjx8Z0I6ckpwNzV2EPcsi.jpg"},{"id":105453,"filter":"actor=105453","tag":"Nancy Denis","role":"Regina Jones","thumb":"http://image.tmdb.org/t/p/original/iF2fsMzNvjnmJqyPobfLONW5Gdm.jpg"},{"id":105454,"filter":"actor=105454","tag":"Gordon Waddell","role":"Ed Full","thumb":"http://image.tmdb.org/t/p/original/gkR1KSDAYvKwYoMkcsue976dMf3.jpg"},{"id":105455,"filter":"actor=105455","tag":"Duncan Ragg","role":"Jake Redman","thumb":"http://image.tmdb.org/t/p/original/35WZW5r4iKaQWzRPQDV0x7GVgb7.jpg"},{"id":105456,"filter":"actor=105456","tag":"Carma Sharon","role":"Restaurant Patron","thumb":"http://image.tmdb.org/t/p/original/6S0lGG6Be0uhL4ScclEvoynZ5h4.jpg"
|
||||
},
|
||||
{
|
||||
"id":105457,"filter":"actor=105457","tag":"Angie Tricker","role":"Commuter","thumb":"http://image.tmdb.org/t/p/original/stjJX7IbdnhWWNwmeYd4krsfBQl.jpg"},{"id":40793,"filter":"actor=40793","tag":"Marisa Lamonica","role":"Commuter","thumb":"http://image.tmdb.org/t/p/original/5PeKqYAlzsapwpGrXg0MhsBoq8s.jpg"},{"id":105458,"filter":"actor=105458","tag":"Katie McConnell","role":"School Teacher","thumb":"http://image.tmdb.org/t/p/original/qZqhpGNxOUw1siRWIRknU4CD0Qs.jpg"},{"id":105459,"filter":"actor=105459","tag":"Ezekiel Simat","role":"Attractive Socialite","thumb":"http://image.tmdb.org/t/p/original/adVTa4X5Fa8zjLL5xMCVywgrUhD.jpg"},{"id":40786,"filter":"actor=40786","tag":"Jean-Pierre Yerma","role":"Businessman","thumb":"http://image.tmdb.org/t/p/original/vf5elElGX25CrYkIxEsxLlCoucA.jpg"},{"id":105460,"filter":"actor=105460","tag":"Marek Radin","role":"Bike Messenger","thumb":"http://image.tmdb.org/t/p/original/pgmmAj1byaXbpnmZ1PokWXKJa2h.jpg"
|
||||
},
|
||||
{
|
||||
"id":105461,
|
||||
"filter":"actor=105461",
|
||||
"tag":"Jack Ellis",
|
||||
"role":"Noah Marks",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/siw9skaS2fSWZ63i21jUpMelZ8h.jpg"
|
||||
},
|
||||
{
|
||||
"id":40795,"filter":"actor=40795","tag":"Michael-Anthony Taylor","role":"Ticket Attendant - Grand Central Station","thumb":"http://image.tmdb.org/t/p/original/7GyGFHEqViuB2QiueXhpHjIm13s.jpg"},{"id":105462,"filter":"actor=105462","tag":"Morrison James","role":"Ticket Booth Attendant - Grand Central Station","thumb":"http://image.tmdb.org/t/p/original/braNh7qDYl3CWX415BRRWXy58Xd.jpg"},{"id":105463,"filter":"actor=105463","tag":"Amanda Azarian","role":"Neighbor","thumb":"http://image.tmdb.org/t/p/original/9Moc42Btv8K6Q7dVFnycvHo05A4.jpg"},{"id":26647,"filter":"actor=26647","tag":"Erica Long","role":"New York Businesswoman","thumb":"http://image.tmdb.org/t/p/original/xjuZkP5wv7zGIe7jzA5BfUN5KqV.jpg"},{"id":105464,"filter":"actor=105464","tag":"Shameer Birges","role":"Cab driver","thumb":"http://image.tmdb.org/t/p/original/hFG2wgOn8hkhJ7cUeFHlIDYBcbS.jpg"
|
||||
},
|
||||
{
|
||||
"id":105465,"filter":"actor=105465","tag":"Madison McKoy","role":"Crash Site Man","thumb":"http://image.tmdb.org/t/p/original/wNGNZuC62eEmJOyfbIYRyIWimNq.jpg"
|
||||
},
|
||||
{
|
||||
"id":40857,"filter":"actor=40857",
|
||||
"tag":"Nora Sommerkamp",
|
||||
"role":"Casual Woman / Hip Gallery Visitor",
|
||||
"thumb":"http://image.tmdb.org/t/p/original/A1W0zcZs3m7wxXosKW7YUNe1RnM.jpg"
|
||||
}
|
||||
],
|
||||
"Similar":[
|
||||
{
|
||||
"id":20654,
|
||||
"filter":"similar=20654",
|
||||
"tag":"Overdrive"
|
||||
},
|
||||
{
|
||||
"id":26333,"filter":"similar=26333","tag":"Flatliners"},{"id":16874,"filter":"similar=16874","tag":"Before I Fall"},{"id":32222,"filter":"similar=32222","tag":"The Circle"},{"id":56162,"filter":"similar=56162","tag":"USS Indianapolis: Men of Courage"},{"id":18537,"filter":"similar=18537","tag":"Unlocked"
|
||||
},
|
||||
{
|
||||
"id":54904,"filter":"similar=54904","tag":"Collide"},{"id":27739,"filter":"similar=27739","tag":"A Family Man"},{"id":27308,"filter":"similar=27308","tag":"Shot Caller"},{"id":37534,"filter":"similar=37534","tag":"The Snowman"},{"id":17826,"filter":"similar=17826","tag":"The Ottoman Lieutenant"},{"id":19086,"filter":"similar=19086","tag":"Security"},{"id":19733,"filter":"similar=19733","tag":"The Dark Tower"},{"id":16889,"filter":"similar=16889","tag":"The Space Between Us"},{"id":20651,"filter":"similar=20651","tag":"Geostorm"},{"id":57977,"filter":"similar=57977","tag":"Incarnate"},{"id":19088,"filter":"similar=19088","tag":"The Hunter's Prayer"},{"id":100761,"filter":"similar=100761","tag":"Shut In"
|
||||
},
|
||||
{
|
||||
"id":19080,"filter":"similar=19080","tag":"First Kill"},{"id":20648,"filter":"similar=20648","tag":"24 Hours to Live"
|
||||
}
|
||||
],
|
||||
"Extras":{
|
||||
"size":1,
|
||||
"Metadata":[
|
||||
{
|
||||
"ratingKey":"34766",
|
||||
"key":"/library/metadata/34766",
|
||||
"guid":"iva://api.internetvideoarchive.com/2.0/DataService/VideoAssets(528888)?lang=en&bitrates=80,212,450,750,1500,2500,5000,8000&duration=141&adaptive=1&dts=0",
|
||||
"type":"clip",
|
||||
"title":"2:22 (Clean Trailer)",
|
||||
"summary":"",
|
||||
"index":1,
|
||||
"year":2017,
|
||||
"thumb":"/library/metadata/34766/thumb/1583190431",
|
||||
"subtype":"trailer",
|
||||
"duration":141000,
|
||||
"originallyAvailableAt":"2017-11-29",
|
||||
"addedAt":1583190431,
|
||||
"extraType":"1",
|
||||
"Media":[
|
||||
{
|
||||
"id":59929,
|
||||
"duration":141000,
|
||||
"bitrate":2500,
|
||||
"width":1920,
|
||||
"height":1080,
|
||||
"aspectRatio":1.78,
|
||||
"audioCodec":"aac",
|
||||
"videoCodec":"h264",
|
||||
"videoResolution":"1080",
|
||||
"container":"mp4",
|
||||
"premium":true,
|
||||
"Part":[
|
||||
{
|
||||
"id":63449,
|
||||
"duration":141000,
|
||||
"container":"mp4",
|
||||
"key":"/services/iva/assets/528888/video.mp4?bitrate=2500",
|
||||
"optimizedForStreaming":true,
|
||||
"Stream":[
|
||||
{
|
||||
"id":158473,
|
||||
"streamType":1,
|
||||
"codec":"h264",
|
||||
"index":0,
|
||||
"bitrate":2500,
|
||||
"height":1080,
|
||||
"width":1920,
|
||||
"displayTitle":"1080p (H.264)"
|
||||
},
|
||||
{
|
||||
"id":158474,"streamType":2,
|
||||
"selected":true,
|
||||
"codec":"aac",
|
||||
"index":1,
|
||||
"channels":2,
|
||||
"language":"English",
|
||||
"languageCode":"eng",
|
||||
"displayTitle":"English (AAC Stereo)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id":59930,"duration":141000,"bitrate":1500,
|
||||
"width":1280,"height":720,"aspectRatio":1.78,
|
||||
"audioCodec":"aac","videoCodec":"h264",
|
||||
"videoResolution":"720","container":"mp4",
|
||||
"premium":true,
|
||||
"Part":[
|
||||
{
|
||||
"id":63450,
|
||||
"duration":141000,
|
||||
"container":"mp4",
|
||||
"key":"/services/iva/assets/528888/video.mp4?bitrate=1500",
|
||||
"optimizedForStreaming":true,
|
||||
"Stream":[
|
||||
{
|
||||
"id":158475,"streamType":1,"codec":"h264","index":0,
|
||||
"bitrate":1500,"height":720,"width":1280,
|
||||
"displayTitle":"720p (H.264)"
|
||||
},
|
||||
{
|
||||
"id":158476,"streamType":2,"selected":true,"codec":"aac",
|
||||
"index":1,"channels":2,"language":"English",
|
||||
"languageCode":"eng",
|
||||
"displayTitle":"English (AAC Stereo)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id":59931,"duration":141000,"bitrate":450,"width":640,"height":480,"aspectRatio":1.33,"audioCodec":"aac","videoCodec":"h264",
|
||||
"videoResolution":"480","container":"mp4","premium":true,"Part":[{"id":63451,"duration":141000,"container":"mp4","key":"/services/iva/assets/528888/video.mp4?bitrate=450","optimizedForStreaming":true,"Stream":[{"id":158477,"streamType":1,"codec":"h264","index":0,"bitrate":450,"height":480,"width":640,"displayTitle":"480p (H.264)"},{"id":158478,"streamType":2,"selected":true,"codec":"aac","index":1,"channels":2,"language":"English","languageCode":"eng","displayTitle":"English (AAC Stereo)"}]}]}]}]}}
|
|
@ -1,54 +0,0 @@
|
|||
[
|
||||
{
|
||||
"accessible": true,
|
||||
"exists": true,
|
||||
"id": 29652,
|
||||
"key": "/library/parts/29652/1567110629/file.mkv",
|
||||
"duration": 6555328,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/#/2 Fast 2 Furious (2003)/2 Fast 2 Furious.2003.1080p.[mkvonly].mkv",
|
||||
"size": 5056165150,
|
||||
"audioProfile": "dts",
|
||||
"container": "mkv",
|
||||
"deepAnalysisVersion": "4",
|
||||
"indexes": "sd",
|
||||
"requiredBandwidths": "12566,11762,9535,7249,6673,6673,6673,6673",
|
||||
"videoProfile": "high",
|
||||
"Stream": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 42871,
|
||||
"key": "/library/parts/42871/1423608842/file.mkv",
|
||||
"duration": 6410985,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/f/The Fast and the Furious (2001)/The.Fast.and.the.Furious.2001.1080p.[mkvonly].mkv",
|
||||
"size": 5477082722,
|
||||
"audioProfile": "dts",
|
||||
"container": "mkv",
|
||||
"deepAnalysisVersion": "4",
|
||||
"requiredBandwidths": "13924,11021,9123,7933,7431,7160,7160,7160",
|
||||
"videoProfile": "high"
|
||||
},
|
||||
{
|
||||
"id": 34583,
|
||||
"key": "/library/parts/34583/1423467436/file.mkv",
|
||||
"duration": 6405396,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/f/Fast and Furious (2009)/Fast.and.Furious.2009.[mkvonly].mkv",
|
||||
"size": 5467565449,
|
||||
"audioProfile": "dts",
|
||||
"container": "mkv",
|
||||
"deepAnalysisVersion": "4",
|
||||
"requiredBandwidths": "17671,13493,9945,8390,8372,8372,8372,8372",
|
||||
"videoProfile": "high"
|
||||
},
|
||||
{
|
||||
"id": 29051,
|
||||
"key": "/library/parts/29051/1423608403/file.mkv",
|
||||
"duration": 6206272,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/a/Annapolis (2006)/annapolis.720p-x264.mkv",
|
||||
"size": 4695969110,
|
||||
"container": "mkv",
|
||||
"deepAnalysisVersion": "4",
|
||||
"requiredBandwidths": "13531,11830,8166,6975,6588,6484,6484,6484",
|
||||
"videoProfile": "high"
|
||||
}
|
||||
]
|
|
@ -1,205 +0,0 @@
|
|||
{
|
||||
"MediaContainer": {
|
||||
"size": 30,
|
||||
"totalSize": 2570,
|
||||
"allowSync": true,
|
||||
"art": "/:/resources/movie-fanart.jpg",
|
||||
"identifier": "com.plexapp.plugins.library",
|
||||
"librarySectionID": 4,
|
||||
"librarySectionTitle": "Movies",
|
||||
"librarySectionUUID": "611d44e2-c4cc-4cec-8b65-d77b037e1b3d",
|
||||
"mediaTagPrefix": "/system/bundle/media/flags/",
|
||||
"mediaTagVersion": 1576869286,
|
||||
"offset": 31,
|
||||
"thumb": "/:/resources/movie.png",
|
||||
"title1": "Movies",
|
||||
"title2": "All Movies",
|
||||
"viewGroup": "movie",
|
||||
"viewMode": 65592,
|
||||
"Metadata": [
|
||||
{
|
||||
"ratingKey": "9042",
|
||||
"key": "/library/metadata/9042",
|
||||
"guid": "com.plexapp.agents.imdb://tt4385888?lang=en",
|
||||
"studio": "Annapurna Pictures",
|
||||
"type": "movie",
|
||||
"title": "20th Century Women",
|
||||
"contentRating": "dk/fr.u.7",
|
||||
"summary": "In 1979 Santa Barbara, California, Dorothea Fields is a determined single mother in her mid-50s who is raising her adolescent son, Jamie, at a moment brimming with cultural change and rebellion. Dorothea enlists the help of two younger women – Abbie, a free-spirited punk artist living as a boarder in the Fields' home and Julie, a savvy and provocative teenage neighbour – to help with Jamie's upbringing.",
|
||||
"rating": 8.9,
|
||||
"audienceRating": 7.3,
|
||||
"year": 2016,
|
||||
"thumb": "/library/metadata/9042/thumb/1575678525",
|
||||
"art": "/library/metadata/9042/art/1575678525",
|
||||
"duration": 7124159,
|
||||
"originallyAvailableAt": "2016-12-28",
|
||||
"addedAt": 1490792202,
|
||||
"updatedAt": 1575678525,
|
||||
"audienceRatingImage": "rottentomatoes://image.rating.upright",
|
||||
"chapterSource": "media",
|
||||
"primaryExtraKey": "/library/metadata/9421",
|
||||
"ratingImage": "rottentomatoes://image.rating.ripe",
|
||||
"Media": [
|
||||
{
|
||||
"id": 9325,
|
||||
"duration": 7124159,
|
||||
"bitrate": 10980,
|
||||
"width": 1920,
|
||||
"height": 960,
|
||||
"aspectRatio": 1.85,
|
||||
"audioChannels": 6,
|
||||
"audioCodec": "ac3",
|
||||
"videoCodec": "h264",
|
||||
"videoResolution": "1080",
|
||||
"container": "mkv",
|
||||
"videoFrameRate": "24p",
|
||||
"audioProfile": "dts",
|
||||
"videoProfile": "high",
|
||||
"Part": [
|
||||
{
|
||||
"id": 29623,
|
||||
"key": "/library/parts/29623/1567348678/file.mkv",
|
||||
"duration": 7124159,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/#/20th Century Women (2016)/20th.Century.Women.2016.1080p.BluRay.x264-GECKOS.mkv",
|
||||
"size": 9777930144,
|
||||
"audioProfile": "dts",
|
||||
"container": "mkv",
|
||||
"videoProfile": "high"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre": [
|
||||
{
|
||||
"tag": "Comedy"
|
||||
},
|
||||
{
|
||||
"tag": "Drama"
|
||||
}
|
||||
],
|
||||
"Director": [
|
||||
{
|
||||
"tag": "Mike Mills"
|
||||
}
|
||||
],
|
||||
"Writer": [
|
||||
{
|
||||
"tag": "Mike Mills"
|
||||
}
|
||||
],
|
||||
"Country": [
|
||||
{
|
||||
"tag": "USA"
|
||||
}
|
||||
],
|
||||
"Role": [
|
||||
{
|
||||
"tag": "Alia Shawkat"
|
||||
},
|
||||
{
|
||||
"tag": "Alison Elliott"
|
||||
},
|
||||
{
|
||||
"tag": "Annette Bening"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ratingKey": "9050",
|
||||
"key": "/library/metadata/9050",
|
||||
"guid": "com.plexapp.agents.imdb://tt0463854?lang=en",
|
||||
"studio": "DNA Films",
|
||||
"type": "movie",
|
||||
"title": "28 Weeks Later",
|
||||
"contentRating": "dk/15",
|
||||
"summary": "The inhabitants of the British Isles have lost their battle against the onslaught of disease, as the deadly rage virus has killed every citizen there. Six months later, a group of Americans dare to set foot on the isles, convinced the danger has come and gone. But it soon becomes all too clear that the scourge continues to live, waiting to pounce on its next victims.",
|
||||
"rating": 7.1,
|
||||
"audienceRating": 6.7,
|
||||
"year": 2007,
|
||||
"tagline": "When days turn to weeks... the horror returns.",
|
||||
"thumb": "/library/metadata/9050/thumb/1575678555",
|
||||
"art": "/library/metadata/9050/art/1575678555",
|
||||
"duration": 5757240,
|
||||
"originallyAvailableAt": "2007-04-26",
|
||||
"addedAt": 1186162396,
|
||||
"updatedAt": 1575678555,
|
||||
"lastViewedAt": 1575678555,
|
||||
"audienceRatingImage": "rottentomatoes://image.rating.upright",
|
||||
"chapterSource": "agent",
|
||||
"primaryExtraKey": "/library/metadata/9454",
|
||||
"ratingImage": "rottentomatoes://image.rating.ripe",
|
||||
"Media": [
|
||||
{
|
||||
"id": 9333,
|
||||
"duration": 5757240,
|
||||
"bitrate": 1022,
|
||||
"width": 592,
|
||||
"height": 320,
|
||||
"aspectRatio": 1.85,
|
||||
"audioChannels": 2,
|
||||
"audioCodec": "mp3",
|
||||
"videoCodec": "mpeg4",
|
||||
"videoResolution": "sd",
|
||||
"container": "avi",
|
||||
"videoFrameRate": "PAL",
|
||||
"videoProfile": "advanced simple",
|
||||
"Part": [
|
||||
{
|
||||
"id": 29662,
|
||||
"key": "/library/parts/29662/1186162396/file.avi",
|
||||
"duration": 5757240,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/#/28 Weeks Later (2007)/28 Weeks Later.avi",
|
||||
"size": 735303680,
|
||||
"container": "avi",
|
||||
"videoProfile": "advanced simple"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre": [
|
||||
{
|
||||
"tag": "Drama"
|
||||
},
|
||||
{
|
||||
"tag": "Horror"
|
||||
}
|
||||
],
|
||||
"Director": [
|
||||
{
|
||||
"tag": "Juan Carlos Fresnadillo"
|
||||
}
|
||||
],
|
||||
"Writer": [
|
||||
{
|
||||
"tag": "Enrique López Lavigne"
|
||||
},
|
||||
{
|
||||
"tag": "Jesús Olmo"
|
||||
}
|
||||
],
|
||||
"Country": [
|
||||
{
|
||||
"tag": "United Kingdom"
|
||||
}
|
||||
],
|
||||
"Collection": [
|
||||
{
|
||||
"tag": "28 Days/Weeks Later"
|
||||
}
|
||||
],
|
||||
"Role": [
|
||||
{
|
||||
"tag": "Amanda Lawrence"
|
||||
},
|
||||
{
|
||||
"tag": "Amanda Walker"
|
||||
},
|
||||
{
|
||||
"tag": "Andrew Byron"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1,207 +0,0 @@
|
|||
{
|
||||
"MediaContainer": {
|
||||
"size": 200,
|
||||
"totalSize": 2570,
|
||||
"allowSync": true,
|
||||
"art": "/:/resources/movie-fanart.jpg",
|
||||
"identifier": "com.plexapp.plugins.library",
|
||||
"librarySectionID": 4,
|
||||
"librarySectionTitle": "Movies",
|
||||
"librarySectionUUID": "611d44e2-c4cc-4cec-8b65-d77b037e1b3d",
|
||||
"mediaTagPrefix": "/system/bundle/media/flags/",
|
||||
"mediaTagVersion": 1576869286,
|
||||
"offset": 0,
|
||||
"thumb": "/:/resources/movie.png",
|
||||
"title1": "Movies",
|
||||
"title2": "All Movies",
|
||||
"viewGroup": "movie",
|
||||
"viewMode": 65592,
|
||||
"Metadata": [
|
||||
{
|
||||
"ratingKey": "9036",
|
||||
"key": "/library/metadata/9036",
|
||||
"guid": "com.plexapp.agents.imdb://tt0322259?lang=en",
|
||||
"studio": "Mikona Productions GmbH & Co. KG",
|
||||
"type": "movie",
|
||||
"title": "2 Fast 2 Furious",
|
||||
"contentRating": "dk/11",
|
||||
"summary": "It's a major double-cross when former police officer Brian O'Conner teams up with his ex-con buddy Roman Pearce to transport a shipment of \"dirty\" money for shady Miami-based import-export dealer Carter Verone. But the guys are actually working with undercover agent Monica Fuentes to bring Verone down.",
|
||||
"rating": 3.6,
|
||||
"userRating": "2.5",
|
||||
"audienceRating": 5.0,
|
||||
"year": 2003,
|
||||
"tagline": "How Fast Do You Want It?",
|
||||
"thumb": "/library/metadata/9036/thumb/1575678418",
|
||||
"art": "/library/metadata/9036/art/1575678418",
|
||||
"duration": 6555328,
|
||||
"originallyAvailableAt": "2003-06-05",
|
||||
"addedAt": 1423435770,
|
||||
"updatedAt": 1575678418,
|
||||
"audienceRatingImage": "rottentomatoes://image.rating.spilled",
|
||||
"chapterSource": "mixed",
|
||||
"primaryExtraKey": "/library/metadata/9397",
|
||||
"ratingImage": "rottentomatoes://image.rating.rotten",
|
||||
"Media": [
|
||||
{
|
||||
"id": 9319,
|
||||
"duration": 6555328,
|
||||
"bitrate": 6170,
|
||||
"width": 1280,
|
||||
"height": 536,
|
||||
"aspectRatio": 2.35,
|
||||
"audioChannels": 6,
|
||||
"audioCodec": "ac3",
|
||||
"videoCodec": "h264",
|
||||
"videoResolution": "720",
|
||||
"container": "mkv",
|
||||
"videoFrameRate": "24p",
|
||||
"audioProfile": "dts",
|
||||
"videoProfile": "high",
|
||||
"Part": [
|
||||
{
|
||||
"id": 29652,
|
||||
"key": "/library/parts/29652/1567110629/file.mkv",
|
||||
"duration": 6555328,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/#/2 Fast 2 Furious (2003)/2 Fast 2 Furious.2003.1080p.[mkvonly].mkv",
|
||||
"size": 5056165150,
|
||||
"audioProfile": "dts",
|
||||
"container": "mkv",
|
||||
"videoProfile": "high"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre": [
|
||||
{
|
||||
"tag": "Action"
|
||||
},
|
||||
{
|
||||
"tag": "Crime"
|
||||
}
|
||||
],
|
||||
"Director": [
|
||||
{
|
||||
"tag": "John Singleton"
|
||||
}
|
||||
],
|
||||
"Writer": [
|
||||
{
|
||||
"tag": "Derek Haas"
|
||||
},
|
||||
{
|
||||
"tag": "Michael Brandt"
|
||||
}
|
||||
],
|
||||
"Country": [
|
||||
{
|
||||
"tag": "USA"
|
||||
}
|
||||
],
|
||||
"Collection": [
|
||||
{
|
||||
"tag": "The Fast and the Furious"
|
||||
}
|
||||
],
|
||||
"Role": [
|
||||
{
|
||||
"tag": "Amaury Nolasco"
|
||||
},
|
||||
{
|
||||
"tag": "Bettina Huffer"
|
||||
},
|
||||
{
|
||||
"tag": "Cobette Harper"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ratingKey": "34765",
|
||||
"key": "/library/metadata/34765",
|
||||
"guid": "com.plexapp.agents.imdb://tt1131724?lang=en",
|
||||
"studio": "Screen Australia",
|
||||
"type": "movie",
|
||||
"title": "2:22",
|
||||
"contentRating": "PG-13",
|
||||
"summary": "A man's life is derailed when an ominous pattern of events repeats itself in exactly the same manner every day, ending at precisely 2:22 p.m.",
|
||||
"rating": 5.8,
|
||||
"year": 2017,
|
||||
"thumb": "/library/metadata/34765/thumb/1583190431",
|
||||
"art": "/library/metadata/34765/art/1583190431",
|
||||
"duration": 5933984,
|
||||
"originallyAvailableAt": "2017-06-29",
|
||||
"addedAt": 1583190383,
|
||||
"updatedAt": 1583190431,
|
||||
"chapterSource": "media",
|
||||
"primaryExtraKey": "/library/metadata/34766",
|
||||
"ratingImage": "imdb://image.rating",
|
||||
"Media": [
|
||||
{
|
||||
"id": 59928,
|
||||
"duration": 5933984,
|
||||
"bitrate": 4934,
|
||||
"width": 1920,
|
||||
"height": 796,
|
||||
"aspectRatio": 2.35,
|
||||
"audioChannels": 6,
|
||||
"audioCodec": "ac3",
|
||||
"videoCodec": "h264",
|
||||
"videoResolution": "1080",
|
||||
"container": "mkv",
|
||||
"videoFrameRate": "24p",
|
||||
"videoProfile": "high",
|
||||
"Part": [
|
||||
{
|
||||
"id": 63448,
|
||||
"key": "/library/parts/63448/1583190312/file.mkv",
|
||||
"duration": 5933984,
|
||||
"file": "/share/CACHEDEV1_DATA/video/old-movies/#/2-22 (2017)/2-22 (2017).mkv",
|
||||
"size": 3659878640,
|
||||
"container": "mkv",
|
||||
"hasThumbnail": "1",
|
||||
"videoProfile": "high"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Genre": [
|
||||
{
|
||||
"tag": "Drama"
|
||||
},
|
||||
{
|
||||
"tag": "Sci-Fi"
|
||||
}
|
||||
],
|
||||
"Director": [
|
||||
{
|
||||
"tag": "Paul Currie"
|
||||
}
|
||||
],
|
||||
"Writer": [
|
||||
{
|
||||
"tag": "Nathan Parker"
|
||||
},
|
||||
{
|
||||
"tag": "Todd Stein"
|
||||
}
|
||||
],
|
||||
"Country": [
|
||||
{
|
||||
"tag": "Australia"
|
||||
}
|
||||
],
|
||||
"Role": [
|
||||
{
|
||||
"tag": "Michiel Huisman"
|
||||
},
|
||||
{
|
||||
"tag": "Teresa Palmer"
|
||||
},
|
||||
{
|
||||
"tag": "Sam Reid"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
}
|
|
@ -12,13 +12,13 @@
|
|||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
</div>
|
||||
<b-input-group id="ArraySep" :prepend="$t('Modules.ET.Settings.ArraySep')" class="mt-3">
|
||||
<b-input-group id="ArraySepGrp" :prepend="$t('Modules.ET.Settings.ArraySep')" class="mt-3">
|
||||
<b-form-input id="ArraySep" name="ArraySep" type="text" class="form-control" v-model="ArraySep" :disabled=false :maxlength=1 @change="setArraySep()"></b-form-input>
|
||||
</b-input-group>
|
||||
<b-input-group id="ColumnSep" :prepend="$t('Modules.ET.Settings.ColumnSep')" class="mt-3">
|
||||
<b-form-input id="ColumnSep" name="ColumnSep" type="text" class="form-control" v-model="ColumnSep" :disabled=false :maxlength=1 @change="setColumnSep()"></b-form-input>
|
||||
<b-input-group id="ColumnSepGrp" :prepend="$t('Modules.ET.Settings.ColumnSep')" class="mt-3">
|
||||
<b-form-input id="ColumnSep" name="ColumnSep" type="text" class="form-control" v-model="ColumnSep" :disabled=false :maxlength=1 @change="setColumnSep"></b-form-input>
|
||||
</b-input-group>
|
||||
<b-input-group id="TimeOut" :prepend="$t('Modules.ET.Settings.TimeOut')" class="mt-3">
|
||||
<b-input-group id="TimeOutGrp" :prepend="$t('Modules.ET.Settings.TimeOut')" class="mt-3">
|
||||
<b-form-input id="TimeOut" name="TimeOut" type="text" class="form-control" v-model="TimeOut" :disabled=false :maxlength=2 @change="setTimeOut()"></b-form-input>
|
||||
</b-input-group>
|
||||
<b-form-group id="b-form-group">
|
||||
|
@ -40,16 +40,27 @@
|
|||
import i18n from '../../../../i18n'
|
||||
export default {
|
||||
created() {
|
||||
this.getcbDefaults()
|
||||
this.getcbDefaults();
|
||||
if (wtconfig.get('ET.ColumnSep') == '\t')
|
||||
{
|
||||
this.ColumnSep = '{TAB}';
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ColumnSep = wtconfig.get('ET.ColumnSep');
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
outDirVal: wtconfig.get('ET.OutPath', i18n.t('Modules.ET.Settings.SelectOutDir')),
|
||||
ArraySep: wtconfig.get('ET.ArraySep'),
|
||||
ColumnSep: wtconfig.get('ET.ColumnSep'),
|
||||
// ColumnSep: wtconfig.get('ET.ColumnSep'),
|
||||
ColumnSep: '',
|
||||
//ColumnSep1: this.computedColumnSep,
|
||||
TimeOut: wtconfig.get('PMS.TimeOut'),
|
||||
cbSelected: [],
|
||||
cbOptions: [
|
||||
{ text: i18n.t('Modules.ET.Settings.ExportToExcel'), value: 'ExpExcel' },
|
||||
{ text: i18n.t('Modules.ET.Settings.OrgTitleNull'), value: 'OrgTitleNull' },
|
||||
{ text: i18n.t('Modules.ET.Settings.SortTitleNull'), value: 'SortTitleNull' },
|
||||
{ text: i18n.t('Modules.ET.Settings.AutoXLSCol'), value: 'AutoXLSCol' },
|
||||
|
@ -57,9 +68,42 @@
|
|||
]
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
ColumnSep22: {
|
||||
// getter
|
||||
get: function () {
|
||||
if ( wtconfig.get('ET.ColumnSep') != '\t' ){
|
||||
console.log('Ged normal retur')
|
||||
return wtconfig.get('ET.ColumnSep')
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log('Ged tab retur')
|
||||
return '{TAB}'
|
||||
}
|
||||
},
|
||||
// setter
|
||||
set: function (newValue) {
|
||||
wtconfig.set('ET.ColumnSep', newValue)
|
||||
}
|
||||
},
|
||||
computedColumnSep123: function(){
|
||||
if ( wtconfig.get('ET.ColumnSep') != '\t' ){
|
||||
console.log('Ged normal retur')
|
||||
return wtconfig.get('ET.ColumnSep')
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log('Ged tab retur')
|
||||
return '{TAB}'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
methods: {
|
||||
getcbDefaults(){
|
||||
const cbItems = ["OrgTitleNull", "SortTitleNull", "AutoXLSCol", "AutoXLSRow"];
|
||||
const cbItems = ["ExpExcel", "OrgTitleNull", "SortTitleNull", "AutoXLSCol", "AutoXLSRow"];
|
||||
for(let i = 0; i < cbItems.length; i++){
|
||||
if (wtconfig.get("ET." + cbItems[i], false)){
|
||||
this.cbSelected.push(cbItems[i])
|
||||
|
@ -68,7 +112,7 @@
|
|||
},
|
||||
filterTable(){
|
||||
this.$nextTick(()=>{console.log(this.cbSelected);})
|
||||
for( var cbItem of ["OrgTitleNull", "SortTitleNull", "AutoXLSCol", "AutoXLSRow"]){
|
||||
for( var cbItem of ["ExpExcel","OrgTitleNull", "SortTitleNull", "AutoXLSCol", "AutoXLSRow"]){
|
||||
wtconfig.set("ET." + cbItem, (this.cbSelected.includes(cbItem)))
|
||||
}
|
||||
},
|
||||
|
@ -83,23 +127,36 @@
|
|||
log.debug(`Selected Directory is ${outDir}`);
|
||||
}
|
||||
},
|
||||
setColumnSep: function(){
|
||||
if (this.ColumnSep == '9')
|
||||
setColumnSep(val){
|
||||
if (val.length > 1)
|
||||
{
|
||||
wtconfig.set('ET.ColumnSep', '\t')
|
||||
this.$bvToast.toast(this.$t("Modules.ET.ErrorBadSep"), {
|
||||
title: this.$t("Modules.ET.ErrorBadSepTitle"),
|
||||
autoHideDelay: 3000,
|
||||
solid: true,
|
||||
variant: 'primary',
|
||||
toaster: 'b-toaster-bottom-center'
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
wtconfig.set('ET.ColumnSep', this.ColumnSep)
|
||||
{
|
||||
if (val == '9')
|
||||
{
|
||||
wtconfig.set('ET.ColumnSep', '\t')
|
||||
this.ColumnSep = '{TAB}'
|
||||
}
|
||||
else
|
||||
{
|
||||
wtconfig.set('ET.ColumnSep', this.ColumnSep)
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
setArraySep: function(){
|
||||
wtconfig.set('ET.ArraySep', this.ArraySep)
|
||||
},
|
||||
setTimeOut: function(){
|
||||
wtconfig.set('PMS.TimeOut', this.TimeOut)
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -6,9 +6,7 @@
|
|||
"Level 3": "level3",
|
||||
"Level 4": "level4",
|
||||
"Level 5": "level5",
|
||||
"Level 6": "level6",
|
||||
"Tommy": "tommy"
|
||||
|
||||
"Level 6": "level6"
|
||||
},
|
||||
"LevelCount": {
|
||||
"Level 1": 1,
|
||||
|
@ -16,24 +14,9 @@
|
|||
"Level 3": 2,
|
||||
"Level 4": 2,
|
||||
"Level 5": 2,
|
||||
"Level 6": 2,
|
||||
"Tommy": 2
|
||||
"Level 6": 2
|
||||
},
|
||||
"level": {
|
||||
"tommy": [
|
||||
"Title",
|
||||
"Part Duration"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
],
|
||||
"Inspect": [
|
||||
"Part Duration"
|
||||
|
||||
|
||||
],
|
||||
"level": {
|
||||
"level1": [
|
||||
"Media ID", "Title", "Sort title",
|
||||
"Studio", "Content Rating", "Year",
|
||||
|
@ -1147,11 +1130,270 @@
|
|||
}
|
||||
|
||||
}
|
||||
},
|
||||
"episode": {
|
||||
"levels": {
|
||||
"Level 1": "level1",
|
||||
"Level 2": "level2",
|
||||
"Tommy": "tommy"
|
||||
},
|
||||
"LevelCount": {
|
||||
"Level 1": 1,
|
||||
"Level 2": 1,
|
||||
"Level 3": 1,
|
||||
"Level 4": 2,
|
||||
"Level 5": 2,
|
||||
"Level 6": 2,
|
||||
"Tommy": 1
|
||||
},
|
||||
"level": {
|
||||
"tommy": [
|
||||
"Media ID"
|
||||
|
||||
|
||||
],
|
||||
"verified": [
|
||||
"Series Title",
|
||||
"Episode Sort Title",
|
||||
"Episode Title",
|
||||
"Year",
|
||||
"Season",
|
||||
"Episode",
|
||||
"Content Rating",
|
||||
"Summary",
|
||||
"Rating",
|
||||
"User Rating"
|
||||
|
||||
],
|
||||
"Clear Fields": [
|
||||
|
||||
"Writers",
|
||||
"Duration",
|
||||
"Added",
|
||||
"Updated",
|
||||
"Poster url",
|
||||
"Collection",
|
||||
"Locked Fields",
|
||||
"View Count"
|
||||
],
|
||||
"Invalid, belongs to shows": [
|
||||
"Studio",
|
||||
"Originally Aired",
|
||||
"Directors"
|
||||
|
||||
],
|
||||
"level1": [
|
||||
"Media ID",
|
||||
"Series Title",
|
||||
"Episode Sort Title",
|
||||
"Episode Title",
|
||||
"Year",
|
||||
"Season",
|
||||
"Episode",
|
||||
"Content Rating",
|
||||
"Summary",
|
||||
"Rating",
|
||||
"User Rating"
|
||||
],
|
||||
"level2": [
|
||||
"Writers",
|
||||
"Duration",
|
||||
"Added",
|
||||
"Updated",
|
||||
"Poster url",
|
||||
"Collection",
|
||||
"Locked Fields",
|
||||
"View Count"
|
||||
]
|
||||
|
||||
},
|
||||
"fields": {
|
||||
"Media ID":
|
||||
{
|
||||
"key": "$.ratingKey",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Series Title":
|
||||
{
|
||||
"key": "$.grandparentTitle",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Episode Sort Title":
|
||||
{
|
||||
"key": "$.titleSort",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Episode Title":
|
||||
{
|
||||
"key": "$.title",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Year":
|
||||
{
|
||||
"key": "$.year",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Season":
|
||||
{
|
||||
"key": "$.parentIndex",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Episode":
|
||||
{
|
||||
"key": "$.index",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Content Rating":
|
||||
{
|
||||
"key": "$.contentRating",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Summary":
|
||||
{
|
||||
"key": "$.summary",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Rating":
|
||||
{
|
||||
"key": "$.rating",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"User Rating":
|
||||
{
|
||||
"key": "$.userRating",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Studio":
|
||||
{
|
||||
"key": "$.studio",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Originally Aired":
|
||||
{},
|
||||
"Directors":
|
||||
{},
|
||||
"Writers":
|
||||
{},
|
||||
"Duration":
|
||||
{},
|
||||
"Added":
|
||||
{},
|
||||
"Updated":
|
||||
{},
|
||||
"Poster url":
|
||||
{},
|
||||
"Collection":
|
||||
{},
|
||||
"Locked Fields":
|
||||
{},
|
||||
"View Count":
|
||||
{}
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
"show": {
|
||||
"levels": {
|
||||
"No Level Yet": "level1"
|
||||
"Level 1": "level1",
|
||||
"Tommy": "tommy"
|
||||
},
|
||||
"LevelCount": {
|
||||
"Level 1": 1,
|
||||
"Level 2": 1,
|
||||
"Level 3": 1,
|
||||
"Level 4": 2,
|
||||
"Level 5": 2,
|
||||
"Level 6": 2,
|
||||
"Tommy": 1
|
||||
},
|
||||
"level": {
|
||||
"tommy": [
|
||||
"Title",
|
||||
"Part Duration"
|
||||
]
|
||||
},
|
||||
"fields": {
|
||||
"Media ID":
|
||||
{
|
||||
"key": "$.ratingKey",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Series Title":
|
||||
{
|
||||
"key": "$.grandparentTitle",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Episode Sort Title":
|
||||
{
|
||||
"key": "$.titleSort",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Episode Title":
|
||||
{
|
||||
"key": "$.title",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Year":
|
||||
{
|
||||
"key": "$.year",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Season":
|
||||
{
|
||||
"key": "$.parentIndex",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Episode":
|
||||
{
|
||||
"key": "$.index",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Content Rating":
|
||||
{
|
||||
"key": "$.contentRating",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Summary":
|
||||
{
|
||||
"key": "$.summary",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"Rating":
|
||||
{
|
||||
"key": "$.rating",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"User Rating":
|
||||
{
|
||||
"key": "$.userRating",
|
||||
"call": 1,
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
"artist": {
|
||||
"levels": {
|
||||
|
|
|
@ -25,7 +25,7 @@ const et = new class ET {
|
|||
async getSectionData({sectionName, baseURL, accessToken, libType})
|
||||
{
|
||||
const sectionData = []
|
||||
log.info(`Starting getSectionData with Name: ${sectionName}`)
|
||||
log.info(`Starting getSectionData with Name: ${sectionName} and with a type of: ${libType}`)
|
||||
// Get Section Key
|
||||
const libKey = await et.getSectionKey({libName: sectionName, baseURL: baseURL, accessToken: accessToken})
|
||||
log.debug(`Get SectionKey as: ${libKey}`)
|
||||
|
@ -42,7 +42,14 @@ const et = new class ET {
|
|||
const element = '/library/sections/' + libKey
|
||||
let size
|
||||
do {
|
||||
postURI = `/all?X-Plex-Container-Start=${idx}&X-Plex-Container-Size=${step}`;
|
||||
postURI = `/all?X-Plex-Container-Start=${idx}&X-Plex-Container-Size=${step}`;
|
||||
if (libType == 'episode')
|
||||
{
|
||||
console.log('Ged Episodes needed, so adding the type')
|
||||
console.log('Ged url called: ' + baseURL + element + postURI)
|
||||
postURI += '&type=4'
|
||||
}
|
||||
console.log('GED postURI: ' + postURI)
|
||||
chuncks = await et.getItemData({baseURL: baseURL, accessToken: accessToken, element: element, postURI: postURI});
|
||||
size = JSONPath({path: '$.MediaContainer.size', json: chuncks});
|
||||
log.verbose(`getSectionData chunck size is ${size} and idx is ${idx}`)
|
||||
|
@ -89,7 +96,8 @@ const et = new class ET {
|
|||
}
|
||||
|
||||
getRealLevelName(level, libType) {
|
||||
// First get the real name of the level, and not just the display name
|
||||
// First get the real name of the level, and not just the display name
|
||||
console.log('GED getRealLevelName LibType: ' + libType)
|
||||
const levelName = def[libType]['levels'][level]
|
||||
return levelName
|
||||
}
|
||||
|
@ -116,12 +124,12 @@ const et = new class ET {
|
|||
subItem['type'] = JSONPath({path: '$..type', json: section})[0];
|
||||
result.push(subItem)
|
||||
}
|
||||
await Promise.resolve(result)
|
||||
await Promise.resolve(result)
|
||||
return result
|
||||
}
|
||||
|
||||
getLevelDisplayName(level, libType){
|
||||
// return displayname fort with buildin levels
|
||||
// return displayname for the buildin levels
|
||||
const levels = et.getLevels(libType)
|
||||
let result = '';
|
||||
loop1:
|
||||
|
@ -163,7 +171,8 @@ const et = new class ET {
|
|||
|
||||
getLevelFields(level, libType) {
|
||||
// return fields in a level
|
||||
const out = []
|
||||
const out = []
|
||||
console.log('GED getLevelFields LibType: ' + libType)
|
||||
const levels = def[libType]['level'][et.getRealLevelName(level, libType)]
|
||||
Object.keys(levels).forEach(function(key) {
|
||||
out.push(levels[key])
|
||||
|
@ -180,7 +189,8 @@ const et = new class ET {
|
|||
|
||||
getLevels(libType) {
|
||||
// Returns an json of levels for a selected type og medias, like 'movie'
|
||||
const levels = def[libType]['levels']
|
||||
const levels = def[libType]['levels']
|
||||
console.log('GED getLevels LibType: ' + libType)
|
||||
log.debug('ET LevelNames: ' + JSON.stringify(levels))
|
||||
return levels
|
||||
}
|
||||
|
@ -196,6 +206,7 @@ const et = new class ET {
|
|||
getLevelKeys(libType){
|
||||
// Only return the keys for possible levels
|
||||
const out = []
|
||||
console.log('GED getLevelKeys LibType: ' + libType)
|
||||
const levels = def[libType]['levels']
|
||||
Object.keys(levels).forEach(function(key) {
|
||||
out.push(key)
|
||||
|
@ -389,7 +400,7 @@ const excel2 = new class Excel {
|
|||
const fields = et.getLevelFields(Level, libType)
|
||||
for (var i=0; i<fields.length; i++) {
|
||||
log.verbose('Column: ' + fields[i] + ' - ' + fields[i])
|
||||
let column = { header: fields[i], key: fields[i] }
|
||||
let column = { header: fields[i], key: fields[i], width: 5 }
|
||||
columns.push(column)
|
||||
}
|
||||
Sheet.columns = columns
|
||||
|
@ -399,6 +410,11 @@ const excel2 = new class Excel {
|
|||
pattern:'solid',
|
||||
fgColor:{ argb:'729fcf' }
|
||||
}
|
||||
// Set header font to bold
|
||||
Sheet.getRow(1).font = {bold: true}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Sheet.autoFilter = {
|
||||
from: 'A1',
|
||||
|
@ -478,7 +494,8 @@ const excel2 = new class Excel {
|
|||
}
|
||||
|
||||
async addRowToTmp( { libType, level, data, stream }) {
|
||||
// log.debug(`Start addRowToTmp. libType: ${libType} - level: ${level}`)
|
||||
log.debug(`Start addRowToTmp. libType: ${libType} - level: ${level}`)
|
||||
console.log('Ged data: ' + JSON.stringify(data))
|
||||
let date, year, month, day, hours, minutes, seconds
|
||||
const fields = et.getFields( libType, level)
|
||||
let lookup, val, array, i, valArray, valArrayVal, subType, subKey
|
||||
|
@ -486,7 +503,8 @@ const excel2 = new class Excel {
|
|||
let result = ''
|
||||
for (var x=0; x<fields.length; x++) {
|
||||
var name = Object.keys(fields[x]);
|
||||
lookup = JSONPath({path: '$..key', json: fields[x]})[0];
|
||||
lookup = JSONPath({path: '$..key', json: fields[x]})[0];
|
||||
console.log('Ged lookup: ' + lookup)
|
||||
switch(String(JSONPath({path: '$..type', json: fields[x]}))) {
|
||||
case "string":
|
||||
val = JSONPath({path: String(lookup), json: data})[0];
|
||||
|
@ -717,36 +735,84 @@ const excel2 = new class Excel {
|
|||
row.forEach(element => {
|
||||
excel2.AddRow(sheet, element)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async createOutFile( {libName, level, libType, outType, baseURL, accessToken} )
|
||||
{
|
||||
async sleep(ms) {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, ms);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async createXLSXFile( {csvFile, level, libType, libName} )
|
||||
{
|
||||
// This will loop thru a csv file, and create xlsx file
|
||||
// First create a WorkBook
|
||||
// const workBook = await excel2.NewExcelWorkBook()
|
||||
const workBook = await excel2.NewExcelWorkBook()
|
||||
// Create Sheet
|
||||
// let sheet = await excel2.NewSheet(workBook, libName, level)
|
||||
let sheet = await excel2.NewSheet(workBook, libName, level)
|
||||
// Add the header to the sheet
|
||||
//const header = await excel2.AddHeader(sheet, level, libType)
|
||||
await excel2.AddHeader(sheet, level, libType)
|
||||
|
||||
/*
|
||||
autoFilter sadly doesn't work :(
|
||||
sheet.autoFilter = {
|
||||
from: 'A1',
|
||||
to: 'E1',
|
||||
exclude: [1, 2] // excludes columns B and C from showing the AutoFilter button
|
||||
} */
|
||||
// Read the csv file line by line
|
||||
var lineReader = require('readline').createInterface({
|
||||
input: require('fs').createReadStream(csvFile)
|
||||
});
|
||||
|
||||
var lineno = 0;
|
||||
lineReader.on('line', async function (line) {
|
||||
// Skip first line
|
||||
if (lineno != 0){
|
||||
var lineArr = line.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
|
||||
await sheet.addRow(lineArr)
|
||||
}
|
||||
lineno++;
|
||||
});
|
||||
lineReader.on('close', async function () {
|
||||
if (wtconfig.get('ET.AutoXLSCol', false))
|
||||
{
|
||||
log.info('Setting xlsx column width')
|
||||
sheet.columns.forEach(function(column){
|
||||
var dataMax = 0;
|
||||
column.eachCell({ includeEmpty: true }, function(cell){
|
||||
try {
|
||||
var columnLength = cell.value.length;
|
||||
if (columnLength > dataMax) {
|
||||
dataMax = columnLength;
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
// Failed, since either number or null, so simply ignoring
|
||||
}
|
||||
})
|
||||
column.width = dataMax < 10 ? 10 : dataMax;
|
||||
});
|
||||
log.info('Setting xlsx column width ended')
|
||||
}
|
||||
await excel2.SaveWorkbook(workBook, libName, level, "xlsx")
|
||||
});
|
||||
}
|
||||
|
||||
async createOutFile( {libName, level, libType, baseURL, accessToken} )
|
||||
{
|
||||
const header = excel2.GetHeader(level, libType)
|
||||
log.debug(`header: ${header}`);
|
||||
const strHeader = header.join(wtconfig.get('ET.ColumnSep', ','))
|
||||
// Now we need to find out how many calls to make
|
||||
const call = await et.getLevelCall(libType, level)
|
||||
|
||||
outType
|
||||
//outType, call
|
||||
|
||||
|
||||
const call = await et.getLevelCall(libType, level)
|
||||
// Open a file stream
|
||||
const tmpFile = await excel2.getFileName({ Library: libName, Level: level, Type: 'tmp' })
|
||||
var fs = require('fs');
|
||||
var stream = fs.createWriteStream(tmpFile, {flags:'a'});
|
||||
|
||||
|
||||
stream.write( strHeader + "\n");
|
||||
|
||||
|
||||
|
||||
// Add the header
|
||||
stream.write( strHeader + "\n");
|
||||
// Get all the items in small chuncks
|
||||
var sectionData = await et.getSectionData({sectionName: libName, baseURL: baseURL, accessToken: accessToken, libType: libType})
|
||||
log.verbose(`Amount of chunks in sectionData are: ${sectionData.length}`)
|
||||
|
@ -765,12 +831,11 @@ const excel2 = new class Excel {
|
|||
{
|
||||
// Get ratingKeys in the chunk
|
||||
const urls = await JSONPath({path: '$..ratingKey', json: sectionChunk});
|
||||
let urlStr = urls.join(',')
|
||||
let urlStr = urls.join(',');
|
||||
log.verbose(`Items to lookup are: ${urlStr}`)
|
||||
store.commit("UPDATE_EXPORTSTATUS", i18n.t('Modules.ET.Status.Processing-Chunk-Detailed', {current: x, total: sectionData.length, urlStr: urlStr}))
|
||||
//store.commit("UPDATE_EXPORTSTATUS", `Processing chunk ${x} of ${sectionData.length}.\nItems to export: \n${urlStr}`)
|
||||
store.commit("UPDATE_EXPORTSTATUS", i18n.t('Modules.ET.Status.Processing-Chunk-Detailed', {current: x, total: sectionData.length, urlStr: urlStr}))
|
||||
const urlWIthPath = '/library/metadata/' + urlStr
|
||||
log.verbose(`Items retrieved`)
|
||||
log.verbose(`Items retrieved`);
|
||||
const contents = await et.getItemData({baseURL: baseURL, accessToken: accessToken, element: urlWIthPath});
|
||||
const contentsItems = await JSONPath({path: '$.MediaContainer.Metadata[*]', json: contents});
|
||||
for (item of contentsItems){
|
||||
|
@ -780,18 +845,15 @@ const excel2 = new class Excel {
|
|||
}
|
||||
stream.end();
|
||||
// Rename to real file name
|
||||
var newFile = tmpFile.replace('.tmp', '.csv')
|
||||
fs.rename(tmpFile, newFile, function (err) {
|
||||
if (err) throw err;
|
||||
console.log('renamed complete');
|
||||
});
|
||||
store.commit("UPDATE_EXPORTSTATUS", `Export finished. File:"${newFile}" created`)
|
||||
|
||||
|
||||
|
||||
// Save Excel file
|
||||
// const result = await excel2.SaveWorkbook(workBook, libName, level, outType)
|
||||
// return result
|
||||
var newFile = tmpFile.replace('.tmp', '.csv')
|
||||
fs.renameSync(tmpFile, newFile);
|
||||
console.log('renamed complete');
|
||||
// Need to export to xlsx as well?
|
||||
if (wtconfig.get('ET.ExpExcel')){
|
||||
log.info('We need to create an xlsx file as well')
|
||||
await excel2.createXLSXFile( {csvFile: newFile, level: level, libType: libType, libName: libName})
|
||||
}
|
||||
store.commit("UPDATE_EXPORTSTATUS", `Export finished. File:"${newFile}" created`);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
50
src/components/modules/ExportTools/sample/shows.json
Normal file
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"ratingKey":"1653",
|
||||
"key":"/library/metadata/1653",
|
||||
"parentRatingKey":"1643",
|
||||
"grandparentRatingKey":"1642",
|
||||
"guid":"com.plexapp.agents.thetvdb://356202/1/10?lang=en",
|
||||
"parentGuid":"com.plexapp.agents.thetvdb://356202/1?lang=en",
|
||||
"grandparentGuid":"com.plexapp.agents.thetvdb://356202?lang=en",
|
||||
"type":"episode","title":"A City Upon a Hill",
|
||||
"titleSort":"City Upon a Hill",
|
||||
"grandparentKey":"/library/metadata/1642",
|
||||
"parentKey":"/library/metadata/1643",
|
||||
"grandparentTitle":"For All Mankind",
|
||||
"parentTitle":"Season 1",
|
||||
"contentRating":"TV-MA",
|
||||
"summary":"Ed handles a trespasser. Ellen and Deke chart a new course without Mission Control.",
|
||||
"index":10,
|
||||
"parentIndex":1,
|
||||
"year":2019,
|
||||
"thumb":"/library/metadata/1653/thumb/1577660763",
|
||||
"art":"/library/metadata/1642/art/1577660764",
|
||||
"parentThumb":"/library/metadata/1643/thumb/1577660764",
|
||||
"grandparentThumb":"/library/metadata/1642/thumb/1577660764",
|
||||
"grandparentArt":"/library/metadata/1642/art/1577660764",
|
||||
"duration":4563104,
|
||||
"originallyAvailableAt":"2019-12-20",
|
||||
"addedAt":1577227543,
|
||||
"updatedAt":1577660763,
|
||||
"Media":[
|
||||
{
|
||||
"id":1506,"duration":4563104,"bitrate":4698,"width":1356,"height":678,
|
||||
"aspectRatio":1.85,"audioChannels":6,"audioCodec":"eac3",
|
||||
"videoCodec":"h264","videoResolution":"720","container":"mkv",
|
||||
"videoFrameRate":"24p","videoProfile":"high",
|
||||
"Part":[
|
||||
{
|
||||
"id":1516,"key":"/library/parts/1516/1577227543/file.mkv",
|
||||
"duration":4563104,
|
||||
"file":"/share/CACHEDEV1_DATA/video/shows/For All Mankind/Season 01/For.All.Mankind.S01E10.iNTERNAL.720p.WEB.H264-AMRAP.mkv",
|
||||
"size":2679942218,"container":"mkv","indexes":"sd",
|
||||
"videoProfile":"high"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"Writer":[
|
||||
{"tag":"Ben Nedivi"},
|
||||
{"tag":"Matt Wolpert"}
|
||||
]
|
||||
}
|
|
@ -2,52 +2,74 @@ const log = require('electron-log');
|
|||
import axios from 'axios'
|
||||
import store from '../../../store';
|
||||
|
||||
|
||||
const ptv = new class PTV {
|
||||
constructor() {
|
||||
}
|
||||
|
||||
checkServerConnect(server) {
|
||||
log.info("NUGGA : ET : checkServerConnect called")
|
||||
server.connections.forEach((val) => {
|
||||
log.info(val.uri)
|
||||
let baseurl = val.uri
|
||||
axios.get(baseurl + '/identity', {
|
||||
timeout: 5000
|
||||
async checkServerConnect(server) {
|
||||
log.info(`Checking address for server: ${server.name}`);
|
||||
// Set WaitState
|
||||
store.commit("UPDATE_PLEX_SELECTED_SERVER_STATUS", true);
|
||||
let PMSAddress = '';
|
||||
let local = false;
|
||||
// Start with the local address check first
|
||||
for (var i = 0; i < server.connections.length; i++) {
|
||||
//server.connections.forEach((val) => {
|
||||
let val = server.connections[i];
|
||||
log.info(`Checking: ${val.uri}`);
|
||||
let baseurl = val.uri;
|
||||
await axios.get(baseurl + '/identity', {
|
||||
headers: {
|
||||
Accept: 'application/json'
|
||||
},
|
||||
timeout: 5000
|
||||
})
|
||||
.then(response => {
|
||||
log.info(response)
|
||||
if(response.status == 200){
|
||||
log.info("NUGGA: PTV : checkServerConnect: response status is 200")
|
||||
log.info("NUGGA : PLT : address for 200 server: " + baseurl)
|
||||
store.commit("UPDATE_SELECTED_SERVER_ADDRESS", baseurl);
|
||||
.then(response => {
|
||||
if(response.status == 200){
|
||||
log.info(`Address ${baseurl} is alive, so check if local`);
|
||||
if ( val.local == true){
|
||||
log.info(`It's a local server, so need to check if correct one`);
|
||||
const machineIdentifier = response.data['MediaContainer']['machineIdentifier'];
|
||||
if (machineIdentifier == server.clientIdentifier){
|
||||
log.info(`Local server found as: ${baseurl}`);
|
||||
PMSAddress = baseurl;
|
||||
local = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// only if we didn't find the local one?
|
||||
if ( local == false)
|
||||
{
|
||||
log.info(`No local server found yet, so checking ${baseurl}`)
|
||||
const machineIdentifier = response.data['MediaContainer']['machineIdentifier'];
|
||||
if (machineIdentifier == server.clientIdentifier){
|
||||
log.info(`Remote server found as: ${baseurl}`);
|
||||
PMSAddress = baseurl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}).catch((error) => {
|
||||
}).catch((error) => {
|
||||
if (error.response) {
|
||||
// The request was made and tgite server responded with a status code
|
||||
// that falls out of the range of 2xx
|
||||
log.warn(error.response.data)
|
||||
log.warn(error.response.status)
|
||||
alert(error.response.data.error)
|
||||
//this.danger(error.response.status, error.response.data.error);
|
||||
// The request was made and server responded with a status code
|
||||
// that falls out of the range of 2xx
|
||||
log.warn(error.response.status)
|
||||
} else if (error.request) {
|
||||
// The request was made but no response was received
|
||||
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
|
||||
// http.ClientRequest in node.js
|
||||
log.warn(error.request);
|
||||
// The request was made but no response was received
|
||||
log.warn('No response recieved');
|
||||
}
|
||||
else {
|
||||
else {
|
||||
// Something happened in setting up the request that triggered an Error
|
||||
log.warn('Error', error.message);
|
||||
}
|
||||
log.error(error);
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
let serverAdress = []
|
||||
|
||||
return serverAdress
|
||||
}
|
||||
log.info(`Returning valid address as: ${PMSAddress}`)
|
||||
store.commit("UPDATE_SELECTED_SERVER_ADDRESS", PMSAddress);
|
||||
store.commit("UPDATE_PLEX_SELECTED_SERVER_STATUS", false);
|
||||
return PMSAddress
|
||||
}
|
||||
|
||||
}
|
||||
export {ptv};
|
|
@ -1,4 +1,3 @@
|
|||
import axios from 'axios';
|
||||
import {excel2} from '../../components/modules/ExportTools/et'
|
||||
import {et} from '../../components/modules/ExportTools/et'
|
||||
const log = require('electron-log');
|
||||
|
@ -40,27 +39,24 @@ const mutations = {
|
|||
|
||||
const actions = {
|
||||
async fetchSections({ commit, getters }) {
|
||||
log.info("fetchSections called")
|
||||
var baseURL = getters.getSlectedServerAddress
|
||||
var accessToken = getters.getSlectedServerToken
|
||||
log.info("fetchSections called")
|
||||
var baseURL = getters.getSelectedServerAddress
|
||||
var accessToken = getters.getSelectedServerToken
|
||||
commit('UPDATE_SECTIONS', await et.getSections(baseURL, accessToken))
|
||||
},
|
||||
exportMedias({ commit, getters }) {
|
||||
// Vars OK
|
||||
var baseURL = getters.getSlectedServerAddress
|
||||
var accessToken = getters.getSlectedServerToken
|
||||
},
|
||||
exportMedias({ getters }) {
|
||||
var baseURL = getters.getSelectedServerAddress
|
||||
var accessToken = getters.getSelectedServerToken
|
||||
var libType = getters.getLibType
|
||||
var levelName = et.getLevelDisplayName(getters.getSelectedExportLevel, libType)
|
||||
var key = getters.getSelectedSection
|
||||
|
||||
var mediaSize = ''
|
||||
var calcSize = 0
|
||||
var libName = et.getLibDisplayName(getters.getSelectedSection, getters.getPmsSections)
|
||||
libName, levelName, libType, 'xlsx', baseURL, accessToken
|
||||
excel2
|
||||
axios, commit, key, mediaSize, calcSize
|
||||
excel2.createOutFile( {libName: libName, level: levelName, libType: libType, outType: 'xlsx', baseURL: baseURL, accessToken: accessToken} );
|
||||
|
||||
var levelName = et.getLevelDisplayName(getters.getSelectedExportLevel, libType)
|
||||
var libName = et.getLibDisplayName(getters.getSelectedSection, getters.getPmsSections)
|
||||
excel2.createOutFile( {
|
||||
libName: libName,
|
||||
level: levelName,
|
||||
libType: libType,
|
||||
baseURL: baseURL,
|
||||
accessToken: accessToken
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,15 +8,18 @@ const state = {
|
|||
plexServers: [],
|
||||
selectedServer: 'none',
|
||||
selectedServerAddress: '',
|
||||
selectedServerAddressUpdateInProgress: false,
|
||||
selectedServerToken: '',
|
||||
authenticated: false,
|
||||
authToken: '',
|
||||
avatar: '',
|
||||
plexname: '',
|
||||
filteredProducts: []
|
||||
plexname: ''
|
||||
};
|
||||
|
||||
const mutations = {
|
||||
UPDATE_PLEX_SELECTED_SERVER_STATUS(state, payload) {
|
||||
state.selectedServerAddressUpdateInProgress = payload;
|
||||
},
|
||||
UPDATE_PLEX_SERVERS(state, payload) {
|
||||
state.plexServers = payload;
|
||||
},
|
||||
|
@ -25,8 +28,7 @@ const mutations = {
|
|||
state.selectedServerToken = value.accessToken
|
||||
},
|
||||
UPDATE_SELECTED_SERVER_ADDRESS(state, value) {
|
||||
state.selectedServerAddress = value
|
||||
log.info('UPDATE_SELECTED_SERVER_ADDRESS: ' + value)
|
||||
state.selectedServerAddress = value
|
||||
},
|
||||
UPDATE_AUTHENTICATED(state, value){
|
||||
state.authenticated = value
|
||||
|
@ -71,7 +73,7 @@ const actions = {
|
|||
pmsServer['accessToken'] = req.accessToken;
|
||||
pmsServer['connections'] = req.connections;
|
||||
pmsServer['clientIdentifier'] = req.clientIdentifier
|
||||
log.warn('fetchPlexServers : ser ikke owned')
|
||||
log.warn('fetchPlexServers : See not owned servers as well')
|
||||
result.push(pmsServer);
|
||||
}
|
||||
} else {
|
||||
|
@ -122,7 +124,7 @@ const actions = {
|
|||
commit('UPDATE_AVATAR', response.data.user.thumb)
|
||||
commit('UPDATE_PLEXNAME', response.data.user.username)
|
||||
router.replace({name: "home"});
|
||||
})
|
||||
})
|
||||
.catch(function (error) {
|
||||
if (error.response) {
|
||||
// The request was made and the server responded with a status code
|
||||
|
@ -140,6 +142,9 @@ const actions = {
|
|||
// Something happened in setting up the request that triggered an Error
|
||||
log.error('loginToPlex: ' + error.message)
|
||||
}})
|
||||
},
|
||||
updatingServerAddress({ commit}, status){
|
||||
commit('UPDATE_PLEX_SELECTED_SERVER_STATUS', status)
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -149,8 +154,9 @@ const getters = {
|
|||
getAvatar: state => state.avatar,
|
||||
getPlexName: state => state.plexname,
|
||||
getSelectedServer: state => state.selectedServer,
|
||||
getSlectedServerAddress: state => state.selectedServerAddress,
|
||||
getSlectedServerToken: state => state.selectedServerToken
|
||||
getSelectedServerAddress: state => state.selectedServerAddress,
|
||||
getSelectedServerAddressUpdateInProgress: state => state.selectedServerAddressUpdateInProgress,
|
||||
getSelectedServerToken: state => state.selectedServerToken
|
||||
,
|
||||
};
|
||||
|
||||
|
|
|
@ -80,7 +80,9 @@ const actions = {
|
|||
responseType: 'stream'
|
||||
})
|
||||
var json = JSON.stringify(dwnlresp.data);
|
||||
fs.writeFileSync(path, json);
|
||||
fs.writeFileSync(path, json);
|
||||
// Update lang complete state, if updated
|
||||
await this.dispatch("fetchPOELang");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -74,11 +74,9 @@ const wtutils = new class WTUtils {
|
|||
}
|
||||
|
||||
get LogMac() {
|
||||
// does this work?
|
||||
console.log('******* Need Help here ***********');
|
||||
console.log('Mac Log dir detected as : ' + wtutils.Home + '/Library/Logs/' + wtutils.AppName);
|
||||
console.log('********* Is that correct? ********** ');
|
||||
return wtutils.Home + '/Library/Logs/' + wtutils.AppName;
|
||||
const logDir = wtutils.Home.replace('Application Support', 'Logs');
|
||||
log.info(`Log directory on Mac is detected as: ${logDir}`)
|
||||
return logDir;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -95,9 +93,15 @@ const wtutils = new class WTUtils {
|
|||
{
|
||||
localHome = __dirname.replace('node_modules\\electron\\dist\\resources\\electron.asar\\renderer', 'public/locales');
|
||||
}
|
||||
else if (wtutils.isMac)
|
||||
{
|
||||
console.log('Ged MAC dir: ' + __dirname)
|
||||
localHome = __dirname.replace('node_modules/electron/dist/Electron.app/Contents/Resources/electron.asar/renderer', 'public/locales');
|
||||
}
|
||||
else
|
||||
{
|
||||
localHome = __dirname.replace('node_modules/electron/dist/resources/electron.asar/renderer', 'public/locales');
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
process.env.VUE_APP_VERSION = process.env.npm_package_version;
|
||||
|
||||
module.exports = {
|
||||
pluginOptions: {
|
||||
i18n: {
|
||||
|
@ -7,16 +9,21 @@ module.exports = {
|
|||
enableInSFC: false
|
||||
},
|
||||
electronBuilder: {
|
||||
builderOptions: {
|
||||
builderOptions: {
|
||||
appId: "com.webtools.webtools-ng",
|
||||
"extraResources": [
|
||||
{
|
||||
"from": "./public/locales",
|
||||
"to": "locales"
|
||||
}
|
||||
],
|
||||
"linux": {
|
||||
"category": "Utility"
|
||||
}
|
||||
linux: {
|
||||
category: "Utility",
|
||||
icon: 'src/assets/WebTools-512.png'
|
||||
},
|
||||
win: {
|
||||
icon: 'src/assets/WebTools-512.png'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
BIN
wiki/Images/ExportSettings.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
wiki/Images/ForceDownload.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
wiki/Images/LanguageMenu.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
wiki/Images/LevelSelect.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
wiki/Images/LibrarySelect.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
wiki/Images/ServerSelect.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
wiki/Images/Translator.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
wiki/Images/WebTools-24.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
wiki/Images/WebTools-256.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
wiki/Images/WebTools-32.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
wiki/Images/WebTools-48.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
wiki/Images/WebTools-48x48.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
wiki/Images/WebTools-512.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
wiki/Images/WebTools-72.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
wiki/Images/WebTools-820x512.png
Normal file
After Width: | Height: | Size: 141 KiB |
1
wiki/Images/placeholder
Normal file
|
@ -0,0 +1 @@
|
|||
|