/**
* @class
* Représentation d'un fichier xml retourné par Nextcloud.
* @param {*} xml Fichier xml récupérer depuis Nextcloud.
*/
function Nextcloud_File(xml)
{
/**
* Récupère le chemin du fichier à partir de son url.
* @returns {string} Chemin du fichier.
*/
this.document_path = function()
{
let txt = "";
let retour = "";
let canSave = false;
let nextIsUSer = false;
for (let index = 0; index < this.href.length; index++) {
const element = this.href[index];
//console.log("[element]",element);
if (element === "/")
{
//console.log("[txt]",txt);
if (!canSave)
{
if (!nextIsUSer)
{
if (txt === "files")
nextIsUSer = true;
}
else
canSave = true;
txt = "";
}
else {
//console.log("[retour]", retour);
retour += txt + "/";
txt = "";
}
}
else
txt += element;
}
return retour;
}
this.file = xml;
//Si c'est un fichier
try {
this.href = xml.getElementsByTagName("d:href")[0].innerHTML;
} catch (error) {
this.is_valid_file = false;
return;
}
let text = "";
let lastText = "";
for (let index = 0; index < this.href.length; index++) {
const element = this.href[index];
if (element === "/")
{
if (index === (this.href.length - 1))
break;
lastText = text;
text = "";
}
else
text += element;
}
this.name = decodeURI(text);
this.folder_parent = decodeURI(lastText);
if (this.folder_parent === "files")
this.folder_parent = null;
text = lastText = null;
//console.log(xml.getElementsByTagName("d:propstat"));
let prop = Enumerable.from(xml.getElementsByTagName("d:propstat")).select(x => x.getElementsByTagName("d:status")[0]).where(x => x.innerHTML.includes("OK")).firstOrDefault(null);
this.is_valid_file = prop !== null;
if (!this.is_valid_file)
return;
prop = prop.parentElement.getElementsByTagName("d:prop")[0];
try {
this.lastModified = new Date(prop.getElementsByTagName("d:getlastmodified")[0].innerHTML);
} catch (error) {
this.lastModified = null;
}
try {
this.tag = prop.getElementsByTagName("d:getetag")[0].innerHTML;
} catch (error) {
this.tag = null;
}
try {
this.id = prop.getElementsByTagName("oc:fileid")[0].innerHTML;
} catch (error) {
this.id = undefined;
}
try {
this.size = prop.getElementsByTagName("oc:size")[0].innerHTML;
} catch (error) {
this.size = undefined;
}
//console.log(this.filename,prop.getElementsByTagName("d:resourcetype")[0], prop.getElementsByTagName("d:resourcetype")[0].children);
try {
this.type = prop.getElementsByTagName("d:resourcetype")[0].children.length !== 0 ? mel_metapage.Symbols.nextcloud.folder : mel_metapage.Symbols.nextcloud.file;
} catch (error) {
this.type = undefined;
}
/**
* Renvoie vrai si il s'agit d'un fichier.
*/
this.is_file = function () {
return this.type === mel_metapage.Symbols.nextcloud.file;
};
/**
* Renvoie vrai si le dossier est celui de l'utilisateur.
* @param {string} user Utilisateur à tester.
*/
this.is_master_folder = function (user)
{
return !this.is_file() && this.filename === user;
}
}
/**
* Récupère le chemin d'une url.
* @param {string} path Url qui contient le chemin.
*/
Nextcloud_File.get_path = function(path)
{
let tmp = new Nextcloud_File(null);
tmp.href = path;
return tmp.document_path();
}