mirror of
https://github.com/SpigotMC/BungeeCord.git
synced 2024-11-24 03:05:49 +01:00
Finish implementing modules. If anyone wants to test... be my guest.
This commit is contained in:
parent
d4e4796739
commit
f1b329bf21
@ -40,4 +40,8 @@ public class PluginDescription
|
|||||||
* File we were loaded from.
|
* File we were loaded from.
|
||||||
*/
|
*/
|
||||||
private File file = null;
|
private File file = null;
|
||||||
|
/**
|
||||||
|
* Optional description.
|
||||||
|
*/
|
||||||
|
private String description = null;
|
||||||
}
|
}
|
||||||
|
@ -4,15 +4,17 @@ import com.google.common.io.ByteStreams;
|
|||||||
import com.google.common.io.Files;
|
import com.google.common.io.Files;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import lombok.Data;
|
||||||
import net.md_5.bungee.Util;
|
import net.md_5.bungee.Util;
|
||||||
|
|
||||||
|
@Data
|
||||||
public class JenkinsModuleSource implements ModuleSource
|
public class JenkinsModuleSource implements ModuleSource
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void retrieve(ModuleSpec module, ModuleVersion version)
|
public void retrieve(ModuleSpec module, ModuleVersion version)
|
||||||
{
|
{
|
||||||
System.out.println( "Attempting to Jenkins download module " + module.getName() + "v" + version.getBuild() );
|
System.out.println( "Attempting to Jenkins download module " + module.getName() + " v" + version.getBuild() );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
URL website = new URL( "http://ci.md-5.net/job/BungeeCord/" + version.getBuild() + "/artifact/module/" + module.getName().replace( '_', '-' ) + "/target/" + module.getName() + ".jar" );
|
URL website = new URL( "http://ci.md-5.net/job/BungeeCord/" + version.getBuild() + "/artifact/module/" + module.getName().replace( '_', '-' ) + "/target/" + module.getName() + ".jar" );
|
||||||
|
@ -2,7 +2,12 @@ package net.md_5.bungee.module;
|
|||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -11,6 +16,8 @@ import java.util.jar.JarFile;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.plugin.PluginDescription;
|
import net.md_5.bungee.api.plugin.PluginDescription;
|
||||||
|
import net.md_5.bungee.util.CaseInsensitiveMap;
|
||||||
|
import org.yaml.snakeyaml.DumperOptions;
|
||||||
import org.yaml.snakeyaml.Yaml;
|
import org.yaml.snakeyaml.Yaml;
|
||||||
|
|
||||||
public class ModuleManager
|
public class ModuleManager
|
||||||
@ -25,47 +32,116 @@ public class ModuleManager
|
|||||||
|
|
||||||
public void load(ProxyServer proxy) throws Exception
|
public void load(ProxyServer proxy) throws Exception
|
||||||
{
|
{
|
||||||
ModuleVersion bungeeVersion = ModuleVersion.parse( "git:BungeeCord-Proxy:1.7-SNAPSHOT:\"93cf50b\":792" );
|
ModuleVersion bungeeVersion = ModuleVersion.parse( proxy.getVersion() );
|
||||||
|
if ( bungeeVersion == null )
|
||||||
|
{
|
||||||
|
System.out.println( "Could detect bungee version. Custom build?" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
File moduleDirectory = new File( "modules" );
|
File moduleDirectory = new File( "modules" );
|
||||||
moduleDirectory.mkdir();
|
moduleDirectory.mkdir();
|
||||||
|
|
||||||
Map<String, ModuleSource> modules = new HashMap<>();
|
List<ModuleSpec> modules = new ArrayList<>();
|
||||||
|
File configFile = new File( "modules.yml" );
|
||||||
|
// Start Yaml
|
||||||
|
DumperOptions options = new DumperOptions();
|
||||||
|
options.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );
|
||||||
|
Yaml yaml = new Yaml( options );
|
||||||
|
|
||||||
// TODO: Use filename filter here and in PluginManager
|
Map<String, Object> config;
|
||||||
Yaml yaml = new Yaml();
|
|
||||||
for ( File file : moduleDirectory.listFiles() )
|
configFile.createNewFile();
|
||||||
|
try ( InputStream is = new FileInputStream( configFile ) )
|
||||||
{
|
{
|
||||||
if ( file.isFile() && file.getName().endsWith( ".jar" ) )
|
config = (Map) yaml.load( is );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( config == null )
|
||||||
|
{
|
||||||
|
config = new CaseInsensitiveMap();
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
config = new CaseInsensitiveMap( config );
|
||||||
|
}
|
||||||
|
// End yaml
|
||||||
|
|
||||||
|
List<String> defaults = new ArrayList<>();
|
||||||
|
if ( config.containsKey( "modules" ) )
|
||||||
|
{
|
||||||
|
defaults.addAll( (Collection) config.get( "modules" ) );
|
||||||
|
}
|
||||||
|
int version = ( config.containsKey( "version" ) ) ? (int) config.get( "version" ) : 0;
|
||||||
|
switch ( version )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
defaults.add( "jenkins://cmd_alert" );
|
||||||
|
defaults.add( "jenkins://cmd_find" );
|
||||||
|
defaults.add( "jenkins://cmd_list" );
|
||||||
|
defaults.add( "jenkins://cmd_send" );
|
||||||
|
defaults.add( "jenkins://cmd_server" );
|
||||||
|
}
|
||||||
|
config.put( "modules", defaults );
|
||||||
|
config.put( "version", 1 );
|
||||||
|
|
||||||
|
try ( FileWriter wr = new FileWriter( configFile ) )
|
||||||
|
{
|
||||||
|
yaml.dump( config, wr );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( String s : (List<String>) config.get( "modules" ) )
|
||||||
|
{
|
||||||
|
URI uri = new URI( s );
|
||||||
|
|
||||||
|
ModuleSource source = knownSources.get( uri.getScheme() );
|
||||||
|
if ( source == null )
|
||||||
{
|
{
|
||||||
String moduleName = file.getName().substring( 0, file.getName().length() - 4 ); // 4 = .jar.length()
|
System.out.println( "Unknown module source: " + s );
|
||||||
ModuleSource source = modules.get( moduleName );
|
continue;
|
||||||
if ( source == null )
|
}
|
||||||
{
|
String name = uri.getAuthority();
|
||||||
System.out.println( "No source for module in file: " + file );
|
if ( name == null )
|
||||||
continue;
|
{
|
||||||
}
|
System.out.println( "Unknown module host: " + s );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
try ( JarFile jar = new JarFile( file ) )
|
ModuleSpec spec = new ModuleSpec( name, new File( moduleDirectory, name + ".jar" ), source );
|
||||||
{
|
modules.add( spec );
|
||||||
JarEntry pdf = jar.getJarEntry( "plugin.yml" );
|
System.out.println( "Discovered module: " + spec );
|
||||||
Preconditions.checkNotNull( pdf, "Plugin must have a plugin.yml" );
|
}
|
||||||
|
|
||||||
try ( InputStream in = jar.getInputStream( pdf ) )
|
for ( ModuleSpec module : modules )
|
||||||
{
|
{
|
||||||
PluginDescription desc = yaml.loadAs( in, PluginDescription.class );
|
ModuleVersion moduleVersion = ( module.getFile().exists() ) ? getVersion( module.getFile() ) : null;
|
||||||
ModuleVersion moduleVersion = ModuleVersion.parse( desc.getVersion() );
|
|
||||||
if ( !moduleVersion.equals( bungeeVersion ) )
|
if ( !bungeeVersion.equals( moduleVersion ) )
|
||||||
{
|
{
|
||||||
System.out.println( "Attempting to update plugin from " + moduleVersion + " to " + bungeeVersion );
|
System.out.println( "Attempting to update plugin from " + moduleVersion + " to " + bungeeVersion );
|
||||||
source.retrieve( new ModuleSpec( moduleName, file ), bungeeVersion );
|
module.getProvider().retrieve( module, bungeeVersion );
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch ( Exception ex )
|
|
||||||
{
|
|
||||||
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not check module from file " + file, ex );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proxy.getPluginManager().detectPlugins( moduleDirectory );
|
||||||
|
}
|
||||||
|
|
||||||
|
private ModuleVersion getVersion(File file)
|
||||||
|
{
|
||||||
|
try ( JarFile jar = new JarFile( file ) )
|
||||||
|
{
|
||||||
|
JarEntry pdf = jar.getJarEntry( "plugin.yml" );
|
||||||
|
Preconditions.checkNotNull( pdf, "Plugin must have a plugin.yml" );
|
||||||
|
|
||||||
|
try ( InputStream in = jar.getInputStream( pdf ) )
|
||||||
|
{
|
||||||
|
PluginDescription desc = new Yaml().loadAs( in, PluginDescription.class );
|
||||||
|
return ModuleVersion.parse( desc.getVersion() );
|
||||||
|
}
|
||||||
|
} catch ( Exception ex )
|
||||||
|
{
|
||||||
|
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not check module from file " + file, ex );
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,5 +9,5 @@ public class ModuleSpec
|
|||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
private final File file;
|
private final File file;
|
||||||
private ModuleSource provider;
|
private final ModuleSource provider;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,12 @@ public class ModuleVersion
|
|||||||
{
|
{
|
||||||
int lastColon = version.lastIndexOf( ':' );
|
int lastColon = version.lastIndexOf( ':' );
|
||||||
int secondLastColon = version.lastIndexOf( ':', lastColon - 1 );
|
int secondLastColon = version.lastIndexOf( ':', lastColon - 1 );
|
||||||
|
|
||||||
|
if ( lastColon == -1 || secondLastColon == -1 )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
String buildNumber = version.substring( lastColon + 1, version.length() );
|
String buildNumber = version.substring( lastColon + 1, version.length() );
|
||||||
String gitCommit = version.substring( secondLastColon + 1, lastColon ).replaceAll( "\"", "" );
|
String gitCommit = version.substring( secondLastColon + 1, lastColon ).replaceAll( "\"", "" );
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user