[JAVA] Vuze Plug-In zum Schreiben und Genießen

Einführung

-Wenn ich mir Javadoc von BT-Client Vuze ansah, sah es nach einer coolen Struktur aus. ――Ich möchte ein Plug-In erstellen

Hinweis

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

Angenommene Umgebung

--macOS mojave oder später

Umgebungseinstellung

--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 möchte die Priorität in absteigender Reihenfolge der Sämaschine sortieren

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

Paket

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

Vuze Plug-In zum Schreiben und Genießen
[Java] Wie man Dateien ausgibt und schreibt!
JDBC Versprechen und Schreibbeispiel
Wie schreibe ich Rails
[Java] Arten von Kommentaren und wie man sie schreibt
Schreiben Sie zur Implementierung den Test und codieren Sie den Prozess
Wie schreibe ich Docker-Compose
Wie schreibe ich Mockito
So schreiben Sie eine Migrationsdatei
Schreiben und Notizen bei der Migration von VB zu JAVA
Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
Lesen und schreiben Sie wie java.nio
Wie man guten Code schreibt
Gradle zum Anfassen und Erinnern
Wie schreibe ich einen Java-Kommentar
[Refactoring] So schreiben Sie Routing
Wie schreibe ich Junit 5 organisiert
Wie schreibe ich Rails Seed
So schreiben Sie ein benutzerorientiertes Programm (1)
Wie schreibe ich Rails Routing
Ich möchte in der Lage sein, selbst reguläre Ausdrücke zu denken und zu schreiben. ..
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen (Variablen und Typen) ~
Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
Schritte zum Erstellen und Installieren eines vorhandenen Eclipse-Plug-In-Projekts selbst