Author: dbkr
Date: 2006-07-29 19:38:47 +0000 (Sat, 29 Jul 2006)
New Revision: 9815

Modified:
   trunk/apps/Freemail/src/freemail/Freemail.java
   trunk/apps/Freemail/src/freemail/InboundContact.java
   trunk/apps/Freemail/src/freemail/RTSFetcher.java
   trunk/apps/Freemail/src/freemail/RTSLog.java
   trunk/apps/Freemail/src/freemail/SlotManager.java
Log:
Change RTS polling to use the magical SlotManager class so it does 
back-checking. That ought to be the last of the backwards-incompatible changes. 
At least for the time being!


Modified: trunk/apps/Freemail/src/freemail/Freemail.java
===================================================================
--- trunk/apps/Freemail/src/freemail/Freemail.java      2006-07-29 17:04:32 UTC 
(rev 9814)
+++ trunk/apps/Freemail/src/freemail/Freemail.java      2006-07-29 19:38:47 UTC 
(rev 9815)
@@ -83,8 +83,8 @@
                if (action.equals("--newaccount")) {
                        try {
                                AccountManager.Create(account);
-                               // for now
-                               AccountManager.setupNIM(account);
+                               // by default, we'll not setup NIM now real 
mode works
+                               //AccountManager.setupNIM(account);
                                System.out.println("Account created for 
"+account+". You may now set a password with --passwd <password>");
                                //System.out.println("For the time being, you 
address is "+account+"@nim.freemail");
                        } catch (IOException ioe) {

Modified: trunk/apps/Freemail/src/freemail/InboundContact.java
===================================================================
--- trunk/apps/Freemail/src/freemail/InboundContact.java        2006-07-29 
17:04:32 UTC (rev 9814)
+++ trunk/apps/Freemail/src/freemail/InboundContact.java        2006-07-29 
19:38:47 UTC (rev 9815)
@@ -134,7 +134,6 @@
        }

        public void saveSlots(String s, Object userdata) {
-               System.out.println("putting "+s+" into slots");
                this.ibct_props.put("slots", s);
        }


Modified: trunk/apps/Freemail/src/freemail/RTSFetcher.java
===================================================================
--- trunk/apps/Freemail/src/freemail/RTSFetcher.java    2006-07-29 17:04:32 UTC 
(rev 9814)
+++ trunk/apps/Freemail/src/freemail/RTSFetcher.java    2006-07-29 19:38:47 UTC 
(rev 9815)
@@ -31,7 +31,7 @@
 import freenet.support.io.LineReadingInputStream;
 import freenet.support.io.TooLongException;

-public class RTSFetcher {
+public class RTSFetcher implements SlotSaveCallback {
        private String rtskey;
        private File contact_dir;
        private static final int POLL_AHEAD = 3;
@@ -109,6 +109,11 @@
                log.pruneBefore(cal.getTime());
        }

+       private class MySlotSaveData {
+               RTSLog log;
+               String date;
+       }
+       
        private void fetch_day(RTSLog log, String date) {
                HighLevelFCPClient fcpcli;
                fcpcli = new HighLevelFCPClient();
@@ -116,31 +121,40 @@
                String keybase;
                keybase = this.rtskey + date + "-";

-               int startnum = log.getNextId(date);
+               MySlotSaveData cbdata = new MySlotSaveData();
+               cbdata.log = log;
+               cbdata.date = date;

-               for (int i = startnum; i < startnum + POLL_AHEAD; i++) {
-                       System.out.println("trying to fetch "+keybase+i);
+               NaturalSlotManager sm = new NaturalSlotManager(this, cbdata, 
log.getSlots(date));
+               
+               int slot;
+               while ( (slot = sm.getNextSlotNat()) > 0) {
+                       System.out.println("trying to fetch "+keybase+slot);

-                       File result = fcpcli.fetch(keybase+i);
+                       File result = fcpcli.fetch(keybase+slot);

                        if (result != null) {
-                               System.out.println(keybase+i+": got RTS!");
+                               System.out.println(keybase+slot+": got RTS!");

                                File rts_dest = new File(this.contact_dir, 
RTS_UNPROC_PREFIX + "-" + log.getAndIncUnprocNextId()+":0");

                                // stick this message in the RTS 'inbox'
                                if (result.renameTo(rts_dest)) {
                                        // provided that worked, we can move on 
to the next RTS message
-                                       log.incNextId(date);
+                                       sm.slotUsed();
                                }
                        } else {
-                               System.out.println(keybase+i+": no RTS.");
+                               System.out.println(keybase+slot+": no RTS.");
                        }
                }
        }

+       public void saveSlots(String slots, Object userdata) {
+               MySlotSaveData cbdata = (MySlotSaveData) userdata;
+               
+               cbdata.log.putSlots(cbdata.date, slots);
+       }

-       
        private boolean handle_rts(File rtsmessage) {
                // sanity check!
                if (!rtsmessage.exists()) return false;

Modified: trunk/apps/Freemail/src/freemail/RTSLog.java
===================================================================
--- trunk/apps/Freemail/src/freemail/RTSLog.java        2006-07-29 17:04:32 UTC 
(rev 9814)
+++ trunk/apps/Freemail/src/freemail/RTSLog.java        2006-07-29 19:38:47 UTC 
(rev 9815)
@@ -12,15 +12,21 @@

 public class RTSLog {
        PropsFile logfile;
-       private static String NEXTID = "nextid-";
+       private static String SLOTS = "slots-";
        private static String PASSES = "passes-";
        private static String UNPROC_NEXTID = "unproc-nextid";

        public RTSLog(File f) {
                this.logfile = new PropsFile(f);
+               if (!this.logfile.exists()) {
+                       String birth = DateStringFactory.getOffsetKeyString(0);
+                       this.logfile.put("birth", birth);
+               }
        }

        public int getPasses(String day) {
+               if (this.isBeforeBirth(day)) return Integer.MAX_VALUE;
+               
                String val = this.logfile.get(PASSES+day);

                if (val == null)
@@ -29,6 +35,22 @@
                        return Integer.parseInt(val);
        }

+       private boolean isBeforeBirth(String daystr) {
+               Date day = DateStringFactory.DateFromKeyString(daystr);
+               String birth_s = this.logfile.get("birth");
+               Date birth;
+               if (birth_s == null) {
+                       birth = new Date();
+                       birth_s = DateStringFactory.getOffsetKeyString(0);
+                       this.logfile.put("birth", birth_s);
+               } else {
+                       birth = DateStringFactory.DateFromKeyString(birth_s);
+               }
+               
+               if (day.before(birth)) return true;
+               return false;
+       }
+       
        public void incPasses(String day) {
                int passes = this.getPasses(day);
                passes++;
@@ -47,8 +69,8 @@
                        String datestr;
                        if (cur.startsWith(PASSES)) {
                                datestr = cur.substring(PASSES.length());
-                       } else if (cur.startsWith(NEXTID)) {
-                               datestr = cur.substring(NEXTID.length());
+                       } else if (cur.startsWith(SLOTS)) {
+                               datestr = cur.substring(SLOTS.length());
                        } else {
                                continue;
                        }
@@ -70,17 +92,17 @@
                }
        }

-       public int getNextId(String day) {
-               String nid = this.logfile.get(NEXTID+day);
-               if (nid == null) {
-                       return 1;
+       public String getSlots(String day) {
+               String slots = this.logfile.get(SLOTS+day);
+               if (slots == null) {
+                       return "1";
                } else {
-                       return Integer.parseInt(nid);
+                       return slots;
                }
        }

-       public void incNextId(String day) {
-               this.logfile.put(NEXTID+day, 
Integer.toString(this.getNextId(day) + 1));
+       public void putSlots(String day, String slots) {
+               this.logfile.put(SLOTS+day, slots);
        }

        public int getAndIncUnprocNextId() {

Modified: trunk/apps/Freemail/src/freemail/SlotManager.java
===================================================================
--- trunk/apps/Freemail/src/freemail/SlotManager.java   2006-07-29 17:04:32 UTC 
(rev 9814)
+++ trunk/apps/Freemail/src/freemail/SlotManager.java   2006-07-29 19:38:47 UTC 
(rev 9815)
@@ -123,10 +123,10 @@
                                // we're into the unused slots. make one up.
                                Slot s = (Slot)this.slots.lastElement();
                                int i;
+                               retval = s.slot;
                                for (i = this.slots.size(); i <= 
this.nextSlotNum; i++) {
-                                       s.slot = this.incSlot(s.slot);
+                                       retval = this.incSlot(retval);
                                }
-                               retval = s.slot;
                        } else {
                                // we're looking at an unused slot
                                Slot s = (Slot) 
this.slots.get(this.nextSlotNum);


Reply via email to