Changeset ca312f5


Ignore:
Timestamp:
Mar 17, 2018 1:43:49 PM (2 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
841bb755
Parents:
ef692ef
Message:

SusiMail?: Move sorters to own class

Location:
apps/susimail/src/src/i2p/susi/webmail
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    ref692ef rca312f5  
    3636import i2p.susi.util.OutputStreamBuffer;
    3737import i2p.susi.webmail.Messages;
     38import static i2p.susi.webmail.Sorters.*;
    3839import i2p.susi.webmail.encoding.Encoding;
    3940import i2p.susi.webmail.encoding.EncodingException;
     
    252253        }
    253254
    254         /**
    255          * Base for the various sorters
    256          *
    257          * @since 0.9.13
    258          */
    259         private abstract static class SorterBase implements Comparator<String>, Serializable {
    260                 private final MailCache mailCache;
    261                
    262                 /**
    263                  * Set MailCache object, where to get Mails from
    264                  * @param mailCache
    265                  */
    266                 protected SorterBase( MailCache mailCache )
    267                 {
    268                         this.mailCache = mailCache;
    269                 }
    270                
    271                 /**
    272                  *  Gets mail from the cache, checks for null, then compares
    273                  */
    274                 public int compare(String arg0, String arg1) {
    275                         Mail a = mailCache.getMail( arg0, MailCache.FetchMode.CACHE_ONLY );
    276                         Mail b = mailCache.getMail( arg1, MailCache.FetchMode.CACHE_ONLY );
    277                         if (a == null)
    278                                 return (b == null) ? 0 : 1;
    279                         if (b == null)
    280                                 return -1;
    281                         int rv = compare(a, b);
    282                         if (rv != 0)
    283                                 return rv;
    284                         return fallbackCompare(a, b);
    285                 }               
    286 
    287                 /**
    288                  * @param a non-null
    289                  * @param b non-null
    290                  */
    291                 protected abstract int compare(Mail a, Mail b);
    292 
    293                 /**
    294                  * @param a non-null
    295                  * @param b non-null
    296                  */
    297                 private int fallbackCompare(Mail a, Mail b) {
    298                         return DateSorter.scompare(a, b);
    299                 }
    300         }
    301 
    302         /**
    303          * sorts Mail objects by sender field
    304          *
    305          * @author susi
    306          */
    307         private static class SenderSorter extends SorterBase {
    308 
    309                 private final Comparator<Object> collator = Collator.getInstance();
    310 
    311                 public SenderSorter( MailCache mailCache )
    312                 {
    313                         super(mailCache);
    314                 }
    315                
    316                 protected int compare(Mail a, Mail b) {
    317                         String as = a.sender.replace("\"", "").replace("<", "").replace(">", "");
    318                         String bs = b.sender.replace("\"", "").replace("<", "").replace(">", "");
    319                         return collator.compare(as, bs);
    320                 }               
    321         }
    322 
    323         /**
    324          * sorts Mail objects by subject field
    325          * @author susi
    326          */
    327         private static class SubjectSorter extends SorterBase {
    328                 private static final String xre = _t("Re:").toLowerCase(Locale.US);
    329                 private static final String xfwd = _t("Fwd:").toLowerCase(Locale.US);
    330                 private final Comparator<Object> collator = Collator.getInstance();
    331 
    332                 public SubjectSorter( MailCache mailCache )
    333                 {
    334                         super(mailCache);
    335                 }
    336                
    337                 protected int compare(Mail a, Mail b) {
    338                         String as = a.subject;
    339                         String bs = b.subject;
    340                         String aslc = as.toLowerCase(Locale.US);
    341                         String bslc = bs.toLowerCase(Locale.US);
    342                         if (aslc.startsWith("re:") || aslc.startsWith("fw:")) {
    343                                 as = as.substring(3).trim();
    344                         } else if (aslc.startsWith("fwd:")) {
    345                                 as = as.substring(4).trim();
    346                         } else {
    347                                 if (aslc.startsWith(xre)) {
    348                                         as = as.substring(xre.length()).trim();
    349                                 } else {
    350                                         if (aslc.startsWith(xfwd))
    351                                                 as = as.substring(xfwd.length()).trim();
    352                                 }
    353                         }
    354                         if (bslc.startsWith("re:") || bslc.startsWith("fw:")) {
    355                                 bs = bs.substring(3).trim();
    356                         } else if (bslc.startsWith("fwd:")) {
    357                                 bs = bs.substring(4).trim();
    358                         } else {
    359                                 if (bslc.startsWith(xre)) {
    360                                         bs = bs.substring(xre.length()).trim();
    361                                 } else {
    362                                         if (bslc.startsWith(xfwd))
    363                                                 bs = bs.substring(xfwd.length()).trim();
    364                                 }
    365                         }
    366                         return collator.compare(as, bs);
    367                 }               
    368         }
    369 
    370         /**
    371          * sorts Mail objects by date field
    372          * @author susi
    373          */
    374         private static class DateSorter extends SorterBase {
    375 
    376                 public DateSorter( MailCache mailCache )
    377                 {
    378                         super(mailCache);
    379                 }
    380                
    381                 protected int compare(Mail a, Mail b) {
    382                         return scompare(a, b);
    383                 }
    384 
    385                 /**
    386                  * Use as fallback in other sorters
    387                  * @param a non-null
    388                  * @param b non-null
    389                  */
    390                 public static int scompare(Mail a, Mail b) {
    391                         return a.date != null ? ( b.date != null ? a.date.compareTo( b.date ) : -1 ) : ( b.date != null ? 1 : 0 );
    392                 }               
    393         }
    394 
    395         /**
    396          * sorts Mail objects by message size
    397          * @author susi
    398          */
    399         private static class SizeSorter extends SorterBase {
    400 
    401                 public SizeSorter( MailCache mailCache )
    402                 {
    403                         super(mailCache);
    404                 }
    405                
    406                 protected int compare(Mail a, Mail b) {
    407                         long as = a.getSize();
    408                         long bs = b.getSize();
    409                         if (as > bs)
    410                                 return 1;
    411                         if (as < bs)
    412                                 return -1;
    413                         return 0;
    414                 }               
    415         }
    416255       
    417256        /**
Note: See TracChangeset for help on using the changeset viewer.