1 21 22 package org.armedbear.j.mail; 23 24 import org.armedbear.j.Buffer; 25 import org.armedbear.j.BufferIterator; 26 import org.armedbear.j.Editor; 27 import org.armedbear.j.IdleThreadTask; 28 29 public final class RewriteMailboxesTask extends IdleThreadTask 30 { 31 private static final long REWRITE_MAILBOXES_IDLE = 5000; 33 private static RewriteMailboxesTask instance; 34 35 private RewriteMailboxesTask() 36 { 37 setIdle(REWRITE_MAILBOXES_IDLE); 38 setRunnable(runnable); 39 } 40 41 public static synchronized RewriteMailboxesTask getInstance() 42 { 43 if (instance == null) 44 instance = new RewriteMailboxesTask(); 45 return instance; 46 } 47 48 private final Runnable runnable = new Runnable () { 49 private long lastRun; 50 51 public void run() 52 { 53 if (!Editor.isMailEnabled()) 54 return; 55 long now = System.currentTimeMillis(); 56 if (lastRun == 0 || now - lastRun > REWRITE_MAILBOXES_IDLE) { 57 synchronized (Editor.getBufferList()) { 58 for (BufferIterator it = new BufferIterator(); it.hasNext();) { 59 Buffer buf = it.nextBuffer(); 60 if (buf instanceof PopMailbox) { 61 final PopMailbox mb = (PopMailbox) buf; 62 if (mb.isDirty() && mb.isIdle(300, 60)) { 65 if (mb.lock()) { 66 if (mb.isDirty() && mb.isIdle(300, 60)) { 68 mb.setBusy(true); 69 mb.setWaitCursor(); 70 Runnable r = new Runnable () { 71 public void run() 72 { 73 mb.rewriteMailbox(false); 74 mb.setBusy(false); 75 mb.unlock(); 76 mb.setDefaultCursor(); 77 } 78 }; 79 Thread t = new Thread (r); 80 t.setPriority(Thread.MIN_PRIORITY); 81 t.start(); 82 } else 83 mb.unlock(); 84 } 85 } 86 } 87 } 88 } 89 lastRun = now; 90 } 91 } 92 }; 93 } 94 | Popular Tags |