⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmailer4j.java

📁 Gmail API for Java 一个gmail信箱的客户端
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                 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 + -