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);