{"version":3,"sources":["https://lively-kernel.org/lively4/swt1-debugging/demos/plex/plex-scheme.js"],"names":["Scheme","PolymorphicIdentifier","focalStorage","parseQuery","getDeepProperty","lastTokenPromted","PlexScheme","scheme","plexToken","token","getItem","Date","now","lively","prompt","setItem","resolve","plexChildren","mediacontent","Array","from","childNodes","filter","ea","getAttribute","plexToJSON","obj","_type","tagName","getAttributeNames","forEach","prop","child","tag","push","media","part","children","GET","options","apiString","getAPIString","query","getURLQuery","contentType","headers","Headers","get","html","plex","htmlResponse","Response","outerHTML","status","json","JSON","stringify","list","_","sortBy","map","thumbs","img","src","swxURL","title","a","href","div","table","create","setFromJSO","remove","index","resp","plexBlob","text","fetch","then","r","DOMParser","parseFromString","blob","optionsFromPlex","xml","url","notify","name","parent","replace","contents","type","match","urlObj","URL","pathname","search","Object","keys","OPTIONS","result","components","addPersistentCustomTemplatePath","register","console","warn"],"mappings":"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","file":"plex-scheme.js","sourcesContent":["import {Scheme}  from \"src/client/poid.js\"\nimport PolymorphicIdentifier  from \"src/client/poid.js\"\nimport focalStorage from \"src/external/focalStorage.js\"\nimport {parseQuery, getDeepProperty} from 'utils'\n\nvar lastTokenPromted\n\n\n// focalStorage.getItem(\"plex-token\")\n// focalStorage.setItem(\"plex-token\", undefined)\n\nexport class PlexScheme extends Scheme {\n  \n  get scheme() {\n    return \"plex\"\n  }\n  \n  async plexToken() {\n    var token = await focalStorage.getItem(\"plex-token\")\n    if(!token && (!lastTokenPromted || ((Date.now() - lastTokenPromted) > 1000 * 5))) { // don't ask again for 5 seconds...\n      lastTokenPromted = Date.now()\n      token = await lively.prompt(\"plex token required: \")\n      if (token) {\n        focalStorage.setItem(\"plex-token\", token)\n      }\n    }\n    return token\n  }\n\n  resolve() {\n    return true\n  }  \n \n  plexChildren(mediacontent) {\n    return Array.from(mediacontent.childNodes).filter(ea => ea.getAttribute)\n  }\n  \n  plexToJSON(mediacontent) {\n    \n      let obj = {\n        _type: mediacontent.tagName\n      }\n      mediacontent.getAttributeNames().forEach(prop => {\n        obj[prop] = mediacontent.getAttribute(prop)\n      })\n      \n      this.plexChildren(mediacontent).forEach(child => {\n        \n        let tag = child.getAttribute(\"tag\")\n        if (tag) {\n          if (!obj[child.tagName]) obj[child.tagName] = [];\n          obj[child.tagName].push(tag)\n        } else if (child.tagName == \"Media\") {\n          if (!obj.media) obj.media = []\n           obj.media.push(this.plexToJSON(child))\n        } else if (child.tagName == \"Part\") {\n          if (!obj.part) obj.part = []\n           obj.part.push(this.plexToJSON(child))\n        } else {\n          if (!obj.children) obj.children = []\n          obj.children.push(this.plexToJSON(child))\n        }\n        \n        // if (prop.tagName == \"Media\") {\n        //   this.plexChildren(mediacontent)[0].getAttribute(\"file\")\n        // }\n      })\n      \n      return obj\n  }\n  \n  async GET(options) {\n    let apiString = this.getAPIString()\n    let query = this.getURLQuery()\n    let contentType = options && options.headers && new Headers(options.headers).get(\"content-type\")\n  \n    let html\n    let mediacontent = await this.plex(apiString)\n    \n    let htmlResponse = function(html) {\n      return new Response(html.outerHTML, {\n        status: 200,\n        headers: {\n          \"content-type\": \"text/html\" \n        }\n      })\n    }\n    \n    if (query.json || contentType ==  'application/json') {\n      // ok, we parse, then serialize, then pase again... can we avoid this?\n      return new Response(JSON.stringify(this.plexToJSON(mediacontent)), {status: 200})\n    } else if (query.list) {\n      let children = _.sortBy(this.plexChildren(mediacontent), ea => ea.getAttribute(\"title\"))\n      html = <html><ul>{...(children.map(ea => \n        <li>{ea.getAttribute(\"title\")}</li>\n      ))}</ul></html>\n      return htmlResponse(html)\n    } else if (query.thumbs) {\n      let children = _.sortBy(this.plexChildren(mediacontent), ea => ea.getAttribute(\"title\"))\n      // #TODO we should do this only if we have a thumb        \n      html = <html><div style=\"\">{...(children.map(ea => {\n            var img = <img style=\"\" width=\"100px\"></img>\n            img.src = lively.swxURL(\"plex://\" + ea.getAttribute(\"thumb\"))\n            img.title = ea.getAttribute(\"title\")\n            var a = <a style=\"\">{img}<br />{ea.getAttribute(\"title\")}</a>\n            a.href = lively.swxURL(\"plex://\" + ea.getAttribute(\"key\"))\n            var div = <div style=\"font-size:8pt;margin:10px;vertical-align: text-top; display:inline-block; width:100px; overflow: hidden\">{a}<br />{ea.getAttribute(\"year\")}</div>\n            return div\n          }\n      ))}</div></html>\n      return htmlResponse(html)\n    } else if(query.table) { \n      // default html rendering\n      let table = await lively.create(\"lively-table\")\n      try {\n        table.setFromJSO(this.plexToJSON(mediacontent).children)\n      } finally {\n        table.remove()\n      }\n      html = table     \n      return htmlResponse(html)\n    } else if(query.html || query.index || contentType ==  'text/html') { \n      html = `<plex-media src='plex:/${apiString}'></plex-media>` // a fetchy double dispatch \n      return new Response(html)\n    } else {\n      // default xml\n      let resp = await this.plexBlob(apiString)\n      return new Response(resp) // {status: 200}   \n    }\n  }\n\n  async plex(apiString) {\n    var token = await this.plexToken()\n    var text = await fetch(\"http://127.0.0.1:32400\" + apiString + \"?X-Plex-Token=\" + token).then(r => r.text())\n    return new DOMParser().parseFromString(text, \"text/xml\").childNodes[0];\n  }\n  \n  async plexBlob(apiString) {\n    var token = await this.plexToken()\n    return fetch(\"http://127.0.0.1:32400\" + apiString + \"?X-Plex-Token=\" + token).then(r => r.blob())\n  }\n  \n  optionsFromPlex(xml, url) {\n    // single vs. collections... how should we do this?\n    if (xml.getAttribute && xml.getAttribute(\"size\") == 1 && xml.childNodes[0].tagName !== \"directory\") { \n      xml = Array.from(xml.childNodes).filter(ea => ea.getAttribute)[0]\n      lively.notify(\"take \" + xml.childNodes)\n    }\n    return {\n      name: xml.getAttribute(\"key\") || xml.getAttribute(\"title\") || xml.getAttribute(\"title1\") || xml.tagName ,\n      title: xml.getAttribute(\"title\") || xml.getAttribute(\"title1\"),\n      parent: url.replace(/\\/[^/]+\\/?$/,\"\"),\n      \"index-available\": true,\n      contents: _.sortBy(Array.from(xml.childNodes)\n          .filter(ea => ea.getAttribute && ea.getAttribute(\"key\"))\n          .map(ea => {\n            var obj = {\n              name: ea.getAttribute(\"key\").replace(/\\/children$/,\"/\"),\n              title: ea.getAttribute(\"title\") || ea.getAttribute(\"title1\"),\n              contents: [],\n              parent: url,\n              type: ea.tagName == \"Directory\" ? \"directory\" : \"file\"\n            }\n            if (obj.name.match(/^\\//)) {\n              obj.type = \"link\" // symlinks, cross refs... etc\n              obj.href = this.scheme + \":/\" + obj.name\n            }\n            return obj\n          }), \n          ea => ea.title),\n      type: \"file\"\n    }\n  }\n  \n  getAPIString() {\n    var urlObj = new URL(this.url)\n    return urlObj.pathname.replace(/\\/\\//g,\"/\")\n  }\n\n  getURLQuery() {\n    var urlObj = new URL(this.url)\n    var query =  parseQuery(urlObj.search)\n    Object.keys(query).forEach(ea => {\n      if (query[ea] == \"\") query[ea] = true;\n    })\n    return query\n  }\n\n  async OPTIONS() {\n    var apiString = this.getAPIString()\n    var mediacontent = await this.plex(apiString)\n    var result = await this.optionsFromPlex(mediacontent, this.url)\n    return new Response(JSON.stringify(result), {status: 200})\n  }\n}\n\nlively.components.addPersistentCustomTemplatePath(\"/demos/plex/\")\n\nPolymorphicIdentifier.register(PlexScheme)\n\nconsole.warn(\"LOADED plex\")\n\n"]}