Added an (grey) inactive icon on network down detection
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@178 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
b9763f8028
commit
20ef4a9da0
|
@ -34,7 +34,7 @@ public class ExchangeSessionFactory {
|
|||
if (checkNetwork()) {
|
||||
throw e;
|
||||
} else {
|
||||
throw new IOException("All network interfaces down !");
|
||||
throw new NetworkDownException("All network interfaces down !");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,12 +64,16 @@ public class ExchangeSessionFactory {
|
|||
String message = "DavMail configuration exception: \n";
|
||||
if (checkNetwork()) {
|
||||
message += "Unknown host " + exc.getMessage();
|
||||
} else {
|
||||
message += "All network interfaces down !";
|
||||
}
|
||||
|
||||
ExchangeSession.LOGGER.error(message, exc);
|
||||
throw new IOException(message);
|
||||
} else {
|
||||
message += "All network interfaces down !";
|
||||
ExchangeSession.LOGGER.error(message, exc);
|
||||
throw new NetworkDownException(message);
|
||||
}
|
||||
|
||||
} catch (NetworkDownException exc) {
|
||||
throw exc;
|
||||
} catch (Exception exc) {
|
||||
ExchangeSession.LOGGER.error("DavMail configuration exception: \n" + exc.getMessage(), exc);
|
||||
throw new IOException("DavMail configuration exception: \n" + exc.getMessage());
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package davmail.exchange;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Custom exception to mark network down case.
|
||||
*/
|
||||
public class NetworkDownException extends IOException {
|
||||
public NetworkDownException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -56,7 +56,7 @@ public class ImapConnection extends AbstractConnection {
|
|||
sendClient(commandId + " OK Authenticated");
|
||||
state = AUTHENTICATED;
|
||||
} catch (Exception e) {
|
||||
DavGatewayTray.error(e.getMessage());
|
||||
DavGatewayTray.error(e);
|
||||
sendClient(commandId + " NO LOGIN failed");
|
||||
state = INITIAL;
|
||||
}
|
||||
|
|
|
@ -75,7 +75,6 @@ public class PopConnection extends AbstractConnection {
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
tokens = new StringTokenizer(line);
|
||||
if (tokens.hasMoreTokens()) {
|
||||
String command = tokens.nextToken();
|
||||
|
@ -117,12 +116,8 @@ public class PopConnection extends AbstractConnection {
|
|||
// can not send error to client after a socket exception
|
||||
DavGatewayTray.warn("Client closed connection ", e);
|
||||
} catch (Exception e) {
|
||||
String message = e.getMessage();
|
||||
if (message == null) {
|
||||
message = "Authentication failed: "+e.toString();
|
||||
}
|
||||
DavGatewayTray.error(message);
|
||||
sendERR(message);
|
||||
DavGatewayTray.error(e);
|
||||
sendERR(e);
|
||||
}
|
||||
}
|
||||
} else if ("CAPA".equalsIgnoreCase(command)) {
|
||||
|
@ -223,7 +218,7 @@ public class PopConnection extends AbstractConnection {
|
|||
os.flush();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.error(e.getMessage());
|
||||
DavGatewayTray.error(e);
|
||||
try {
|
||||
sendERR(e.getMessage());
|
||||
} catch (IOException e2) {
|
||||
|
@ -239,6 +234,14 @@ public class PopConnection extends AbstractConnection {
|
|||
sendClient("+OK ", message);
|
||||
}
|
||||
|
||||
public void sendERR(Exception e) throws IOException {
|
||||
String message = e.getMessage();
|
||||
if (message == null) {
|
||||
message = e.toString();
|
||||
}
|
||||
sendERR(message);
|
||||
}
|
||||
|
||||
public void sendERR(String message) throws IOException {
|
||||
sendClient("-ERR ", message.replaceAll("\\n", " "));
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@ package davmail.smtp;
|
|||
import davmail.AbstractConnection;
|
||||
import davmail.exchange.ExchangeSessionFactory;
|
||||
import davmail.tray.DavGatewayTray;
|
||||
import sun.misc.BASE64Decoder;
|
||||
import sun.misc.BASE64Encoder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
@ -21,7 +19,7 @@ public class SmtpConnection extends AbstractConnection {
|
|||
protected static final int RECIPIENT = 3;
|
||||
protected static final int MAILDATA = 4;
|
||||
protected static final int LOGIN = 5;
|
||||
protected static final int PASSWORD = 6;
|
||||
public static final int PASSWORD = 6;
|
||||
|
||||
// Initialize the streams and start the thread
|
||||
public SmtpConnection(Socket clientSocket) {
|
||||
|
@ -147,11 +145,11 @@ public class SmtpConnection extends AbstractConnection {
|
|||
sendClient("235 OK Authenticated");
|
||||
state = AUTHENTICATED;
|
||||
} catch (Exception e) {
|
||||
DavGatewayTray.error(e);
|
||||
String message = e.getMessage();
|
||||
if (message == null) {
|
||||
message = e.toString();
|
||||
}
|
||||
DavGatewayTray.error(message);
|
||||
message = message.replaceAll("\\n", " ");
|
||||
sendClient("554 Authenticated failed " + message);
|
||||
state = INITIAL;
|
||||
|
@ -159,16 +157,6 @@ public class SmtpConnection extends AbstractConnection {
|
|||
|
||||
}
|
||||
|
||||
protected String base64Encode(String value) {
|
||||
BASE64Encoder encoder = new BASE64Encoder();
|
||||
return encoder.encode(value.getBytes());
|
||||
}
|
||||
|
||||
protected String base64Decode(String value) throws IOException {
|
||||
BASE64Decoder decoder = new BASE64Decoder();
|
||||
return new String(decoder.decodeBuffer(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode SMTP credentials
|
||||
*
|
||||
|
|
|
@ -10,12 +10,9 @@ import org.apache.log4j.lf5.LogLevel;
|
|||
import org.apache.log4j.lf5.viewer.LogBrokerMonitor;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.net.URL;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Tray icon handler based on java 1.6
|
||||
|
@ -24,35 +21,53 @@ public class AwtGatewayTray implements DavGatewayTrayInterface {
|
|||
protected AwtGatewayTray() {
|
||||
}
|
||||
|
||||
// LOCK for synchronized block
|
||||
protected static final Object LOCK = new Object();
|
||||
|
||||
private static TrayIcon trayIcon = null;
|
||||
private static Image image = null;
|
||||
private static Image image2 = null;
|
||||
private static Image inactiveImage = null;
|
||||
private boolean isActive = true;
|
||||
|
||||
public Image getFrameIcon() {
|
||||
return image;
|
||||
}
|
||||
|
||||
public void switchIcon() {
|
||||
synchronized (LOCK) {
|
||||
isActive = true;
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
if (trayIcon.getImage() == image) {
|
||||
trayIcon.setImage(image2);
|
||||
} else {
|
||||
trayIcon.setImage(image);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void resetIcon() {
|
||||
synchronized (LOCK) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
trayIcon.setImage(image);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void displayMessage(String message, Priority priority) {
|
||||
synchronized (LOCK) {
|
||||
public void inactiveIcon() {
|
||||
isActive = false;
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
trayIcon.setImage(inactiveImage);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return isActive;
|
||||
}
|
||||
|
||||
public void displayMessage(final String message, final Priority priority) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
if (trayIcon != null) {
|
||||
TrayIcon.MessageType messageType = null;
|
||||
if (priority == Priority.INFO) {
|
||||
|
@ -68,7 +83,7 @@ public class AwtGatewayTray implements DavGatewayTrayInterface {
|
|||
trayIcon.setToolTip("DavMail gateway \n" + message);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public void init() {
|
||||
|
@ -79,7 +94,9 @@ public class AwtGatewayTray implements DavGatewayTrayInterface {
|
|||
});
|
||||
}
|
||||
|
||||
public void createAndShowGUI() {
|
||||
|
||||
|
||||
protected void createAndShowGUI() {
|
||||
// set native look and feel
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
|
@ -89,21 +106,9 @@ public class AwtGatewayTray implements DavGatewayTrayInterface {
|
|||
|
||||
// get the SystemTray instance
|
||||
SystemTray tray = SystemTray.getSystemTray();
|
||||
// load an image
|
||||
ClassLoader classloader = DavGatewayTray.class.getClassLoader();
|
||||
try {
|
||||
URL imageUrl = classloader.getResource("tray.png");
|
||||
image = ImageIO.read(imageUrl);
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.warn("Unable to load image", e);
|
||||
}
|
||||
|
||||
try {
|
||||
URL imageUrl2 = classloader.getResource("tray2.png");
|
||||
image2 = ImageIO.read(imageUrl2);
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.warn("Unable to load image", e);
|
||||
}
|
||||
image = DavGatewayTray.loadImage("tray.png");
|
||||
image2 = DavGatewayTray.loadImage("tray.png");
|
||||
inactiveImage = DavGatewayTray.loadImage("trayinactive.png");
|
||||
|
||||
// create a popup menu
|
||||
PopupMenu popup = new PopupMenu();
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package davmail.tray;
|
||||
|
||||
import davmail.Settings;
|
||||
import davmail.exchange.NetworkDownException;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.apache.log4j.Priority;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -33,11 +37,21 @@ public class DavGatewayTray {
|
|||
}
|
||||
|
||||
public static void resetIcon() {
|
||||
if (davGatewayTray != null) {
|
||||
if (davGatewayTray != null && isActive()) {
|
||||
davGatewayTray.resetIcon();
|
||||
}
|
||||
}
|
||||
|
||||
public static void inactiveIcon() {
|
||||
if (davGatewayTray != null) {
|
||||
davGatewayTray.inactiveIcon();
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isActive() {
|
||||
return davGatewayTray == null || davGatewayTray.isActive();
|
||||
}
|
||||
|
||||
protected static void displayMessage(String message, Priority priority) {
|
||||
LOGGER.log(priority, message);
|
||||
if (davGatewayTray != null) {
|
||||
|
@ -47,8 +61,21 @@ public class DavGatewayTray {
|
|||
|
||||
protected static void displayMessage(String message, Exception e, Priority priority) {
|
||||
LOGGER.log(priority, message, e);
|
||||
if (davGatewayTray != null) {
|
||||
davGatewayTray.displayMessage(message + " " + e + " " + e.getMessage(), priority);
|
||||
if (davGatewayTray != null
|
||||
&& (!(e instanceof NetworkDownException) || isActive())) {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
if (message != null) {
|
||||
buffer.append(message).append(" ");
|
||||
}
|
||||
if (e.getMessage() != null) {
|
||||
buffer.append(e.getMessage());
|
||||
} else {
|
||||
buffer.append(e.toString());
|
||||
}
|
||||
davGatewayTray.displayMessage(buffer.toString(), priority);
|
||||
}
|
||||
if (davGatewayTray != null && e instanceof NetworkDownException) {
|
||||
davGatewayTray.inactiveIcon();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,6 +95,10 @@ public class DavGatewayTray {
|
|||
displayMessage(message, Priority.ERROR);
|
||||
}
|
||||
|
||||
public static void error(Exception e) {
|
||||
displayMessage(null, e, Priority.ERROR);
|
||||
}
|
||||
|
||||
public static void debug(String message, Exception e) {
|
||||
displayMessage(message, e, Priority.DEBUG);
|
||||
}
|
||||
|
@ -113,4 +144,22 @@ public class DavGatewayTray {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load image with current class loader.
|
||||
*
|
||||
* @param fileName image resource file name
|
||||
* @return image
|
||||
*/
|
||||
public static Image loadImage(String fileName) {
|
||||
Image result = null;
|
||||
try {
|
||||
ClassLoader classloader = DavGatewayTray.class.getClassLoader();
|
||||
URL imageUrl = classloader.getResource(fileName);
|
||||
result = ImageIO.read(imageUrl);
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.warn("Unable to load image", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ import java.awt.*;
|
|||
public interface DavGatewayTrayInterface {
|
||||
void switchIcon();
|
||||
void resetIcon();
|
||||
void inactiveIcon();
|
||||
boolean isActive();
|
||||
Image getFrameIcon();
|
||||
void displayMessage(String message, Priority priority);
|
||||
void init();
|
||||
|
|
|
@ -10,17 +10,8 @@ import org.apache.log4j.lf5.LogLevel;
|
|||
import org.apache.log4j.lf5.viewer.LogBrokerMonitor;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.Menu;
|
||||
import org.eclipse.swt.widgets.MenuItem;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.ToolTip;
|
||||
import org.eclipse.swt.widgets.Tray;
|
||||
import org.eclipse.swt.widgets.TrayItem;
|
||||
import org.eclipse.swt.widgets.*;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
@ -32,23 +23,22 @@ public class SwtGatewayTray implements DavGatewayTrayInterface {
|
|||
protected SwtGatewayTray() {
|
||||
}
|
||||
|
||||
// LOCK for synchronized block
|
||||
protected static final Object LOCK = new Object();
|
||||
|
||||
private static TrayItem trayItem = null;
|
||||
private static java.awt.Image awtImage = null;
|
||||
private static Image image = null;
|
||||
private static Image image2 = null;
|
||||
private static Image inactiveImage = null;
|
||||
private static Display display;
|
||||
private static Shell shell;
|
||||
private boolean isActive = true;
|
||||
|
||||
public java.awt.Image getFrameIcon() {
|
||||
return awtImage;
|
||||
}
|
||||
|
||||
public void switchIcon() {
|
||||
display.syncExec(
|
||||
new Runnable() {
|
||||
isActive = true;
|
||||
display.syncExec(new Runnable() {
|
||||
public void run() {
|
||||
if (trayItem.getImage() == image) {
|
||||
trayItem.setImage(image2);
|
||||
|
@ -61,19 +51,29 @@ public class SwtGatewayTray implements DavGatewayTrayInterface {
|
|||
}
|
||||
|
||||
public void resetIcon() {
|
||||
display.syncExec(
|
||||
new Runnable() {
|
||||
display.syncExec(new Runnable() {
|
||||
public void run() {
|
||||
trayItem.setImage(image);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void inactiveIcon() {
|
||||
isActive = false;
|
||||
display.syncExec(new Runnable() {
|
||||
public void run() {
|
||||
trayItem.setImage(inactiveImage);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return isActive;
|
||||
}
|
||||
|
||||
public void displayMessage(final String message, final Priority priority) {
|
||||
synchronized (LOCK) {
|
||||
if (trayItem != null) {
|
||||
display.asyncExec(
|
||||
new Runnable() {
|
||||
display.asyncExec(new Runnable() {
|
||||
public void run() {
|
||||
int messageType = 0;
|
||||
if (priority == Priority.INFO) {
|
||||
|
@ -97,6 +97,22 @@ public class SwtGatewayTray implements DavGatewayTrayInterface {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load image with current class loader.
|
||||
*
|
||||
* @param fileName image resource file name
|
||||
* @return image
|
||||
*/
|
||||
public static Image loadSwtImage(String fileName) {
|
||||
Image result = null;
|
||||
try {
|
||||
ClassLoader classloader = DavGatewayTray.class.getClassLoader();
|
||||
URL imageUrl = classloader.getResource(fileName);
|
||||
result = new Image(display, imageUrl.openStream());
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.warn("Unable to load image", e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void init() {
|
||||
|
@ -123,22 +139,10 @@ public class SwtGatewayTray implements DavGatewayTrayInterface {
|
|||
trayItem = new TrayItem(tray, SWT.NONE);
|
||||
trayItem.setToolTipText("DavMail gateway");
|
||||
|
||||
// load an image
|
||||
ClassLoader classloader = DavGatewayTray.class.getClassLoader();
|
||||
try {
|
||||
URL imageUrl = classloader.getResource("tray.png");
|
||||
image = new Image(display, imageUrl.openStream());
|
||||
awtImage = ImageIO.read(imageUrl);
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.warn("Unable to load image", e);
|
||||
}
|
||||
|
||||
try {
|
||||
URL imageUrl2 = classloader.getResource("tray2.png");
|
||||
image2 = new Image(display, imageUrl2.openStream());
|
||||
} catch (IOException e) {
|
||||
DavGatewayTray.warn("Unable to load image", e);
|
||||
}
|
||||
awtImage = DavGatewayTray.loadImage("tray.png");
|
||||
image = loadSwtImage("tray.png");
|
||||
image2 = loadSwtImage("tray2.png");
|
||||
inactiveImage = loadSwtImage("trayinactive.png");
|
||||
|
||||
trayItem.setImage(image);
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 660 B |
Loading…
Reference in New Issue