Skip to content
This repository has been archived by the owner on Jul 26, 2022. It is now read-only.

Commit

Permalink
Cont'd 'sy plugin list' command/operation; retrieve and parse from ap…
Browse files Browse the repository at this point in the history
…i.syncany.org
  • Loading branch information
binwiederhier committed Apr 12, 2014
1 parent fcceb4c commit a817fab
Show file tree
Hide file tree
Showing 9 changed files with 428 additions and 111 deletions.
45 changes: 36 additions & 9 deletions syncany-cli/src/main/java/org/syncany/cli/PluginCommand.java
Expand Up @@ -17,16 +17,21 @@
*/
package org.syncany.cli;

import static java.util.Arrays.asList;

import java.util.List;
import java.util.logging.Logger;

import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;

import org.syncany.operations.LogOperation;
import org.syncany.operations.PluginOperation.PluginAction;
import org.syncany.operations.PluginOperation.PluginOperationOptions;
import org.syncany.operations.PluginOperation.PluginOperationResult;
import org.syncany.operations.plugin.PluginInfo;
import org.syncany.operations.plugin.PluginOperationOptions;
import org.syncany.operations.plugin.PluginOperationOptions.PluginAction;
import org.syncany.operations.plugin.PluginOperationOptions.PluginListMode;
import org.syncany.operations.plugin.PluginOperationResult;

