[READ-ONLY] Mirror of https://github.com/probablykasper/ferrum. Music library app for Mac, Linux and Windows ferrum.kasper.space
electron linux macos music music-library music-player napi windows
0

Configure Feed

Select the types of activity you want to include in your feed.

Searching happens through changePage() instead. That way searching now works with URLs

KH (Oct 1, 2017, 11:34 PM +0200) 14f19be1 a8efa29b

+84 -68
db/data/ferrum/playlists.ibd

This is a binary file and will not be displayed.

db/data/ferrum/sessions.ibd

This is a binary file and will not be displayed.

db/data/ferrum/tracks.ibd

This is a binary file and will not be displayed.

db/data/ib_logfile0

This is a binary file and will not be displayed.

db/data/ibdata1

This is a binary file and will not be displayed.

db/data/ibtmp1

This is a binary file and will not be displayed.

db/data/mysql.ibd

This is a binary file and will not be displayed.

db/data/undo_001

This is a binary file and will not be displayed.

db/data/undo_002

This is a binary file and will not be displayed.

+65 -52
web/src/modules/routes.js
··· 50 50 trackId, 51 51 name, 52 52 artist, 53 - TIME_FORMAT(SEC_TO_TIME(time), "%i:%S") 54 - AS time, 53 + time, 55 54 album, 56 - DATE_FORMAT(dateAdded, "%e/%c/%y") 55 + DATE_FORMAT(dateAdded, "%Y-%m-%d %T") 57 56 AS dateAdded, 58 57 plays 59 58 `, ··· 61 60 tracks.trackId, 62 61 name, 63 62 artist, 64 - TIME_FORMAT(SEC_TO_TIME(time), "%i:%S") 65 - AS time, 63 + time, 66 64 album, 67 - DATE_FORMAT(dateAdded, "%e/%c/%y") 65 + DATE_FORMAT(dateAdded, "%Y-%m-%d %T") 68 66 AS dateAdded, 69 67 plays 70 68 ` ··· 145 143 }; 146 144 res.send(JSON.stringify(response)); 147 145 }); 146 + }); 147 + } 148 + } 149 + 150 + // reserved elastic characters + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / 151 + module.exports.search = (req, res) => { 152 + if (res.locals.loggedIn) { 153 + let searchQuery = req.params.searchQuery; 154 + let inTrash = 0; 155 + if (searchQuery.indexOf("inTrash:true") > -1) { 156 + searchQuery.replace(" inTrash:true ", " "); 157 + inTrash = 1; 158 + } 159 + if (searchQuery == "") searchQuery = "*"; 160 + elastic.search({ 161 + index: "catalog", 162 + sort: [ 163 + "_score", 164 + "name.keyword" 165 + ], 166 + _source: trackData.elastic, 167 + body: { 168 + query: { 169 + bool: { 170 + must: [{ 171 + query_string: { 172 + query: searchQuery, 173 + default_operator: "and" 174 + } 175 + } 176 + ], 177 + filter: [ 178 + {term: { userId: res.locals.userId }}, 179 + {term: { inTrash: inTrash }} 180 + ] 181 + } 182 + } 183 + }, 184 + size: 1000, 185 + }).then((body) => { 186 + let playlistQuery = ` 187 + SELECT 188 + playlistId, 189 + name 190 + FROM playlists 191 + WHERE 192 + userId = ? 193 + AND inTrash = 0`; 194 + db.query(playlistQuery, res.locals.userId, (err, playlists) => { 195 + if (err) { 196 + jsonRes(res, "err", 22211); 197 + } else { 198 + jsonRes(res, { 199 + tracks: body.hits.hits, 200 + playlists: playlists, 201 + searchQuery: searchQuery 202 + }); 203 + } 204 + }); 205 + }, (err) => { 206 + jsonRes(res, "err", 22210); 148 207 }); 149 208 } 150 209 } ··· 502 561 } else if (result.affectedRows == 1) { 503 562 res.json({ "errors": null }); 504 563 } 505 - }); 506 - } 507 - } 508 - 509 - // reserved elastic characters + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / 510 - module.exports.search = (req, res) => { 511 - if (res.locals.loggedIn) { 512 - let searchQuery = req.body.query; 513 - let inTrash = 0; 514 - if (searchQuery.indexOf("inTrash:true") > -1) { 515 - searchQuery.replace(" inTrash:true ", " "); 516 - inTrash = 1; 517 - } 518 - elastic.search({ 519 - index: "catalog", 520 - sort: [ 521 - "_score", 522 - "name.keyword" 523 - ], 524 - _source: trackData.elastic, 525 - body: { 526 - query: { 527 - bool: { 528 - must: [{ 529 - query_string: { 530 - query: searchQuery, 531 - default_operator: "and" 532 - } 533 - } 534 - ], 535 - filter: [ 536 - {term: { userId: res.locals.userId }}, 537 - {term: { inTrash: inTrash }} 538 - ] 539 - } 540 - } 541 - }, 542 - size: 1000, 543 - }).then((body) => { 544 - jsonRes(res, { 545 - tracks: body.hits.hits 546 - }); 547 - console.log("GOTTENRES"); 548 - }, (err) => { 549 - console.log("GOTTENRES"); 550 - jsonRes(res, "err", 11200); 551 564 }); 552 565 } 553 566 }
+1 -1
web/src/server.js
··· 58 58 app.post("*", routes.postSetup); 59 59 // PAGES 60 60 app.post("/", routes.home); 61 + app.post("/search/:searchQuery", routes.search); 61 62 app.post("/playlist/:playlistId", routes.playlist); 62 63 // POSTs 63 64 // account ··· 70 71 app.post("/revive-track", routes.reviveTrack); 71 72 app.post("/get-track-info", routes.getTrackInfo); 72 73 app.post("/increment-track-play-count", routes.IncrementTrackPlayCount); 73 - app.post("/search", routes.search); 74 74 // playlists 75 75 app.post("/create-playlist", routes.createPlaylist); 76 76 app.post("/delete-playlist", routes.deletePlaylist);
+18 -15
web/src/static/global.js
··· 112 112 pagePlaylistId = res.playlist.playlistId; 113 113 pagePlaylistName = res.playlist.name; 114 114 page = "/"; 115 + } else if (path.startsWith("/search/")) { 116 + insertPlaylists(res.playlists, true); 117 + insertTracks(res.tracks, true, true); 118 + page = "/"; 119 + var searchBar = document.querySelector("header.app-bar input.search-bar"); 120 + searchBar.value = res.searchQuery; 115 121 } 116 122 } 117 123 // turn off active pages ··· 131 137 } 132 138 133 139 window.addEventListener("popstate", function(e) { 134 - changePage(e.state.path, true); 140 + changePage(e.state.path, false); 135 141 }); 136 142 document.addEventListener("click", function(e) { 137 143 var cl = e.target.classList; ··· 358 364 } 359 365 }); 360 366 }; 361 - window.search = function(searchQuery) { 362 - var req = 363 - "query="+searchQuery; 364 - xhr(req, "/search", function(res) { 365 - res = JSON.parse(res); 366 - if (res.errors) { 367 - notify("An unknown error while searching.", true); 368 - } else { 369 - insertTracks(res.tracks, true, true); 370 - console.log(res.tracks); 371 - } 372 - }); 373 - }; 374 367 // playlists 375 368 window.createPlaylist = function(name, description) { 376 369 var req = ··· 725 718 } 726 719 for (var i = 0; i < tracks.length; i++) { 727 720 if (_source) tracks[i] = tracks[i]._source; 721 + // date format 722 + var date = new Date(tracks[i].dateAdded); 723 + var d = date.getDate(); 724 + var m = date.getMonth() + 1; 725 + var y = date.getFullYear().toString().slice(2); 726 + tracks[i].dateAdded = d+"/"+m+"/"+y; 727 + // time format 728 + var time = tracks[i].time; 729 + time = Math.floor(time / 60)+":"+time % 60 730 + tracks[i].time = time; 728 731 pageTracks.push(tracks[i]); 729 732 tracklist[tracks[i].trackId] = tracks[i]; 730 733 tracklist[tracks[i].trackId].pagePos = i+1; ··· 1290 1293 var searchBar = document.querySelector("header.app-bar input.search-bar"); 1291 1294 document.addEventListener("keydown", function(e) { 1292 1295 if (e.which == 13 && e.target.classList.contains("search-bar")) { //enter 1293 - search(e.target.value); 1296 + changePage("/search/"+e.target.value); 1294 1297 } 1295 1298 }); 1296 1299 })();