/*
* 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;
import com.google.common.base.Strings;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.name.Named;
import de.chaosfisch.google.account.Account;
import de.chaosfisch.google.account.IAccountService;
import de.chaosfisch.google.youtube.upload.IUploadService;
import de.chaosfisch.uploader.ApplicationData;
import de.chaosfisch.uploader.UploaderModule;
import de.chaosfisch.uploader.cli.controller.Controller;
import de.chaosfisch.uploader.persistence.dao.IPersistenceService;
import org.apache.commons.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Set;
public final class CLIUploader {
private static final Logger LOGGER = LoggerFactory.getLogger(CLIUploader.class);
private static final Injector injector = Guice.createInjector(new UploaderModule(), new CLIModule());
@Inject
private IPersistenceService persistenceService;
@Inject
private IUploadService uploadService;
@Inject
private IAccountService accountService;
@Inject
private Configuration configuration;
@Inject
@Named("i18n-resources")
private ResourceBundle resources;
@Inject
private ICLIUtil cliUtil;
@Inject
private Set<Controller> controllerSet;
private boolean running = true;
CLIUploader() {
}
public static void initialize() {
injector.getInstance(CLIUploader.class).run();
}
private void run() {
printApplicationInfo();
cliUtil.printPrompt("Initiating uploader");
initUploader();
cliUtil.printPrompt("Type help to show available commands.");
while (running) {
cliUtil.listenToCommands();
}
}
private void printApplicationInfo() {
cliUtil.printInfo("#######################################################");
cliUtil.printInfo("SimpleJavaYoutubeUploader Commandline-Interface");
cliUtil.printInfo("Author: Dennis Fischer aka CHAOSFISCH");
cliUtil.printInfo("Version: " + ApplicationData.VERSION);
cliUtil.printInfo("Websie: http://uploader.chaosfisch.com");
cliUtil.printInfo("#######################################################");
}
private void initUploader() {
final boolean useMasterPassword = configuration.getBoolean(IPersistenceService.MASTER_PASSWORD, false);
if (useMasterPassword) {
final String input = cliUtil.promptInput("Enter the master passwort:");
if (Strings.isNullOrEmpty(input)) {
cliUtil.printPrompt("Invalid Password!");
System.exit(0);
} else {
persistenceService.generateBackup();
persistenceService.setMasterPassword(input);
}
}
if (!persistenceService.loadFromStorage()) {
if (useMasterPassword) {
cliUtil.printPrompt("Invalid Password!");
} else {
cliUtil.printPrompt("Unknown error occured.");
}
System.exit(0);
} else {
uploadService.resetUnfinishedUploads();
uploadService.startStarttimeCheck();
LOGGER.info("Verifying accounts");
final List<Account> accounts = accountService.getAll();
for (final Account account : accounts) {
if (!accountService.verifyAccount(account)) {
LOGGER.warn("Account is invalid: {}", account.getName());
}
}
}
}
@Subscribe
public void quitCommand(final CLIEvent cliEvent) {
if ("quit".equals(cliEvent.getValue())) {
running = !cliUtil.printContinuePrompt("Do you really want to close the application (y/n)?");
} else if ("quitnow".equals(cliEvent.getValue())) {
running = false;
}
}
}