public class PluginCommand extends Command {
private static final Logger logger = Logger.getLogger(LogOperation.class.getSimpleName());
Expand All @@ -47,20 +52,29 @@ public int execute(String[] operationArgs) throws Exception {
}

private void printResults(PluginOperationResult operationResult) throws Exception {
throw new Exception("Not yet implemented.");
out.println("Id Name Version Status");
out.println("----------------------------------------------------");

for (PluginInfo pluginInfo : operationResult.getPluginList()) {
String statusStr = "inst/.."; // TODO [medium] fill this
out.printf("%-7s %-15s %-14s %s\n", pluginInfo.getPluginId(), pluginInfo.getPluginName(), pluginInfo.getPluginVersion(), statusStr);
}
}

private PluginOperationOptions parseOptions(String[] operationArgs) throws Exception {
PluginOperationOptions operationOptions = new PluginOperationOptions();

OptionParser parser = new OptionParser();
OptionParser parser = new OptionParser();
OptionSpec<Void> optionLocal = parser.acceptsAll(asList("L", "local-only"));
OptionSpec<Void> optionRemote = parser.acceptsAll(asList("R", "remote-only"));

OptionSet options = parser.parse(operationArgs);

// Files
List<?> nonOptionArgs = options.nonOptionArguments();

if (nonOptionArgs.size() == 0) {
throw new Exception("Invalid syntax, please specify an action (list, rlist, get, activate, deactivate).");
throw new Exception("Invalid syntax, please specify an action (list, install, activate, deactivate).");
}

// <action>
Expand All @@ -70,26 +84,39 @@ private PluginOperationOptions parseOptions(String[] operationArgs) throws Excep
operationOptions.setAction(action);

// Additional options per-action
if (action == PluginAction.GET || action == PluginAction.ACTIVATE || action == PluginAction.DEACTIVATE) {
if (action == PluginAction.INSTALL || action == PluginAction.ACTIVATE || action == PluginAction.DEACTIVATE) {
if (nonOptionArgs.size() != 2) {
throw new Exception("Invalid syntax, please specify a plugin ID.");
}

String pluginId = nonOptionArgs.get(1).toString();
operationOptions.setPluginId(pluginId);
}
else {
else {
if (nonOptionArgs.size() != 1) {
throw new Exception("Invalid syntax, no other options expected.");
}
}

// --local, --remote
if (action == PluginAction.LIST) {
if (options.has(optionLocal)) {
operationOptions.setListMode(PluginListMode.LOCAL);
}
else if (options.has(optionRemote)) {
operationOptions.setListMode(PluginListMode.REMOTE);
}
else {
operationOptions.setListMode(PluginListMode.ALL);
}
}

return operationOptions;
}

private PluginAction parsePluginAction(String actionStr) throws Exception {
try {
return PluginAction.valueOf(actionStr);
return PluginAction.valueOf(actionStr.toUpperCase());
}
catch (Exception e) {
throw new Exception("Invalid syntax, unknown action '" + actionStr + "'");
Expand Down
8 changes: 4 additions & 4 deletions syncany-cli/src/main/resources/help/help.skel
Expand Up @@ -148,7 +148,7 @@ COMMANDS
-V, --no-version-remove Don't remove old versions (default: yes)
-k, --keep-versions=<count> Number of versions to keep (if not -V)

plugin (list|install|activate|deactivate) [<args>]
plugin (list | install | activate | deactivate) [<args>]
Lists and manages available plugins. The following actions are
available:

Expand All @@ -158,10 +158,10 @@ COMMANDS

Arguments:
-a, --all List all available plugins (default)
-r, --remote List remotely available plugins
-l, --local List locally available plugins
-R, --remote-only List remotely available plugins
-L, --local-only List locally available plugins

install (<URL>|<file>|<plugin-id>)
install (<URL> | <file> | <plugin-id>)
Installs a plugin from an arbitrary URL, local file or from the
available plugins on api.syncany.org (with a plugin identifier)

Expand Down
6 changes: 3 additions & 3 deletions syncany-lib/src/main/java/org/syncany/Client.java
Expand Up @@ -35,9 +35,6 @@
import org.syncany.operations.Operation;
import org.syncany.operations.OperationOptions;
import org.syncany.operations.OperationResult;
import org.syncany.operations.PluginOperation;
import org.syncany.operations.PluginOperation.PluginOperationOptions;
import org.syncany.operations.PluginOperation.PluginOperationResult;
import org.syncany.operations.RestoreOperation;
import org.syncany.operations.RestoreOperation.RestoreOperationOptions;
import org.syncany.operations.RestoreOperation.RestoreOperationResult;
Expand All @@ -58,6 +55,9 @@
import org.syncany.operations.init.InitOperationListener;
import org.syncany.operations.init.InitOperationOptions;
import org.syncany.operations.init.InitOperationResult;
import org.syncany.operations.plugin.PluginOperation;
import org.syncany.operations.plugin.PluginOperationOptions;
import org.syncany.operations.plugin.PluginOperationResult;
import org.syncany.operations.up.UpOperation;
import org.syncany.operations.up.UpOperationListener;
import org.syncany.operations.up.UpOperationOptions;
Expand Down

This file was deleted.

@@ -0,0 +1,94 @@
/*
* Syncany, www.syncany.org
* Copyright (C) 2011-2014 Philipp C. Heckel <philipp.heckel@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.syncany.operations.plugin;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root(name="pluginInfo")
public class PluginInfo {
@Element(name="pluginId", required=true)
private String pluginId;

@Element(name="pluginName", required=true)
private String pluginName;

@Element(name="pluginVersion", required=true)
private String pluginVersion;

@Element(name="appMinVersion", required=true)
private String appMinVersion;

@Element(name="sha256sum", required=true)
private String sha256sum;

@Element(name="downloadUrl", required=true)
private String downloadUrl;

public PluginInfo() {
// Nothing.
}

public String getPluginId() {
return pluginId;
}

public void setPluginId(String pluginId) {
this.pluginId = pluginId;
}

public String getPluginName() {
return pluginName;
}

public void setPluginName(String pluginName) {
this.pluginName = pluginName;
}

public String getPluginVersion() {
return pluginVersion;
}

public void setPluginVersion(String pluginVersion) {
this.pluginVersion = pluginVersion;
}

public String getAppMinVersion() {
return appMinVersion;
}

public void setAppMinVersion(String appMinVersion) {
this.appMinVersion = appMinVersion;
}

public String getSha256sum() {
return sha256sum;
}

public void setSha256sum(String sha256sum) {
this.sha256sum = sha256sum;
}

public String getDownloadUrl() {
return downloadUrl;
}

public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
}

0 comments on commit a817fab

Please sign in to comment.