Search in sources :

Example 26 with ParameterListener

use of com.biglybt.core.config.ParameterListener in project BiglyBT by BiglySoftware.

the class ConfigurationManager method addWeakParameterListener.

public void addWeakParameterListener(String parameter, ParameterListener new_listener) {
    if (parameter == null || new_listener == null) {
        return;
    }
    synchronized (weakParameterListenerz) {
        List<WeakReference<ParameterListener>> listeners = weakParameterListenerz.get(parameter);
        if (listeners == null) {
            listeners = new ArrayList<>(1);
            listeners.add(new WeakReference<ParameterListener>(new_listener));
            weakParameterListenerz.put(parameter, listeners);
        } else {
            if (Constants.IS_CVS_VERSION && listeners.size() > 100) {
                Debug.out(parameter);
            }
            for (Iterator<WeakReference<ParameterListener>> iterator = listeners.iterator(); iterator.hasNext(); ) {
                ParameterListener listener = iterator.next().get();
                if (listener == null) {
                    iterator.remove();
                }
                if (listener == new_listener) {
                    return;
                }
            }
            WeakReference<ParameterListener> weakRef = new WeakReference<>(new_listener);
            if (new_listener instanceof PriorityParameterListener) {
                listeners.add(0, weakRef);
            } else {
                listeners.add(weakRef);
            }
        }
    }
}
Also used : PriorityParameterListener(com.biglybt.core.config.PriorityParameterListener) WeakReference(java.lang.ref.WeakReference) ParameterListener(com.biglybt.core.config.ParameterListener) PriorityParameterListener(com.biglybt.core.config.PriorityParameterListener)

Example 27 with ParameterListener

use of com.biglybt.core.config.ParameterListener in project BiglyBT by BiglySoftware.

the class ConfigurationManager method notifyParameterListeners.

private void notifyParameterListeners(String parameter) {
    ParameterListener[] listeners;
    synchronized (parameterListenerz) {
        listeners = parameterListenerz.get(parameter);
    }
    List<ParameterListener> listListeners = null;
    synchronized (weakParameterListenerz) {
        List<WeakReference<ParameterListener>> temp = weakParameterListenerz.get(parameter);
        if (temp != null) {
            for (Iterator<WeakReference<ParameterListener>> iterator = temp.iterator(); iterator.hasNext(); ) {
                ParameterListener listener = iterator.next().get();
                if (listener == null) {
                    iterator.remove();
                } else {
                    if (listListeners == null) {
                        listListeners = new ArrayList<>(temp.size() + (listeners == null ? 0 : listeners.length));
                    }
                    if (listeners != null && !(listener instanceof PriorityParameterListener)) {
                        // listeners might have PriorityParameterListener, so append
                        // them before the first non-Priority one
                        Collections.addAll(listListeners, listeners);
                        listeners = null;
                    }
                    listListeners.add(listener);
                }
            }
        }
    }
    if (listListeners != null) {
        for (ParameterListener listener : listListeners) {
            if (listener != null) {
                try {
                    listener.parameterChanged(parameter);
                } catch (Throwable e) {
                    Debug.printStackTrace(e);
                }
            }
        }
    }
    if (listeners != null) {
        for (ParameterListener listener : listeners) {
            if (listener != null) {
                try {
                    listener.parameterChanged(parameter);
                } catch (Throwable e) {
                    Debug.printStackTrace(e);
                }
            }
        }
    }
}
Also used : PriorityParameterListener(com.biglybt.core.config.PriorityParameterListener) WeakReference(java.lang.ref.WeakReference) ParameterListener(com.biglybt.core.config.ParameterListener) PriorityParameterListener(com.biglybt.core.config.PriorityParameterListener)

Example 28 with ParameterListener

use of com.biglybt.core.config.ParameterListener in project BiglyBT by BiglySoftware.

the class CoreImpl method start.

