[JAVA] Plug-in Vuze pour écrire et profiter

introduction

-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

Mise en garde

――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.

Environnement supposé

--macOS mojave ou version ultérieure

Configuration environnementale

--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

Je souhaite trier la priorité par ordre décroissant de semoir

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);
    }
}

paquet

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

Plug-in Vuze pour écrire et profiter
[Java] Comment sortir et écrire des fichiers!
Promesse JDBC et exemple d'écriture
Comment écrire des rails
[Java] Types de commentaires et comment les rédiger
Pour implémenter, écrivez le test puis codez le processus
Comment écrire docker-compose
Comment écrire Mockito
Comment écrire un fichier de migration
Comment écrire et noter lors de la migration de VB vers JAVA
Lorsque vous souhaitez écrire explicitement OR ou AND avec ransack
Lisez et écrivez comme java.nio
Comment écrire du bon code
Gradle pour toucher et se souvenir
Comment rédiger un commentaire java
[Refactoring] Comment écrire le routage
Comment écrire Junit 5 organisé
Comment écrire des graines de Rails
Pour écrire un programme orienté utilisateur (1)
Comment écrire le routage Rails
Je veux pouvoir penser et écrire moi-même des expressions régulières. ..
Bases du développement Java ~ Comment écrire des programmes (variables et types) ~
Comment écrire un exemple d'implémentation F03 ruby et C en temps réel hors ligne
Étapes pour créer et installer vous-même un projet de plug-in Eclipse existant