Ticket #132: LogicMail-subscribedfolders-only.patch

File LogicMail-subscribedfolders-only.patch, 6.7 KB (added by cls, 3 years ago)

Add "Subscribed folders only" option for imap clients

  • LogicMail/src/org/logicprobe/LogicMail/conf/ImapConfig.java

    diff -urN --exclude '*.svn*' LogicMail/LogicMail-1.0/LogicMail/src/org/logicprobe/LogicMail/conf/ImapConfig.java workspace/LogicMail/src/org/logicprobe/LogicMail/conf/ImapConfig.java
    old new  
    4044public class ImapConfig extends AccountConfig { 
    4145    private String sentFolder; 
    4246    private String folderPrefix; 
     47    private boolean onlySubscribedFolders; 
    4348     
    4449    public ImapConfig() { 
    4550        super(); 
     
    5459        setServerPort(143); 
    5560        sentFolder = null; 
    5661        folderPrefix = null; 
     62        onlySubscribedFolders = false; 
    5763    }     
    5864 
    5965    public String toString() { 
     
    7783        this.folderPrefix = folderPrefix; 
    7884    } 
    7985 
     86    public boolean getOnlySubscribedFolders() { 
     87        return onlySubscribedFolders; 
     88    } 
     89 
     90    public void setOnlySubscribedFolders(boolean value) { 
     91        this.onlySubscribedFolders = value; 
     92    } 
     93 
    8094    public void writeConfigItems(SerializableHashtable table) { 
    8195        super.writeConfigItems(table); 
    8296        if(sentFolder != null) { 
     
    92106        else { 
    93107            table.put("account_imap_folderPrefix", ""); 
    94108        } 
     109 
     110        table.put("account_imap_onlySubscribedFolders", new Integer(onlySubscribedFolders ? 1 : 0)); 
    95111    } 
    96112     
    97113    public void readConfigItems(SerializableHashtable table) { 
     
    113129                folderPrefix = null; 
    114130            } 
    115131        } 
     132 
     133        value = table.get("account_imap_onlySubscribedFolders"); 
     134        if(value != null && value instanceof Integer) { 
     135            onlySubscribedFolders = (((Integer)value).intValue() == 1); 
     136        } 
    116137    } 
    117138} 
  • LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java

    diff -urN --exclude '*.svn*' LogicMail/LogicMail-1.0/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java workspace/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapClient.java
    old new  
    5963    private ImapProtocol imapProtocol; 
    6064    private String username; 
    6165    private String password; 
     66    private boolean onlySubscribedFolders; 
    6267    private boolean openStarted; 
    6368 
    6469    /** 
     
    95100        imapProtocol = new ImapProtocol(connection); 
    96101        username = acctCfg.getServerUser(); 
    97102        password = acctCfg.getServerPass(); 
     103        onlySubscribedFolders = acctCfg.getOnlySubscribedFolders(); 
    98104        openStarted = false; 
    99105    } 
    100106 
     
    134140            // so the folder delim will be aquired differently. 
    135141            if(nsPersonal == null) { 
    136142                // Discover folder delim 
    137                 Vector resp = imapProtocol.executeList("", ""); 
     143                Vector resp = imapProtocol.executeList("", "", false); 
    138144                if(resp.size() > 0) { 
    139145                    folderDelim = ((ImapProtocol.ListResponse)resp.elementAt(0)).delim; 
    140146                } 
     
    237243 
    238244    private void getFolderTreeImpl(FolderTreeItem baseFolder, int depth, boolean childrenExtension) throws IOException, MailException { 
    239245        Vector respList; 
     246 
    240247        if(depth == 0) { 
    241             respList = imapProtocol.executeList(baseFolder.getPath(), "%"); 
     248            respList = imapProtocol.executeList(baseFolder.getPath(), "%", onlySubscribedFolders); 
    242249        } 
    243250        else { 
    244             respList = imapProtocol.executeList(baseFolder.getPath() + baseFolder.getDelim(), "%"); 
     251            respList = imapProtocol.executeList(baseFolder.getPath() + baseFolder.getDelim(), "%", onlySubscribedFolders); 
    245252        } 
    246253 
    247254        int size = respList.size(); 
  • LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapProtocol.java

    diff -urN --exclude '*.svn*' LogicMail/LogicMail-1.0/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapProtocol.java workspace/LogicMail/src/org/logicprobe/LogicMail/mail/imap/ImapProtocol.java
    old new  
    771771     * @param mboxName Mailbox name or wildcards (i.e. "%") 
    772772     * @return Vector of ListResponse objects 
    773773     */ 
    774     public Vector executeList(String refName, String mboxName) throws IOException, MailException { 
     774    public Vector executeList(String refName, String mboxName, boolean onlySubscribedFolders) throws IOException, MailException { 
    775775        if(EventLogger.getMinimumLevel() >= EventLogger.DEBUG_INFO) { 
    776776            EventLogger.logEvent( 
    777777            AppInfo.GUID, 
     
    780780        } 
    781781         
    782782        String[] results; 
    783         results = execute("LIST", "\""+StringParser.addEscapedChars(refName)+"\" \""+StringParser.addEscapedChars(mboxName)+"\""); 
    784          
     783        String cmd = "LIST"; 
     784        if (onlySubscribedFolders) { 
     785                cmd = "LSUB"; 
     786        } 
     787        results = execute(cmd, "\""+StringParser.addEscapedChars(refName)+"\" \""+StringParser.addEscapedChars(mboxName)+"\""); 
     788 
    785789        Vector retVec = new Vector(results.length); 
    786790        ListResponse response; 
    787791        String temp; 
  • LogicMail/src/org/logicprobe/LogicMail/ui/AcctCfgScreen.java

    diff -urN --exclude '*.svn*' LogicMail/LogicMail-1.0/LogicMail/src/org/logicprobe/LogicMail/ui/AcctCfgScreen.java workspace/LogicMail/src/org/logicprobe/LogicMail/ui/AcctCfgScreen.java
    old new  
    6868    private ObjectChoiceField outgoingServerField; 
    6969    private ObjectChoiceField sentFolderChoiceField; 
    7070    private BasicEditField folderPrefixField; 
     71    private CheckboxField onlySubscribedFoldersField; 
    7172    private ButtonField saveButton; 
    7273     
    7374    private boolean acctSaved; 
     
    214215             
    215216            folderPrefixField = new BasicEditField("Folder prefix: ", imapConfig.getFolderPrefix()); 
    216217            add(folderPrefixField); 
     218 
     219            onlySubscribedFoldersField = new CheckboxField("Subscribed folders only", imapConfig.getOnlySubscribedFolders()); 
     220            add(onlySubscribedFoldersField); 
    217221        } 
    218222         
    219223        add(new SeparatorField()); 
     
    346350            else { 
    347351                imapConfig.setFolderPrefix(folderPrefix); 
    348352            } 
     353 
     354            imapConfig.setOnlySubscribedFolders(onlySubscribedFoldersField.getChecked()); 
    349355        } 
    350356         
    351357        acctSaved = true;