Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.weblog.archive.update
on update () { <<Changes <<7/10/02; 9:33:33 PM by JES <<On MacOS, limit filenames to 31 characters. <<12/20/01; 1:47:21 AM by JES <<Use file.writeTextFile instead of file.writeWholeFile to write the files. This fixes the mac type/creator codes and line-endings. <<12/15/01; 7:21:57 AM by DW <<Ooops, I forgot to put an <xml> header on the files. <<12/14/01; 7:08:29 PM by DW <<Created. local (startticks = clock.ticks ()); local (xmlheader = "<?xml version=\"1.0\"?>\r"); local (ctcategoriessaved = 0, ctpostssaved = 0, flprefssaved = false); local (adrdata = radio.weblog.init ()); bundle { //do categories local (folder = user.radio.prefs.weblogArchiveFolder + "categories" + file.getpathchar (), adrcat); for adrcat in @adrdata^.categories { local (flwrite = true); local (fname = nameOf (adrcat^)); if system.environment.isMac { //limit filename to 31 chars if sizeOf (fname) > 27 { //27 + 4 for .xml is 31 fname = string.mid (fname, 1, 27)}}; local (f = folder + fname + ".xml"); if file.exists (f) { if timemodified (adrcat) < file.modified (f) { flwrite = false}}; if flwrite { local (localtable, catname = nameof (adrcat^), adrsubtable); bundle { //fill localtable new (tabletype, @localtable); adrsubtable = @localtable.[catname]; adrsubtable^ = adrcat^; try {delete (@adrsubtable^.flDirty)}; try {delete (@adrsubtable^.rss)}; try {delete (@adrsubtable^.subscribers)}}; //some very old files will have this msg ("Writing XML version of category \"" + catname + "\"."); local (xmltext = xmlheader + table.tabletoxml (adrsubtable)); file.surefilepath (f); file.writeTextFile (f, xmltext); ctcategoriessaved++}}}; bundle { //do prefs local (f = user.radio.prefs.weblogArchiveFolder + "prefs" + ".xml"); local (adrprefs = @adrdata^.prefs); local (flwrite = true); if file.exists (f) { if timemodified (adrprefs) < file.modified (f) { flwrite = false}}; if flwrite { local (prefs = adrprefs^); //work with a copy bundle { //delete stuff we don't want to save in the XMLization try {delete (@prefs.lastThemeApplied)}; try {delete (@prefs.manila)}; try {delete (@prefs.template)}; try {delete (@prefs.daytemplate)}; try {delete (@prefs.itemTemplate)}; try {delete (@prefs.ftp)}; try {prefs.mailposting.password = ""}}; local (xmltext = xmlheader + table.tabletoxml (@prefs)); file.surefilepath (f); file.writewholefile (f, xmltext); flprefssaved = true}}; bundle { //do posts local (folder = user.radio.prefs.weblogArchiveFolder + "posts" + file.getpathchar (), adrpost); for adrpost in @adrdata^.posts { local (flwrite = true); local (f = folder + nameof (adrpost^) + ".xml"); if file.exists (f) { if timemodified (adrpost) < file.modified (f) { flwrite = false}}; if flwrite { local (localtable, postname = nameof (adrpost^), adrsubtable); bundle { //fill localtable new (tabletype, @localtable); adrsubtable = @localtable.[postname]; adrsubtable^ = adrpost^; try { if sizeof (adrsubtable^.categories) == 0 { delete (@adrsubtable^.categories)}}; try {table.assign (@adrsubtable^.text, string (adrsubtable^.text))}}; msg ("Writing XML version of post #" + number (postname) + "."); local (xmltext = xmlheader + table.tabletoxml (adrsubtable)); file.surefilepath (f); file.writewholefile (f, xmltext); ctpostssaved++}}}; if user.radio.prefs.flLogWeblogArchive { if (ctcategoriessaved > 0) or (ctpostssaved > 0) or flprefssaved { local (htmltext = ""); if ctpostssaved > 0 { if ctpostssaved == 1 { htmltext = htmltext + "1 post was archived, "} else { htmltext = htmltext + ctpostssaved + " posts were archived, "}}; if ctcategoriessaved > 0 { if ctcategoriessaved == 1 { htmltext = htmltext + "1 category was archived, "} else { htmltext = htmltext + ctcategoriessaved + " categories were archived, "}}; if flprefssaved { if sizeof (htmltext) > 0 { htmltext = htmltext + " and "}; htmltext = htmltext + "the weblog prefs were archived"}; if htmltext endswith ", " { htmltext = string.mid (htmltext, 1, sizeof (htmltext) - 2)}; htmltext = htmltext + "."; radio.log.add ("Weblog Archive", htmltext, startticks)}}; msg ("")} //clear the About window <<bundle //test code <<update ()
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.