-Wenn ich mir Javadoc von BT-Client Vuze ansah, sah es nach einer coolen Struktur aus. ――Ich möchte ein Plug-In erstellen
――Die offizielle Plugin Description Site ist sehr alt. Wenn Sie also inspiriert sind, sind Sie auf dem dornigen Weg. ――Ich schreibe nur in einem Tutorial-Stil, bis ich es satt habe, aber ich schreibe kein vollständiges Tutorial darüber, wie man Schritte unternimmt. Sie können es nur genießen, wenn Sie über genügend Erfahrung verfügen, um die Beschreibung und Zeichnung der Referenzseite gemäß Ihrer eigenen Umgebung zu lesen.
--macOS mojave oder später
--Verfahren
- File > New > Project ...
- Java
- Project SDK: java version 12.0.1
- name: DemoPlugin
- File > New > Directory
- lib/
- jni dependency here
- libOSXAccess.jnilib
- libOSXAccess_10.5.jnilib
- vuze dependency here
- Vuze_5760.jar
- Vuze_5760_pluginapi.jar
- swt dependency here
- swt.jar
- src/config/
- File > New > File
- plugin.properties
- Open Module Settings.. > Project Settings > Modules > [DemoPlugin]
- Sources
- lib ... mark as Excluded
- src ... mark as Sources
- src/config ... mark as Excluded
- Paths
- (*) Use module compile output path
- Output path: /Users/foo/src/github.com/foo/DemoPlugin/src/config/plugins/DemoPlugin
- Run > Edit Configuration ...
- Add Application
- Name: Plugin Debug
- Main class: org.gudy.azureus2.ui.swt.Main
- VM options: -Dazureus.config.path="/Users/foo/src/github.com/foo/DemoPlugin/src/config/" -Djava.library.path="/Users/foo/src/github.com/foo/DemoPlugin/lib/"
-XstartOnFirstThread
src/org/azureus/plugins/demo/Core.java
package org.azureus.plugins.demo;
import org.gudy.azureus2.plugins.PluginException;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.UnloadablePlugin;
import org.gudy.azureus2.plugins.logging.LoggerChannel;
public class Core implements UnloadablePlugin {
@Override
public void unload() throws PluginException {
}
@Override
public void initialize(PluginInterface pluginInterface) throws PluginException {
LoggerChannel channel = pluginInterface.getLogger().getChannel("demo");
//Bei der Ausführung wird der Warnmeldung unten rechts auf der Benutzeroberfläche Folgendes hinzugefügt.
channel.logAlert(LoggerChannel.LT_INFORMATION, "Hello, \n World!");
}
}
src/plugin.properties
plugin.class=org.azureus.plugins.demo.Core
plugin.name=DemoPlugin
plugin.id=demoplugin
plugin.version=0.0.1
Ich konnte bestätigen, dass die Priorität beim Starten des Debugs normal gewechselt wurde.
src/org/azureus/plugins/demo/Core.java
package org.azureus.plugins.demo;
import org.gudy.azureus2.plugins.PluginException;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.UnloadablePlugin;
import org.gudy.azureus2.plugins.download.Download;
import org.gudy.azureus2.plugins.logging.LoggerChannel;
import java.util.*;
public class Core implements UnloadablePlugin {
private LoggerChannel channel;
private PluginInterface pluginInterface;
@Override
public void unload() throws PluginException {}
private void alert(String s){
this.channel.logAlert(LoggerChannel.LT_INFORMATION, s);
}
@Override
public void initialize(PluginInterface pluginInterface) throws PluginException {
this.channel = pluginInterface.getLogger().getChannel("demo");
this.pluginInterface = pluginInterface;
timer();
}
private void timer(){
TimerTask task = new TimerTask() {
Download[] downloads;
List<Download> downloadPriorites;
public void run() {
downloads = pluginInterface.getDownloadManager().getDownloads();
downloadPriorites = new ArrayList<>();
for(Download dl : downloads) {
if(dl.getLastAnnounceResult().getSeedCount() == 0){
continue;
}
downloadPriorites.add(dl);
}
Collections.sort(downloadPriorites, new SeederComparator());
for(int i=0;i<downloadPriorites.size();i++){
Download dl = reset.get(i);
int pri = i+1;
dl.setPosition(pri);
}
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 1000, 5000);
}
}
class SeederComparator implements Comparator<Download> {
public int compare(Download a, Download b) {
int no1 = a.getLastAnnounceResult().getSeedCount();
int no2 = b.getLastAnnounceResult().getSeedCount();
// desc by seed count
return Integer.compare(no2, no1);
}
}
Wenn ich jedoch versuche, Plugins über den Plugin-Manager von Vuze zu verwenden, wird der folgende Fehler angezeigt.
DemoPlugin'Fehler beim Überprüfen: Signature doesn't match data
Die Dokumentation verhindert jedoch nicht die Installation Ihrer eigenen Plugins ohne die * offizielle Team-Signatur. * Weil es gibt, was ist die Ursache ...?
For your own plugins, Azureus will warn you that it is not an official plugin - you need someone from the Azureus team to sign your plugin to stop this warning from appearing. The fact that the plugin hasn't been signed won't actually stop you from being able to install it.
Recommended Posts