{javcard_obj.car}
167 | {javcard_obj.title}
168 | {(local_stat) ?
├── .babelrc
├── .dockerignore
├── .github
└── workflows
│ ├── build_macos_release.yml
│ └── build_windows_release.yml
├── .gitignore
├── CHANGELOG
├── Dockerfile
├── JAV_HELP.md
├── JavHelper
├── __init__.py
├── app.py
├── cache.py
├── core
│ ├── OOF_downloader.py
│ ├── __init__.py
│ ├── aria2_handler.py
│ ├── arzon.py
│ ├── backend_translation.py
│ ├── deluge_downloader.py
│ ├── emby_actors.py
│ ├── file_scanner.py
│ ├── ini_file.py
│ ├── jav321.py
│ ├── jav777.py
│ ├── jav_scraper.py
│ ├── javbus.py
│ ├── javdb.py
│ ├── javlibrary.py
│ ├── local_db.py
│ ├── nfo_parser.py
│ ├── requester_proxy.py
│ ├── tushyraw.py
│ ├── utils.py
│ └── warashi.py
├── model
│ ├── __init__.py
│ └── jav_manager.py
├── run.py
├── scripts
│ ├── __init__.py
│ └── emby_actors.py
├── static
│ ├── js
│ │ └── webHelper.js
│ └── webHelper
│ │ ├── HelpDoc.jsx
│ │ ├── OofValidator.jsx
│ │ ├── configurator.css
│ │ ├── configurator.jsx
│ │ ├── entry.jsx
│ │ ├── fileTable.jsx
│ │ ├── i18n.js
│ │ ├── idmm_download.css
│ │ ├── idmm_download.jsx
│ │ ├── javBrowserChecker.css
│ │ ├── javBrowserChecker.jsx
│ │ ├── javBrowserV2.css
│ │ ├── javBrowserV2.jsx
│ │ ├── javCardV2.jsx
│ │ ├── javMagnetButton.jsx
│ │ ├── javSetSearchBGroup.jsx
│ │ ├── javTable.jsx
│ │ ├── localJavCard.jsx
│ │ ├── localJavInfoTabs.jsx
│ │ ├── localManager.jsx
│ │ ├── localManager
│ │ ├── local_jav_card.jsx
│ │ ├── local_jav_card_state.jsx
│ │ ├── local_manager_app.jsx
│ │ ├── local_manager_configurator.jsx
│ │ └── local_manager_state.jsx
│ │ ├── statButtonGroup.jsx
│ │ ├── styling.jsx
│ │ ├── urlLimiterInspector.jsx
│ │ ├── webHelper.css
│ │ └── webHelper.jsx
├── templates
│ └── home.html
├── utils.py
└── views
│ ├── __init__.py
│ ├── emby_actress.py
│ ├── jav_browser.py
│ ├── local_manager.py
│ ├── parse_jav.py
│ └── scan_directory.py
├── LICENSE
├── README.md
├── build_docker.sh
├── build_macos.sh
├── build_windows.bat
├── demo
├── favicon.png
├── feature1.gif
├── feature2.gif
├── icon.ico
├── javdown_115_1.png
├── javdown_115_2.png
├── javdown_115_3.png
├── javdown_115_4.png
├── javdown_115_add_cookies.gif
├── javdown_115_validate.png
├── javdown_basic_down_1.gif
├── javdown_basic_down_2.png
├── javdown_basic_stat.png
├── javdown_filter.png
├── javdown_infiScroll.gif
└── javdown_manual_search.png
├── package.json
├── requirements.txt
├── translation.json
├── version.py
├── webpack.config.js
└── webpack.prod.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["react", "es2015"]
3 | }
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | build
2 | dist
3 | JavHelper/static/nv
4 | node_modules
5 | .idea
6 | dist-python
7 | __pycache__
8 | test.py
9 | .vscode
10 | .ipynb_checkpoints
11 | *.gz
12 | yarn-error.log
13 | yarn.lock
14 | *.ipynb
15 | *.pyc
16 | *.DS_Store
17 | run.spec
18 | rewrite_his.sh
19 | *.backup
20 | *.db
--------------------------------------------------------------------------------
/.github/workflows/build_macos_release.yml:
--------------------------------------------------------------------------------
1 | name: build_macos_release
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*'
7 | #on: [push]
8 |
9 | jobs:
10 | build:
11 | runs-on: macos-latest
12 | steps:
13 | - uses: actions/checkout@master
14 | - name: Install Python
15 | uses: actions/setup-python@v1
16 | with:
17 | python-version: 3.7.9
18 |
19 | - name: Install Python Packages
20 | run: |
21 | python -m pip install --upgrade pip
22 | pip install -r requirements.txt
23 |
24 | - name: build macos pkg
25 | run: |
26 | pyinstaller --onedir \
27 | --add-data="demo:demo" \
28 | --add-data="translation.json:." \
29 | --add-data="README.md:." \
30 | --add-data="JAV_HELP.md:." \
31 | --add-data="JavHelper/templates:JavHelper/templates" \
32 | --add-data="JavHelper/static:JavHelper/static" \
33 | --add-data="/Users/runner/hostedtoolcache/Python/3.7.9/x64/lib/python3.7/site-packages/cloudscraper:cloudscraper" \
34 | --hidden-import="js2py" \
35 | --hidden-import="cloudscraper" \
36 | --hidden-import="cloudscraper_exception" \
37 | --exclude-module="FixTk" \
38 | --exclude-module="tcl" \
39 | --exclude-module="tk" \
40 | --exclude-module="_tkinter" \
41 | --exclude-module="tkinter" \
42 | --exclude-module="Tkinter" \
43 | --noconfirm \
44 | --distpath JAVOneStop_${GITHUB_REF##*/} \
45 | JavHelper/run.py
46 |
47 | tar -czf Jav_OneStop_macos.tar.gz JAVOneStop_${GITHUB_REF##*/}
48 |
49 | - name: Create MacOS Release
50 | id: create_release_macos
51 | uses: actions/create-release@master
52 | env:
53 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
54 | with:
55 | tag_name: ${{ github.ref }}_macos
56 | release_name: Release ${{ github.ref }} MacOS
57 | draft: false
58 | prerelease: false
59 |
60 | - name: Upload Release Asset MacOS
61 | id: upload-release-asset-macos
62 | uses: actions/upload-release-asset@v1
63 | env:
64 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
65 | with:
66 | upload_url: ${{ steps.create_release_macos.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
67 | asset_path: ./Jav_OneStop_macos.tar.gz
68 | asset_name: Jav_OneStop_macos.tar.gz
69 | asset_content_type: application/zip
70 |
--------------------------------------------------------------------------------
/.github/workflows/build_windows_release.yml:
--------------------------------------------------------------------------------
1 | name: build_windows_releases
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*'
7 | #on: [push]
8 |
9 | jobs:
10 | build:
11 | runs-on: windows-latest
12 |
13 | steps:
14 | - uses: actions/checkout@master
15 | - name: Install Python
16 | uses: actions/setup-python@v1
17 | with:
18 | python-version: 3.7.9
19 |
20 | - name: Install Python Packages
21 | run: |
22 | python -m pip install --upgrade pip
23 | pip install -r requirements.txt
24 |
25 | - name: build windows pkg
26 | run: |
27 | pyinstaller --onedir --icon "demo\icon.ico" --add-data="demo;demo" --add-data="translation.json;." --add-data="README.md;." --add-data="JAV_HELP.md;." --add-data="JavHelper\templates;JavHelper\templates" --add-data="JavHelper\static;JavHelper\static" --add-data="c:\hostedtoolcache\windows\python\3.7.9\x64\lib\site-packages\cloudscraper;cloudscraper" --hidden-import="js2py" --hidden-import="cloudscraper" --hidden-import="cloudscraper_exception" --exclude-module="FixTk" --exclude-module="tcl" --exclude-module="tk" --exclude-module="_tkinter" --exclude-module="tkinter" --exclude-module="Tkinter" --noconfirm --distpath dist-python JavHelper\run.py
28 |
29 | 7z a -tzip "Jav_OneStop_windows.zip" ".\dist-python\"
30 |
31 | - name: Create Windows Release
32 | id: create_release_windows
33 | uses: actions/create-release@master
34 | env:
35 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36 | with:
37 | tag_name: ${{ github.ref }}_windows
38 | release_name: Release ${{ github.ref }} Windows
39 | draft: false
40 | prerelease: false
41 |
42 | - name: Upload Release Asset Windows
43 | id: upload-release-asset-windows
44 | uses: actions/upload-release-asset@v1
45 | env:
46 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47 | with:
48 | upload_url: ${{ steps.create_release_windows.outputs.upload_url }}
49 | asset_path: ./Jav_OneStop_windows.zip
50 | asset_name: Jav_OneStop_windows.zip
51 | asset_content_type: application/zip
52 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | dist
3 | JavHelper/static/nv
4 | node_modules
5 | .idea
6 | dist-python
7 | __pycache__
8 | test.py
9 | .vscode
10 | .ipynb_checkpoints
11 | *.gz
12 | yarn-error.log
13 | yarn.lock
14 | *.ipynb
15 | *.pyc
16 | settings.ini
17 | 115_cookies.json
18 | *.DS_Store
19 | jav_manager.db
20 | run.spec
21 | rewrite_his.sh
22 | .spec
23 | javlib_cf_cookies.json
24 | dist-python.zip
25 | jav_manager.sqlite
--------------------------------------------------------------------------------
/CHANGELOG:
--------------------------------------------------------------------------------
1 | # Changelog
2 | JavOneStop which is a small tool that helps users rename, parse, generate nfo, organize jav video files and
3 | communicate with Emby to add actresses images.
4 |
5 | ## [Unreleased]
6 |
7 |
8 | ## [0.9.0] - 2021-08-21
9 | ### 新增
10 | - 增加deluge磁链下载支持
11 | - 增加tushyraw站点
12 | - 增加javdb的磁链搜索
13 | - 增加zhongziso磁链搜索
14 | ### 改进 / 修复
15 | - 更新nyaa磁链搜索路径
16 | - 默认JAV浏览切换至JavLibrary
17 | - 修复新的115下载失败的逻辑
18 | - 修复下载图片失败
19 | - 改进文件写入逻辑
20 | - 修正部分节点不使用代理
21 | - 修复后缀命名逻辑
22 | - 修复各站点的xpath数据路径
23 | - 修复部分节点不支持cloudflare
24 | - 修复一些刮削失败情况下的处理
25 | ### 移除
26 | - 移除torrentkitty搜索
27 | - 移除添加115任务至Aria2下载器
28 |
29 | ## [0.8.0] - 2020-09-17
30 | ### 新增
31 | - 支持sqlite数据库后端
32 | - 如何从blitz转移数据至sqlite:
33 | - 在配置表单, 数据库类型里保持选中blitz; 请备份已有的blitz数据库
34 | - 访问 127.0.0.1:8009/migrate_to_sqlite 等待完成, 切勿打断
35 | - 进入配置表单, 切换数据库类型至sqlite, 并重启程序
36 | - 将来的新功能将不再测试blitz数据库而只保证支持sqlite
37 | - 增加115限额读取
38 | - 新增jav321网站支持
39 | - 新增本地数据库访问至JAV下载器以用于重新下载
40 | - 添加更新日志至工具首页
41 | - 部分页面现在支持url构建, 用户可以刷新页面而不用从头开始
42 | - 新增全部标记为"想要"的快捷键
43 | - 重写刮削工具已有视频逻辑
44 | - 支持原有的"重写nfo", "重写图片", "更新nfo"功能
45 | - 新增车牌状态"冷冻箱", 用来分辨不在本地但是找不到下载链接的状况
46 | - 新增中英文语言切换
47 | ### 改进 / 修复
48 | - 优化dockerfile构建顺序
49 | - 优化后端结构, 合并各大jav刮削和访问节点
50 | - 改进图片写入逻辑
51 | - 修复jav777车牌处理的问题
52 | - 修复javdb访问问题
53 | - 改进idmm进度工具访问逻辑
54 | - jav777的下载链接现在可以复制车牌至粘贴板
55 | - 改进各种界面比例
56 |
57 |
58 | ## [0.7.6] - 2020-08-17
59 | ### Added
60 | - Able to scrape multiple jav in jav scraper
61 | - Add UI language toggle
62 | ### Updated
63 | - Update docker build script to use local db to reduce build time
64 | - Fix image expired bug when accessing javdb
65 | - Added retry logic when accessing db
66 | - Update javdb url link
67 | - Directory scan now will return files sort by filename
68 |
69 | ## [0.7.5] - 2020-07-28
70 | ### Updated
71 | - Fix pyinstaller issue
72 | - Update Pillow for security
73 |
74 | ## [0.7.4] - 2020-07-25
75 | ### Updated
76 | - Major rewrite with the local manager tab
77 | - Try to fix macos release build
78 |
79 | ## [0.7.2] - 2020-06-08
80 | ### Added
81 | - testing new keyboard shortcut for jav browser
82 | - added javdb to jav browser and parser
83 | ### Updated
84 | - added ignore for cloudflare cookies json
85 | - up the allowable 115 file size from 100 to 200MB
86 | - better error handling for 115 downloader
87 | - no genres will no longer be copied from tags nfo
88 | - update cloudflare scraper handling
89 | - reshape a lot of jav browser layout for small screens
90 |
91 | ## [0.7.1] - 2020-04-17
92 | ### Added
93 | - alpha version of jav777 support as a download source
94 | - add configuration to allow user remove certain string when renaming files
95 | - add UI support for user custom ikoa / dmmc downloader
96 | - add a overall download search to optimize download flow
97 | - add an endpoint for car that requires ikoa credit
98 | ### Updated
99 | - fixed some read and write database issue with car
100 | - upgrade pillow for security reason
101 | - upgrade cloudscraper for newer chanllenges
102 |
103 | ## [0.7.0] - 2020-03-15
104 | ### Added
105 | - readme tab to teach user how to
106 | - toast error messages for misconfigured 115 / aria2 server
107 | ### Updated
108 | - brand new pagination
109 | - better 115 & aria2 downloader logging
110 | - full localization on jav download tool
111 | - magnet sorting based on size and subtitled (flawed though)
112 | - bug fix for not infinite scroll when switch between fully loaded page and new page
113 | - remove cache from reading the source site (since we need newest db stat)
114 |
115 | ## [0.6.4] - 2020-03-13
116 | ### Added
117 | - 115 downloader error message translations
118 | - ui elements to switch between different sources for magnet link search
119 | - add 115 validator when manual validation is necessary
120 | ### Updated
121 | - retry logic for 115 downloader
122 | - fix bug for release date (changes to "premiered" in nfo)
123 |
124 | ## [0.6.3] - 2020-03-09
125 | ### Updated
126 | - fix cloudscraper import issue
127 |
128 | ## [0.6.2] - 2020-03-09
129 | ### Updated
130 | - fix opacity issue
131 |
132 | ## [0.6.1] - 2020-03-09
133 | ### Added
134 | - now user can configure jav sources and priority in the configuration tool
135 | ### Updated
136 | - better loading animation since javlibrary now is very slow
137 | - fixed detailed image tab when browsing javbus
138 |
139 | ## [0.6.0] - 2020-03-08
140 | ### Added
141 | - added javbus support (user needs to manually edit settings.ini for now to add javbus scrape)
142 | ### Updated
143 | - updated the docker related script to resolve slow build issue
144 | - javlibrary now uses cloudscraper to bypass cloudflare
145 | - some localization improvements
146 | ### Removed
147 | - completely removed older javbrower code (now only v2 exists)
148 |
149 | ## [0.5.3] - 2020-03-04
150 | ### Added
151 | - [JavBrowserV2] jav browser now has a detailed image tab for each jav
152 | - add role when writing nfo for better visual
153 | - language now is configurable
154 | - user now can manually choose which data source to use for individual source
155 | ### Updated
156 | - add infinite scroll back to jav browser
157 | - update the migrating logic so now the tool will look for an actual video file instead of just nfo
158 | - small updates to the translation
159 | - fix the pagenation issue where sometimes it won't get updated
160 | - pin log console to the top for better log viewing
161 |
162 | ## [0.5.0] - 2020-02-27
163 | ### Added
164 | - local jav manager
165 | - new scraper class to ease new implementation
166 | - user can configure scraper sources directly in the configure tool
167 | ### Updated
168 | - restructure javlibrary and arzon scraper
169 | - better windows and linux (macos) os path support
170 | - user can configure saved folder structure in the configure tool
171 | - fix a bug to rebuild index when doing db search locally
172 |
173 | ## [0.4.2] - 2020-02-17
174 | ### Added
175 | - docker deployment script
176 | - now use chinese by default
177 | - add tool to configure 115 cookies directly inside of the tool
178 | ### Updated
179 | - 115 download grace failure
180 | - better jav search functions
181 | - alpha mobile view version
182 |
183 | ## [0.4.1] - 2020-02-12
184 | ### Updated
185 | - fix T28 R18 jav scrape
186 | - fix problematic rename for subtitled video
187 | - upgrade pyinstaller version for security reason
188 | - backend only will handle one request at a time to avoid concurrency issue for blitzDB and 115 download
189 |
190 | ## [0.4.0] - 2020-02-12
191 | ### Added
192 | - local blitzDB to handle jav file status look up
193 | - jav manager - 115 - aria2 download support
194 | - flask cache for faster web response
195 | - new function to parse two javlibrary most wanted and best rated pages
196 | - new readme with demo gifs
197 | ### Updated
198 | - nfo parser now by default capitalize "car"
199 | - production webpack react compile to reduce warnings
200 | ### Removed
201 | - no longer support "C" as cd postfix
202 |
203 | ## [0.3.0] - 2020-02-05
204 | ### Added
205 | - warashi scraper which is used for emby actor images
206 | - Handle multiple CD filename postfix
207 | - Handle Chinese subtitle filename postfix
208 | ### Updated
209 | - Fix bug when writing images
210 | - Fix read from ini file so no restart is needed
211 |
212 | ## [0.2.0] - 2019-12-31
213 | ### Updated
214 | - update README for new usage
215 | ### Removed
216 | - remove flaskwebgui package usage
217 |
218 | ## [0.1.0] - 2019-12-29
219 | ### Added
220 | - Basic Architecture for front and back end
221 | - javLibrary parser
222 | - arzon plot parser
223 | - emby actress image upload
224 | - jav file organization and generate nfo
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # Dockerfile
2 |
3 | # FROM directive instructing base image to build upon
4 | FROM python:3.7.3-stretch
5 |
6 | # Config app
7 | WORKDIR /usr/src/app
8 | COPY requirements.txt .
9 | RUN pip install --no-cache-dir -r requirements.txt
10 |
11 | # EXPOSE port 8000 to allow communication to/from server
12 | EXPOSE 8009
13 |
14 | # CMD specifcies the command to execute to start the server running.
15 | WORKDIR /usr/src/app
16 | COPY . .
17 |
18 | # INIT SERVER
19 | CMD ["python", "-m", "JavHelper.run"]
20 | # done!
21 |
--------------------------------------------------------------------------------
/JAV_HELP.md:
--------------------------------------------------------------------------------
1 | # JAV Downloader JAV 下载器 上手教程
2 | **千里之行, 始于架构**
3 |
4 | JAV下载器集成Jav网站-115-Aria2下载于一个界面, 需要正确的115_cookies.json和Aria2
5 |
6 | (目前可以设置HTTP代理但是代码并没有测试过)
7 |
8 | ## 设置115 cookies和aria2
9 | ### 配置aria2服务器
10 | 先切换至"配置表单"并选取"本地配置"(默认)
11 |
12 |
13 |
14 | 为了能自动添加下载链接至aria2服务器, 填入下列3个域并点击"提交"按钮保存设置:
15 | * aria2网址: 请参照例子填入, 必须含有"http://"前缀, 不需要结尾的"/"
16 | * aria2端口: aria2服务器的端口号
17 | * aria2 authentication token: 目前只支持token的验证方法(不支持用户名密码验证), 在此域填入aria2服务器设置的验证token
18 |
19 |
20 |
21 | ### 设置115 cookies
22 |
23 | 为了能自动添加磁链至115离线下载, 进行以下步骤:
24 | * 获取115 cookies:
25 | * 登录115网页版
26 | * 使用EditThisCookie Chrome插件复制cookies至系统粘贴板
27 |
28 |
29 | * 填入115 cookies:
30 | * 进入工具网页, 切换至"配置表单"之下的"更新115 Cookies"
31 |
32 |
33 | * 粘贴(Ctrl+V)系统粘贴板内的115 Cookies, 工具将自动保存填入的内容. (自动在目录创建115_cookies.json, 用户也可以手动更改)
34 |
35 |
36 | * 如需更新115 Cookies, 用户亦可以通过相同的操作用"配置表单"更新.
37 |
38 | ## 下载Jav
39 |
40 | ### Jav本地数据库状态列表
41 | JAVOneStop有本地文档储存的数据库, 用以储存Jav相关信息. 对于Jav下载器来说, 最关联的域为"stat", 用于用户识别不同Jav的状态. 数据库假设车牌有唯一性, 一个车牌只能对应一个Jav.
42 |
43 |
49 |
数据库stat值 | 52 |显示 | 53 |备注 | 54 |
---|---|---|
0 | 57 |想要 | 58 |想下载, 在此状态会加载磁链 | 59 |
1 | 62 |已阅 | 63 |不感兴趣, 主要用于过滤 | 64 |
2 | 67 |没想法 | 68 |默认选项, 不会被过滤 | 69 |
3 | 72 |本地 | 73 |Jav已存在于本地, 会被过滤 | 74 |
4 | 77 |下载中 | 78 |已通过工具添加至aria2下载, 会被过滤 |
79 |
来源网站 | 126 |标签 | 127 |来源页面 | 128 |
---|---|---|
javbus | 131 |中文字幕 | 132 |https://www.javbus.com/genre/sub | 133 |
javbus | 136 |新话题 | 137 |https://www.javbus.com/ | 138 |
javlibrary | 141 |最想要 | 142 |http://www.javlibrary.com/cn/vl_mostwanted.php | 143 |
javlibrary | 146 |高评价 | 147 |http://www.javlibrary.com/cn/vl_bestrated.php | 148 |
javlibrary | 151 |新话题 | 152 |http://www.javlibrary.com/cn/vl_update.php | 153 |
javlibrary (未来将更改) |
156 | 还未下载 | 157 |数据来源于数据库中状态为"想要"的Jav | 158 |
Total Job #: {ikoa_jobs.length}
70 | { 71 | ikoa_jobs.map(job => { 72 | return{job.car} {job.state}:
Total Job #: {dmmc_jobs.length}
81 | { 82 | dmmc_jobs.map(job => { 83 | return{job.car} {job.state}:
{card_jav_obj.car} {card_jav_obj.title}
{ oofQuota }
96 |{javcard_obj.car}
167 | {javcard_obj.title}
168 | {(local_stat) ?
{t('javtab_field')} | 142 |{t('javtab_value')} | 143 |{t('javtab_action')} | 144 |
---|
new_name: {localState.context.new_file_name}
108 | } 109 |{key}: {`${localState.context.jav_info[key]}`}
) 128 | } 129 | }) 130 | } 131 | 132 |Scan Directory:
47 |Search DB:
77 |