@Override
public void start() throws CoreException {
    if (!canStart()) {
        throw (new CoreException("Core: already started (alternative process)"));
    }
    AEThread2.setOurThread();
    try {
        this_mon.enter();
        if (started) {
            throw (new CoreException("Core: already started"));
        }
        if (stopped) {
            throw (new CoreException("Core: already stopped"));
        }
        started = true;
    } finally {
        this_mon.exit();
    }
    // If a user sets this property, it is an alias for the following settings.
    if ("1".equals(System.getProperty(SystemProperties.SYSPROP_SAFEMODE))) {
        if (Logger.isEnabled())
            Logger.log(new LogEvent(LOGID, "Safe mode enabled"));
        Constants.isSafeMode = true;
        System.setProperty(SystemProperties.SYSPROP_LOADPLUGINS, "0");
        System.setProperty(SystemProperties.SYSPROP_DISABLEDOWNLOADS, "1");
        System.setProperty(SystemProperties.SYSPROP_SKIP_SWTCHECK, "1");
        // Not using localised text - not sure it's safe to this early.
        Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogEvent.LT_WARNING, "You are running " + Constants.APP_NAME + " in safe mode - you " + "can change your configuration, but any downloads added will " + "not be remembered when you close " + Constants.APP_NAME + "."));
    }
    /**
     * test to see if UI plays nicely with a really slow initialization
     */
    String sDelayCore = System.getProperty("delay.core", null);
    if (sDelayCore != null) {
        try {
            long delayCore = Long.parseLong(sDelayCore);
            Thread.sleep(delayCore);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // run plugin loading in parallel to the global manager loading
    AEThread2 pluginload = new AEThread2("PluginLoader", true) {

        @Override
        public void run() {
            if (Logger.isEnabled())
                Logger.log(new LogEvent(LOGID, "Loading of Plugins starts"));
            pi.loadPlugins(CoreImpl.this, false, !"0".equals(System.getProperty(SystemProperties.SYSPROP_LOADPLUGINS)), true, true);
            if (Logger.isEnabled())
                Logger.log(new LogEvent(LOGID, "Loading of Plugins complete"));
        }
    };
    if (LOAD_PLUGINS_IN_OTHER_THREAD) {
        pluginload.start();
    } else {
        pluginload.run();
    }
    // Disable async loading of existing torrents, because there are many things
    // (like hosting) that require all the torrents to be loaded.  While we
    // can write code for each of these cases to wait until the torrents are
    // loaded, it's a pretty big job to find them all and fix all their quirks.
    // Too big of a job for this late in the release stage.
    // Other example is the tracker plugin that is coded in a way where it must
    // always publish a complete rss feed
    global_manager = GlobalManagerFactory.create(this, null, 0);
    if (stopped) {
        System.err.println("Core stopped while starting");
        return;
    }
    // wait until plugin loading is done
    if (LOAD_PLUGINS_IN_OTHER_THREAD) {
        pluginload.join();
    }
    if (stopped) {
        System.err.println("Core stopped while starting");
        return;
    }
    VuzeFileHandler.getSingleton().addProcessor(new VuzeFileProcessor() {

        @Override
        public void process(VuzeFile[] files, int expected_types) {
            for (int i = 0; i < files.length; i++) {
                VuzeFile vf = files[i];
                VuzeFileComponent[] comps = vf.getComponents();
                for (int j = 0; j < comps.length; j++) {
                    VuzeFileComponent comp = comps[j];
                    int comp_type = comp.getType();
                    if (comp_type == VuzeFileComponent.COMP_TYPE_ADD_TORRENT) {
                        PluginInterface default_pi = getPluginManager().getDefaultPluginInterface();
                        Map map = comp.getContent();
                        try {
                            Torrent torrent;
                            String url = MapUtils.getMapString(map, "torrent_url", null);
                            if (url != null) {
                                TorrentDownloader dl = default_pi.getTorrentManager().getURLDownloader(new URL(url));
                                torrent = dl.download();
                            } else {
                                String tf = MapUtils.getMapString(map, "torrent_file", null);
                                if (tf != null) {
                                    File file = new File(tf);
                                    if (!file.canRead() || file.isDirectory()) {
                                        throw (new Exception("torrent_file '" + tf + "' is invalid"));
                                    }
                                    torrent = default_pi.getTorrentManager().createFromBEncodedFile(file);
                                } else {
                                    throw (new Exception("torrent_url or torrent_file must be specified"));
                                }
                            }
                            File dest = null;
                            String save_folder = MapUtils.getMapString(map, "save_folder", null);
                            if (save_folder != null) {
                                dest = new File(save_folder, torrent.getName());
                            } else {
                                String save_file = MapUtils.getMapString(map, "save_file", null);
                                if (save_file != null) {
                                    dest = new File(save_file);
                                }
                            }
                            if (dest != null) {
                                dest.getParentFile().mkdirs();
                            }
                            default_pi.getDownloadManager().addDownload(torrent, null, dest);
                        } catch (Throwable e) {
                            Debug.out(e);
                        }
                        comp.setProcessed();
                    }
                }
            }
        }
    });
    triggerLifeCycleComponentCreated(global_manager);
    pi.initialisePlugins();
    if (stopped) {
        System.err.println("Core stopped while starting");
        return;
    }
    if (Logger.isEnabled())
        Logger.log(new LogEvent(LOGID, "Initializing Plugins complete"));
    try {
        PluginInterface dht_pi = getPluginManager().getPluginInterfaceByClass(DHTPlugin.class);
        if (dht_pi != null) {
            dht_pi.addEventListener(new PluginEventListener() {

                private boolean first_dht = true;

                @Override
                public void handleEvent(PluginEvent ev) {
                    if (ev.getType() == DHTPlugin.EVENT_DHT_AVAILABLE) {
                        if (first_dht) {
                            first_dht = false;
                            DHT dht = (DHT) ev.getValue();
                            dht.addListener(new DHTListener() {

                                @Override
                                public void speedTesterAvailable(DHTSpeedTester tester) {
                                    if (speed_manager != null) {
                                        speed_manager.setSpeedTester(tester);
                                    }
                                }
                            });
                            global_manager.addListener(new GlobalManagerAdapter() {

                                @Override
                                public void seedingStatusChanged(boolean seeding_only_mode, boolean b) {
                                    checkConfig();
                                }
                            });
                            COConfigurationManager.addAndFireParameterListeners(new String[] { TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY, TransferSpeedValidator.AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY }, new ParameterListener() {

                                @Override
                                public void parameterChanged(String parameterName) {
                                    checkConfig();
                                }
                            });
                        }
                    }
                }

                protected void checkConfig() {
                    if (speed_manager != null) {
                        speed_manager.setEnabled(TransferSpeedValidator.isAutoSpeedActive(global_manager));
                    }
                }
            });
        }
    } catch (Throwable e) {
    }
    if (COConfigurationManager.getBooleanParameter("Resume Downloads On Start")) {
        global_manager.resumeDownloads();
    }
    VersionCheckClient.getSingleton().initialise();
    instance_manager.initialize();
    NetworkManager.getSingleton().initialize(this);
    SpeedLimitHandler.getSingleton(this);
    Runtime.getRuntime().addShutdownHook(new AEThread("Shutdown Hook") {

        @Override
        public void runSupport() {
            Logger.log(new LogEvent(LOGID, "Shutdown hook triggered"));
            CoreImpl.this.stop();
        }
    });
    DelayedTask delayed_task = UtilitiesImpl.addDelayedTask("Core", new Runnable() {

        @Override
        public void run() {
            new AEThread2("core:delayTask", true) {

                @Override
                public void run() {
                    AEDiagnostics.checkDumpsAndNatives();
                    COConfigurationManager.setParameter("diags.enable.pending.writes", true);
                    AEDiagnostics.flushPendingLogs();
                    NetworkAdmin na = NetworkAdmin.getSingleton();
                    na.runInitialChecks(CoreImpl.this);
                    na.addPropertyChangeListener(new NetworkAdminPropertyChangeListener() {

                        private String last_as;

                        @Override
                        public void propertyChanged(String property) {
                            NetworkAdmin na = NetworkAdmin.getSingleton();
                            if (property.equals(NetworkAdmin.PR_NETWORK_INTERFACES)) {
                                boolean found_usable = false;
                                NetworkAdminNetworkInterface[] intf = na.getInterfaces();
                                for (int i = 0; i < intf.length; i++) {
                                    NetworkAdminNetworkInterfaceAddress[] addresses = intf[i].getAddresses();
                                    for (int j = 0; j < addresses.length; j++) {
                                        if (!addresses[j].isLoopback()) {
                                            found_usable = true;
                                        }
                                    }
                                }
                                if (!found_usable) {
                                    return;
                                }
                                Logger.log(new LogEvent(LOGID, "Network interfaces have changed (new=" + na.getNetworkInterfacesAsString() + ")"));
                                announceAll(false);
                            } else if (property.equals(NetworkAdmin.PR_AS)) {
                                String as = na.getCurrentASN().getAS();
                                if (last_as == null) {
                                    last_as = as;
                                } else if (!as.equals(last_as)) {
                                    Logger.log(new LogEvent(LOGID, "AS has changed (new=" + as + ")"));
                                    last_as = as;
                                    announceAll(false);
                                }
                            }
                        }
                    });
                    setupSleepAndCloseActions();
                }
            }.start();
        }
    });
    delayed_task.queue();
    if (stopped) {
        System.err.println("Core stopped while starting");
        return;
    }
    PairingManagerFactory.getSingleton();
    CoreRunningListener[] runningListeners;
    mon_coreRunningListeners.enter();
    try {
        if (coreRunningListeners == null) {
            runningListeners = new CoreRunningListener[0];
        } else {
            runningListeners = coreRunningListeners.toArray(new CoreRunningListener[0]);
            coreRunningListeners = null;
        }
    } finally {
        mon_coreRunningListeners.exit();
    }
    // Trigger Listeners now that core is started
    new AEThread2("Plugin Init Complete", false) {

        @Override
        public void run() {
            try {
                PlatformManagerFactory.getPlatformManager().startup(CoreImpl.this);
            } catch (Throwable e) {
                Debug.out("PlatformManager: init failed", e);
            }
            Iterator it = lifecycle_listeners.iterator();
            while (it.hasNext()) {
                try {
                    CoreLifecycleListener listener = (CoreLifecycleListener) it.next();
                    if (!listener.requiresPluginInitCompleteBeforeStartedEvent()) {
                        listener.started(CoreImpl.this);
                    }
                } catch (Throwable e) {
                    Debug.printStackTrace(e);
                }
            }
            pi.initialisationComplete();
            it = lifecycle_listeners.iterator();
            while (it.hasNext()) {
                try {
                    CoreLifecycleListener listener = (CoreLifecycleListener) it.next();
                    if (listener.requiresPluginInitCompleteBeforeStartedEvent()) {
                        listener.started(CoreImpl.this);
                    }
                } catch (Throwable e) {
                    Debug.printStackTrace(e);
                }
            }
        }
    }.start();
    // Typically there are many runningListeners, most with quick execution, and
    // a few longer ones.  Let 3 run at a time, queue the rest.  Without
    // a ThreadPool, the slow ones would delay the startup processes that run
    // after this start() method
    ThreadPool tp = new ThreadPool("Trigger CoreRunning Listeners", 3);
    for (final CoreRunningListener l : runningListeners) {
        try {
            tp.run(new AERunnable() {

                @Override
                public void runSupport() {
                    l.coreRunning(CoreImpl.this);
                }
            });
        } catch (Throwable t) {
            Debug.out(t);
        }
    }
// Debug.out("Core Start Complete");
}
Also used : Torrent(com.biglybt.pif.torrent.Torrent) TOTorrent(com.biglybt.core.torrent.TOTorrent) DHTSpeedTester(com.biglybt.core.dht.speed.DHTSpeedTester) VuzeFileComponent(com.biglybt.core.vuzefile.VuzeFileComponent) URL(java.net.URL) DHT(com.biglybt.core.dht.DHT) NetworkAdmin(com.biglybt.core.networkmanager.admin.NetworkAdmin) DHTListener(com.biglybt.core.dht.DHTListener) VuzeFile(com.biglybt.core.vuzefile.VuzeFile) DelayedTask(com.biglybt.pif.utils.DelayedTask) LogEvent(com.biglybt.core.logging.LogEvent) LogAlert(com.biglybt.core.logging.LogAlert) VuzeFileProcessor(com.biglybt.core.vuzefile.VuzeFileProcessor) NetworkAdminPropertyChangeListener(com.biglybt.core.networkmanager.admin.NetworkAdminPropertyChangeListener) GlobalManagerAdapter(com.biglybt.core.global.GlobalManagerAdapter) ParameterListener(com.biglybt.core.config.ParameterListener) TorrentDownloader(com.biglybt.pif.torrent.TorrentDownloader) RandomAccessFile(java.io.RandomAccessFile) File(java.io.File) VuzeFile(com.biglybt.core.vuzefile.VuzeFile)

Example 29 with ParameterListener

use of com.biglybt.core.config.ParameterListener in project BiglyBT by BiglySoftware.

the class GlobalManagerFileMerger method initialise.

void initialise() {
    COConfigurationManager.addAndFireParameterListeners(new String[] { "Merge Same Size Files", "Merge Same Size Files Extended" }, new ParameterListener() {

        @Override
        public void parameterChanged(String _name) {
            enabled = COConfigurationManager.getBooleanParameter("Merge Same Size Files");
            enabled_extended = COConfigurationManager.getBooleanParameter("Merge Same Size Files Extended");
            if (initialised) {
                syncFileSets();
            }
        }
    });
    gm.addListener(new GlobalManagerAdapter() {

        @Override
        public void downloadManagerAdded(DownloadManager dm) {
            syncFileSets();
        }

        @Override
        public void downloadManagerRemoved(DownloadManager dm) {
            syncFileSets();
        }
    }, false);
    syncFileSets();
    initialised = true;
}
Also used : GlobalManagerAdapter(com.biglybt.core.global.GlobalManagerAdapter) ParameterListener(com.biglybt.core.config.ParameterListener) DownloadManager(com.biglybt.core.download.DownloadManager)

Example 30 with ParameterListener

use of com.biglybt.core.config.ParameterListener in project BiglyBT by BiglySoftware.

the class LongTermStatsImpl method getTotalUsageInPeriod.

@Override
public long[] getTotalUsageInPeriod(int period_type, double multiplier, RecordAccepter accepter) {
    if (start_of_week == -1) {
        COConfigurationManager.addAndFireParameterListeners(new String[] { "long.term.stats.weekstart", "long.term.stats.monthstart" }, new ParameterListener() {

            @Override
            public void parameterChanged(String name) {
                start_of_week = COConfigurationManager.getIntParameter("long.term.stats.weekstart");
                start_of_month = COConfigurationManager.getIntParameter("long.term.stats.monthstart");
            }
        });
    }
    long now = SystemTime.getCurrentTime();
    long top_time;
    long bottom_time;
    if (period_type == PT_CURRENT_HOUR) {
        bottom_time = (now / HOUR_IN_MILLIS) * HOUR_IN_MILLIS;
        top_time = bottom_time + HOUR_IN_MILLIS - 1;
    } else if (period_type == PT_SLIDING_HOUR) {
        bottom_time = now - (long) (HOUR_IN_MILLIS * multiplier);
        top_time = now;
    } else if (period_type == PT_SLIDING_DAY) {
        bottom_time = now - (long) (DAY_IN_MILLIS * multiplier);
        top_time = now;
    } else if (period_type == PT_SLIDING_WEEK) {
        bottom_time = now - (long) (WEEK_IN_MILLIS * multiplier);
        top_time = now;
    } else {
        Calendar calendar = new GregorianCalendar();
        calendar.setTimeInMillis(SystemTime.getCurrentTime());
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        top_time = calendar.getTimeInMillis() + DAY_IN_MILLIS - 1;
        if (period_type == PT_CURRENT_DAY) {
        } else if (period_type == PT_CURRENT_WEEK) {
            // sun = 1, mon = 2 etc
            int day_of_week = calendar.get(Calendar.DAY_OF_WEEK);
            if (day_of_week == start_of_week) {
            } else if (day_of_week > start_of_week) {
                calendar.add(Calendar.DAY_OF_WEEK, -(day_of_week - start_of_week));
            } else {
                calendar.add(Calendar.DAY_OF_WEEK, -(7 - (start_of_week - day_of_week)));
            }
        } else {
            if (start_of_month == 1) {
                calendar.set(Calendar.DAY_OF_MONTH, 1);
            } else {
                int day_of_month = calendar.get(Calendar.DAY_OF_MONTH);
                if (day_of_month == start_of_month) {
                } else if (day_of_month > start_of_month) {
                    calendar.set(Calendar.DAY_OF_MONTH, start_of_month);
                } else {
                    calendar.add(Calendar.MONTH, -1);
                    calendar.set(Calendar.DAY_OF_MONTH, start_of_month);
                }
            }
        }
        bottom_time = calendar.getTimeInMillis();
    }
    return (getTotalUsageInPeriod(new Date(bottom_time), new Date(top_time), accepter));
}
Also used : ParameterListener(com.biglybt.core.config.ParameterListener)

Aggregations

ParameterListener (com.biglybt.core.config.ParameterListener)43 CoreRunningListener (com.biglybt.core.CoreRunningListener)5 LogAlert (com.biglybt.core.logging.LogAlert)5 PriorityParameterListener (com.biglybt.core.config.PriorityParameterListener)4 LogEvent (com.biglybt.core.logging.LogEvent)4 MenuItemListener (com.biglybt.pif.ui.menus.MenuItemListener)4 ArrayList (java.util.ArrayList)4 Core (com.biglybt.core.Core)3 ConfigurationManager (com.biglybt.core.config.impl.ConfigurationManager)3 GlobalManager (com.biglybt.core.global.GlobalManager)3 GlobalManagerAdapter (com.biglybt.core.global.GlobalManagerAdapter)3 GridData (org.eclipse.swt.layout.GridData)3 GridLayout (org.eclipse.swt.layout.GridLayout)3 DownloadManager (com.biglybt.core.download.DownloadManager)2 GlobalManagerListener (com.biglybt.core.global.GlobalManagerListener)2 TOTorrent (com.biglybt.core.torrent.TOTorrent)2 AERunnable (com.biglybt.core.util.AERunnable)2 MenuItem (com.biglybt.pif.ui.menus.MenuItem)2 MenuItemFillListener (com.biglybt.pif.ui.menus.MenuItemFillListener)2 DelayedTask (com.biglybt.pif.utils.DelayedTask)2