📄 gmailer4j.java
字号:
logger.info("Selected Thread ID: " + thread.getThreadID());
if (conn.isConnected()){
// open the message if it is downloaded
if ( storage.containsId("conv." + thread.getThreadID()) ){
// if threads existed in local storage, open it
Runnable r = new Runnable(){
public void run(){
try {
GMConversation resp = (GMConversation)storage.get("conv." + thread.getThreadID());
convCtrl.setConversation(resp);
convCtrl.setCurrentThreads(convCtrl.getConversation().getEntries().size() - 1);
convCtrl.scrollTop();
mainCtrl.setShowContent(true);
setMessage(null, "Local copy opened. ");
}
catch (IOException ex) {
Toolkit.getDefaultToolkit().beep();
setMessage(null, "Failed open message! " + ex.getCause());
}
}
};
try {
ThreadUtils.execute(r);
}
catch (InterruptedException ex) {
setMessage(null, "File not opened.");
}
mainCtrl.setShowContent(true);
}else{
// otherwise download it
fetchConversation(thread.getThreadID(), 0);
mainCtrl.setShowContent(true);
}
}else{
// if not connected, open local mailbox
logger.info("Not connected, open mailbox ... ");
Runnable r = new Runnable(){
public void run(){
try {
logger.info("Check if conversation downloaded :" + thread.getThreadID());
if ( storage.containsId("conv." + thread.getThreadID()) ){
logger.info("Opening conversaion: " + thread.getThreadID());
GMConversation resp = (GMConversation)storage.get("conv." + thread.getThreadID());
convCtrl.setConversation(resp);
convCtrl.setCurrentThreads(convCtrl.getConversation().getEntries().size() - 1);
convCtrl.scrollTop();
mainCtrl.setShowContent(true);
setMessage("Offline", "Local copy opened");
logger.info("Local copy opened");
}else{
Toolkit.getDefaultToolkit().beep();
setMessage("Offline", "Message not downloaded! Please logon to open mail.");
}
}
catch (IOException ex) {
Toolkit.getDefaultToolkit().beep();
setMessage("Offline", "Message not downloaded! Please logon to open mail.");
}
}
};
try {
ThreadUtils.execute(r);
}
catch (InterruptedException ex) {
setMessage("Offline", "File not opened.");
}
}
} else if (e.getClickCount() == 2 &&
e.getButton() == e.BUTTON1){
// if it was left double click
}
}
}
/**
* mouseEntered
*
* @param e MouseEvent
*/
public void mouseEntered(java.awt.event.MouseEvent e) {
}
/**
* mouseExited
*
* @param e MouseEvent
*/
public void mouseExited(java.awt.event.MouseEvent e) {
}
/**
* mousePressed
*
* @param e MouseEvent
*/
public void mousePressed(java.awt.event.MouseEvent e) {
}
/**
* mouseReleased
*
* @param e MouseEvent
*/
public void mouseReleased(java.awt.event.MouseEvent e) {
}
};
return l;
}
private ActionListener getActionListener(){
ActionListener l = new ActionListener(){
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand().intern();
logger.info("Action: " + cmd);
if (cmd == "Refresh") {
if (conn.isConnected()) {
String selectedBox = threadsModel.getMailboxName();
if (selectedBox == null) return;
// if selected mailbox is NOT a "search" entry
if (!selectedBox.startsWith("Search-")){
fetchBox(selectedBox, 0);
}else {
mainCtrl.setSearchString(selectedBox.substring(7, selectedBox.length()));
searchMessage();
}
}
/* Change UI flow
if (mainCtrl.getLayout() == 0){
mainCtrl.setLayout(1);
}else{
mainCtrl.setLayout(0);
} */
} else if (cmd == "Close View"){
mainCtrl.setShowContent(false);
} else if (cmd == "Exit") {
shutdown();
} else if (cmd == "About"){
// open about optionDialog
if (!aboutDlg.isVisible()) {
aboutDlg.pack();
JFrame frame = mainCtrl.getFrame();
Dimension dlgSize = aboutDlg.getPreferredSize();
Dimension frmSize = frame.getSize();
Point loc = frame.getLocation();
aboutDlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,
(frmSize.height - dlgSize.height) / 2 + loc.y);
aboutDlg.show();
aboutDlg.toFront();
}
else {
aboutDlg.toFront();
}
}else if (cmd == "Option"){
configOption.openDialog();
}else if (cmd == "Mailbox"){
// mailbox of the tree is clicked
mailboxModel.setCurrentRoot(0);
mainCtrl.expandTree();
}else if (cmd == "Label"){
// Label of the tree is clicked
mailboxModel.setCurrentRoot(1);
mainCtrl.expandTree();
}else if (cmd == "Search Results"){
// Search Results of the tree is clicked
mailboxModel.setCurrentRoot(2);
mainCtrl.expandTree();
}else if (cmd == "Login") {
connect();
}else if (cmd == "Logout") {
disconnect();
}else if (cmd == "LAF Apply"){
// Apply Look and Feel
// setting up LAF must do outside
updateLAF();
}else if (cmd == "Option OK"){
// pressed OK in option
// it already do something, but settingup LAD must do outside
updateLAF();
}else if (cmd == "Console"){
mainCtrl.showConsole();
}else if (cmd == "Search Message"){
searchMessage();
}
}
};
return l;
}
/**
* Use the search string in search panel text field to search on gmail
* Calling this function spawn a separate thread to do the job
*/
//{{{ Search Message
public void searchMessage(){
// open a swing worker to ...
SwingWorker searcher = new SwingWorker() {
protected Object construct() {
GMResponse resp = null;
// 1. Disable the search box, show "searching" msg
mainCtrl.setSearchEnabled(false);
gmsearch.put(mainCtrl.getSearchString(), new Integer(0));
mainCtrl.setSelectedMailboxButton(2);
mailboxModel.updateSearches(gmsearch);
mailboxModel.setCurrentRoot(MailboxTreeModel.LIST_SEARCH);
mainCtrl.expandTree();
// 2. Start the search
try{
logger.info("Start searching \"" + mainCtrl.getSearchString() + "\"");
setMessage("Searching ...", "Start searching \"" + mainCtrl.getSearchString() + "\"");
resp = conn.request(GMConstants.GM_REQ_QUERY, mainCtrl.getSearchString(), "0");
}catch(IOException ioe){
logger.info("Connot connect to server! " + ioe.getMessage());
}catch(ParsePacketException ppe){
logger.info("Error while parsing search message! " + ppe.getMessage());
}
return resp;
}
protected void finished() {
// 3. wait until search result return
// 4. enable the search box
GMResponse returnedResp = null;
mainCtrl.setSearchEnabled(true);
try{
returnedResp = (GMResponse) get();
if (returnedResp != null){
// 5. add results to "Search"
logger.info("Searched Result: returnedResp: " + returnedResp);
gmsearch.put(mainCtrl.getSearchString(), new Integer(returnedResp.getGMThreads().size()));
mailboxModel.updateSearches(gmsearch);
mailboxModel.setCurrentRoot(MailboxTreeModel.LIST_SEARCH);
mainCtrl.expandTree();
mailboxes.put("Search-" + mainCtrl.getSearchString(),
returnedResp.getGMThreads());
threadsModel.setMessageThreads("Search-" + mainCtrl.getSearchString(),
returnedResp.getGMThreads());
setMessage("Online", "Search completed, " + returnedResp.getGMThreads().size() + " found.");
try{
storage.put("search", gmsearch);
}catch(IOException ioe){
logger.warning("Error saving searches ... " + ioe);
}
}else{
setMessage("Online", "Search failed");
}
}catch(InterruptedException ie){
// 6. notify search failure
logger.warning("Download message failed");
setMessage("Online", "Search interrupted. ");
}catch(java.lang.reflect.InvocationTargetException ite){
// 6. notify search failure
logger.warning("Download message failed");
setMessage("Online", "Search failed: " + ite.getCause());
}catch(RuntimeException cce){
logger.warning("RuntimeException during download.");
setMessage("Online", "Search failed: " + cce);
}
}
};
searcher.start();
}
//}}}
private void updateLAF(){
String lookandfeel = configOption.getSelectedLookAndFeelClassName();
String theme = configOption.getSelectedThemeClassName();
if (lookandfeel == null){
logger.info("No look and feel selected");
return;
}
if (lookandfeel.equals(UIManager.getLookAndFeel().getClass().getName()) &&
theme == null){
logger.info("Same look and feel selected, no change needed: " + lookandfeel + " <-> " + UIManager.getLookAndFeel().getClass().getName());
return;
}
try{
LookAndFeel selectedLaf = (LookAndFeel) Class.forName(lookandfeel).
newInstance();
if (selectedLaf instanceof PlasticLookAndFeel) {
PlasticLookAndFeel.setMyCurrentTheme(settings.getSelectedTheme());
PlasticLookAndFeel.setTabStyle(settings.getPlasticTabStyle());
PlasticLookAndFeel.setHighContrastFocusColorsEnabled(
settings.isPlasticHighContrastFocusEnabled());
}
else if (selectedLaf.getClass() == MetalLookAndFeel.class) {
MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
}
}catch(Exception e){}
configOption.applyLAF();
SwingUtilities.updateComponentTreeUI(aboutDlg);
mainCtrl.updateComponentTreeUI();
configOption.updateComponentTreeUI();
}
public static void main(String[] args) {
GMailer4j main = new GMailer4j();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -