Built based on kikoeru project
- Store default admin account info on a txt file.
- Add a switch that open or close user registration.
- Add
patchcommand on npm where will patch the fixed packages.
- History playback didn't have much user experience as expected, delete.
Create route for getting track's listening history.
- Refactor
insertWorkTodbfunction insertion order in./database/metadata.js.
- Hash user password.
Add route to deal with listening history playback.- Simplify view table creation logic.
- Simplify parameters pass on to functions.
- Store media files' duration to database dynamically when requested.
- Patch
recursive-readdirpackage, it's now return array format as below:[ { path: 'file1 absolute path', mtimeMs: 'file1 modified date in millisecond' }, { path: 'file2 absolute path', mtimeMs: 'file2 modified date in millisecond' } ... ] - Categorize file types in
./filesystem/utils.js.
- Change the order of accurate search and plain text search.
- Go back to scan media files' duration when requesting tracks.
- If subtitle file is empty, no longer returning
noContent, return0for its duration value directly.
- Adopt database changes to routes.
- Transit sqlite3 query standards to postgresql query standards.(not complete)
- Change database to PostgreSQL.
- Calculate work counts using the values returned by database.
- Optimize work's metadata requests.
- Add search support for plain RJ code
- When searching RJ code, it now will show the relevant translated works.
- Add
language_editionsmetadata to database.
- Refactor search features.
- Fix regex return incorrect RJ code on scanning local RJ folders.
- Add multi languages genres to database
- Remove
redirectWork. - Create new view table for work queries.
- Fix bugs on updating work's tracks.
- Adding update work's tracks status to websocket.
- Modulize socket and add authentication for websocket.
- Get media file's duration at scan and store it to the database.
- Add health check to backend to notify frontend.
- Change query work's tracks structures.(Refactor the
getWorkTracksfunction) - Add update work's tracks module.
- Fix some typos.
- Change morgan time zone.
- this route is to used for randomly select works
- Add
.vttfile extension to file list since front-end is supporting it.
- Add a switch on
/download/and/stream/api endpoint where front-end doesn't depend on these endpoint to get audio and subtitle's durations. And optimize server load.
- Add http request logger
morgan.
- Get audio files' duration and add duration to the track information.
- Get
lrcfile if that file in the same directory with audio.
- Config file now can be modified through front-end by authorized users.
- Create config route to accept front-end config file modification.
- Add
groupcolumn to store user group.
- Add user
groupto the payload of JWT token to identify what groups the user belongs to.
- Config file will now be created when the app starts if it doesn't exist.
- Database is now will be initialized at the start of the app if it doesn't exist, an admin user will be created upon database creation.
- Schema is now managed by js file, no longer managed through migration file. Migration file is now only for migrate database data and test adding new data features.
- Fix unformatted directory causing work's cover stored to different directory instead the directory in the config file.
- Add a verification on request query token value. If user send JWT token through URL.
- Add login services.
- Use JWT to protect api from abuse.
- JWT auth can be turn on or off.
- Scanner now can scan deeper, with user's limitation depth, in the given root folders' path.
- Method that used to scan deeper in a specific given path.
- Combine all the util functions into a single
utils.jsfile.
- Remove
work_directorysince program doesn't use this info at all. - Change
work_foldernametowork_dirto store work folder relative directory.
- Refactor Regex for matching search keyword.
- If the search keywords didn't have any match in the data or in Regex, return http code 200 with pagination and empty
works.
- Support search work with plain code. (RJcode without "RJ")
- Handle
subtitlesorting.
- Handle
subtitlesorting - Delete unnecessary step of reformating the work query result.
- Add
has_subtitleto database.
- Handle
randomqueries.
- Handle
randomqueries.
- Add
has_subtitlevalue to database.
- Make redirected works' main image RJ code as same as the the RJ code on users' work folders.
- Make all extension names to lower cases in order to make better file sorting.
- Be able to scrape works that are translated by dlsite official. (Same work but different RJ code)
- Handle
randomquery.
- Handle
randomquery.
- Add more subtitle formats.
- Handle
fetchrequest.
Some works don't have tags also, need to verify that before adding them to database.(Handled by front-end)
- When users query page number that is out of maximum page range, return pagination info and empty array of works instead of return 404.
- Search is now support more searching options/keywords
- sell:
$sell:1000$ - rate:
$rate:4.8$ - price:
$price:880$
- sell:
- Refactor the
getWorkTrackmethod object's element names to prevent from mixed withsubtitleas the subtitle of certain works. Andtitleas title name of certain works.title-->fileNamesubtitle-->fileDirName
- Refactor the
toTreemethod object's elements names to prevent from mixed withtitleas title name of certain works.title-->folderDirName
- If folder is deeper, put that folder inside its parent's folder in
toTreemethod. (Only support Linux OS.)
- Create router that handle download and stream. (Mostly Adopted from kikoeru project)
- Add
getWorkTrackandtoTreemethods that will get work track and insert tracks into a work tree. (Mostly Adopted from kikoeru project)
Api url in(Completed)toTreeneed to change to current back-end api.Add routers that serve streaming and downloading.(Completed)- Standardize api url with kikoeru project.
- upgrade Precise searching precision. Searching is now can narrow down with the keywords provided by user. Only showing relevant results to user keywords.
- Add
getWorkByKeywordmethod to handle incoming search value and return results (Wuhu~, drive me crazy)
- Add route
/api/search/:keywordto handle incoming search values. - Make a utility that is used to format the work results straight from the database.
- Fix
alt_rj_codemissing inworks_w_metadataview table.
- Precise (I guess) searching is now available
- Search work by va, circle, tags
- Support multiple keywords search
Precise searching is tested with small amounts of data.
It only support search formats like:
* va: $va:秋山はるる$
* circle: $va:テグラユウキ$
* tag: $tag:环绕音$
* RJcode: RJ12345678 or RJ123456
Direct search by va, circle, tag will be supported in the future.
- Remove duplicate api routes. (QUERY API ENDPOINT CHANGED, FRONT-END REFACTOR REQUIRED)
/api/query/find/:idis now moved to/api/query/work/:id./api/query/tag/:idis now deprecated./api/query/record?rjcodeis now moved to/api/query/work/:id.
- Remove unused methods.
- Change the pagination offset formula.
- Remove returning all works feature.
- Refactor the query JSON results (QUERY API RESULT CHANGED, FRONT-END REFACTOR REQUIRED)
- Work query api endpoint changed to
/api/query/works. (QUERY API ENDPOINT CHANGED, FRONT-END REFACTOR REQUIRED)
- add
work_main_imgto view table so that front-end can use that information to fetch work cover image.
- Add VAs related to the work to the db.
- Check if
workdata.vaingetWorksDataisundefinedor not before inserting work to database. (See Know dlsite API issues 1)
- Store VAs info to the work object.
- Add VAs info to query results.
- Optimize RJ work query. With
works_w_metadatatable, we can now return query result faster only make query to that table.
- Create
t_va_idandt_vatable to store VAs for works. - Create
works_w_metadatatable which contains all works and their metadata all together for faster query (SPECIAL THANKS TO KIKOERU PROJECT DEVS' SOURCE CODE!! So that I can really understand how nested views work in database)
Create a view table which will be helpful for querying work's metadata.(Completed)
- Add error handler to
scWorkAllData. - Redirect translated work's RJ code to work's original RJ code in order to get that work's valid metadata and saledata.
- Store redirected work's
original_worknofrom DLsite so thatscGetImgmethod will get the work's image as expected.
- Send logs to parent process.
- Limit parallel requests in order to keep from being blocked by api providers.
- Send invalid work/path list to parent to remind users the path is not a directory or a work with invalid RJ code.
- Create a util
prcSend.jsto help child process send message to parent process.
- Add
updateWorkDirmethod inmetadata.jsto update work's directory if a work already existed in the database. worksPerPagevariable can be set in the config file.
Need to check if the user provided RJ code is parent RJ code of the work in DLsite, if not, need to redirect the metadata request to work's parent RJ code.(completed)Add VAs to the database.(completed)Add more filter options to api. Such as sort with tags/va/circle etc.(Completed)
- Create
scannerandscanModuleto scan all the works in the given directories. - Test
process.send(). - Able to remove duplicated works in scan queue and able to handle non-directory given by the users.
- More feedback prompts with statistical info on scan progress.
ops.jsandopsTest.jshave been deprecated. Program will not use these to scan all the work in the given directories instead of using scanner in./filesystem.- Add
updateSaledatamethod in order to update work's sales data.
- Export api routes for
index.jsto initialize the server.
- Expose apis and create Websocket.
- Push test files to repo.
- Make transaction more reliable
- Add a
asyncmethod that can be used for both getting work's metadata, and insert that work and its metadata into database.
- Use
getWorksDatato fetch data and insert to database. - Refactor the error prompts. Works that made error will be collected to an array with work's RJcode and error message attached.
- Contain all the fetching methods.
- A
asyncmethodscWorkAllDatathat will fetch and return a work's metadata and salesdata. - Fix variable(
url,work,sale) didn't declare its type when created inscGetMetadata,scGetSaledata. And they cause to keep returning the same piece of data no matter what parameters are being put in. - Switch
rate_count_detailsource from DLsite's json api to ajax api in order to stay in the same data type withupdateSaledatamethod.
- Put all the database insertion into
transaction - Add more error prompts
- Change self-increment id to circle id from DLsite in
t_circletable
- Fix if folder name has words in front of RJ code that cause program can't get the correct RJ code to complete the operation which also causes program to crash. (BUG)
- Add records add completed prompts.
add try...catch to the metadata function(completed)add more error prompts which can be helpful if errors pop up(completed)
- Extract elements from array so that front-end can use that data directly.
- When use
/api/query/rc?page=if the page query number larger than max page calculated, it will return code 404.
- getImage function no longer fetches existing images from dlsite.
- Use another public api to fetch sales info.
- add sales info to the database
- simplify codes.
- add
regist_date,rate_count,rate_average_2dp, andrate_count_detailto theystable.
- add
circle_id,alt_rj_code,nsfw,official_price,dl_count,regist_date, columns toystable. - create
t_circletable to database
Pagination is now can use alt_rj_code to fulfill the sorting feature.
Optimized database inserting operation. Reduced repeating insertion to database instead of inserting metadata as an object into the database.
Refactored tag_id and t_tag table. The tag_id is now the same with DLsite's API.
TODO
(completed)dl_count