diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..3262d65 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,37 @@ + + + { + "keyToString": { + "last_opened_file_path": "/home/derdem/quintorProjects" + } +} + + + + + + + + + + + \ No newline at end of file diff --git a/mkbsd.js b/mkbsd.js index d02593a..560e201 100644 --- a/mkbsd.js +++ b/mkbsd.js @@ -3,8 +3,21 @@ const fs = require(`fs`); const path = require(`path`); +const readline = require(`readline`); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +const MAX_IMAGES = 380; +const MIN_AMOUNT_OF_IMAGES = 1; async function main() { + // Get user input for the number of pictures and the starting index + const numPictures = await askForValidNumber('How many pictures would you like to download? (Max: 380) ', MIN_AMOUNT_OF_IMAGES, MAX_IMAGES); + const startIndex = await askForValidNumber('From which picture (index) would you like to start? ', MIN_AMOUNT_OF_IMAGES, MAX_IMAGES); + const url = 'https://storage.googleapis.com/panels-api/data/20240916/media-1a-i-p~s'; const delay = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); @@ -24,8 +37,15 @@ async function main() { fs.mkdirSync(downloadDir); console.info(`📁 Created directory: ${downloadDir}`); } - let fileIndex = 1; + + let fileIndex = parseInt(startIndex); // Start from the user-provided index + let downloadedCount = 0; + for (const key in data) { + if (downloadedCount >= parseInt(numPictures)) { + break; // Stop after downloading the requested number of pictures + } + const subproperty = data[key]; if (subproperty && subproperty.dhd) { const imageUrl = subproperty.dhd; @@ -37,12 +57,14 @@ async function main() { await downloadImage(imageUrl, filePath); console.info(`🖼️ Saved image to ${filePath}`); fileIndex++; + downloadedCount++; await delay(250); } } } catch (error) { console.error(`Error: ${error.message}`); } + rl.close(); // Close the readline interface when done } async function downloadImage(url, filePath) { @@ -69,6 +91,29 @@ function asciiArt() { console.info(`🤑 Starting downloads from your favorite sellout grifter's wallpaper app...`); } +function askQuestion(query) { + return new Promise(resolve => rl.question(query, resolve)); +} + +// Function to validate that the input is a valid number within range +async function askForValidNumber(query, minValue = MIN_AMOUNT_OF_IMAGES, maxValue = MAX_IMAGES) { + let valid = false; + let value; + + while (!valid) { + const answer = await askQuestion(query); + value = parseInt(answer); + + if (!isNaN(value) && value >= minValue && value <= maxValue) { + valid = true; + } else { + console.error(`🚫 Invalid input. Please enter a number between ${minValue} and ${maxValue}.`); + } + } + + return value; +} + (() => { asciiArt(); setTimeout(main, 5000); diff --git a/mkbsd.py b/mkbsd.py index 2b33310..f789f8d 100644 --- a/mkbsd.py +++ b/mkbsd.py @@ -5,7 +5,9 @@ import time import aiohttp import asyncio from urllib.parse import urlparse + url = 'https://storage.googleapis.com/panels-api/data/20240916/media-1a-i-p~s' +MAX_IMAGES = 380 async def delay(ms): await asyncio.sleep(ms / 1000) @@ -22,6 +24,10 @@ async def download_image(session, image_url, file_path): print(f"Error downloading image: {str(e)}") async def main(): + # Get user input for number of pictures and starting index + num_pictures = await ask_for_valid_number(f'How many pictures would you like to download? (Max: {MAX_IMAGES}) ', 1, MAX_IMAGES) + start_index = await ask_for_valid_number(f'From which picture (index) would you like to start? ', 1, MAX_IMAGES) + try: async with aiohttp.ClientSession() as session: async with session.get(url) as response: @@ -29,7 +35,7 @@ async def main(): raise Exception(f"⛔ Failed to fetch JSON file: {response.status}") json_data = await response.json() data = json_data.get('data') - + if not data: raise Exception('⛔ JSON does not have a "data" property at its root.') @@ -38,8 +44,13 @@ async def main(): os.makedirs(download_dir) print(f"📁 Created directory: {download_dir}") - file_index = 1 + file_index = start_index + downloaded_count = 0 + for key, subproperty in data.items(): + if downloaded_count >= num_pictures: + break # Stop after downloading the requested number of pictures + if subproperty and subproperty.get('dhd'): image_url = subproperty['dhd'] print(f"🔍 Found image URL!") @@ -52,11 +63,23 @@ async def main(): print(f"🖼️ Saved image to {file_path}") file_index += 1 + downloaded_count += 1 await delay(250) except Exception as e: print(f"Error: {str(e)}") +async def ask_for_valid_number(prompt, min_value, max_value): + while True: + try: + value = int(input(prompt)) + if min_value <= value <= max_value: + return value + else: + print(f"🚫 Please enter a number between {min_value} and {max_value}.") + except ValueError: + print("🚫 Invalid input. Please enter a valid number.") + def ascii_art(): print(""" /$$ /$$ /$$ /$$ /$$$$$$$ /$$$$$$ /$$$$$$$