Please keep reindents separate from core changes if at all possible. Even if that means committing code with bizarre indenting and fixing it in the next commit.
On Tuesday 20 November 2007 19:15, nextgens at freenetproject.org wrote: > Author: nextgens > Date: 2007-11-20 19:15:58 +0000 (Tue, 20 Nov 2007) > New Revision: 15881 > > Modified: > trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java > trunk/freenet/src/freenet/clients/http/StartupToadletServer.java > trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java > trunk/freenet/src/freenet/clients/http/bookmark/Bookmark.java > trunk/freenet/src/freenet/clients/http/bookmark/BookmarkCategory.java > trunk/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java > trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java > trunk/freenet/src/freenet/node/Node.java > trunk/freenet/src/freenet/node/NodeClientCore.java > Log: > BookmarkToadlet: Save bookmarks in a different file so that they don't get clobbered for no reason anymore. > > THE MIGRATION TOOL DOESN'T WORK... yet. > > Modified: trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java 2007-11-20 19:15:58 UTC (rev 15881) > @@ -129,7 +129,7 @@ > actions.addChild("a", "href", "?action=paste&bookmark=/").addChild("img", new String[] {"src", "alt", "title"}, new String[] {"/static/icon/paste.png", paste, paste}); > > root.addChild(actions); > - addCategoryToList(bookmarkManager.getMainCategory(), "/", root.addChild("ul")); > + addCategoryToList(BookmarkManager.MAIN_CATEGORY, "/", root.addChild("ul")); > > return bookmarks; > } > > Modified: trunk/freenet/src/freenet/clients/http/StartupToadletServer.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/StartupToadletServer.java 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/StartupToadletServer.java 2007-11-20 19:15:58 UTC (rev 15881) > @@ -118,13 +118,12 @@ > * Create a SimpleToadletServer, using the settings from the SubConfig (the fproxy.* > * config). > */ > - public StartupToadletServer(Executor executor, PersistentConfig conf) { > + public StartupToadletServer(Executor executor, SimpleFieldSet config) { > this.executor = executor; > formPassword = String.valueOf(this.getClass().hashCode()); > > // hack ... we don't have the config framework yet > try { > - SimpleFieldSet config = conf.getSimpleFieldSet(); > port = config.getInt("fproxy.port"); > bindTo = config.get("fproxy.bindTo"); > // Yeah, only FullAccess hosts here, it's on purpose. > > Modified: trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java > 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java > 2007-11-20 19:15:58 UTC (rev 15881) > @@ -540,7 +540,8 @@ > > HTMLNode bookmarkBoxContent = bookmarkBox.addChild("div", "class", "infobox-content"); > HTMLNode bookmarksList = bookmarkBoxContent.addChild("ul", "id", "bookmarks"); > - addCategoryToList(bookmarkManager.getMainCategory(), > bookmarksList); > + addCategoryToList(BookmarkManager.PROTECTED_CATEGORY, > bookmarksList); > + addCategoryToList(BookmarkManager.MAIN_CATEGORY, bookmarksList); > > // Fetch-a-key box > HTMLNode fetchKeyBox = contentNode.addChild(ctx.getPageMaker().getInfobox("infobox-normal", l10n("fetchKeyLabel"))); > > Modified: trunk/freenet/src/freenet/clients/http/bookmark/Bookmark.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/bookmark/Bookmark.java > 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/bookmark/Bookmark.java > 2007-11-20 19:15:58 UTC (rev 15881) > @@ -33,6 +33,7 @@ > if(o == this) return true; > if(o instanceof Bookmark) { > Bookmark b = (Bookmark) o; > + if(b.name == null || b.desc == null) return false; > if(!b.name.equals(name)) return false; > // Compensate for nulls > > if(!String.valueOf(b.desc).equals(String.valueOf(desc))) return false; > > Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkCategory.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkCategory.java 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkCategory.java 2007-11-20 19:15:58 UTC (rev 15881) > @@ -1,5 +1,6 @@ > package freenet.clients.http.bookmark; > > +import freenet.support.SimpleFieldSet; > import java.util.Vector; > > import freenet.support.StringArray; > @@ -18,6 +19,7 @@ > } > > protected synchronized Bookmark addBookmark(Bookmark b) { > + if(b == null) return null; > int x = bookmarks.indexOf(b); > if(x >= 0) return (Bookmark) bookmarks.get(x); > bookmarks.add(b); > @@ -118,6 +120,26 @@ > > } > > + public SimpleFieldSet toSimpleFieldSet() { > + SimpleFieldSet sfs = new SimpleFieldSet(true); > + > + BookmarkItems items = getItems(); > + for (int i = 0; i < items.size(); i++) { > + BookmarkItem item = items.get(i); > + sfs.putSingle(String.valueOf(i), item.toString()); > + } > + > + BookmarkCategories subCategories = getSubCategories(); > + for (int i = 0; i < subCategories.size(); i++) { > + BookmarkCategory category = subCategories.get(i); > + SimpleFieldSet toPut = category.toSimpleFieldSet(); > + if("".equals(category.name) || toPut.isEmpty()) continue; > + sfs.put(category.name, toPut); > + } > + > + return sfs; > + } > + > public void setPrivate(boolean bool) { > privateBookmark = bool; > > > Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkItem.java 2007-11-20 19:15:58 UTC (rev 15881) > @@ -10,9 +10,11 @@ > import freenet.node.useralerts.AbstractUserAlert; > import freenet.node.useralerts.UserAlert; > import freenet.node.useralerts.UserAlertManager; > +import freenet.support.Fields; > import freenet.support.HTMLEncoder; > import freenet.support.HTMLNode; > > +import freenet.support.SimpleFieldSet; > import java.net.MalformedURLException; > > public class BookmarkItem extends Bookmark { > @@ -42,6 +44,16 @@ > this.alerts = uam; > alert = new BookmarkUpdatedUserAlert(); > } > + > + public BookmarkItem(String line, UserAlertManager uam) throws MalformedURLException { > + String[] result = line.split("###"); > + this.name = result[0]; > + this.desc = result[1]; > + this.hasAnActivelink = Fields.stringToBool(result[2], false); > + this.key = new FreenetURI(result[3]); > + this.alerts = uam; > + this.alert = new BookmarkUpdatedUserAlert(); > + } > > private class BookmarkUpdatedUserAlert extends AbstractUserAlert { > > @@ -137,7 +149,7 @@ > } > > public String toString() { > - return this.name + '=' + (hasAnActivelink ? "|=" : "=") + this.key.toString(); > + return this.name + "###" + this.desc + "###" + > this.hasAnActivelink + "###" + this.key.toString(); > } > > public synchronized void setEdition(long ed, NodeClientCore node) { > > Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java > =================================================================== > --- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java 2007-11-20 19:15:58 UTC (rev 15881) > @@ -1,7 +1,6 @@ > /* This code is part of Freenet. It is distributed under the GNU General > * Public License, version 2 (or at your option any later version). See > * http://www.gnu.org/ for further details of the GPL. */ > - > package freenet.clients.http.bookmark; > > import java.net.MalformedURLException; > @@ -10,332 +9,390 @@ > import java.util.regex.Pattern; > > import freenet.client.async.USKCallback; > -import freenet.config.InvalidConfigValueException; > -import freenet.config.SubConfig; > import freenet.keys.FreenetURI; > import freenet.keys.USK; > import freenet.l10n.L10n; > import freenet.node.NodeClientCore; > -import freenet.support.api.StringArrCallback; > +import freenet.support.Logger; > +import freenet.support.SimpleFieldSet; > +import java.io.File; > +import java.io.FileWriter; > +import java.io.IOException; > +import java.util.Iterator; > > public class BookmarkManager { > > - private final NodeClientCore node; > - private final USKUpdatedCallback uskCB = new USKUpdatedCallback(); > - private final StringArrCallback configCB = new BookmarkCallback(); > - private static final BookmarkCategory MAIN_CATEGORY = new BookmarkCategory("/");; > - private final HashMap bookmarks = new HashMap(); > + private final NodeClientCore node; > + private final USKUpdatedCallback uskCB = new USKUpdatedCallback(); > + public static final BookmarkCategory MAIN_CATEGORY = new BookmarkCategory("/"); > + public static final BookmarkCategory PROTECTED_CATEGORY = new BookmarkCategory("/protected"); > + private final HashMap bookmarks = new HashMap(); > + private final File bookmarksFile = new File("bookmarks.dat").getAbsoluteFile(); > + private boolean isSavingBookmarks = false; > > - public BookmarkManager(NodeClientCore n, SubConfig sc) { > - bookmarks.put("/", MAIN_CATEGORY); > - this.node = n; > + public BookmarkManager(NodeClientCore n, SimpleFieldSet oldConfig) { > + bookmarks.put("/", MAIN_CATEGORY); > + this.node = n; > > - try { > - BookmarkCategory defaultRoot = new > BookmarkCategory("/"); > - BookmarkCategory indexes = (BookmarkCategory) defaultRoot.addBookmark(new BookmarkCategory("Indexes")); > - indexes.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > zQyF2O1o8B4y40w7Twz8y2I9haW3d2DTlxjTHPu7zc8,h2mhQNNE9aQvF~2yKAmKV1uorr7141-QOroBf5hrlbw,AQACAAE/AnotherIndex/33/"), > - "Another Index (large > categorised index, many sites have no description)", false, > - node.alerts)); > + try { > + BookmarkCategory indexes = (BookmarkCategory) PROTECTED_CATEGORY.addBookmark(new BookmarkCategory("Indexes")); > + indexes.addBookmark(new BookmarkItem(new FreenetURI("USK at zQyF2O1o8B4y40w7Twz8y2I9haW3d2DTlxjTHPu7zc8,h2mhQNNE9aQvF~2yKAmKV1uorr7141-QOroBf5hrlbw,AQACAAE/AnotherIndex/33/"), > + "Another Index (large categorised index, many sites have no description)", false, > + node.alerts)); > > - indexes.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/21/"), > - "Index des sites > Fran?ais (small French index with descriptions)", false, > - node.alerts)); > + indexes.addBookmark(new BookmarkItem(new FreenetURI("USK at RJnh1EnvOSPwOWVRS2nyhC4eIQkKoNE5hcTv7~yY-sM,pOloLxnKWM~AL24iDMHOAvTvCqMlB-p2BO9zK96TOZA,AQACAAE/index_fr/21/"), > + "Index des sites Fran?ais (small French index with descriptions)", false, > + node.alerts)); > > - indexes.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > cvZEZFWynx~4hmakaimts4Ruusl9mEUpU6mSvNvZ9p8,K2Xopc6GWPkKrs27EDuqzTcca2bE5H2YAXw0qKnkON4,AQACAAE/TSOF/2/"), > - "The Start Of Freenet > (another human-maintained index, so far relatively small)", true, > - node.alerts)); > + indexes.addBookmark(new BookmarkItem(new FreenetURI("USK at cvZEZFWynx~4hmakaimts4Ruusl9mEUpU6mSvNvZ9p8,K2Xopc6GWPkKrs27EDuqzTcca2bE5H2YAXw0qKnkON4,AQACAAE/TSOF/2/"), > + "The Start Of Freenet (another human-maintained index, so far relatively small)", true, > + node.alerts)); > > - indexes.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > 7H66rhYmxIFgMyw5Dl11JazXGHPhp7dSN7WMa1pbtEo,jQHUQUPTkeRcjmjgrc7t5cDRdDkK3uKkrSzuw5CO9uk,AQACAAE/ENTRY.POINT/36/"), > - "Entry point (old, > large index, hasn't been updated for a while)", true, > - node.alerts)); > - > - indexes.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > 0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/1/"), > - "The Ultimate FreeNet > Index (new one page index)", false, > - node.alerts)); > + indexes.addBookmark(new BookmarkItem(new FreenetURI("USK at 7H66rhYmxIFgMyw5Dl11JazXGHPhp7dSN7WMa1pbtEo,jQHUQUPTkeRcjmjgrc7t5cDRdDkK3uKkrSzuw5CO9uk,AQACAAE/ENTRY.POINT/36/"), > + "Entry point (old, large index, hasn't been updated for a while)", true, > + node.alerts)); > > - > - BookmarkCategory flog = (BookmarkCategory) > defaultRoot.addBookmark(new BookmarkCategory("Freenet devel's flogs")); > - flog.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > yGvITGZzrY1vUZK-4AaYLgcjZ7ysRqNTMfdcO8gS-LY,-ab5bJVD3Lp-LXEQqBAhJpMKrKJ19RnNaZMIkusU79s,AQACAAE/toad/7/"), > - "Toad", true, > node.alerts)); > - flog.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > hM9XRwjXIzU8xTSBXNZvTn2KuvTSRFnVn4EER9FQnpM,gsth24O7ud4gL4NwNuYJDUqfaWASOG2zxZY~ChtgPxc,AQACAAE/Flog/7/"), > - "Nextgen$", true, > node.alerts)); > + indexes.addBookmark(new BookmarkItem(new FreenetURI("USK at 0I8gctpUE32CM0iQhXaYpCMvtPPGfT4pjXm01oid5Zc,3dAcn4fX2LyxO6uCnWFTx-2HKZ89uruurcKwLSCxbZ4,AQACAAE/Ultimate-Freenet-Index/1/"), > + "The Ultimate FreeNet Index (new one page index)", false, > + node.alerts)); > > - BookmarkCategory apps = (BookmarkCategory) > defaultRoot.addBookmark(new BookmarkCategory("Freenet related software")); > - apps.addBookmark(new BookmarkItem( > - new FreenetURI( > - "USK at > QRZAI1nSm~dAY2hTdzVWXmEhkaI~dso0OadnppBR7kE,wq5rHGBI7kpChBe4yRmgBChIGDug7Xa5SG9vYGXdxR0,AQACAAE/frost/4"), > - "Frost", true, > node.alerts)); > > - sc.register("bookmarks", defaultRoot.toStrings(), 0, > true, false,"BookmarkManager.list", "BookmarkManager.listLong", configCB); > - configCB.set(sc.getStringArr("bookmarks")); > - } catch (MalformedURLException mue) { > - } catch (InvalidConfigValueException icve) { > - icve.printStackTrace(); > - } > - } > + BookmarkCategory flog = (BookmarkCategory) PROTECTED_CATEGORY.addBookmark(new BookmarkCategory("Freenet devel's flogs")); > + flog.addBookmark(new BookmarkItem(new FreenetURI("USK at yGvITGZzrY1vUZK-4AaYLgcjZ7ysRqNTMfdcO8gS-LY,-ab5bJVD3Lp-LXEQqBAhJpMKrKJ19RnNaZMIkusU79s,AQACAAE/toad/7/"), > + "Toad", true, node.alerts)); > + flog.addBookmark(new BookmarkItem(new FreenetURI("USK at hM9XRwjXIzU8xTSBXNZvTn2KuvTSRFnVn4EER9FQnpM,gsth24O7ud4gL4NwNuYJDUqfaWASOG2zxZY~ChtgPxc,AQACAAE/Flog/7/"), > + "Nextgen$", true, node.alerts)); > > - public class BookmarkCallback implements StringArrCallback { > - private final Pattern pattern = > Pattern.compile("/(.*/)([^/]*)=([A-Z] {3}@.*).*"); > + BookmarkCategory apps = (BookmarkCategory) PROTECTED_CATEGORY.addBookmark(new BookmarkCategory("Freenet related software")); > + apps.addBookmark(new BookmarkItem(new FreenetURI("USK at QRZAI1nSm~dAY2hTdzVWXmEhkaI~dso0OadnppBR7kE,wq5rHGBI7kpChBe4yRmgBChIGDug7Xa5SG9vYGXdxR0,AQACAAE/frost/4"), > + "Frost", true, node.alerts)); > > - public String[] get() { > - synchronized (BookmarkManager.this) { > - return MAIN_CATEGORY.toStrings(); > - } > - } > + //TODO: remove > + String[] oldBookmarks = oldConfig.getAll("bookmarks"); > + if (oldBookmarks != null) { > + migrateOldBookmarks(oldBookmarks); > + } > > - public void set(String[] newVals) throws > InvalidConfigValueException { > - FreenetURI key; > - clear(); > - for (int i = 0; i < newVals.length; i++) { > - try { > - Matcher matcher = > pattern.matcher(newVals[i]); > - // FIXME: remove > - if (matcher.matches() && > matcher.groupCount() == 3) { > - > - boolean hasAnActiveLink = false; > - makeParents(matcher.group(1)); > - key = new > FreenetURI(matcher.group(3)); > - String title = matcher.group(2); > - if(title.endsWith("=|")) { > - title = > title.substring(0, title.length()-2); > - hasAnActiveLink = true; > - } else if(title.endsWith("=")) { > - title = > title.substring(0, title.length()-1); > - } > - addBookmark(matcher.group(1), > new BookmarkItem(key, > - title, > hasAnActiveLink, node.alerts), false); > - > - } else { > - throw new > InvalidConfigValueException(l10n("malformedBookmark")); > - } > + if (bookmarksFile.exists() && bookmarksFile.canRead() && bookmarksFile.length() > 0) { > + Logger.normal(this, "Attempting to read the bookmark file from " + bookmarksFile.toString()); > + SimpleFieldSet sfs = SimpleFieldSet.readFrom(bookmarksFile, false, true); > + readBookmarks(MAIN_CATEGORY, sfs); > + } > > - } catch (MalformedURLException mue) { > - throw new > InvalidConfigValueException(mue.getMessage()); > - } > - } > - } > - } > + } catch (MalformedURLException mue) { > + } catch (IOException ioe) { > + Logger.error(this, "Error reading the bookmark file (" + bookmarksFile.toString() + "):" + ioe.getMessage(), ioe); > + } > + } > > - private class USKUpdatedCallback implements USKCallback { > - public void onFoundEdition(long edition, USK key) { > - BookmarkItems items = MAIN_CATEGORY.getAllItems(); > - for (int i = 0; i < items.size(); i++) { > - if (!"USK".equals(items.get(i).getKeyType())) > - continue; > + private void migrateOldBookmarks(String[] newVals) { > + //FIXME: for some reason that doesn't work... if someone wants to fix it ;) > + Pattern pattern = Pattern.compile("/(.*/)([^/]*)=(|=)*([A-Z] {3}@.*).*"); > + FreenetURI key; > + clear(); > + for (int i = 0; i < newVals.length; i++) { > + try { > + Matcher matcher = pattern.matcher(newVals[i]); > + if (matcher.matches() && matcher.groupCount() == 4) { > + makeParents(matcher.group(1)); > + key = new FreenetURI(matcher.group(4)); > + String title = matcher.group(2); > + boolean hasAnActiveLink = matcher.group(3).indexOf('|') > -1; > + addBookmark(matcher.group(1), new BookmarkItem(key, > + title, hasAnActiveLink, node.alerts), false); > + } > + } catch (MalformedURLException e) {} > + } > + } > > - try { > - FreenetURI furi = new > FreenetURI(items.get(i).getKey()); > - USK usk = USK.create(furi); > + private class USKUpdatedCallback implements USKCallback { > > - if (usk.equals(key, false)) { > - > items.get(i).setEdition(key.suggestedEdition, node); > - break; > - } > - } catch (MalformedURLException mue) { > - } > - } > - node.storeConfig(); > - } > - } > + public void onFoundEdition(long edition, USK key) { > + BookmarkItems items = MAIN_CATEGORY.getAllItems(); > + for (int i = 0; i < items.size(); i++) { > + if (!"USK".equals(items.get(i).getKeyType())) { > + continue; > + } > > - public String l10n(String key) { > - return L10n.getString("BookmarkManager."+key); > - } > + try { > + FreenetURI furi = new FreenetURI(items.get(i).getKey()); > + USK usk = USK.create(furi); > > - public BookmarkCategory getMainCategory() { > - return MAIN_CATEGORY; > - } > + if (usk.equals(key, false)) { > + items.get(i).setEdition(key.suggestedEdition, node); > + break; > + } > + } catch (MalformedURLException mue) { > + } > + } > + storeBookmarks(); > + } > + } > > - public String parentPath(String path) { > - if (path.equals("/")) > - return "/"; > + public String l10n(String key) { > + return L10n.getString("BookmarkManager." + key); > + } > > - return path.substring(0, path.substring(0, path.length() - 1) > - .lastIndexOf("/")) > - + "/"; > - } > + public String parentPath(String path) { > + if (path.equals("/")) { > + return "/"; > + } > > - public Bookmark getBookmarkByPath(String path) { > - return (Bookmark) bookmarks.get(path); > - } > + return path.substring(0, path.substring(0, path.length() - 1).lastIndexOf("/")) + "/"; > + } > > - public BookmarkCategory getCategoryByPath(String path) { > - if (getBookmarkByPath(path) instanceof BookmarkCategory) > - return (BookmarkCategory) getBookmarkByPath(path); > + public Bookmark getBookmarkByPath(String path) { > + synchronized (bookmarks) { > + return (Bookmark) bookmarks.get(path); > + } > + } > > - return null; > - } > + public BookmarkCategory getCategoryByPath(String path) { > + if (getBookmarkByPath(path.trim()) instanceof BookmarkCategory) > + return (BookmarkCategory) getBookmarkByPath(path); > > - public BookmarkItem getItemByPath(String path) { > - if (getBookmarkByPath(path) instanceof BookmarkItem) > - return (BookmarkItem) getBookmarkByPath(path); > + return null; > + } > > - return null; > - } > + public BookmarkItem getItemByPath(String path) { > + if (getBookmarkByPath(path.trim()) instanceof BookmarkItem) { > + return (BookmarkItem) getBookmarkByPath(path); > + } > > - public void addBookmark(String parentPath, Bookmark bookmark, boolean store) { > - BookmarkCategory parent = getCategoryByPath(parentPath); > - parent.addBookmark(bookmark); > - putPaths(parentPath + bookmark.getName() > - + ((bookmark instanceof BookmarkCategory) ? "/" > : ""), > - bookmark); > + return null; > + } > > - if (bookmark instanceof BookmarkItem && ((BookmarkItem) bookmark).getKeyType().equals("USK")) { > - try { > - USK u = ((BookmarkItem) bookmark).getUSK(); > - this.node.uskManager.subscribe(u, this.uskCB, > true, this); > - } catch (MalformedURLException mue) { > - } > - } > - if (store) > - node.storeConfig(); > - } > + public void addBookmark(BookmarkCategory parent, Bookmark bookmark, boolean store) { > + if (bookmark instanceof BookmarkItem && ((BookmarkItem) bookmark).getKeyType().equals("USK")) { > + try { > + USK u = ((BookmarkItem) bookmark).getUSK(); > + this.node.uskManager.subscribe(u, this.uskCB, true, this); > + } catch (MalformedURLException mue) { > + } > + } > + if (store) { > + storeBookmarks(); > + } > + } > + > + public void addBookmark(String parentPath, Bookmark bookmark, boolean store) { > + BookmarkCategory parent = getCategoryByPath(parentPath); > + parent.addBookmark(bookmark); > + putPaths(parentPath + bookmark.getName() + ((bookmark instanceof BookmarkCategory) ? "/" : ""), > + bookmark); > + addBookmark(parent, bookmark, store); > + } > > - public void renameBookmark(String path, String newName) { > - Bookmark bookmark = getBookmarkByPath(path); > - > - String oldName = bookmark.getName(); > - String oldPath = '/' + oldName + '/'; > - String newPath = oldPath.substring(0, oldPath.indexOf(oldName)) > + newName; > + public void renameBookmark(String path, String newName) { > + Bookmark bookmark = getBookmarkByPath(path); > > - bookmark.setName(newName); > - bookmarks.remove(path); > - if(path.charAt(path.length()-1) != '/') { > - int lastIndexOfSlash = path.lastIndexOf('/'); > - newPath = path.substring(0,lastIndexOfSlash)+newPath; > - } else > - newPath += '/'; > + String oldName = bookmark.getName(); > + String oldPath = '/' + oldName + '/'; > + String newPath = oldPath.substring(0, oldPath.indexOf(oldName)) + newName; > > - bookmarks.put(newPath, bookmark); > - > - node.storeConfig(); > - } > + bookmark.setName(newName); > + synchronized (bookmarks) { > + bookmarks.remove(path); > + } > + if (path.charAt(path.length() - 1) != '/') { > + int lastIndexOfSlash = path.lastIndexOf('/'); > + newPath = path.substring(0, lastIndexOfSlash) + newPath; > + } else { > + newPath += '/'; > + } > + synchronized (bookmarks) { > + bookmarks.put(newPath, bookmark); > + } > + storeBookmarks(); > + } > > - public void moveBookmark(String bookmarkPath, String newParentPath, boolean store) { > - Bookmark b = getBookmarkByPath(bookmarkPath); > - addBookmark(newParentPath, b, false); > + public void moveBookmark(String bookmarkPath, String newParentPath, boolean store) { > + Bookmark b = getBookmarkByPath(bookmarkPath); > + addBookmark(newParentPath, b, false); > > - getCategoryByPath(parentPath(bookmarkPath)).removeBookmark(b); > - removePaths(bookmarkPath); > + getCategoryByPath(parentPath(bookmarkPath)).removeBookmark(b); > + removePaths(bookmarkPath); > > - if (store) > - node.storeConfig(); > - } > + if (store) { > + storeBookmarks(); > + } > + } > > - public void removeBookmark(String path, boolean store) { > - Bookmark bookmark = getBookmarkByPath(path); > - if (bookmark == null) > - return; > + public void removeBookmark(String path, boolean store) { > + Bookmark bookmark = getBookmarkByPath(path); > + if (bookmark == null) { > + return; > + } > > - if (bookmark instanceof BookmarkCategory) { > - BookmarkCategory cat = (BookmarkCategory) bookmark; > - for (int i = 0; i < cat.size(); i++) { > - removeBookmark( > - path > - + cat.get(i).getName() > - + ((cat.get(i) instanceof > BookmarkCategory) ? "/" > - : ""), false); > - } > - } else { > - if (((BookmarkItem) > bookmark).getKeyType().equals("USK")) { > - try { > - USK u = ((BookmarkItem) > bookmark).getUSK(); > - this.node.uskManager.unsubscribe(u, > this.uskCB, true); > - } catch (MalformedURLException mue) { > - } > - } > - } > + if (bookmark instanceof BookmarkCategory) { > + BookmarkCategory cat = (BookmarkCategory) bookmark; > + for (int i = 0; i < cat.size(); i++) { > + removeBookmark(path + cat.get(i).getName() + ((cat.get(i) instanceof BookmarkCategory) ? "/" > + : ""), false); > + } > + } else { > + if (((BookmarkItem) bookmark).getKeyType().equals("USK")) { > + try { > + USK u = ((BookmarkItem) bookmark).getUSK(); > + this.node.uskManager.unsubscribe(u, this.uskCB, true); > + } catch (MalformedURLException mue) { > + } > + } > + } > > - getCategoryByPath(parentPath(path)).removeBookmark(bookmark); > - bookmarks.remove(path); > + getCategoryByPath(parentPath(path)).removeBookmark(bookmark); > + synchronized (bookmarks) { > + bookmarks.remove(path); > + } > > - if (store) > - node.storeConfig(); > - } > + if (store) { > + storeBookmarks(); > + } > + } > > - public void moveBookmarkUp(String path, boolean store) { > - BookmarkCategory parent = getCategoryByPath(parentPath(path)); > - parent.moveBookmarkUp(getBookmarkByPath(path)); > + public void moveBookmarkUp(String path, boolean store) { > + BookmarkCategory parent = getCategoryByPath(parentPath(path)); > + parent.moveBookmarkUp(getBookmarkByPath(path)); > > - if (store) > - node.storeConfig(); > - } > + if (store) { > + storeBookmarks(); > + } > + } > > - public void moveBookmarkDown(String path, boolean store) { > - BookmarkCategory parent = getCategoryByPath(parentPath(path)); > - parent.moveBookmarkDown(getBookmarkByPath(path)); > + public void moveBookmarkDown(String path, boolean store) { > + BookmarkCategory parent = getCategoryByPath(parentPath(path)); > + parent.moveBookmarkDown(getBookmarkByPath(path)); > > - if (store) > - node.storeConfig(); > - } > + if (store) { > + storeBookmarks(); > + } > + } > > - private BookmarkCategory makeParents(String path) { > - if (bookmarks.containsKey(path)) > - return getCategoryByPath(path); > - else { > + private BookmarkCategory makeParents(String path) { > + boolean isInPath = false; > + synchronized (bookmarks) { > + isInPath = bookmarks.containsKey(path); > + } > + if (isInPath) { > + return getCategoryByPath(path); > + } else { > > - int index = path.substring(0, path.length() - > 1).lastIndexOf("/"); > - String name = path.substring(index + 1, path.length() - > 1); > + int index = path.substring(0, path.length() - 1).lastIndexOf("/"); > + String name = path.substring(index + 1, path.length() - 1); > > - BookmarkCategory cat = new BookmarkCategory(name); > - makeParents(parentPath(path)); > - addBookmark(parentPath(path), cat, false); > + BookmarkCategory cat = new BookmarkCategory(name); > + makeParents(parentPath(path)); > + addBookmark(parentPath(path), cat, false); > > - return cat; > - } > - } > + return cat; > + } > + } > > - private void putPaths(String path, Bookmark b) { > + private void putPaths(String path, Bookmark b) { > + synchronized (bookmarks) { > + bookmarks.put(path, b); > + } > + if (b instanceof BookmarkCategory) { > + for (int i = 0; i < ((BookmarkCategory) b).size(); i++) { > + Bookmark child = ((BookmarkCategory) b).get(i); > + putPaths(path + child.getName() + (child instanceof BookmarkItem ? "" : "/"), child); > + } > + } > > - bookmarks.put(path, b); > - if (b instanceof BookmarkCategory) { > - for (int i = 0; i < ((BookmarkCategory) b).size(); i++) > { > - Bookmark child = ((BookmarkCategory) b).get(i); > - putPaths(path + child.getName() > - + (child instanceof > BookmarkItem ? "" : "/"), child); > - } > - } > + } > > - } > + private void removePaths(String path) { > + if (getBookmarkByPath(path) instanceof BookmarkCategory) { > + BookmarkCategory cat = getCategoryByPath(path); > + for (int i = 0; i < cat.size(); i++) { > + removePaths(path + cat.get(i).getName() + (cat.get(i) instanceof BookmarkCategory ? "/" : "")); > + } > + } > + bookmarks.remove(path); > + } > > - private void removePaths(String path) { > - if (getBookmarkByPath(path) instanceof BookmarkCategory) { > - BookmarkCategory cat = getCategoryByPath(path); > - for (int i = 0; i < cat.size(); i++) { > - removePaths(path + cat.get(i).getName() > - + (cat.get(i) instanceof > BookmarkCategory ? "/" : "")); > - } > - } > - bookmarks.remove(path); > - } > + public void clear() { > + removeBookmark("/", false); > + synchronized (bookmarks) { > + bookmarks.clear(); > + bookmarks.put("/", MAIN_CATEGORY); > + } > + } > > - public void clear() { > - removeBookmark("/", false); > - bookmarks.clear(); > - bookmarks.put("/", MAIN_CATEGORY); > - } > + public FreenetURI[] getBookmarkURIs() { > + BookmarkItems items = MAIN_CATEGORY.getAllItems(); > + FreenetURI[] uris = new FreenetURI[items.size()]; > + for (int i = 0; i < items.size(); i++) { > + uris[i] = items.get(i).getURI(); > + } > > - public FreenetURI[] getBookmarkURIs() { > - BookmarkItems items = MAIN_CATEGORY.getAllItems(); > - FreenetURI[] uris = new FreenetURI[items.size()]; > - for (int i = 0; i < items.size(); i++) { > - uris[i] = items.get(i).getURI(); > - } > + return uris; > + } > > - return uris; > - } > + private void storeBookmarks() { > + Logger.normal(this, "Attempting to save bookmarks to " + bookmarksFile.toString()); > + SimpleFieldSet sfs; > + synchronized (bookmarks) { > + if (isSavingBookmarks) { > + return; > + } > + isSavingBookmarks = true; > + > + SimpleFieldSet toSave = MAIN_CATEGORY.toSimpleFieldSet(); > + if(toSave.isEmpty()) { > + isSavingBookmarks = false; > + return; > + } > + sfs = toSave; > + } > + FileWriter fw = null; > + try { > + File tmp = File.createTempFile("bookmark", ".bak", bookmarksFile.getParentFile()); > + fw = new FileWriter(tmp); > + sfs.writeTo(fw); > + if (!tmp.renameTo(bookmarksFile)) { > + Logger.error(this, "Unable to rename " + tmp.toString() + " to " + bookmarksFile.toString()); > + } > + } catch (IOException ioe) { > + Logger.error(this, "An error has occured saving the bookmark file :" + ioe.getMessage(), ioe); > + } finally { > + try { > + if (fw != null) { > + fw.close(); > + } > + } catch (IOException e) { > + } > + } > + > + synchronized (bookmarks) { > + isSavingBookmarks = false; > + } > + } > + > + private void readBookmarks(BookmarkCategory category, SimpleFieldSet sfs) { > + synchronized (bookmarks) { > + String[] categories = sfs.namesOfDirectSubsets(); > + for (int i = 0; i < categories.length; i++) { > + SimpleFieldSet subset = sfs.subset(categories[i]); > + BookmarkCategory currentCategory = new BookmarkCategory(categories[i]); > + category.addBookmark(currentCategory); > + addBookmark(currentCategory, currentCategory, false); > + readBookmarks(currentCategory, subset); > + } > + > + Iterator it = sfs.keyIterator(); > + while (it.hasNext()) { > + String key = (String) it.next(); > + String line = sfs.get(key); > + try { > + BookmarkItem item = new BookmarkItem(line, node.alerts); > + category.addBookmark(item); > + addBookmark(category, item, false); > + } catch (MalformedURLException e) { > + Logger.error(this, "Error while adding one of the bookmarks :"+e.getMessage(), e); > + } > + } > + } > + storeBookmarks(); > + } > } > > Modified: trunk/freenet/src/freenet/node/Node.java > =================================================================== > --- trunk/freenet/src/freenet/node/Node.java 2007-11-20 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/node/Node.java 2007-11-20 19:15:58 UTC (rev 15881) > @@ -547,7 +547,8 @@ > startupTime = System.currentTimeMillis(); > // Will be set up properly afterwards > L10n.setLanguage(L10n.FALLBACK_DEFAULT); > - startupPageHolder = new StartupToadletServer(executor, config); > + SimpleFieldSet oldConfig = config.getSimpleFieldSet(); > + startupPageHolder = new StartupToadletServer(executor, oldConfig); > nodeNameUserAlert = new MeaningfulNodeNameUserAlert(this); > recentlyCompletedIDs = new LRUQueue(); > this.config = config; > @@ -1265,7 +1266,7 @@ > > nodeStats = new NodeStats(this, sortOrder, new > SubConfig("node.load", config), oldThrottleFS, obwLimit, ibwLimit); > > - clientCore = new NodeClientCore(this, config, nodeConfig, > nodeDir, getDarknetPortNumber(), sortOrder, oldThrottleFS == null ? null : oldThrottleFS.subset("RequestStarters")); > + clientCore = new NodeClientCore(this, config, nodeConfig, > nodeDir, getDarknetPortNumber(), sortOrder, oldThrottleFS == null ? null : oldThrottleFS.subset("RequestStarters"), oldConfig); > > nodeConfig.register("disableHangCheckers", false, sortOrder++, > true, false, "Node.disableHangCheckers", "Node.disableHangCheckersLong", new BooleanCallback() { > > > Modified: trunk/freenet/src/freenet/node/NodeClientCore.java > =================================================================== > --- trunk/freenet/src/freenet/node/NodeClientCore.java 2007-11-20 > 19:05:06 UTC (rev 15880) > +++ trunk/freenet/src/freenet/node/NodeClientCore.java 2007-11-20 > 19:15:58 UTC (rev 15881) > @@ -113,7 +113,7 @@ > static final long MAX_ARCHIVED_FILE_SIZE = 1024*1024; // arbitrary... FIXME > static final int MAX_CACHED_ELEMENTS = 256*1024; // equally arbitrary! FIXME hopefully we can cache many of these though > > - NodeClientCore(Node node, Config config, SubConfig nodeConfig, File nodeDir, int portNumber, int sortOrder, SimpleFieldSet oldThrottleFS) throws NodeInitException { > + NodeClientCore(Node node, Config config, SubConfig nodeConfig, File nodeDir, int portNumber, int sortOrder, SimpleFieldSet oldThrottleFS, SimpleFieldSet oldConfig) throws NodeInitException { > this.node = node; > this.nodeStats = node.nodeStats; > this.random = node.random; > @@ -346,7 +346,7 @@ > } > > SubConfig fproxyConfig = new SubConfig("fproxy", config); > - bookmarkManager = new BookmarkManager(this, fproxyConfig); > + bookmarkManager = new BookmarkManager(this, oldConfig); > > // FProxy > // FIXME this is a hack, the real way to do this is plugins > > _______________________________________________ > cvs mailing list > cvs at freenetproject.org > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20071120/c0e7ce82/attachment.pgp>