mangakonekuto
Version:
Your CLI for reading manga from the terminal
225 lines (224 loc) • 11.1 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.get = get;
const inquirer_1 = __importDefault(require("inquirer"));
const chalk_1 = __importDefault(require("chalk"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const open_1 = __importDefault(require("open"));
const axios_1 = __importDefault(require("axios"));
const os_1 = __importDefault(require("os"));
const pkg = require("../.././package.json");
const SettingsConfig_1 = __importDefault(require("../utils/SettingsConfig"));
class Settings {
manage() {
return __awaiter(this, void 0, void 0, function* () {
this.showCurrentSettings();
const settingAnswer = yield inquirer_1.default.prompt([
{
type: 'list',
name: 'setting',
message: 'Choose a setting to change:',
choices: [
'Change API Key',
'Update Language',
'Enable Server',
'Change Download Folder',
'Verify Download Folder',
'Check PDF Viewer Setup',
'Check For Updates',
'Back'
],
},
]);
switch (settingAnswer.setting) {
case 'Change API Key':
yield this.changeApiKey();
break;
case 'Update Language':
yield this.updateLanguage();
break;
case 'Enable Server':
yield this.enableServer();
break;
case 'Change Download Folder':
yield this.changeDownloadFolder();
break;
case 'Verify Download Folder':
yield this.verifyDownloadFolder();
break;
case 'Check PDF Viewer Setup':
yield this.checkPdfSetup();
break;
case 'Check For Updates':
yield this.checkForUpdates();
break;
default:
console.log(chalk_1.default.gray('Returning to main menu...'));
}
});
}
showCurrentSettings() {
const currentApiKey = SettingsConfig_1.default.get("Settings.ApiKey") || "Not Set";
const currentLanguage = SettingsConfig_1.default.get("Settings.Lang") || "Not Set";
const currentServers = SettingsConfig_1.default.get("Settings.Server") || "Not Set";
const currentDownloadFolder = SettingsConfig_1.default.get("Settings.DownloadFolder") || "Not Set";
console.log(chalk_1.default.yellow("\nCurrent Settings:"));
console.log(chalk_1.default.green(`API Key: ${currentApiKey}`));
console.log(chalk_1.default.green(`Language: ${currentLanguage}`));
console.log(chalk_1.default.green(`Enabled Servers: ${currentServers}`));
console.log(chalk_1.default.green(`Download Folder: ${currentDownloadFolder}`));
console.log(chalk_1.default.blue(`Version: ${pkg.version}`));
console.log(chalk_1.default.blue(`OS: ${os_1.default.platform()} ${os_1.default.arch()}`));
console.log("\n");
}
changeApiKey() {
return __awaiter(this, void 0, void 0, function* () {
const currentApiKey = SettingsConfig_1.default.get("Settings.ApiKey") || "Not Set";
console.log(chalk_1.default.yellow(`Current API Key: ${currentApiKey}`));
const newApiKey = yield inquirer_1.default.prompt([
{
type: 'input',
name: 'apiKey',
message: 'Enter your new Manga API Key:',
},
]);
SettingsConfig_1.default.set("Settings.ApiKey", newApiKey.apiKey);
console.log(chalk_1.default.green(`API Key updated to: ${newApiKey.apiKey}`));
});
}
updateLanguage() {
return __awaiter(this, void 0, void 0, function* () {
const currentLanguage = SettingsConfig_1.default.get("Settings.Lang") || "Not Set";
console.log(chalk_1.default.yellow(`Current Language: ${currentLanguage}`));
const preferences = yield inquirer_1.default.prompt([
{
type: 'list',
name: 'language',
message: 'Select your preferred manga language:',
choices: ['English', 'Japanese', 'Spanish', 'French'],
},
]);
SettingsConfig_1.default.set("Settings.Lang", preferences.language);
console.log(chalk_1.default.green(`Preferences updated: Language set to ${preferences.language}`));
});
}
enableServer() {
return __awaiter(this, void 0, void 0, function* () {
const currentServers = SettingsConfig_1.default.get("Settings.Server") || "Not Set";
console.log(chalk_1.default.yellow(`Current Enabled Servers: ${currentServers}`));
const ServerChoice = yield inquirer_1.default.prompt([
{
type: "checkbox",
name: "server",
message: "Choose Which Server to Enable",
choices: ["MangaKakalot"],
},
]);
SettingsConfig_1.default.set("Settings.Server", ServerChoice.server);
console.log(chalk_1.default.green(`Enabled Servers updated: ${ServerChoice.server.join(', ')}`));
});
}
changeDownloadFolder() {
return __awaiter(this, void 0, void 0, function* () {
const currentFolder = SettingsConfig_1.default.get("Settings.DownloadFolder") || "Not Set";
console.log(chalk_1.default.yellow(`Current Download Folder: ${currentFolder}`));
const folderAnswer = yield inquirer_1.default.prompt([
{
type: 'input',
name: 'folder',
message: 'Enter the path for your Download Folder:',
default: './Images'
}
]);
SettingsConfig_1.default.set("Settings.DownloadFolder", folderAnswer.folder);
console.log(chalk_1.default.green(`Download folder updated to: ${folderAnswer.folder}`));
});
}
verifyDownloadFolder() {
return __awaiter(this, void 0, void 0, function* () {
const folder = SettingsConfig_1.default.get("Settings.DownloadFolder");
if (!folder) {
console.log(chalk_1.default.red("No Download Folder set. Please set it first."));
return;
}
try {
yield fs_extra_1.default.ensureDir(folder);
const testFilePath = path_1.default.join(folder, 'test_write_file.txt');
yield fs_extra_1.default.writeFile(testFilePath, "This is a test.");
const content = yield fs_extra_1.default.readFile(testFilePath, 'utf-8');
if (content === "This is a test.") {
yield fs_extra_1.default.remove(testFilePath);
console.log(chalk_1.default.green(`✅ Download folder verified. Read & write successful at: ${folder}`));
}
else {
throw new Error("File contents did not match.");
}
}
catch (err) {
console.error(chalk_1.default.red(`❌ Failed to verify folder: ${folder}`));
console.error(err);
}
});
}
checkPdfSetup() {
return __awaiter(this, void 0, void 0, function* () {
console.log(chalk_1.default.yellow("\nStarting PDF system check..."));
const examplePdfPath = path_1.default.resolve(__dirname, '../../../MangaKonekuto/example.pdf');
if (!fs_extra_1.default.existsSync(examplePdfPath)) {
console.error(chalk_1.default.red(`❌ Example PDF not found at: ${examplePdfPath}`));
console.log(`Please make sure 'example.pdf' is in your project directory.`);
return;
}
try {
yield (0, open_1.default)(examplePdfPath);
console.log(chalk_1.default.green(`✅ Successfully opened example PDF.`));
console.log(`🎉 Your system is ready to open PDFs from this CLI.`);
}
catch (err) {
console.error(chalk_1.default.red(`❌ Could not open PDF automatically.`));
console.log(`Make sure you have a default PDF viewer installed.`);
console.log(`Try opening "${examplePdfPath}" manually to verify.`);
}
});
}
checkForUpdates() {
return __awaiter(this, void 0, void 0, function* () {
console.log(chalk_1.default.yellow("\n🔍 Checking for updates on npm..."));
try {
const { data } = yield axios_1.default.get(`https://registry.npmjs.org/mangakonekuto/latest`);
const latestVersion = data.version;
const currentVersion = require('../../package.json').version;
if (latestVersion !== currentVersion) {
console.log(chalk_1.default.blue(`🚀 A new version is available!`));
console.log(chalk_1.default.green(`Current: v${currentVersion}`));
console.log(chalk_1.default.green(`Latest: v${latestVersion}`));
console.log(chalk_1.default.yellow(`Run: npm i -g mangakonekuto to update.`));
}
else {
console.log(chalk_1.default.green(`🎉 You are using the latest version (v${currentVersion}).`));
}
}
catch (err) {
console.error(chalk_1.default.red("❌ Could not check for updates."));
console.error(err);
}
});
}
}
exports.default = Settings;
function get(arg0) {
throw new Error('Function not implemented.');
}