"use strict";varzi=Object.defineProperty;varLl=Object.getOwnPropertyDescriptor;varql=Object.getOwnPropertyNames;varUl=Object.prototype.hasOwnProperty;varka=t=>{throwTypeError(t)};varHl=(t,r,e)=>rint?zi(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e;varWl=(t,r)=>{for(vareinr)zi(t,e,{get:r[e],enumerable:!0})},Vl=(t,r,e,i)=>{if(r&&typeofr=="object"||typeofr=="function")for(letoofql(r))!Ul.call(t,o)&&o!==e&&zi(t,o,{get:()=>r[o],enumerable:!(i=Ll(r,o))||i.enumerable});returnt};varYl=t=>Vl(zi({},"__esModule",{value:!0}),t);varp=(t,r,e)=>Hl(t,typeofr!="symbol"?r+"":r,e),Aa=(t,r,e)=>r.has(t)||ka("Cannot "+e);varxe=(t,r,e)=>(Aa(t,r,"read from private field"),e?e.call(t):r.get(t)),Xi=(t,r,e)=>r.has(t)?ka("Cannot add the same private member more than once"):rinstanceofWeakSet?r.add(t):r.set(t,e),Zi=(t,r,e,i)=>(Aa(t,r,"write to private field"),i?i.call(t,e):r.set(t,e),e);vared={};Wl(ed,{default:()=>tn});module.exports=Yl(ed);varoe=require("obsidian");varrn=require("obsidian");varJi=class{constructor(){p(this,"apis");this.apis=[]}asyncquery(r,e){console.debug(`MDB | api manager queried with "${r}"`);leti=this.apis.filter(o=>e.contains(o.apiName)).map(asynco=>{try{returnawaito.searchByTitle(r)}catch(n){returnnewrn.Notice(`Error querying ${o.apiName}: ${n}`),console.warn(n),[]}});return(awaitPromise.all(i)).flat()}asyncqueryDetailedInfo(r){returnawaitthis.queryDetailedInfoById(r.id,r.dataSource)}asyncqueryDetailedInfoById(r,e){for(letiofthis.apis)if(i.apiName===e)try{returni.getById(r)}catch(o){newrn.Notice(`Error querying ${i.apiName}: ${o}`),console.warn(o);return}}getApiByName(r){for(leteofthis.apis)if(e.apiName===r)returne}registerAPI(r){this.apis.push(r)}};varcn=require("obsidian");varon="obsidian-media-db-plugin",nn="m.projects.code@gmail.com",ge="mediaDB",an="0.5.2";functionNa(t,r){if(r<=0)throwError("size may not be zero or negative");returnQi(t,r)}functionsn(t){return/^[\p{Letter}\p{M}_]+$/u.test(t)}functionFa(t){returnt.replace(/[\\,#%&{}/*<>$"@.?]*/g,"").replace(/:+/g," -")}functionln(t,r,e=!1){returnt.replace(newRegExp("{{.*?}}","g"),i=>jl(i,r,e))}functionjl(t,r,e){leti=t;i=i.substring(2),i=i.substring(0,i.length-2),i=i.trim();leto=i.split(":");if(o.length===1){letn=o[0].split("."),a=Ra(n,r);returna===void0?e?"":"{{ INVALID TEMPLATE TAG - object undefined }}":a}elseif(o.length===2){letn=o[0],a=o[1].split("."),s=Ra(a,r);returns===void0?e?"":"{{ INVALID TEMPLATE TAG - object undefined }}":n==="LIST"?Array.isArray(s)?s.map(l=>`- ${l}`).join(`
`):"{{ INVALID TEMPLATE TAG - operator LIST is only applicable on an array }}":n==="ENUM"?Array.isArray(s)?s.join(", "):"{{ INVALID TEMPLATE TAG - operator ENUM is only applicable on an array }}":n==="FIRST"?Array.isArray(s)?s[0]:"{{ INVALID TEMPLATE TAG - operator FIRST is only applicable on an array }}":n==="LAST"?Array.isArray(s)?s[s.length-1]:"{{ INVALID TEMPLATE TAG - operator LAST is only applicable on an array }}":`{{INVALIDTEMPLATETAG-unknownoperator${n}}}`}return"{{ INVALID TEMPLATE TAG }}"}function Ra(t,r){let e=r;for(let i of t)e!==void 0&&(e=e[i]);return e}function Ia(t){let r=t.length;if(r===0)return"";let e=t[0].length;if(e===0)return"";for(let n of t)if(n.length!==e)return"";let i=[];for(let n=0;n<e;n++){let a=0;for(let s of t)s[n].length>a&&(a=s[n].length);i.push(a)}let o="";for(let n=0;n<r;n++){o+="|";for(let a=0;a<e;a++){let s=t[n][a];s+=" ".repeat(i[a]-s.length),o+=" "+s+" |"}if(o+=`
${JSON.stringify(n,void0,4)}`)}if(!n.Search)return[];let a=[];for(let s of n.Search){let l=this.typeMappings.get(s.Type.toLowerCase());l!==void 0&&(l==="movie"?a.push(new Ue({type:l,title:s.Title,englishTitle:s.Title,year:s.Year,dataSource:this.apiName,id:s.imdbID})):l==="series"?a.push(new ht({type:l,title:s.Title,englishTitle:s.Title,year:s.Year,dataSource:this.apiName,id:s.imdbID})):l==="game"&&a.push(new ve({type:l,title:s.Title,englishTitle:s.Title,year:s.Year,dataSource:this.apiName,id:s.imdbID})))}return a}async getById(e){var s,l,d,c,u,f,m,g,h,v,b,E,T,M,_,y,$,A,D,x,C,S,O,L,U,H,q,Ne,he;if(console.log(`MDB|api"${this.apiName}"queriedbyID`),!this.plugin.settings.OMDbKey)throw Error(`MDB|APIkeyfor${this.apiName}missing.`);let i=`https://www.omdbapi.com/?i=${encodeURIComponent(e)}&apikey=${this.plugin.settings.OMDbKey}`,o=await fetch(i);if(o.status===401)throw Error(`MDB | Authentication for ${this.apiName} failed. Check the API key.`);if(o.status!==200)throw Error(`MDB | Received status code ${o.status} from ${this.apiName}.`);let n=await o.json();if(n.Response==="False")throw Error(`MDB | Received error from ${this.apiName}: ${n.Error}`);let a=this.typeMappings.get(n.Type.toLowerCase());if(a===void 0)throw Error(`${n.type.toLowerCase()} is an unsupported type.`);if(a==="movie")return new Ue({type:a,title:n.Title,englishTitle:n.Title,year:n.Year,dataSource:this.apiName,url:`https://www.imdb.com/title/${n.imdbID}/`,id:n.imdbID,plot:(s=n.Plot)!=null?s:"",genres:(d=(l=n.Genre)==null?void 0:l.split(", "))!=null?d:[],director:(u=(c=n.Director)==null?void 0:c.split(", "))!=null?u:[],writer:(m=(f=n.Writer)==null?void 0:f.split(", "))!=null?m:[],studio:["N/A"],duration:(g=n.Runtime)!=null?g:"unknown",onlineRating:Number.parseFloat((h=n.imdbRating)!=null?h:0),actors:(b=(v=n.Actors)==null?void 0:v.split(", "))!=null?b:[],image:(E=n.Poster)!=null?E:"",released:!0,streamingServices:[],premiere:(T=this.plugin.dateFormatter.format(n.Released,this.apiDateFormat))!=null?T:"unknown",userData:{watched:!1,lastWatched:"",personalRating:0}});if(a==="series")return new ht({type:a,title:n.Title,englishTitle:n.Title,year:n.Year,dataSource:this.apiName,url:`https://www.imdb.com/title/${n.imdbID}/`,id:n.imdbID,plot:(M=n.Plot)!=null?M:"",genres:(y=(_=n.Genre)==null?void 0:_.split(", "))!=null?y:[],writer:(A=($=n.Writer)==null?void 0:$.split(", "))!=null?A:[],studio:[],episodes:0,duration:(D=n.Runtime)!=null?D:"unknown",onlineRating:Number.parseFloat((x=n.imdbRating)!=null?x:0),actors:(S=(C=n.Actors)==null?void 0:C.split(", "))!=null?S:[],image:(O=n.Poster)!=null?O:"",released:!0,streamingServices:[],airing:!1,airedFrom:(L=this.plugin.dateFormatter.format(n.Released,this.apiDateFormat))!=null?L:"unknown",airedTo:"unknown",userData:{watched:!1,lastWatched:"",personalRating:0}});if(a==="game")return new ve({type:a,title:n.Title,englishTitle:n.Title,year:n.Year,dataSource:this.apiName,url:`https://www.imdb.com/title/${n.imdbID}/`,id:n.imdbID,developers:[],publishers:[],genres:(H=(U=n.Genre)==null?void 0:U.split(", "))!=null?H:[],onlineRating:Number.parseFloat((q=n.imdbRating)!=null?q:0),image:(Ne=n.Poster)!=null?Ne:"",released:!0,releaseDate:(he=this.plugin.dateFormatter.format(n.Released,this.apiDateFormat))!=null?he:"unknown",userData:{played:!1,personalRating:0}});throw new Error(`MDB | Unknown media type for id ${e}`)}};var rr=class extends ne{constructor(e){super();p(this,"author");p(this,"plot");p(this,"pages");p(this,"image");p(this,"onlineRating");p(this,"isbn");p(this,"isbn13");p(this,"released");p(this,"userData");this.author="",this.plot="",this.pages=0,this.image="",this.onlineRating=0,this.isbn=0,this.isbn13=0,this.released=!1,this.userData={read:!1,lastRead:"",personalRating:0},W(this,e,this),e.hasOwnProperty("userData")||W(this.userData,e,this.userData),this.type=this.getMediaType()}getTags(){return[ge,"book"]}getMediaType(){return"book"}getSummary(){return this.englishTitle+" ("+this.year+") - "+this.author}};var so=class extends j{constructor(e){super();p(this,"plugin");this.plugin=e,this.apiName="OpenLibraryAPI",thi
Aderivedvaluecannotreferenceitselfrecursively
https://svelte.dev/e/derived_references_self`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/derived_references_self")}function Xa(t){if(w){let r=new Error(`effect_in_teardown
\`${t}\` cannot be used inside an effect cleanup function
https://svelte.dev/e/effect_in_teardown`);throw r.name="Svelte error",r}else throw new Error("https://svelte.dev/e/effect_in_teardown")}function Za(){if(w){let t=new Error("effect_in_unowned_derived\nEffect cannot be created inside a `$derived` value that was not itself created inside an effect\nhttps://svelte.dev/e/effect_in_unowned_derived");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Ja(t){if(w){let r=new Error(`effect_orphan
\`${t}\` can only be used inside an effect (e.g. during component initialisation)
https://svelte.dev/e/effect_orphan`);throw r.name="Svelte error",r}else throw new Error("https://svelte.dev/e/effect_orphan")}function Qa(){if(w){let t=new Error(`effect_update_depth_exceeded
https://svelte.dev/e/effect_update_depth_exceeded`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function es(){if(w){let t=new Error(`hydration_failed
Failedtohydratetheapplication
https://svelte.dev/e/hydration_failed`);throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/hydration_failed")}function ts(t){if(w){let r=new Error(`props_invalid_value
Cannotdo\`bind:${t}={undefined}\` when \`${t}\` has a fallback value
https://svelte.dev/e/props_invalid_value`);throw r.name="Svelte error",r}else throw new Error("https://svelte.dev/e/props_invalid_value")}function rs(t){if(w){let r=new Error(`rune_outside_svelte
The\`${t}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files
https://svelte.dev/e/rune_outside_svelte`);throw r.name="Svelte error",r}else throw new Error("https://svelte.dev/e/rune_outside_svelte")}function is(){if(w){let t=new Error("state_descriptors_fixed\nProperty descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\nhttps://svelte.dev/e/state_descriptors_fixed");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function os(){if(w){let t=new Error("state_prototype_fixed\nCannot set prototype of `$state` object\nhttps://svelte.dev/e/state_prototype_fixed");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ns(){if(w){let t=new Error("state_unsafe_local_read\nReading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state\nhttps://svelte.dev/e/state_unsafe_local_read");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_unsafe_local_read")}function as(){if(w){let t=new Error("state_unsafe_mutation\nUpdating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\nhttps://svelte.dev/e/state_unsafe_mutation");throw t.name="Svelte error",t}else throw new Error("https://svelte.dev/e/state_unsafe_mutation")}var St=!1,vt=!1;var Rr="[",sr="[!",lr="]",Bt={};var Z=Symbol(),Te=Symbol("filename"),ss=Symbol("hmr");var wi=null;function Ct(t){let r=Error(),e=r.stack;if(e){let i=e.split(`
%cThe\`${t}\` attribute on \`${r}\` changed its value between server and client renders. The client value, \`${e}\`, will be ignored in favour of the server value
%c${t?`Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${t}`:"Hydration failed because the initial UI does not match what was rendered on the server"}
%c${t?`${t} mutated a value owned by ${r}. This is strongly discouraged. Consider passing values to child components with \`bind:\`, or use a callback instead`:"Mutating a value outside the component that created it is strongly discouraged. Consider passing values to child components with `bind:`, or use a callback instead"}
%cReactive\`$state(...)\` proxies and the values they proxy have different identities. Because of this, comparisons with \`${t}\` will produce unexpected results
${s}\`\`\``;try{awaitGt.MarkdownRenderer.render(this.app,s,a,"",this.markdownComponent)}catch(l){console.warn("mdb | error during rendering of preview",l)}}e.createDiv({cls:"media-db-plugin-spacer"});leto=newGt.Setting(e);o.addButton(n=>{n.setButtonText("Cancel"),n.onClick(()=>this.close()),n.buttonEl.addClass("media-db-plugin-button")}),o.addButton(n=>{n.setButtonText("Ok"),n.setCta(),n.onClick(()=>{vara;return(a=this.submitCallback)==null?void0:a.call(this,{confirmed:!0})}),n.buttonEl.addClass("media-db-plugin-button")})}onOpen(){this.preview()}onClose(){vare;this.markdownComponent.unload(),(e=this.closeCallback)==null||e.call(this)}};varpt=require("obsidian");varGo=classextendspt.Modal{constructor(e,i){varo,n;i=Object.assign({},Fl,i);super(e.app);p(this,"plugin");p(this,"query");p(this,"isBusy");p(this,"title");p(this,"selectedApis");p(this,"searchBtn");p(this,"submitCallback");p(this,"closeCallback");this.plugin=e,this.selectedApis=[],this.title=(o=i.modalTitle)!=null?o:"",this.query=(n=i.prefilledSearchString)!=null?n:"",this.isBusy=!1}setSubmitCallback(e){this.submitCallback=e}setCloseCallback(e){this.closeCallback=e}keyPressCallback(e){e.key==="Enter"&&this.search()}asyncsearch(){vari,o,n;if(!this.query||this.query.length<3){newpt.Notice("MDB | Query too short");return}lete=this.selectedApis;if(e.length===0){newpt.Notice("MDB | No API selected");return}this.isBusy||(this.isBusy=!0,(i=this.searchBtn)==null||i.setDisabled(!1),(o=this.searchBtn)==null||o.setButtonText("Searching..."),(n=this.submitCallback)==null||n.call(this,{query:this.query,apis:e}))}onOpen(){let{contentEl:e}=this;e.createEl("h2",{text:this.title});leti="Search by title",o=newpt.TextComponent(e);o.inputEl.style.width="100%",o.setPlaceholder(i),o.setValue(this.query),o.onChange(n=>this.query=n),o.inputEl.addEventListener("keydown",this.keyPressCallback.bind(this)),e.appendChild(o.inputEl),o.inputEl.focus(),e.createDiv({cls:"media-db-plugin-spacer"}),e.createEl("h3",{text:"APIs to search"});for(letnofthis.plugin.apiManager.apis){leta=e.createEl("div",{cls:"media-db-plugin-list-wrapper"}),s=a.createEl("div",{cls:"media-db-plugin-list-text-wrapper"});s.createEl("span",{text:n.apiName,cls:"media-db-plugin-list-text"}),s.createEl("small",{text:n.apiDescription,cls:"media-db-plugin-list-text"});letl=a.createEl("div",{cls:"media-db-plugin-list-toggle"}),d=newpt.ToggleComponent(l);d.setTooltip(n.apiName),d.setValue(this.selectedApis.some(c=>c===n.apiName)),d.onChange(c=>{c?this.selectedApis.push(n.apiName):this.selectedApis=this.selectedApis.filter(u=>u!==n.apiName)}),l.appendChild(d.toggleEl)}e.createDiv({cls:"media-db-plugin-spacer"}),newpt.Setting(e).addButton(n=>{n.setButtonText("Cancel"),n.onClick(()=>this.close()),n.buttonEl.addClass("media-db-plugin-button")}).addButton(n=>{n.setButtonText("Ok"),n.setCta(),n.onClick(()=>{this.search()}),n.buttonEl.addClass("media-db-plugin-button"),this.searchBtn=n})}onClose(){vari;(i=this.closeCallback)==null||i.call(this);let{contentEl:e}=this;e.empty()}};varct=require("obsidian");varKo=classextendsct.Modal{constructor(e,i){varo;i=Object.assign({},Il,i);super(e.app);p(this,"plugin");p(this,"query");p(this,"isBusy");p(this,"title");p(this,"selectedApi");p(this,"searchBtn");p(this,"submitCallback");p(this,"closeCallback");this.plugin=e,this.title=(o=i.modalTitle)!=null?o:"",this.selectedApi=i.preselectedAPI||e.apiManager.apis[0].apiName,this.query="",this.isBusy=!1}setSubmitCallback(e){this.submitCallback=e}setCloseCallback(e){this.closeCallback=e}keyPressCallback(e){e.key==="Enter"&&this.search()}asyncsearch(){vare,i,o;if(!this.query){newct.Notice("MDB | no Id entered");return}if(!this.selectedApi){newct.Notice("MDB | No API selected");return}this.isBusy||(this.isBusy=!0,(e=this.searchBtn)==null||e.setDisabled(!1),(i=this.searchBtn)==null||i.setButtonText("Searching..."),(o=this.submitCallback)==null||o.call(this,{query:this.query,api:this.selectedApi}))}onOpen(){let{contentEl:e}=this;e.createEl("h2",{text:this.title});leti="Search by id",o=newct.TextComponent(e);o.inputEl.styl
`}),i.createEl("small",{text:`${e.type.toUpperCase()+(e.subType?` (${e.subType})`:"")}from${e.dataSource}`})}submit(){var e,i;this.busy||(this.busy=!0,(e=this.submitButton)==null||e.setButtonText("Creating entry..."),(i=this.submitCallback)==null||i.call(this,{selected:this.selectModalElements.filter(o=>o.isActive()).map(o=>o.value)}))}skip(){var e,i;(e=this.skipButton)==null||e.setButtonText("Skipping..."),(i=this.skipCallback)==null||i.call(this)}onClose(){var e;(e=this.closeCallback)==null||e.call(this)}};var Ol={modalTitle:"Media DB Search",preselectedTypes:[],prefilledSearchString:""},Fl={modalTitle:"Media DB Advanced Search",preselectedAPIs:[],prefilledSearchString:""},Il={modalTitle:"Media DB Id Search",preselectedAPI:"",prefilledSearchString:""},Bl={modalTitle:"Media DB Search Results",elements:[],multiSelect:!0,skipButton:!1},Nl={modalTitle:"Media DB Preview",elements:[]},en=class{constructor(r){p(this,"plugin");this.plugin=r}async createSearchModal(r){let e=new zo(this.plugin,r);return{searchModalResult:await new Promise(o=>{e.setSubmitCallback(n=>o({code:"SUCCESS",data:n})),e.setCloseCallback(n=>{n&&o({code:"ERROR",error:n}),o({code:"CLOSE"})}),e.open()}),searchModal:e}}async openSearchModal(r,e){let{searchModalResult:i,searchModal:o}=await this.createSearchModal(r);if(console.debug(`MDB|searchModalclosedwithcode${i.code}`),i.code==="ERROR"){console.warn(i.error),new ut.Notice(i.error.toString()),o.close();return}if(i.code!=="CLOSE")try{let n=await e(i.data);return o.close(),n}catch(n){console.warn(n),new ut.Notice(`${n}`),o.close();return}}async createAdvancedSearchModal(r){let e=new Go(this.plugin,r);return{advancedSearchModalResult:await new Promise(o=>{e.setSubmitCallback(n=>o({code:"SUCCESS",data:n})),e.setCloseCallback(n=>{n&&o({code:"ERROR",error:n}),o({code:"CLOSE"})}),e.open()}),advancedSearchModal:e}}async openAdvancedSearchModal(r,e){let{advancedSearchModalResult:i,advancedSearchModal:o}=await this.createAdvancedSearchModal(r);if(console.debug(`MDB|advencedSearchModalclosedwithcode${i.code}`),i.code==="ERROR"){console.warn(i.error),new ut.Notice(i.error.toString()),o.close();return}if(i.code!=="CLOSE")try{let n=await e(i.data);return o.close(),n}catch(n){console.warn(n),new ut.Notice(`${n}`),o.close();return}}async createIdSearchModal(r){let e=new Ko(this.plugin,r);return{idSearchModalResult:await new Promise(o=>{e.setSubmitCallback(n=>o({code:"SUCCESS",data:n})),e.setCloseCallback(n=>{n&&o({code:"ERROR",error:n}),o({code:"CLOSE"})}),e.open()}),idSearchModal:e}}async openIdSearchModal(r,e){let{idSearchModalResult:i,idSearchModal:o}=await this.createIdSearchModal(r);if(console.debug(`MDB|idSearchModalclosedwithcode${i.code}`),i.code==="ERROR"){console.warn(i.error),new ut.Notice(i.error.toString()),o.close();return}if(i.code!=="CLOSE")try{let n=await e(i.data);return o.close(),n}catch(n){console.warn(n),new ut.Notice(`${n}`),o.close();return}}async createSelectModal(r){let e=new Qo(this.plugin,r);return{selectModalResult:await new Promise(o=>{e.setSubmitCallback(n=>o({code:"SUCCESS",data:n})),e.setSkipCallback(()=>o({code:"SKIP"})),e.setCloseCallback(n=>{n&&o({code:"ERROR",error:n}),o({code:"CLOSE"})}),e.open()}),selectModal:e}}async openSelectModal(r,e){let{selectModalResult:i,selectModal:o}=await this.createSelectModal(r);if(console.debug(`MDB|selectModalclosedwithcode${i.code}`),i.code==="ERROR"){console.warn(i.error),new ut.Notice(i.error.toString()),o.close();return}if(i.code!=="CLOSE"&&i.code!=="SKIP")try{let n=await e(i.data);return o.close(),n}catch(n){console.warn(n),new ut.Notice(`${n}`),o.close();return}}async createPreviewModal(r){let e=new jo(this.plugin,r);return{previewModalResult:await new Promise(o=>{e.setSubmitCallback(n=>o({code:"SUCCESS",data:n})),e.setCloseCallback(n=>{n&&o({code:"ERROR",error:n}),o({code:"CLOSE"})}),e.open()}),previewModal:e}}async openPreviewModal(r,e){let{previewModalResult:i,previewModal:o}=await this.createPreviewModal(r);if(console.debug(`MDB|previewModalclosedwithcode${i.code}`),i.code==="ERROR")return console.warn(i.error)
`)?a.substring(1):a,i+=a,{fileMetadata:e,fileContent:i}}async attachTemplate(e,i,o){if(!o)return{fileMetadata:e,fileContent:i};let n=this.getMetaDataFromFileContent(o);e=Object.assign(n,e);let a=new RegExp(this.frontMatterRexExpPattern),s=o.replace(a,"");return i+=s,{fileMetadata:e,fileContent:i}}getMetaDataFromFileContent(e){let i,n=new RegExp(this.frontMatterRexExpPattern).exec(e);if(!n)return{};let a=n[0];return a?(a=a.substring(4),a=a.substring(0,a.length-3),i=(0,oe.parseYaml)(a),i||(i={}),console.debug("MDB | metadata read from file content",i),i):{}}getMetadataFromFileCache(e){var o;let i=(o=this.app.metadataCache.getFileCache(e))==null?void 0:o.frontmatter;return structuredClone(i!=null?i:{})}async createNote(e,i,o){var d;let n=(d=o.folder)!=null?d:this.app.vault.getAbstractFileByPath("/");if(!n||!(n instanceof oe.TFolder))throw new Error("MDB | invalid folder");e=Fa(e);let a=`${n.path}/${e}.md`,s=this.app.vault.getAbstractFileByPath(a);s&&await this.app.vault.delete(s);let l=await this.app.vault.create(a,i);if(console.debug(`MDB|creatednewfileat${a}`),o.openNote){let c=this.app.workspace.getUnpinnedLeaf();if(!c)return console.warn("MDB | no active leaf, not opening newly created note"),l;await c.openFile(l,{state:{mode:"source"}})}return l}async updateActiveNote(e=!1){var l,d,c;let i=(l=this.app.workspace.getActiveFile())!=null?l:void 0;if(!i)throw new Error("MDB | there is no active note");let o=this.getMetadataFromFileCache(i);if(o=this.modelPropertyMapper.convertObjectBack(o),console.debug("MDB | read metadata",o),!(o!=null&&o.type)||!(o!=null&&o.dataSource)||!(o!=null&&o.id))throw new Error("MDB | active note is not a Media DB entry or is missing metadata");let n=o,a=this.mediaTypeManager.createMediaTypeModelFromMediaType(n,n.type),s=await this.apiManager.queryDetailedInfoById(n.id,n.dataSource);s&&(s=Object.assign(a,s.getWithOutUserData()),e?await this.createMediaDbNoteFromModel(s,{attachFile:i,folder:(d=i.parent)!=null?d:void 0,openNote:!0}):await this.createMediaDbNoteFromModel(s,{attachTemplate:!0,folder:(c=i.parent)!=null?c:void 0,openNote:!0}))}async createEntriesFromFolder(e){let i=[],o=!1,{selectedAPI:n,titleFieldName:a,appendContent:s}=await new Promise(l=>{new co(this.app,this,(d,c,u)=>{l({selectedAPI:d,titleFieldName:c,appendContent:u})}).open()});for(let l of e.children)if(l instanceof oe.TFile){let d=l;if(o){i.push({filePath:d.path,error:"user canceled"});continue}let u=this.getMetadataFromFileCache(d)[a];if(!u){i.push({filePath:d.path,error:`metadatafield'${a}'notfoundorempty`});continue}let f=[];try{f=await this.apiManager.query(u,[n])}catch(v){i.push({filePath:d.path,error:`${v}`});continue}if(!f||f.length===0){i.push({filePath:d.path,error:"no search results"});continue}let{selectModalResult:m,selectModal:g}=await this.modalHelper.createSelectModal({elements:f,skipButton:!0,modalTitle:`Resultsfor'${u}'`});if(m.code==="ERROR"){i.push({filePath:d.path,error:m.error.message}),g.close();continue}if(m.code==="CLOSE"){i.push({filePath:d.path,error:"user canceled"}),g.close(),o=!0;continue}if(m.code==="SKIP"){i.push({filePath:d.path,error:"user skipped"}),g.close();continue}if(m.data.selected.length===0){i.push({filePath:d.path,error:"no search results selected"});continue}let h=await this.queryDetails(m.data.selected);await this.createMediaDbNotes(h,s?d:void 0),g.close()}i.length>0&&await this.createErroredFilesReport(i)}async createErroredFilesReport(e){let i=`MDB-bulkimporterrorreport${Ba(newDate)}`,o=`${i}.md`,n=[["file","error"]].concat(e.map(s=>[s.filePath,s.error])),a=`#${i}
${Ia(n)}`;await this.app.vault.create(o,a)}async loadSettings(){let e=await this.loadData(),i=Rl(this),o=Object.assign({},i,e),n=[];for(let a of i.propertyMappingModels){let s=o.propertyMappingModels.find(l=>l.type===a.type);if(s===void 0)n.push(a);else{let l=[];for(let d of a.properties){let c=s.properties.find(u=>u.property===d.property);c===void 0?l.push(d):l.push(new or(c.property,c.newProperty,c.mapping,d.locked))}n.push(new kr(s.type,l))}}o.propertyMappingModels=n,this.settings=o}async saveSettings(){this.mediaTypeManager.updateTemplates(this.settings),this.mediaTypeManager.updateFolders(this.settings),this.dateFormatter.setFormat(this.settings.customDateFormat),await this.saveData(this.settings)}};