Completed Table Deletion and Regeneration
This commit is contained in:
parent
c92956854d
commit
5ca47989d1
|
@ -1,10 +1,6 @@
|
|||
import React from "react";
|
||||
import Table from "./Body/Table";
|
||||
import Song from "../melodii/Song";
|
||||
import Filepath from "../melodii/Filepath";
|
||||
import Misc from "./MiscMethods";
|
||||
import Table, { generate, saveTable } from "./Body/Table";
|
||||
import Emitter from "../melodii/Events";
|
||||
import Modal from "./Modal";
|
||||
|
||||
|
||||
const Settings = window.require("electron-settings");
|
||||
|
@ -66,25 +62,11 @@ export default class Body extends React.Component {
|
|||
};
|
||||
|
||||
if (!Settings.has("tableJSON")) {
|
||||
let tableJSON = await this.generate(template);
|
||||
let tableJSON = await generate("C:\\Users\\Paoda\\Downloads", template);
|
||||
|
||||
this.setState({
|
||||
table: tableJSON
|
||||
});
|
||||
this.setState({ table: tableJSON });
|
||||
saveTable(tableJSON);
|
||||
|
||||
let timestamp = Date.now();
|
||||
Settings.set("tableJSON", {
|
||||
data: tableJSON,
|
||||
timestamp: timestamp
|
||||
});
|
||||
|
||||
let date = new Date(timestamp);
|
||||
console.log(
|
||||
"Table data created at: " +
|
||||
date.toDateString() +
|
||||
" at " +
|
||||
date.toTimeString()
|
||||
);
|
||||
} else {
|
||||
console.log("Data Loaded from Persistent Storage Space");
|
||||
|
||||
|
@ -102,58 +84,6 @@ export default class Body extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates Table From Scratch
|
||||
* @param {Array<String>} template
|
||||
* @return {Promise<}
|
||||
* @async
|
||||
*/
|
||||
async generate(template) {
|
||||
let filepath = new Filepath("C:\\Users\\Paoda\\Downloads");
|
||||
let list = await filepath.getValidFiles();
|
||||
console.log("Found " + list.length + "valid files.");
|
||||
return new Promise(async (res, rej) => {
|
||||
let temp = await this.generateBody(
|
||||
template,
|
||||
list,
|
||||
0,
|
||||
list.length - 1
|
||||
);
|
||||
res(temp);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates Body of Table from Scratch
|
||||
* @param {Object} tableArg Table Element
|
||||
* @param {Array<String>} arr Array of Valid Song Files
|
||||
* @param {Number} start of Array
|
||||
* @param {Number} end of Array
|
||||
* @return {Object} Table Object with Body Completely parsed.
|
||||
* @async
|
||||
*/
|
||||
async generateBody(tableArg, arr, start, end) {
|
||||
let table = tableArg;
|
||||
let t1 = performance.now();
|
||||
let dom = document.getElementById("bad-search-syntax");
|
||||
for (let i = 0; i <= end; i++) {
|
||||
let song = new Song(arr[i]);
|
||||
song = await Song.getMetadata(song);
|
||||
table.tbody.push(Misc.formatMetadata(song, song.metadata));
|
||||
dom.innerHTML = "Creating Table Data: " + ~~((i / end) * 100) + "%";
|
||||
}
|
||||
let t2 = performance.now();
|
||||
console.log(
|
||||
"Time Taken (Table Data Creation): " +
|
||||
Math.floor(t2 - t1) / 1000 +
|
||||
"s"
|
||||
);
|
||||
|
||||
return new Promise((res, rej) => {
|
||||
res(table);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles Key Presses
|
||||
* @param {KeyboardEvent} e
|
||||
|
@ -229,8 +159,6 @@ export default class Body extends React.Component {
|
|||
}
|
||||
|
||||
openSettings() {
|
||||
const settings = document.querySelector('.settings-window');
|
||||
Emitter.emit('loadModal');
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ import Song from "../../melodii/Song";
|
|||
import MusicPlayer from "../../melodii/MusicPlayer";
|
||||
import Misc from "../MiscMethods";
|
||||
import Emitter from "../../melodii/Events";
|
||||
import Filepath from "../../melodii/Filepath";
|
||||
import Settings from 'electron-settings';
|
||||
|
||||
/** @type {HTMLElement} */
|
||||
var active = document.createElement("tr");
|
||||
|
@ -177,3 +179,81 @@ export default class Table extends React.Component {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generates Table From Scratch
|
||||
* @param {Array<String>} template
|
||||
* @return {Promise<}
|
||||
* @async
|
||||
*/
|
||||
export async function generate(path, template) {
|
||||
const filepath = new Filepath(path);
|
||||
const list = await filepath.getValidFiles();
|
||||
|
||||
console.log("Found " + list.length + " valid files.");
|
||||
|
||||
return new Promise(async (res, rej) => {
|
||||
let temp = await generateBody(
|
||||
template,
|
||||
list,
|
||||
0,
|
||||
list.length - 1
|
||||
);
|
||||
res(temp);
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Generates Body of Table from Scratch
|
||||
* @param {Object} tableArg Table Element
|
||||
* @param {Array<String>} arr Array of Valid Song Files
|
||||
* @param {Number} start of Array
|
||||
* @param {Number} end of Array
|
||||
* @return {Object} Table Object with Body Completely parsed.
|
||||
* @async
|
||||
*/
|
||||
|
||||
async function generateBody(tableArg, arr, start, end) {
|
||||
let table = tableArg;
|
||||
const t1 = performance.now();
|
||||
let dom = document.getElementById("bad-search-syntax");
|
||||
|
||||
for (let i = 0; i <= end; i++) {
|
||||
let song = new Song(arr[i]);
|
||||
song= await Song.getMetadata(song);
|
||||
|
||||
table.tbody.push(Misc.formatMetadata(song, song.metadata));
|
||||
dom.innerHTML = "Creating Table Data: " + ~~((i / end) * 100) + "%";
|
||||
}
|
||||
|
||||
const t2 = performance.now();
|
||||
console.log(
|
||||
"Time Taken (Table Data Creation): " +
|
||||
Math.floor(t2 - t1) / 1000 +
|
||||
"s"
|
||||
);
|
||||
|
||||
return new Promise((res, rej) => {
|
||||
res(table);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function saveTable(tableJSON) {
|
||||
const stamp = Date.now();
|
||||
|
||||
Settings.set("tableJSON", {
|
||||
data: tableJSON,
|
||||
timestamp: stamp
|
||||
});
|
||||
|
||||
let date = new Date(stamp);
|
||||
console.log(
|
||||
"Table data created at: " +
|
||||
date.toDateString() +
|
||||
" at " +
|
||||
date.toTimeString()
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import React from 'react';
|
||||
import Emitter from '../melodii/Events';
|
||||
|
||||
/**
|
||||
* Brarebones Template for a Modal in Melodii
|
||||
* - toggles between visible and not in order to dissapear and reappear.
|
||||
*/
|
||||
export default class Modal extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
|
@ -1,24 +1,65 @@
|
|||
import React from 'react';
|
||||
import Modal from '../Modal';
|
||||
import Emitter from '../../melodii/Events';
|
||||
import { generate, saveTable } from '../Body/Table';
|
||||
|
||||
const Settings = window.require("electron-settings");
|
||||
|
||||
/**
|
||||
* The Extension of the Modal Class which is responsible for
|
||||
* dealing with the settings, and therefore named SettingsManager
|
||||
*/
|
||||
export default class SettingsManager extends Modal {
|
||||
constructor() {
|
||||
super();
|
||||
this.template = {
|
||||
thead: {
|
||||
tr: ["Artist", "Title", "Album", "Year", "Genre", "Time"] //contains <th> strings
|
||||
},
|
||||
tbody: []
|
||||
};
|
||||
|
||||
this.JSX =
|
||||
<div className='settings-window'>
|
||||
<form>
|
||||
<h3>Settings</h3>
|
||||
<label for="table-data">
|
||||
Delete Table Data: <input type="button" value="Delete" name="delete-table" id="delete-table-btn" />
|
||||
<label htmlFor="table-data">
|
||||
Delete Table Data: <input onClick={this.deleteTable.bind(this)} type="button" value="Delete" name="delete-table" id="delete-table-btn" />
|
||||
Regnerate Table Data: <input onClick={this.regenTable.bind(this)} type="button" value="Regenerate" name="regen-table" id="regen-table-btn" />
|
||||
</label>
|
||||
</form>
|
||||
</div>;
|
||||
}
|
||||
|
||||
render() {
|
||||
return(
|
||||
<Modal content={this.JSX} />
|
||||
);
|
||||
}
|
||||
|
||||
deleteTable() {
|
||||
if (Settings.has("tableJSON")) Settings.delete("tableJSON");
|
||||
else console.warn("There was no Table Saved to Delete!");
|
||||
|
||||
Emitter.emit("newTable", this.template)
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Regenerates a Table
|
||||
* TODO: Make this a function w/ the one inside of Body.js
|
||||
*/
|
||||
async regenTable() {
|
||||
if (Settings.has("tableJSON")) Settings.delete("tableJSON");
|
||||
else console.warn("there was no Table Saved to Delete!")
|
||||
|
||||
let tableJSON = await generate("C:\\Users\\Paoda\\Downloads", this.template);
|
||||
|
||||
Emitter.emit("newTable", tableJSON);
|
||||
|
||||
saveTable(tableJSON);
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue