Browse Source

Add simple error management + manage invalid cookies file

Closes #2
master
Gwendal 7 years ago
parent
commit
a54654083c
2 changed files with 26 additions and 6 deletions
  1. +9
    -2
      src/main/kotlin/bandcampcollectiondownloader/BandcampCollectionDownloader.kt
  2. +17
    -4
      src/main/kotlin/bandcampcollectiondownloader/Main.kt

+ 9
- 2
src/main/kotlin/bandcampcollectiondownloader/BandcampCollectionDownloader.kt View File

@ -102,10 +102,13 @@ fun downloadFile(fileURL: String, saveDir: Path, optionalFileName: String = ""):
/** /**
* Core function called from the main * 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) // Parse JSON cookies (obtained with "Cookie Quick Manager" Firefox addon)
val gson = Gson() 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<ParsedCookie>::class.java) val parsedCookies = gson.fromJson(jsonData, Array<ParsedCookie>::class.java)
val cookies = parsedCookiesToMap(parsedCookies) 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<String, String>, gson: Gson, isSingleTrack: Boolean, artid: String) { fun downloadAlbum(artistFolderPath: Path?, albumFolderPath: Path, albumtitle: String, url: String, cookies: Map<String, String>, gson: Gson, isSingleTrack: Boolean, artid: String) {
// If the artist folder does not exist, we create it // If the artist folder does not exist, we create it
if (!Files.exists(artistFolderPath)) { if (!Files.exists(artistFolderPath)) {


+ 17
- 4
src/main/kotlin/bandcampcollectiondownloader/Main.kt View File

@ -14,7 +14,7 @@ data class Args(
description = arrayOf("A JSON file with valid bandcamp credential cookies.", description = arrayOf("A JSON file with valid bandcamp credential cookies.",
""""Cookie Quick Manager" can be used to obtain this file after logging into bandcamp.""", """"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/).")) "(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, @CommandLine.Option(names = arrayOf("--audio-format", "-f"), required = false,
description = arrayOf("The chosen audio format of the files to download (default: \${DEFAULT-VALUE}).", description = arrayOf("The chosen audio format of the files to download (default: \${DEFAULT-VALUE}).",
@ -40,19 +40,32 @@ fun main(args: Array<String>) {
val parsedArgs: Args = val parsedArgs: Args =
try { try {
CommandLine.populateCommand<Args>(Args(), *args) CommandLine.populateCommand<Args>(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) CommandLine.usage(Args(), System.out)
System.err.println(e.message) System.err.println(e.message)
return return
} }
// If --help, then only show help and quit
if (parsedArgs.help) { if (parsedArgs.help) {
CommandLine.usage(Args(), System.out) CommandLine.usage(Args(), System.out)
} else {
}
// Else, parse arguments and run
else {
val bandcampUser = parsedArgs.bandcampUser val bandcampUser = parsedArgs.bandcampUser
val cookiesFile = parsedArgs.pathToCookiesFile!! val cookiesFile = parsedArgs.pathToCookiesFile!!
val downloadFormat = parsedArgs.audioFormat val downloadFormat = parsedArgs.audioFormat
val downloadFolder = parsedArgs.pathToDownloadFolder val downloadFolder = parsedArgs.pathToDownloadFolder
downloadAll(cookiesFile, bandcampUser, downloadFormat, downloadFolder)
try {
downloadAll(cookiesFile, bandcampUser, downloadFormat, downloadFolder)
} catch (e : BandCampDownloaderError) {
System.err.println("ERROR: ${e.message}")
}
} }
} }

Loading…
Cancel
Save