Updated README.md & version number
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,2 +1,4 @@
|
|||||||
node_modules
|
node_modules
|
||||||
electron
|
electron
|
||||||
|
dist
|
||||||
|
.env
|
||||||
|
|||||||
70
README.md
70
README.md
@@ -1,23 +1,53 @@
|
|||||||
# WaifuBoard v2.0.0 (RECODE)
|
# 🎀 WaifuBoard
|
||||||
The official recode repo, its private no one should know about this or have the code but 2 people.
|
|
||||||
|
|
||||||
# Things to get done:
|
**Lightweight all-in-one app for boorus, manga and light novels — no sources included, total freedom via extensions.**
|
||||||
|
|
||||||
| Task | Status | Notes |
|
<img src="public/banner.png" alt="WaifuBoard Hero" width="100%"/>
|
||||||
| -----|----------| ------ |
|
<div align="center">
|
||||||
| Book Reader | ✅ | N/A |
|
|
||||||
| Multi book provider loading | ✅ | N/A |
|
|
||||||
| Better Code Organization | ✅ | N/A |
|
|
||||||
| Mobile View | Not Done | N/A |
|
|
||||||
| Gallery | ✅ | N/A |
|
|
||||||
| Anime Schedule (Release Calendar for the week/month) | ✅ | N/A |
|
|
||||||
| My List (Tracking) | ✅ | Persistent data would be in a data.db file in waifuboard directory |
|
|
||||||
| Marketplace | ✅ | Uses the gitea repo |
|
|
||||||
| Add to list / library | ✅ | Persistent data would be in data.db file in waifuboard directory|
|
|
||||||
| Gallery favorites | ✅ | Persistent in data.db like how it was previously |
|
|
||||||
| Change "StreamFlow" to "WaifuBoard" | ✅ | N/A |
|
|
||||||
| Change the cube icon next to "StreamFlow" to the current ico file | ✅ | Use the ico file from the current waifuboard ver |
|
|
||||||
| Favicon | ✅ | Use the ico file from the current waifuboard ver |
|
|
||||||
| Make video player more professional looking | ✅ | N/A |
|
|
||||||
|
|
||||||
***This stuff will get updated as time goes on, please check things off with a green checkmark as you complete them.***
|
[](https://waifuboard.app)
|
||||||
|
[](https://git.waifuboard.app/ItsSkaiya/WaifuBoard/releases/latest)
|
||||||
|
[](https://git.waifuboard.app/ItsSkaiya/WaifuBoard-Extensions)
|
||||||
|
|
||||||
|
**[Website](https://waifuboard.app)** • **[Documentation](https://waifuboard.app/docs)** • **[Download Latest](https://git.waifuboard.app/ItsSkaiya/WaifuBoard/releases/latest)** • **[Discord (soon)](#)**
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀 What is WaifuBoard?
|
||||||
|
|
||||||
|
**A lightweight and privacy-friendly desktop app designed around modular extensions.** WaifuBoard delivers a clean, organized reading experience for boorus, manga, and light novels, powered entirely by community-made sources.
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
|
||||||
|
- Lightweight
|
||||||
|
- Discord Rich Presence
|
||||||
|
- Super clean & fast UI
|
||||||
|
- Built-in **Extension Marketplace**
|
||||||
|
- Fully open-source & community-driven
|
||||||
|
- Future mobile ports planned
|
||||||
|
|
||||||
|
## 🖥️ Download & Platform Support
|
||||||
|
|
||||||
|
| Platform | Status | Link |
|
||||||
|
|------------|-----------------|-----------------------------------------------------------|
|
||||||
|
| Windows | ✅ Available now | [Latest Release](https://git.waifuboard.app/ItsSkaiya/WaifuBoard/releases/latest) |
|
||||||
|
| Linux | ⏳ Coming soon | — |
|
||||||
|
| macOS | ⏳ Coming soon | — |
|
||||||
|
|
||||||
|
## 📦 Extensions & Marketplace
|
||||||
|
|
||||||
|
WaifuBoard ships empty. **You decide exactly what sources you want.**
|
||||||
|
|
||||||
|
**Official Extensions Repository** → https://git.waifuboard.app/ItsSkaiya/WaifuBoard-Extensions<br>
|
||||||
|
**Extension Development Docs** → https://waifuboard.app/docs
|
||||||
|
|
||||||
|
## ⚠️ Legal Disclaimer
|
||||||
|
|
||||||
|
**WaifuBoard does not host, store, or distribute any content.
|
||||||
|
All material is retrieved in real time through third-party extensions installed by the user.
|
||||||
|
You are fully responsible for ensuring that the sources you access comply with the laws of your region.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Designed for the otakus by an otaku.** 💜
|
||||||
|
|||||||
BIN
dist/Waifu Board 2.0.0.exe
vendored
BIN
dist/Waifu Board 2.0.0.exe
vendored
Binary file not shown.
2
dist/builder-debug.yml
vendored
2
dist/builder-debug.yml
vendored
File diff suppressed because one or more lines are too long
BIN
dist/win-unpacked/Waifu Board.exe
vendored
BIN
dist/win-unpacked/Waifu Board.exe
vendored
Binary file not shown.
BIN
dist/win-unpacked/resources/app.asar
vendored
BIN
dist/win-unpacked/resources/app.asar
vendored
Binary file not shown.
33
package-lock.json
generated
33
package-lock.json
generated
@@ -18,7 +18,6 @@
|
|||||||
"fastify": "^5.6.2",
|
"fastify": "^5.6.2",
|
||||||
"jsonwebtoken": "^9.0.3",
|
"jsonwebtoken": "^9.0.3",
|
||||||
"node-addon-api": "^8.5.0",
|
"node-addon-api": "^8.5.0",
|
||||||
"playwright": "^1.57.0",
|
|
||||||
"playwright-chromium": "^1.57.0",
|
"playwright-chromium": "^1.57.0",
|
||||||
"sqlite3": "^5.1.7"
|
"sqlite3": "^5.1.7"
|
||||||
},
|
},
|
||||||
@@ -4020,20 +4019,6 @@
|
|||||||
"devOptional": true,
|
"devOptional": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/fsevents": {
|
|
||||||
"version": "2.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
|
||||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/function-bind": {
|
"node_modules/function-bind": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
@@ -5825,24 +5810,6 @@
|
|||||||
"integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
|
"integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/playwright": {
|
|
||||||
"version": "1.57.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz",
|
|
||||||
"integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"playwright-core": "1.57.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"playwright": "cli.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"fsevents": "2.3.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/playwright-chromium": {
|
"node_modules/playwright-chromium": {
|
||||||
"version": "1.57.0",
|
"version": "1.57.0",
|
||||||
"resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.57.0.tgz",
|
"resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-1.57.0.tgz",
|
||||||
|
|||||||
@@ -1,103 +1,102 @@
|
|||||||
const Gitea_OWNER = 'ItsSkaiya';
|
const Gitea_OWNER = "ItsSkaiya";
|
||||||
const Gitea_REPO = 'WaifuBoard';
|
const Gitea_REPO = "WaifuBoard";
|
||||||
const CURRENT_VERSION = 'v1.6.4';
|
const CURRENT_VERSION = "v2.0.0-rc.0";
|
||||||
const UPDATE_CHECK_INTERVAL = 5 * 60 * 1000;
|
const UPDATE_CHECK_INTERVAL = 5 * 60 * 1000;
|
||||||
|
|
||||||
let currentVersionDisplay;
|
let currentVersionDisplay;
|
||||||
let latestVersionDisplay;
|
let latestVersionDisplay;
|
||||||
let updateToast;
|
let updateToast;
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
|
currentVersionDisplay = document.getElementById("currentVersionDisplay");
|
||||||
|
latestVersionDisplay = document.getElementById("latestVersionDisplay");
|
||||||
|
updateToast = document.getElementById("updateToast");
|
||||||
|
|
||||||
currentVersionDisplay = document.getElementById('currentVersionDisplay');
|
if (currentVersionDisplay) {
|
||||||
latestVersionDisplay = document.getElementById('latestVersionDisplay');
|
currentVersionDisplay.textContent = CURRENT_VERSION;
|
||||||
updateToast = document.getElementById('updateToast');
|
}
|
||||||
|
|
||||||
if (currentVersionDisplay) {
|
checkForUpdates();
|
||||||
currentVersionDisplay.textContent = CURRENT_VERSION;
|
|
||||||
}
|
|
||||||
|
|
||||||
checkForUpdates();
|
setInterval(checkForUpdates, UPDATE_CHECK_INTERVAL);
|
||||||
|
|
||||||
setInterval(checkForUpdates, UPDATE_CHECK_INTERVAL);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function showToast(latestVersion) {
|
function showToast(latestVersion) {
|
||||||
|
if (latestVersionDisplay && updateToast) {
|
||||||
if (latestVersionDisplay && updateToast) {
|
latestVersionDisplay.textContent = latestVersion;
|
||||||
latestVersionDisplay.textContent = latestVersion;
|
updateToast.classList.add("update-available");
|
||||||
updateToast.classList.add('update-available');
|
updateToast.classList.remove("hidden");
|
||||||
updateToast.classList.remove('hidden');
|
} else {
|
||||||
|
console.error(
|
||||||
} else {
|
"Error: Cannot display toast because one or more DOM elements were not found.",
|
||||||
console.error("Error: Cannot display toast because one or more DOM elements were not found.");
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideToast() {
|
function hideToast() {
|
||||||
if (updateToast) {
|
if (updateToast) {
|
||||||
updateToast.classList.add('hidden');
|
updateToast.classList.add("hidden");
|
||||||
updateToast.classList.remove('update-available');
|
updateToast.classList.remove("update-available");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isVersionOutdated(versionA, versionB) {
|
function isVersionOutdated(versionA, versionB) {
|
||||||
|
const vA = versionA.replace(/^v/, "").split(".").map(Number);
|
||||||
|
const vB = versionB.replace(/^v/, "").split(".").map(Number);
|
||||||
|
|
||||||
const vA = versionA.replace(/^v/, '').split('.').map(Number);
|
for (let i = 0; i < Math.max(vA.length, vB.length); i++) {
|
||||||
const vB = versionB.replace(/^v/, '').split('.').map(Number);
|
const numA = vA[i] || 0;
|
||||||
|
const numB = vB[i] || 0;
|
||||||
|
|
||||||
for (let i = 0; i < Math.max(vA.length, vB.length); i++) {
|
if (numA < numB) return true;
|
||||||
const numA = vA[i] || 0;
|
if (numA > numB) return false;
|
||||||
const numB = vB[i] || 0;
|
}
|
||||||
|
|
||||||
if (numA < numB) return true;
|
return false;
|
||||||
if (numA > numB) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkForUpdates() {
|
async function checkForUpdates() {
|
||||||
console.log(`Checking for updates for ${Gitea_OWNER}/${Gitea_REPO}...`);
|
console.log(`Checking for updates for ${Gitea_OWNER}/${Gitea_REPO}...`);
|
||||||
|
|
||||||
const apiUrl = `https://git.waifuboard.app/api/v1/repos/${Gitea_OWNER}/${Gitea_REPO}/releases/latest`;
|
const apiUrl = `https://git.waifuboard.app/api/v1/repos/${Gitea_OWNER}/${Gitea_REPO}/releases/latest`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(apiUrl, {
|
const response = await fetch(apiUrl, {
|
||||||
method: 'GET',
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
'Accept': 'application/json'
|
Accept: "application/json",
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
if (response.status === 404) {
|
if (response.status === 404) {
|
||||||
console.info('No releases found for this repository.');
|
console.info("No releases found for this repository.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw new Error(`Gitea API error: ${response.status} ${response.statusText}`);
|
throw new Error(
|
||||||
}
|
`Gitea API error: ${response.status} ${response.statusText}`,
|
||||||
|
);
|
||||||
const data = await response.json();
|
|
||||||
|
|
||||||
const latestVersion = data.tag_name;
|
|
||||||
|
|
||||||
if (!latestVersion) {
|
|
||||||
console.warn("Release found but no tag_name present");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`Latest Gitea Release: ${latestVersion}`);
|
|
||||||
|
|
||||||
if (isVersionOutdated(CURRENT_VERSION, latestVersion)) {
|
|
||||||
console.warn('Update available!');
|
|
||||||
showToast(latestVersion);
|
|
||||||
} else {
|
|
||||||
console.info('Package is up to date.');
|
|
||||||
hideToast();
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Failed to fetch Gitea release:', error);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
const data = await response.json();
|
||||||
|
|
||||||
|
const latestVersion = data.tag_name;
|
||||||
|
|
||||||
|
if (!latestVersion) {
|
||||||
|
console.warn("Release found but no tag_name present");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Latest Gitea Release: ${latestVersion}`);
|
||||||
|
|
||||||
|
if (isVersionOutdated(CURRENT_VERSION, latestVersion)) {
|
||||||
|
console.warn("Update available!");
|
||||||
|
showToast(latestVersion);
|
||||||
|
} else {
|
||||||
|
console.info("Package is up to date.");
|
||||||
|
hideToast();
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to fetch Gitea release:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user