|  | @@ -58,7 +58,7 @@ let ncmAPIUrl = "http://localhost:5999";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  let currentTask = [];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function Submit(req, res) {
 | 
	
		
			
				|  |  | +function Submit(req) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      let uuid = crypto.randomUUID()
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -140,10 +140,8 @@ function Submit(req, res) {
 | 
	
		
			
				|  |  |          onData: callback, onError: errcb
 | 
	
		
			
				|  |  |      }).then(() => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        db.execute(("INSERT INTO instrunet_entry (uuid, song_name, album_name, link_to, databinary, artist,kind, albumcover) VALUES (?,?,?,?,?,?,?,?)"), [uuid, req.body.name, req.body.albumName, req.body.link, fs.readFileSync(kind_of[1]), req.body.artist, req.body.kind, albumCover])
 | 
	
		
			
				|  |  | -        db.unprepare(() => {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | +        db.execute(("INSERT INTO instrunet_entry (uuid, song_name, album_name, link_to, databinary, artist,kind, albumcover, email) VALUES (?,?,?,?,?,?,?,?,?)"), [uuid, req.body.name, req.body.albumName, req.body.link, fs.readFileSync(kind_of[1]), req.body.artist, req.body.kind, albumCover, req.body.email])
 | 
	
		
			
				|  |  | +        db.unprepare()
 | 
	
		
			
				|  |  |          fs.rm(kind_of[1], (err) => {
 | 
	
		
			
				|  |  |              if (err) {
 | 
	
		
			
				|  |  |                  console.log(err);
 | 
	
	
		
			
				|  | @@ -205,16 +203,9 @@ app.post('/submit', SubmitWrapper)
 | 
	
		
			
				|  |  |  async function SubmitWrapper(req, res) {
 | 
	
		
			
				|  |  |      // TODO
 | 
	
		
			
				|  |  |      //  May extract logic for dupe check in the future.
 | 
	
		
			
				|  |  | -    db.execute(`SELECT uuid, song_name, album_name, artist, kind
 | 
	
		
			
				|  |  | -                FROM instrunet_entry
 | 
	
		
			
				|  |  | -                WHERE song_name = '${await converters2t.convertPromise(req.body.name)}'
 | 
	
		
			
				|  |  | -                  and artist = '${await converters2t.convertPromise(req.body.artist)}'
 | 
	
		
			
				|  |  | -                  and kind = ${req.body.kind}`, async (err, rowsT) => {
 | 
	
		
			
				|  |  | -        db.execute(`SELECT uuid, song_name, album_name, artist, kind
 | 
	
		
			
				|  |  | -                    FROM instrunet_entry
 | 
	
		
			
				|  |  | -                    WHERE song_name = '${await convertert2s.convertPromise(req.body.name)}'
 | 
	
		
			
				|  |  | -                      and artist = '${await convertert2s.convertPromise(req.body.artist)}'
 | 
	
		
			
				|  |  | -                      and kind = ${req.body.kind}`, (err, rowsS) => {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    db.execute(("SELECT uuid, song_name, album_name, artist, kind FROM instrunet_entry WHERE song_name = ? and artist = ? and kind = ?"), [await converters2t.convertPromise(req.body.name), await converters2t.convertPromise(req.body.artist), req.body.kind], async (err, rowsT) => {
 | 
	
		
			
				|  |  | +        db.execute("SELECT uuid, song_name, album_name, artist, kind FROM instrunet_entry WHERE song_name = ? and artist = ? and kind = ?", [await convertert2s.convertPromise(req.body.name), await convertert2s.convertPromise(req.body.artist), req.body.kind], (err, rowsS) => {
 | 
	
		
			
				|  |  |              let dedupe = [];
 | 
	
		
			
				|  |  |              rowsT.forEach(row => {
 | 
	
		
			
				|  |  |                  dedupe = dedupe.concat(row);
 | 
	
	
		
			
				|  | @@ -224,7 +215,6 @@ async function SubmitWrapper(req, res) {
 | 
	
		
			
				|  |  |                      dedupe = dedupe.concat(row);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  | -            console.log(dedupe);
 | 
	
		
			
				|  |  |              if (dedupe.length === 0) {
 | 
	
		
			
				|  |  |                  // Verify
 | 
	
		
			
				|  |  |                  if (req.body.file.substring(0, 5) !== "data:") {
 | 
	
	
		
			
				|  | @@ -259,7 +249,7 @@ async function SubmitWrapper(req, res) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  queue.add(() => {
 | 
	
		
			
				|  |  | -                    Submit(req, res)
 | 
	
		
			
				|  |  | +                    Submit(req)
 | 
	
		
			
				|  |  |                  })
 | 
	
		
			
				|  |  |                  currentTask.push({
 | 
	
		
			
				|  |  |                      name: req.body.name, albumName: req.body.albumName, kind: req.body.kind, artist: req.body.artist,
 | 
	
	
		
			
				|  | @@ -282,7 +272,6 @@ async function SubmitWrapper(req, res) {
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  app.post('/lyric', async (req, res) => {
 | 
	
	
		
			
				|  | @@ -324,16 +313,8 @@ app.options('/submit', function (req, res) {
 | 
	
		
			
				|  |  |  app.post('/search_api', async function (req, res) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    db.execute(`SELECT uuid, song_name, album_name, artist, kind
 | 
	
		
			
				|  |  | -                FROM instrunet_entry
 | 
	
		
			
				|  |  | -                WHERE song_name like '%${await converters2t.convertPromise(req.body.searchStr)}%'
 | 
	
		
			
				|  |  | -                   or album_name like '%${await converters2t.convertPromise(req.body.searchStr)}%'
 | 
	
		
			
				|  |  | -                   or artist like '%${await converters2t.convertPromise(req.body.searchStr)}%'`, async (err, rowsT) => {
 | 
	
		
			
				|  |  | -        db.execute(`SELECT uuid, song_name, album_name, artist, kind
 | 
	
		
			
				|  |  | -                    FROM instrunet_entry
 | 
	
		
			
				|  |  | -                    WHERE song_name like '%${await convertert2s.convertPromise(req.body.searchStr)}%'
 | 
	
		
			
				|  |  | -                       or album_name like '%${await convertert2s.convertPromise(req.body.searchStr)}%'
 | 
	
		
			
				|  |  | -                       or artist like '%${await convertert2s.convertPromise(req.body.searchStr)}%'`, (err, rowsS) => {
 | 
	
		
			
				|  |  | +    db.execute("SELECT uuid, song_name, album_name, artist, kind FROM instrunet_entry WHERE song_name like ? or album_name like ? or artist like ?", [`%${await converters2t.convertPromise(req.body.searchStr)}%`, `%${await converters2t.convertPromise(req.body.searchStr)}%`, `%${await converters2t.convertPromise(req.body.searchStr)}%`], async (err, rowsT) => {
 | 
	
		
			
				|  |  | +        db.execute("SELECT uuid, song_name, album_name, artist, kind FROM instrunet_entry WHERE song_name like ? or album_name like ? or artist like ?", [`%${await convertert2s.convertPromise(req.body.searchStr)}%`, `%${await convertert2s.convertPromise(req.body.searchStr)}%`, `%${await convertert2s.convertPromise(req.body.searchStr)}%`], (err, rowsS) => {
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  |                  let prepare = [];
 | 
	
		
			
				|  |  |                  rowsT.forEach(row => {
 | 
	
	
		
			
				|  | @@ -366,9 +347,7 @@ app.get("/getSingle", function (req, res) {
 | 
	
		
			
				|  |  |      let uuid = crypto.randomUUID()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (req.query.id) {
 | 
	
		
			
				|  |  | -        db.execute(`SELECT song_name, album_name, artist, kind, albumcover
 | 
	
		
			
				|  |  | -                    FROM instrunet_entry
 | 
	
		
			
				|  |  | -                    WHERE uuid = "${req.query.id}"`, async function (err, rows) {
 | 
	
		
			
				|  |  | +        db.execute("SELECT song_name, album_name, artist, kind, albumcover FROM instrunet_entry WHERE uuid = ?", [req.query.id], async function (err, rows) {
 | 
	
		
			
				|  |  |              if (err) {
 | 
	
		
			
				|  |  |                  console.log(err);
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -469,9 +448,10 @@ app.get("/favicon.ico", function (req, res) {
 | 
	
		
			
				|  |  |      res.end("");
 | 
	
		
			
				|  |  |  })
 | 
	
		
			
				|  |  |  let availCache = {};
 | 
	
		
			
				|  |  | -setInterval(() => {
 | 
	
		
			
				|  |  | -    availCache = {};
 | 
	
		
			
				|  |  | -}, 1800000)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// setInterval(() => {
 | 
	
		
			
				|  |  | +//     availCache = {};
 | 
	
		
			
				|  |  | +// }, 1800000)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Fetch
 | 
	
		
			
				|  |  |  app.get('/:uuid', function (req, res) {
 | 
	
	
		
			
				|  | @@ -480,17 +460,18 @@ app.get('/:uuid', function (req, res) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function Provider(err, rows) {
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  | +            availCache[uuid] = rows[0]
 | 
	
		
			
				|  |  |              res.contentType("audio/mp3");
 | 
	
		
			
				|  |  |              res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  |              res.header("Access-Control-Allow-Headers", "Content-Type");
 | 
	
		
			
				|  |  | -            res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | -            res.header('Content-Disposition', `attachment; filename="${encodeURI(rows[0].song_name)}"`);
 | 
	
		
			
				|  |  | +            res.header('Content-Disposition', `attachment; filename="${encodeURI(availCache[uuid].song_name)}.mp3"`);
 | 
	
		
			
				|  |  |              /** @type {ArrayBuffer}*/
 | 
	
		
			
				|  |  | -            availCache[uuid] = rows[0].databinary
 | 
	
		
			
				|  |  | -            res.sendSeekable(availCache[uuid])
 | 
	
		
			
				|  |  | +            res.sendSeekable(availCache[uuid].databinary)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          } catch (e) {
 | 
	
		
			
				|  |  | +            res.contentType("text/plain");
 | 
	
		
			
				|  |  | +            res.status(500).header("Access-Control-Allow-Origin", "*").end("Err.");
 | 
	
		
			
				|  |  |              console.log(e)
 | 
	
		
			
				|  |  |              console.log("Triggered err");
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -498,22 +479,17 @@ app.get('/:uuid', function (req, res) {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (availCache[uuid] !== undefined) {
 | 
	
		
			
				|  |  | -        db.execute(`SELECT song_name
 | 
	
		
			
				|  |  | -                    FROM instrunet_entry
 | 
	
		
			
				|  |  | -                    WHERE uuid = '${uuid}'`, (err, rows) => {
 | 
	
		
			
				|  |  | -            res.contentType("audio/mp3");
 | 
	
		
			
				|  |  | -            res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | -            res.header("Access-Control-Allow-Headers", "Content-Type");
 | 
	
		
			
				|  |  | -            res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | -            res.header('Content-Disposition', `attachment; filename="${encodeURI(rows[0].song_name)}"`);
 | 
	
		
			
				|  |  | -            res.sendSeekable(availCache[uuid])
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | +        res.contentType("audio/mp3");
 | 
	
		
			
				|  |  | +        res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | +        res.header("Access-Control-Allow-Headers", "Content-Type");
 | 
	
		
			
				|  |  | +        res.header("Access-Control-Allow-Origin", "*");
 | 
	
		
			
				|  |  | +        res.header('Content-Disposition', `attachment; filename="${encodeURI(availCache[uuid].song_name)}.mp3"`);
 | 
	
		
			
				|  |  | +        res.sendSeekable(availCache[uuid].databinary)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -        db.execute(`SELECT song_name, databinary
 | 
	
		
			
				|  |  | -                    FROM instrunet_entry
 | 
	
		
			
				|  |  | -                    WHERE uuid = '${uuid}'`, Provider)
 | 
	
		
			
				|  |  | -        db.unprepare()
 | 
	
		
			
				|  |  | +        db.execute("SELECT song_name, databinary FROM instrunet_entry WHERE uuid = ?", [uuid], Provider)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |