Author: xor
Date: 2008-11-14 00:35:15 +0000 (Fri, 14 Nov 2008)
New Revision: 23548
Modified:
trunk/plugins/WoT/introduction/IntroductionPuzzle.java
Log:
- Provide boolean to store whether a puzzle was solved, keep solved puzzles in
pool until they expire: We need to store them at least for 1 day for being able
to check which index value is free.
- Add function for getting a free index value
- Change constructor to take the mDateOfInsertion as parameter instead of
setting it to current time: this prevents the rare problem that getFreeIndex()
is called before midnight and the puzzle is contructed after midgnight.
Modified: trunk/plugins/WoT/introduction/IntroductionPuzzle.java
===================================================================
--- trunk/plugins/WoT/introduction/IntroductionPuzzle.java 2008-11-13
23:53:26 UTC (rev 23547)
+++ trunk/plugins/WoT/introduction/IntroductionPuzzle.java 2008-11-14
00:35:15 UTC (rev 23548)
@@ -80,6 +80,12 @@
/* Supplied at creation time or by user: */
private final String mSolution;
+
+ /**
+ * Set to true after it was used for introducing a new identity. We
keep used puzzles in the database until they expire for the purpose of
+ * being able to figure out free index values of new puzzles. Storing a
few KiB for some days will not hurt.
+ */
+ private boolean iWasSolved = false;
/* FIXME: wire this in */
@@ -103,7 +109,7 @@
mMimeType = newMimeType;
mData = newData;
mSolution = null;
- mDateOfInsertion = myDateOfInsertion;
+ mDateOfInsertion = new Date(myDateOfInsertion.getYear(),
myDateOfInsertion.getMonth(), myDateOfInsertion.getDay());
mValidUntilTime = myValidUntilTime;
mIndex = myIndex;
}
@@ -113,15 +119,15 @@
* @param newType
* @param newData
*/
- public IntroductionPuzzle(Identity newInserter, String newMimeType,
byte[] newData, String newSolution, int myIndex) {
+ public IntroductionPuzzle(Identity newInserter, String newMimeType,
byte[] newData, String newSolution, Date newDateOfInsertion, int myIndex) {
assert( newInserter != null && newMimeType != null &&
!newMimeType.equals("") && newData!=null && newData.length!=0 &&
newSolution!=null &&
newSolution.length()>=MINIMAL_SOLUTION_LENGTH && myIndex >= 0);
mInserter = newInserter;
mMimeType = newMimeType;
mData = newData;
mSolution = newSolution;
- mDateOfInsertion = new Date(); /* FIXME: get it in UTC */
- mValidUntilTime = System.currentTimeMillis() +
IntroductionServer.PUZZLE_INVALID_AFTER_DAYS * 24 * 60 * 60 * 1000; /* FIXME:
get it in UTC */
+ mDateOfInsertion = new Date(newDateOfInsertion.getYear(),
newDateOfInsertion.getMonth(), newDateOfInsertion.getDay());
+ mValidUntilTime = mDateOfInsertion.getTime() +
IntroductionServer.PUZZLE_INVALID_AFTER_DAYS * 24 * 60 * 60 * 1000; /* FIXME:
get it in UTC */
mIndex = myIndex;
}
@@ -129,6 +135,7 @@
Query q = db.query();
q.constrain(IntroductionPuzzle.class);
q.descend("mInserter").constrain(i);
+ q.descend("iWasSolved").constrain(new Boolean(false));
return q.execute();
}
@@ -150,6 +157,17 @@
return (result.hasNext() ? result.next() : null);
}
+ public static int getFreeIndex(ObjectContainer db, OwnIdentity id, Date
date) {
+ Query q = db.query();
+ q.constrain(IntroductionPuzzle.class);
+ q.descend("mInserter").descend("id").constrain(id.getId());
+ q.descend("mDateOfInsertion").constrain(new
Date(date.getYear(), date.getMonth(), date.getDay()));
+ q.descend("mIndex").orderDescending();
+ ObjectSet<IntroductionPuzzle> result = q.execute();
+
+ return result.size() > 0 ? result.next().getIndex()+1 : 0;
+ }
+
public String getMimeType() {
return mMimeType;
}
@@ -213,6 +231,10 @@
return mSolution;
}
+ public void setSolved() {
+ iWasSolved = true;
+ }
+
public Identity getInserter() {
return mInserter;
}
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs