Sharepublic class Share extends IConsoleCommand
Constructors Summary |
---|
public Share()
super(new String[] {"share"});
|
Methods Summary |
---|
public void | execute(java.lang.String commandName, org.gudy.azureus2.ui.console.ConsoleInput ci, java.util.List args)
if( args.isEmpty() )
{
printHelp(ci.out, args);
return;
}
final ShareManager share_manager;
try{
share_manager = ci.azureus_core.getPluginManager().getDefaultPluginInterface().getShareManager();
}catch( ShareException e ){
ci.out.println( "ERROR: " + e.getMessage() + " ::");
Debug.printStackTrace( e );
return;
}
final String arg = (String) args.remove(0);
if ( args.isEmpty() && ("list".equalsIgnoreCase(arg)) ) {
ShareResource[] shares = share_manager.getShares();
if( shares.length == 0 ){
ci.out.println("> No shares found");
}else{
HashSet share_map = new HashSet();
int share_num = 0;
for (int i=0;i<shares.length;i++){
ShareResource share = shares[i];
if ( share instanceof ShareResourceDirContents ){
share_map.add( share );
}else if ( share.getParent() != null ){
}else{
ci.out.println( "> " + share_num++ + ": " + shares[i].getName());
}
}
Iterator it = share_map.iterator();
TorrentManager tm = ci.azureus_core.getPluginManager().getDefaultPluginInterface().getTorrentManager();
TorrentAttribute category_attribute = tm.getAttribute( TorrentAttribute.TA_CATEGORY );
TorrentAttribute props_attribute = tm.getAttribute( TorrentAttribute.TA_SHARE_PROPERTIES );
while( it.hasNext()){
ShareResourceDirContents root = (ShareResourceDirContents)it.next();
String cat = root.getAttribute( category_attribute );
String props = root.getAttribute( props_attribute );
String extra = cat==null?"":(",cat=" + cat );
extra += props==null?"":(",props=" + props );
ci.out.println( "> " + share_num++ + ": " + root.getName() + extra );
outputChildren( ci, " ", root );
}
}
return;
}
final File path = new File( (String) args.get(0) );
if( !path.exists() ) {
ci.out.println( "ERROR: path [" +path+ "] does not exist." );
return;
}
if ( ("remove".equalsIgnoreCase(arg)) ) {
ShareResource[] shares = share_manager.getShares();
boolean done = false;
for (int i=0;i<shares.length;i++){
if ( shares[i].getName().equals( path.toString())){
try{
shares[i].delete();
ci.out.println( "> Share " + path.toString() + " removed" );
done = true;
}catch( Throwable e ) {
ci.out.println( "ERROR: " + e.getMessage() + " ::");
Debug.printStackTrace( e );
}
break;
}
}
if ( !done ){
ci.out.println( "> Share " + path.toString() + " not found" );
}
return;
}
String category = null;
String props = null;
if ( args.size() == 2 ){
String properties = (String)args.get(1);
StringTokenizer tok = new StringTokenizer( properties, ";" );
while( tok.hasMoreTokens()){
String token = tok.nextToken();
int pos = token.indexOf('=");
if ( pos == -1 ){
ci.out.println( "ERROR: invalid properties string '" + properties + "'" );
return;
}else{
String lhs = token.substring(0,pos).trim().toLowerCase();
String rhs = token.substring(pos+1).trim();
if ( lhs.equals( "category" )){
category = rhs;
}else{
if ( lhs.equals( "private" ) ||
lhs.equals( "dht_backup" ) ||
lhs.equals( "comment" )){
if ( props == null ){
props = "";
}
// _ are replaced with spaces
if ( lhs.equals("comment")){
rhs = rhs.replace('_", ' " );
}
if ( rhs.length() > 0 ){
props += (props.length()==0?"":";") + lhs + "=" + rhs;
}
}else{
ci.out.println( "ERROR: invalid properties string '" + properties + "'" );
return;
}
}
}
}
}
final String f_category = category;
final String f_props = props;
new AEThread( "shareFile" )
{
public void
runSupport()
{
try{
ShareResource resource = share_manager.getShare( path );
if( "file".equalsIgnoreCase( arg ) ) {
ci.out.println( "File [" +path+ "] share being processed in background..." );
if ( resource == null ){
resource = share_manager.addFile( path );
}
}else if( "folder".equalsIgnoreCase( arg ) ) {
ci.out.println( "Folder [" +path+ "] share being processed in background..." );
if ( resource == null ){
resource = share_manager.addDir( path );
}
}else if( "contents".equalsIgnoreCase( arg ) ) {
ci.out.println( "Folder contents [" +path+ "] share being processed in background..." );
if ( resource == null ){
resource = share_manager.addDirContents( path, false );
}
}else if( "rcontents".equalsIgnoreCase( arg ) ) {
ci.out.println( "Folder contents recursive [" +path+ "] share being processed in background..." );
if ( resource == null ){
resource = share_manager.addDirContents( path, true );
}
}else{
ci.out.println( "ERROR: type '" + arg + "' unknown." );
}
if ( resource != null ){
TorrentManager tm = ci.azureus_core.getPluginManager().getDefaultPluginInterface().getTorrentManager();
String cat = f_category;
if ( cat != null ){
if ( cat.length() == 0 ){
cat = null;
}
resource.setAttribute( tm.getAttribute( TorrentAttribute.TA_CATEGORY), cat );
}
String pro = f_props;
if ( pro != null ){
if ( pro.length() == 0 ){
pro = null;
}
resource.setAttribute( tm.getAttribute( TorrentAttribute.TA_SHARE_PROPERTIES), pro );
}
}
if ( resource != null ){
ci.out.println( "... processing complete" );
}
}catch( Throwable e ) {
ci.out.println( "ERROR: " + e.getMessage() + " ::");
Debug.printStackTrace( e );
}
}
}.start();
| public java.lang.String | getCommandDescriptions()
return("share <type> <path> [<properties>]\t\t\tShare a file or folder(s). Use without parameters to get a list of available options." );
| protected void | outputChildren(org.gudy.azureus2.ui.console.ConsoleInput ci, java.lang.String indent, ShareResourceDirContents node)
ShareResource[] kids = node.getChildren();
for (int i=0;i<kids.length;i++){
ShareResource kid = kids[i];
ci.out.println( indent + kid.getName());
if ( kid instanceof ShareResourceDirContents ){
outputChildren( ci, indent + " ", (ShareResourceDirContents)kid );
}
}
| public void | printHelp(java.io.PrintStream out, java.util.List args)
out.println( "> -----" );
out.println( "[share <type> <path> [<properties>]" );
out.println( "type options:" );
out.println( "file Share a single file." );
out.println( "folder Share a folder as a single multi-file torrent." );
out.println( "contents Share files and sub-dirs in a folder as single and multi-file torrents." );
out.println( "rcontents Share files and sub-dir files in a folder as separate torrents." );
out.println( "list List the shares (path not required)");
out.println( "remove Remove a share given its path");
out.println( " <properties> is semicolon separated <name>=<value> list.");
out.println( " Defined values are 'category=<cat>', 'private=<true/false>', 'dht_backup=<true/false>' and 'comment=<comment>' ('_' in <comment> are replaced with spaces)");
out.println( " currently only 'category' can be applied to file/folder and the rest only apply to items added *after* the share has been defined" );
out.println( " For example: share contents /music category=music;private=true;comment=Great_Stuff");
out.println( "> -----" );
|
|