/* * Copyright (c) 2014 Dennis Fischer. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0+ * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: Dennis Fischer */ package de.chaosfisch.uploader.cli.controller; import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; import com.google.inject.Inject; import de.chaosfisch.google.youtube.upload.IUploadService; import de.chaosfisch.google.youtube.upload.Upload; import de.chaosfisch.google.youtube.upload.metadata.Category; import de.chaosfisch.google.youtube.upload.metadata.License; import de.chaosfisch.google.youtube.upload.metadata.Metadata; import de.chaosfisch.uploader.cli.CLIEvent; import de.chaosfisch.uploader.cli.ICLIUtil; import java.io.File; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class UploadsController implements Controller { private static final String CMD_UPLOADS = "uploads"; private static final String CMD_ADD = "add"; private static final String CMD_UPDATE = "update"; private static final String CMD_LIST = "list"; private static final String CMD_REMOVE = "remove"; private static final String CMD_ABORT = "abort"; private static final String CMD_START = "start"; private static final String CMD_STOP = "stop"; private static final String CMD_CLEAR = "clear"; private static final String CMD_HELP = "help"; private final IUploadService uploadService; private final ICLIUtil cliUtil; @Inject public UploadsController(final EventBus eventBus, final IUploadService uploadService, final ICLIUtil cliUtil) { this.uploadService = uploadService; this.cliUtil = cliUtil; eventBus.register(this); } @Subscribe public void onCLIEvent(final CLIEvent event) { if (CMD_UPLOADS.equals(event.getKey())) { switch (event.getValue()) { case CMD_ADD: addUpload(); break; case CMD_LIST: listUploads(); break; case CMD_REMOVE: removeUpload(); break; case CMD_UPDATE: updateUpload(); break; case CMD_ABORT: abortUpload(); break; case CMD_START: startUpload(); break; case CMD_STOP: stopUpload(); break; case CMD_CLEAR: clearUpload(); break; } } } private void helpAccount() { cliUtil.printPrompt("Available \"accounts\" commands:"); // cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_ABORT, "Aborts a running upload.")); // cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_ADD, "Adds a upload.")); // cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_CLEAR, "Clears list of finished uploads.")); cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_HELP, "Shows this help document.")); cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_LIST, "Lists all added uploads.")); //cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_REMOVE, "Deletes an existing account.")); cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_START, "Starts upload queue processing.")); cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_STOP, "Stops upload queue processing.")); //cliUtil.printPrompt(String.format("\t\t%s:\t\t %s", CMD_UPDATE, "Updates an existing upload.")); } private void clearUpload() { } private void stopUpload() { uploadService.stopUploading(); cliUtil.printPrompt("Upload queue processing stopped!"); } private void startUpload() { uploadService.startUploading(); cliUtil.printPrompt("Uploading queue processing started!"); } private void abortUpload() { } private void updateUpload() { } private void removeUpload() { } private void listUploads() { final List<Upload> uploads = uploadService.getAll(); if (uploads.isEmpty()) { cliUtil.printPrompt("No uploads existing!"); return; } cliUtil.printPrompt("Existing uploads:"); int i = 1; for (final Upload upload : uploads) { cliUtil.printPrompt(String.format("\t\t[%d]\t%s\t[%s]", i, upload.getMetadata() .getTitle(), upload.getStatus().isRunning() ? "Running" : upload.getStatus().isFailed() ? "Failed" : upload.getStatus().isAborted() ? "Aborted" : upload.getStatus().isArchived() ? "Finished" : "Waiting")); i++; } } private void addUpload() { final Upload upload = new Upload(); cliUtil.printPrompt("Add new account:"); final String filePath = cliUtil.promptInput("Path to video:"); if (!Files.exists(Paths.get(filePath))) { cliUtil.printPrompt(String.format("File \"%s\" doesn't exist!", filePath)); return; } final String title = cliUtil.promptInput("Title:"); final Category category = getUploadCategory(); final String description = getUploadDescription(); final String keywords = getUploadKeywords(); final Metadata metadata = new Metadata(title, category, description, keywords, License.YOUTUBE); upload.setFile(new File(filePath)); } private String getUploadKeywords() { return cliUtil.promptInput("Keywords:"); } public String getUploadDescription() { return cliUtil.promptInput("Description:"); } public Category getUploadCategory() { listCategories(); final String number = cliUtil.promptInput("Which category should be used?"); try { final int id = Integer.parseInt(number); final Category[] categories = Category.values(); final int size = categories.length; if (0 < id && id <= size) { return categories[id - 1]; } else { cliUtil.printPrompt("Category doesn't exist!"); } } catch (final NumberFormatException e) { cliUtil.printPrompt(String.format("Invalid number entered: %s", number)); } return null; } private void listCategories() { cliUtil.printPrompt("Existing categories:"); int i = 1; for (final Category category : Category.values()) { cliUtil.printPrompt(String.format("\t [%d] %s", i, category.toString())); i++; } } }