📄 guiupdater.java
字号:
/*
* Created on 4 mai 2004
* Created by Olivier Chalouhi
*
* Copyright (C) 2004, 2005, 2006 Aelitis SAS, All rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* AELITIS, SAS au capital de 46,603.30 euros,
* 8 Alle Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.ui.swt.mainwindow;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.eclipse.swt.widgets.Display;
import com.aelitis.azureus.core.*;
import com.aelitis.azureus.core.dht.DHT;
import com.aelitis.azureus.core.networkmanager.NetworkManager;
import com.aelitis.azureus.plugins.dht.DHTPlugin;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.ipfilter.*;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.stats.transfer.OverallStats;
import org.gudy.azureus2.core3.stats.transfer.StatsFactory;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.PluginManager;
import org.gudy.azureus2.plugins.network.ConnectionManager;
import org.gudy.azureus2.ui.swt.ImageRepository;
import org.gudy.azureus2.ui.swt.MinimizedWindow;
import org.gudy.azureus2.ui.swt.Tab;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.views.IView;
/**
* @author Olivier Chalouhi
*
*/
public class GUIUpdater extends AEThread implements ParameterListener {
private static final LogIDs LOGID = LogIDs.GUI;
/** Calculate timer statistics for GUI update */
private static final boolean DEBUG_TIMER = Constants.isCVSVersion();
private AzureusCore azureus_core;
private ConnectionManager connection_manager;
private OverallStats overall_stats;
private DHTPlugin dhtPlugin;
private NumberFormat numberFormat;
private MainWindow mainWindow;
private Display display;
private long last_sr_ratio = -1;
private int last_sr_status = -1;
private int lastNATstatus = -1;
private int lastDHTstatus = -1;
private long lastDHTcount = -1;
boolean finished = false;
boolean refreshed = true;
int waitTime = COConfigurationManager.getIntParameter("GUI Refresh");
Map averageTimes = DEBUG_TIMER ? new HashMap() : null;
public
GUIUpdater(
AzureusCore _azureus_core,
MainWindow mainWindow)
{
super("GUI updater");
azureus_core = _azureus_core;
this.mainWindow = mainWindow;
this.display = mainWindow.getDisplay();
this.numberFormat = NumberFormat.getInstance();
PluginManager pm = AzureusCoreFactory.getSingleton().getPluginManager();
connection_manager = pm.getDefaultPluginInterface().getConnectionManager();
overall_stats = StatsFactory.getStats();
PluginInterface dht_pi = pm.getPluginInterfaceByClass( DHTPlugin.class );
if ( dht_pi != null ){
dhtPlugin = (DHTPlugin)dht_pi.getPlugin();
}
setPriority(Thread.MAX_PRIORITY -2);
COConfigurationManager.addParameterListener("GUI Refresh", this);
}
public void runSupport() {
while (!finished) {
if(refreshed)
update();
try {
Thread.sleep(waitTime);
}
catch (Exception e) {
Debug.printStackTrace( e );
}
}
}
/**
* @param parameterName the name of the parameter that has changed
* @see org.gudy.azureus2.core3.config.ParameterListener#parameterChanged(java.lang.String)
*/
public void parameterChanged(String parameterName) {
waitTime = COConfigurationManager.getIntParameter("GUI Refresh");
}
private void update() {
refreshed = false;
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
try {
long lTimeStart = System.currentTimeMillis();
Map timeMap = DEBUG_TIMER ? new LinkedHashMap() : null;
if (display == null || display.isDisposed())
return;
IView view = null;
if (!mainWindow.getShell().isDisposed() && mainWindow.isVisible()
&& !mainWindow.getShell().getMinimized()) {
view = mainWindow.getCurrentView();
if (DEBUG_TIMER)
timeMap.put("Init", new Long(System.currentTimeMillis()));
if (view != null) {
view.refresh();
if (DEBUG_TIMER) {
String s = view.getFullTitle().replaceAll("[0-9.]++\\% : ", "");
timeMap.put("'" + s + "' Refresh", new Long(System.currentTimeMillis()));
}
Tab.refresh();
if (DEBUG_TIMER)
timeMap.put("Tab Refresh", new Long(System.currentTimeMillis()));
}
// IP Filter Status Section
IpFilter ip_filter = azureus_core.getIpFilterManager()
.getIPFilter();
mainWindow.ipBlocked.setText("{"
+ DisplayFormatters.formatDateShort(ip_filter
.getLastUpdateTime())
+ "} IPs: "
+ numberFormat.format(ip_filter.getNbRanges())
+ " - "
+ numberFormat.format(ip_filter.getNbIpsBlockedAndLoggable())
+ "/"
+ numberFormat.format(ip_filter.getNbBannedIps())
+ "/"
+ numberFormat.format(azureus_core.getIpFilterManager()
.getBadIps().getNbBadIps()));
// SR status section
long ratio = (1000* overall_stats.getUploadedBytes() / (overall_stats.getDownloadedBytes()+1) );
int sr_status;
if ( ratio < 500 ){
sr_status = 0;
}else if ( ratio < 900 ){
sr_status = 1;
}else{
sr_status = 2;
}
if ( sr_status != last_sr_status ){
String imgID;
switch (sr_status) {
case 2:
imgID = "greenled";
break;
case 1:
imgID = "yellowled";
break;
default:
imgID = "redled";
break;
}
mainWindow.srStatus.setImage( ImageRepository.getImage(imgID) );
last_sr_status = sr_status;
}
if ( ratio != last_sr_ratio ){
String tooltipID;
switch (sr_status) {
case 2:
tooltipID = "MainWindow.sr.status.tooltip.ok";
break;
case 1:
tooltipID = "MainWindow.sr.status.tooltip.poor";
break;
default:
tooltipID = "MainWindow.sr.status.tooltip.bad";
break;
}
String ratio_str = "";
String partial = "" + ratio%1000;
while(partial.length() < 3){
partial = "0" + partial;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -