From a54654083c00b3799b2fca50d30cbbebb421e670 Mon Sep 17 00:00:00 2001 From: Gwendal Date: Sat, 18 Aug 2018 11:53:33 +0200 Subject: [PATCH] Add simple error management + manage invalid cookies file Closes #2 --- .../BandcampCollectionDownloader.kt | 11 +++++++++-- .../kotlin/bandcampcollectiondownloader/Main.kt | 21 +++++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/bandcampcollectiondownloader/BandcampCollectionDownloader.kt b/src/main/kotlin/bandcampcollectiondownloader/BandcampCollectionDownloader.kt index 8e6829a..16ceb07 100644 --- a/src/main/kotlin/bandcampcollectiondownloader/BandcampCollectionDownloader.kt +++ b/src/main/kotlin/bandcampcollectiondownloader/BandcampCollectionDownloader.kt @@ -102,10 +102,13 @@ fun downloadFile(fileURL: String, saveDir: Path, optionalFileName: String = ""): /** * Core function called from the main */ -fun downloadAll(cookiesFile: String, bandcampUser: String, downloadFormat: String, downloadFolder: Path) { +fun downloadAll(cookiesFile: Path, bandcampUser: String, downloadFormat: String, downloadFolder: Path) { // Parse JSON cookies (obtained with "Cookie Quick Manager" Firefox addon) val gson = Gson() - val jsonData = String(Files.readAllBytes(Paths.get(cookiesFile))) + if (!Files.exists(cookiesFile)) { + throw BandCampDownloaderError("Cookies file '$cookiesFile' cannot be found.") + } + val jsonData = String(Files.readAllBytes(cookiesFile)) val parsedCookies = gson.fromJson(jsonData, Array::class.java) val cookies = parsedCookiesToMap(parsedCookies) @@ -146,6 +149,10 @@ fun downloadAll(cookiesFile: String, bandcampUser: String, downloadFormat: Strin } } +class BandCampDownloaderError : Exception { + constructor(s: String) : super(s) +} + fun downloadAlbum(artistFolderPath: Path?, albumFolderPath: Path, albumtitle: String, url: String, cookies: Map, gson: Gson, isSingleTrack: Boolean, artid: String) { // If the artist folder does not exist, we create it if (!Files.exists(artistFolderPath)) { diff --git a/src/main/kotlin/bandcampcollectiondownloader/Main.kt b/src/main/kotlin/bandcampcollectiondownloader/Main.kt index afa6987..a692854 100644 --- a/src/main/kotlin/bandcampcollectiondownloader/Main.kt +++ b/src/main/kotlin/bandcampcollectiondownloader/Main.kt @@ -14,7 +14,7 @@ data class Args( description = arrayOf("A JSON file with valid bandcamp credential cookies.", """"Cookie Quick Manager" can be used to obtain this file after logging into bandcamp.""", "(visit https://addons.mozilla.org/en-US/firefox/addon/cookie-quick-manager/).")) - var pathToCookiesFile: String? = null, + var pathToCookiesFile: Path? = null, @CommandLine.Option(names = arrayOf("--audio-format", "-f"), required = false, description = arrayOf("The chosen audio format of the files to download (default: \${DEFAULT-VALUE}).", @@ -40,19 +40,32 @@ fun main(args: Array) { val parsedArgs: Args = try { CommandLine.populateCommand(Args(), *args) - } catch (e: CommandLine.MissingParameterException) { + } + + // If the wrong arguments are given, show help + error message + catch (e: CommandLine.MissingParameterException) { CommandLine.usage(Args(), System.out) System.err.println(e.message) return } + + // If --help, then only show help and quit if (parsedArgs.help) { CommandLine.usage(Args(), System.out) - } else { + } + + // Else, parse arguments and run + else { val bandcampUser = parsedArgs.bandcampUser val cookiesFile = parsedArgs.pathToCookiesFile!! val downloadFormat = parsedArgs.audioFormat val downloadFolder = parsedArgs.pathToDownloadFolder - downloadAll(cookiesFile, bandcampUser, downloadFormat, downloadFolder) + try { + downloadAll(cookiesFile, bandcampUser, downloadFormat, downloadFolder) + } catch (e : BandCampDownloaderError) { + System.err.println("ERROR: ${e.message}") + } + } }