-Quand j'ai regardé le javadoc du client BT Vuze, cela ressemblait à une structure cool. ――Je veux créer un plug-in --Trier les priorités par ordre décroissant de semoir
――Le [Site de description des plugins] officiel (http://wiki.vuze.com/w/Plugin_Development_Guide) est très ancien, donc si vous êtes inspiré, vous serez sur le chemin épineux. «J'écris juste comme un tutoriel jusqu'à ce que j'en ai assez, mais je n'écris pas un tutoriel complet sur la façon de prendre des mesures. Vous ne pouvez en profiter que si vous avez suffisamment d'expérience pour lire la description et le dessin du site de référence en fonction de votre propre environnement.
--macOS mojave ou version ultérieure
--Procédure
- 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");
//Une fois exécuté, ce qui suit est ajouté au message d'alerte en bas à droite de l'interface utilisateur.
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
J'ai pu confirmer que la priorité était commutée normalement lorsque le débogage a été lancé.
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);
}
}
Cependant, lorsque j'essaie d'utiliser Install Plugins du gestionnaire de plugins de Vuze, j'obtiens l'erreur suivante.
DemoPlugin'Échec de la vérification: Signature doesn't match data
Cependant, la documentation n'empêche pas l'installation de vos propres plugins sans la * signature officielle de l'équipe. * Parce qu'il y en a, quelle est la cause ...?
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