📄 gmailer4j.java
字号:
setMessage("Logout", "Logging out ... ");
setLogonStatus(GMailer4j.LOGGING);
conn.disconnect();
setMessage("Offline", "Logged out. ");
logger.info("Logged out.");
setLogonStatus(GMailer4j.LOGON_OFF);
systrayCtrl.setToolTip("Not logged in");
systrayCtrl.setIcon(LOGON_OFF);
}
};
try{
ThreadUtils.execute(co);
}catch(InterruptedException ie){
// assume offline even interrupted
setMessage("Offline", "Disonnection Interrupted!");
setLogonStatus(GMailer4j.LOGON_OFF);
systrayCtrl.setToolTip("Not logged in");
systrayCtrl.setIcon(LOGON_OFF);
}
}
/**
* Fetch mailbox or label
*/
public void fetchBox(String name, int pos){
boolean isStdBox = false;
for(int i=0; i< GMConstants.BOX_NAMES.length; i++){
if (name.equals(GMConstants.BOX_NAMES[i])){
isStdBox = true;
}
}
if (isStdBox){
fetchBox(GMConstants.GM_REQ_STANDARD, name, pos);
}else{
fetchBox(GMConstants.GM_REQ_LABEL, name, pos);
}
}
/**
* Update the mailbox model
* @param currentbox String
* @param response GMResponse
* @todo add proper error dialog to warn user if ioexception
*/
public void updateBoxModel(String box, GMResponse response){
gminfo = response.getGminfo();
gmlabel = response.getGmlabel();
// save gminfo and gmlabel
Runnable r = new Runnable() {
public void run() {
try {
// update status bar and progress bar
try{
int num_of_mail = Integer.parseInt( (String) gminfo.get("stdbox.inbox") );
int percent = Integer.parseInt( ( (String) gminfo.get("quota.percent")).replaceAll("%", ""));
if ( num_of_mail == 1 ){
setMessage( "1 new mail!," + percent + "% used", null );
systrayCtrl.setIcon(2);
systrayCtrl.setToolTip("1 new mail!," + percent + "% used");
}else if ( num_of_mail > 1 ) {
setMessage( num_of_mail + " new mails!, " + percent + "% used", null);
systrayCtrl.setIcon(2);
systrayCtrl.setToolTip(num_of_mail + " new mails!, " + percent + "% used");
}else{
setMessage( percent + "% used", null);
systrayCtrl.setIcon(0);
systrayCtrl.setToolTip(percent + "% used");
}
}catch(Exception e){}
// update tree
mailboxModel.updateStdBox(gminfo);
mailboxModel.updateLabel(gmlabel);
mainCtrl.expandTree();
storage.put("info", gminfo);
storage.put("label", gmlabel);
}
catch (IOException ex) {
logger.warning("Failed saving gmail info and labels ... " + ex);
}
}
};
try {
ThreadUtils.execute(r);
}
catch (InterruptedException ex) { }
}
/**
* Update the threads model
* @param box String
* @param response GMResponse
*/
public void updateThreadsModel(String box, GMResponse response) {
// update mailbox sotrage
mailboxes.put(box, response.getGMThreads());
threadsModel.setMessageThreads(box, response.getGMThreads());
setMessage(null, "Conversation downloaded. ");
}
/**
* Fetch a mailbox folder from gmail
* @param String boxname Name of the mailbox
* @todo add error handler
*/
protected void fetchBox(final byte type, final String boxname, final int position){
if (!conn.isConnected()){
// handel rrror
logger.warning("Not connected, Cannot fetch mailbox");
}else{
Runnable t = new Runnable() {
public void run(){
GMResponse resp ;
try{
// row = frame.mailboxTree.getRowForPath(frame.mailboxTree.getSelectionPath());
setMessage("Downloading...","Downloading mailbox \"" + boxname + "\"");
resp = conn.request(type, boxname, Integer.toString(position));
}catch(IllegalStateException ise){
resp = null;
// handle error
setMessage("N/A","Error while opening mailbox: " + ise);
return;
}catch(IOException ioe){
resp = null;
// handle error
setMessage("N/A","Error opening connection: " + ioe);
return;
}catch(ParsePacketException ppe){
resp = null;
// handle error
setMessage("N/A","Error read reply from gmail: " + ppe);
return;
}
if (resp != null ){
// parse retrived info
// do UI updates
updateBoxModel(boxname, resp);
updateThreadsModel(boxname, resp);
}else{
// handle error
// frame.prgUsage.setString("Failed refresh mailbox!");
setMessage("N/A","Failed download from mailbox!");
}
}
};
try {
ThreadUtils.execute(t);
}
catch (InterruptedException ex) {
setMessage("Interrupted", "Connection interrupted");
logger.info("Connection interrupted");
}
}
}
protected void fetchConversation(final String id, final int position) {
if (!conn.isConnected()) {
// handel rrror
}
else {
logger.info("Fetching message: " + id);
// Refresh content from mailbox
Runnable t = new Runnable() {
public void run() {
GMResponse resp = null;
try {
resp = conn.request(GMConstants.GM_REQ_CONVERSATION, id,
Integer.toString(position));
}
catch (IllegalStateException ise) {
resp = null;
// handle error
setMessage("Failed download", "Error while opening conversation (" + id + ")");
logger.warning("" + ise);
return;
}
catch (IOException ioe) {
resp = null;
// handle error
setMessage("Failed download", "Error while opening conversation (" + id + ")");
logger.warning("Error opening connection: " + ioe);
return;
}
catch (ParsePacketException ppe) {
resp = null;
// handle error
setMessage("Failed download", "Error while opening conversation (" + id + ")");
logger.warning("Error read reply from gmail: " + ppe);
return;
}
if (resp != null && resp instanceof GMConversation) {
// parse retrived info
logger.info("conversation retrived: " + resp);
GMConversation resp2 = (GMConversation) resp;
convCtrl.setConversation(resp2);
convCtrl.setCurrentThreads(convCtrl.getConversation().getEntries().size() - 1);
convCtrl.scrollTop();
updateBoxModel(threadsModel.getMailboxName(), resp2);
// save conversation
try {
storage.put("conv." + resp2.getId(), resp2);
}
catch (IOException ex) {
logger.warning("Failed saving conversation ... " +
ex);
}
}else {
// handle error
setMessage("N/A", "Failed refresh mailbox!");
logger.info("Failed refresh mailbox!");
}
}
};
try {
ThreadUtils.execute(t);
}
catch (InterruptedException ex) {
setMessage("Interrupted", "Connection interrupted");
logger.info("Connection interrupted");
}
}
}
/**
*
* @param status int
*/
protected void setLogonStatus(final int status){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
systrayCtrl.setStatus(status);
mainCtrl.setLogonStatus(status);
}
});
}
private MouseListener getMouseListener(){
MouseListener l = new MouseListener(){
/**
* mouseClicked
*
* @param e MouseEvent
*/
public void mouseClicked(java.awt.event.MouseEvent e) {
/** if selected the tree **/
if (e.getSource() instanceof JTree ){
JTree tree = (JTree)e.getSource();
TreePath path = tree.getSelectionPath();
if (path == null){
// ignore clicks on empty portion of the tree
}else if (path.getPathCount() == 1){
// selected top node
logger.info("Select Root: " + path.getPathComponent(0));
}else if (path.getPathCount() == 2){
// selected a sub-node
// threadsModel.setCurrentBox(path.getPathComponent(1)+"");
logger.info("Select Note: " + path.getPathComponent(1) + " of "
+ path.getPathComponent(0));
try{
String parent = (String) path.getPathComponent(0);
// "Search-" + mainCtrl.getSearchString()
if (parent.equals("Search")){
BoxNode child = (BoxNode) path.getPathComponent(1);
threadsModel.setCurrentBox("Search-" + child.getName());
threadsModel.setMessageThreads("Search-" + child.getName(), (ArrayList) mailboxes.get("Search-" + child.getName()));
// if the mailbox is empty AND we are connected
// refresh
ArrayList mailboxThreads = threadsModel.getBox("Search-" + child.getName());
if (conn.isConnected() && mailboxThreads.size() == 0){
mainCtrl.setSearchString(child.getName());
searchMessage();
}
}else{
// show the mailbox in memory
BoxNode child = (BoxNode) path.getPathComponent(1);
threadsModel.setCurrentBox(child.getName());
threadsModel.setMessageThreads(child.getName(), (ArrayList) mailboxes.get(child.getName()));
// if the mailbox is empty AND we are connected
// refresh
ArrayList mailboxThreads = threadsModel.getBox(child.getName());
if (conn.isConnected() && mailboxThreads.size() == 0){
fetchBox(child.getName(), 0);
}
}
}catch(ClassCastException cce){
logger.info("Not a box node!");
}
}else{
logger.warning("Unexpected node selected: " + tree.getSelectionPath());
}
}
/** if selected the table **/
if (e.getSource() instanceof JTable ){
JTable table = (JTable)e.getSource();
// if it was left click
if (e.getClickCount() == 1 &&
e.getButton() == e.BUTTON1){
// set current thread and popup
ArrayList threads = threadsModel.getMessageThreads();
final GMThread thread = (GMThread)threads.get(table.getSelectedRow());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -