AX6GenevaȜʴ _`YfLANDmac Changes 8/15/08; 4:20:43 AM by DW Do a scan on install. 8/14/08; 11:00:52 AM by DW When the tool is installed, its prefs page opens. photoFanSuite.init () webbrowser.bringtofront () webbrowser.openurl (photoFanSuite.data.urls.homeUrl) photoFanSuite.checkFeeds () //8/15/08 by DW G$ flUpdate onInstallXVGeneva|= o&ʴ 40o&o& prefs4>:Vo&ʴ  !9 E ʴ author Dave Winer authorEmaildave.winer@gmail.com descriptionDA feed reader for pictures and comprehensive Flickr desktop utility. homePageUrlhttp://flickrfan.org/name FlickrFan releaseDateversion0.57> o&o& c5Genevao&obcsLANDmac on any (pta) return (photoFanSuite.responder (pta)) WdatatablPGobpobp createdMon, 26 Nov 2007 01:33:36 GMT2.o&o& any2.o&od 6> F condition((string.lower (path) beginsWith "/pfi/")enabledmethods` o&o& o&o&  8dGenevaq~t2|"LANDmac on addContactFeeds () Changes 11/29/07; 9:10:04 AM by DW Call photoFanSuite.addFeed to add the feed. 11/28/07; 1:09:20 PM by DW Have to add a semaphore, so that: 1. We don't get two instances of this running concurrently (the second should just return). 2. We don't try to display the feeds page while this is running. The semaphore is system.temp.photofan.flAddContactFeedsRunningNow. 11/27/07; 2:13:28 PM by DW Created. Add the feeds of the user's contacts that we are not subscribed to, make them all disabled. if defined (system.temp.photofan.flAddContactFeedsRunningNow) return system.temp.photofan.flAddContactFeedsRunningNow = true local (contacts, adr) Flickr.contacts.getPublicList (user.photoFan.prefs.flickr.id, @contacts) scratchpad.contacts = contacts for adrcontact in @contacts local (url = Flickr.people.getUsersFeed ("", adrcontact^.id)) photoFanSuite.addFeed (url, enabled:false, flickrUserId:adrcontact^.id, flContact:true) local (adrfeed = @user.photoFan.feeds.[url]) if not defined (adrfeed^) new (tabletype, adrfeed) adrfeed^.flContact = true adrfeed^.enabled = false //key point, we're not sub'd-to until user chooses to sub adrfeed^.flickrUserId = adrcontact^.id photoFanSuite.getFeedInfo (adrfeed) delete (@system.temp.photofan.flAddContactFeedsRunningNow) bundle //test code addContactFeeds () WdatatablPGqօqօ createdTue, 27 Nov 2007 22:13:25 GMTWdatatablPGt2lt2l createdThu, 29 Nov 2007 17:10:04 GMTWdatatablPGt2mt2m createdThu, 29 Nov 2007 17:10:05 GMTWdatatablGss createdWed, 28 Nov 2007 21:09:19 GMTWdatatablGss createdWed, 28 Nov 2007 21:09:21 GMTWdatatablGss createdWed, 28 Nov 2007 21:09:28 GMTWdatatablGss createdWed, 28 Nov 2007 21:09:51 GMTWdatatablGs.s. createdWed, 28 Nov 2007 21:10:06 GMTWdatatablPGqևqև createdTue, 27 Nov 2007 22:13:27 GMTWdatatablPGq։q։ createdTue, 27 Nov 2007 22:13:29 GMTWdatatablGsQsQ createdWed, 28 Nov 2007 21:10:41 GMTWdatatablGsTsT createdWed, 28 Nov 2007 21:10:44 GMTWdatatablGsVsV createdWed, 28 Nov 2007 21:10:46 GMTWdatatablPGqq createdTue, 27 Nov 2007 22:15:16 GMTWdatatablPGUԆUԆ createdTue, 06 Nov 2007 16:21:26 GMTWdatatablPGqq createdTue, 27 Nov 2007 22:15:35 GMTWdatatablPGq?q? createdTue, 27 Nov 2007 22:16:31 GMTWdatatablPGqDqD createdTue, 27 Nov 2007 22:16:36 GMTWdatatablPGt2t2 createdThu, 29 Nov 2007 17:08:34 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:50:08 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:50:39 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:50:44 GMTWdatatablPGq$q$ createdTue, 27 Nov 2007 22:20:20 GMTWdatatablPGo%9o%9 createdSun, 25 Nov 2007 21:12:25 GMTWdatatablPGq$q$ createdTue, 27 Nov 2007 22:20:20 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:51:11 GMTWdatatablPGq q createdTue, 27 Nov 2007 22:15:41 GMTWdatatablPGqq createdTue, 27 Nov 2007 22:15:45 GMT  Genevao'jfBLANDmac on addFeed (url, enabled=true, flickrUserId="", flContact=false) Changes 1/3/08; 2:21:35 PM by DW When deleting the feed after an error, don't throw an error if it fails. I've seen the Script Error window pop up pointing to this code. 12/31/07; 4:19:08 AM by DW If there's an error getting the feed info, that means the feed is bad and we can't use the table we created. If it is newly created, delete it then rethrow the error. 11/29/07; 8:58:43 AM by DW Add optional params, enabled, flickrUserId and flContact. Return the address of the feed. 11/25/07; 1:23:14 PM by DW Created. local (adrfeed = @user.photoFan.feeds.[url], flnew = false) if not defined (adrfeed^) new (tabletype, adrfeed) flnew = true adrfeed^.flickrUserId = flickrUserId adrfeed^.enabled = enabled adrfeed^.flContact = flContact try photoFanSuite.getFeedInfo (adrfeed) else local (errorstring = tryerror) if flnew try {delete (adrfeed)} //1/3/08 by DW scripterror (errorstring) //rethrow the error return (adrfeed) bundle //test code photoFanSuite.addFeed (photoFanSuite.data.urls.ap) addFeed ("http://api.flickr.com/services/feeds/photos_public.gne?tags=leweb307&lang=en-us&format=rss_200") addFeed ("http://xml.flickrfan.org/river/defaultReadingList.opml") WdatatablPGo'o' createdSun, 25 Nov 2007 21:23:11 GMTWdatatablPGââ createdThu, 03 Jan 2008 22:21:34 GMTWdatatablPGââ createdThu, 03 Jan 2008 22:21:35 GMTWdatatablGÞ;Þ; createdMon, 31 Dec 2007 12:19:07 GMTWdatatablGÞ<Þ< createdMon, 31 Dec 2007 12:19:08 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:22:50 GMTWdatatablPGt/t/ createdThu, 29 Nov 2007 16:58:43 GMTWdatatablPGt2t2 createdThu, 29 Nov 2007 17:10:32 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:23:13 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:23:14 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:50:08 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:50:39 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:50:44 GMTWdatatablGÞ'Þ' createdMon, 31 Dec 2007 12:18:47 GMTWdatatablGrOrO createdWed, 28 Nov 2007 18:24:15 GMTWdatatablPGo%9o%9 createdSun, 25 Nov 2007 21:12:25 GMTWdatatablPGo%9o%9 createdSun, 25 Nov 2007 21:12:25 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:17:40 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:51:11 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:17:45 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:18:35 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:17:48 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:18:07 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:18:15 GMTWdatatablPGt1zt1z createdThu, 29 Nov 2007 17:06:02 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:06:58 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:07:02 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:07:02 GMT } GenevagKø LANDmac on addToLog (eventType, htmltext, startticks, imghtml=" ", adrdata=nil) Changes 1/20/08; 7:41:57 AM by DW Convert to calendar-based structure. 11/21/07; 6:01:54 AM by DW Add an optional parameter for image html. 11/20/07; 12:01:40 PM by DW Fixed a mistake in formatting the duration string. 11/19/07; 7:29:24 PM by DW Created. if user.photoFan.prefs.flLog local (secs) bundle //set secs local (s = string (double (clock.ticks () - startticks) / 60)) local (lod = string.nthfield (s, ".", 1)) local (rod = string.nthfield (s, ".", 2) + "00") if sizeof (rod) > 3 rod = string.mid (rod, 1, 3) secs = lod + "." + rod local (adrtable = log.addToGuestDatabase (photoFanSuite.data.logName, flHourlyRoll:true)) local (adrcal = @user.photofan.calendar) local (adrtable = mainresponder.calendar.getdayaddress (adrcal, clock.now (), true)) adrtable = xml.addtable (adrtable, string (clock.now ())) adrtable^.eventType = eventType adrtable^.htmltext = htmltext adrtable^.imghtml = imghtml adrtable^.secs = secs if adrdata != nil adrtable^.data = adrdata^ bundle //clear the cache if defined (system.temp.photoFan.cache.viewEventsLog) delete (@system.temp.photoFan.cache.viewEventsLog) bundle //test code local (i, startticks, ctloops = 10) for i = 1 to ctloops msg (i) startticks = clock.ticks () clock.waitsixtieths (ctloops - i + 1) addToLog ("Test code", i + ". I am just testing this mofo. " + states.nthstate (random (1, 50)) + ".", startticks) WdatatablGøø createdSun, 20 Jan 2008 15:41:57 GMTWdatatablGøø createdSun, 20 Jan 2008 15:41:58 GMTWdatatablGizQizQ createdWed, 21 Nov 2007 14:01:53 GMTWdatatablGizRizR createdWed, 21 Nov 2007 14:01:54 GMTWdatatablPGh}#h}# createdTue, 20 Nov 2007 20:01:39 GMTWdatatablPGh}$h}$ createdTue, 20 Nov 2007 20:01:40 GMTWdatatablGgg createdTue, 20 Nov 2007 03:29:23 GMTWdatatablGgg createdTue, 20 Nov 2007 03:29:24 GMTWdatatablGøø createdSun, 20 Jan 2008 15:45:16 GMTWdatatablGøø createdSun, 20 Jan 2008 15:42:41 GMTWdatatablGøø createdSun, 20 Jan 2008 15:43:23 GMTWdatatablPGhumhum createdTue, 20 Nov 2007 19:28:45 GMTWdatatablPGhuAhuA createdTue, 20 Nov 2007 19:28:01 GMTWdatatablPGhuShuS createdTue, 20 Nov 2007 19:28:19 GMTWdatatablGgg createdTue, 20 Nov 2007 03:29:36 GMTWdatatablPGhvhv createdTue, 20 Nov 2007 19:34:42 GMTWdatatablPGhvhv createdTue, 20 Nov 2007 19:34:39 GMTWdatatablPGh|h| createdTue, 20 Nov 2007 19:59:38 GMTWdatatablPGhwWhwW createdTue, 20 Nov 2007 19:36:55 GMTWdatatablPGhw hw createdTue, 20 Nov 2007 19:36:00 GMTWdatatablGgg createdTue, 20 Nov 2007 03:29:40 GMT}cGenevaéCoéHLLANDmac Changes 1/8/08; 3:13:04 PM by DW Created. Called from Flickr.folderWatcher.scan after images are uploaded. if user.photoFan.prefs.flViewImageHtml local (s = string.urlencode (string (user.flickr.imageHtml))) webbrowser.openurl (photoFanSuite.data.urls.viewImageHtml + s) WdatatablPGéCéC createdTue, 08 Jan 2008 23:13:03 GMTWdatatablPGéCéC createdTue, 08 Jan 2008 23:13:04 GMTWdatatablPGéHéH createdTue, 08 Jan 2008 23:34:34 GMTWdatatablPGéDéD createdTue, 08 Jan 2008 23:15:13 GMTWdatatablPGé/{é/{ createdTue, 08 Jan 2008 21:47:39 GMTc a "GenevaL7[|LANDmac on archiver () Changes 3/12/08; 12:45:04 PM by DW You can't move files across volumes on the Mac, so if that fails, try to copy and delete. If user.photoFan.prefs.archive.flDateNestedFolders is true, then archive into date-nested folders. (Defaults false.) 12/2/07; 9:58:59 PM by DW Only create a log item if we deleted or moved something. 12/2/07; 8:40:34 AM by DW Ported from flickrRivr. Run this once an hour to make sure there aren't too many pictures in the screen saver folder. if user.photoFan.prefs.archive.enabled local (max = user.photoFan.prefs.archive.maxPics, startticks = clock.ticks ()) local (ctdeleted = 0, ctmoved = 0, ctfoldersdeleted = 0) max = 100 //for testing if file.filesinfolder (user.photoFan.prefs.screenSaverFolder, infinity) > max local (filetable) bundle //build the sorted filetable local (f) new (tabletype, @filetable) fileloop (f in user.photoFan.prefs.screenSaverFolder, infinity) if not (file.filefrompath (f) == ".DS_Store") try {filetable.[f - user.photoFan.prefs.screenSaverFolder] = file.created (f)} local (oldtarget = target.set (@filetable)) table.sortby ("Value") target.set (oldtarget) scratchpad.filetable = filetable edit (@scratchpad.filetable) bundle //delete or move the obsolete files local (diff = file.filesinfolder (user.photoFan.prefs.screenSaverFolder, infinity) - max, fsource, i, fdest) for i = 1 to diff fsource = user.photoFan.prefs.screenSaverFolder + nameof (filetable [i]) if user.photoFan.prefs.archive.flCopyToArchiveFolder fdest = user.photoFan.prefs.archive.folder + nameof (filetable [i]) if user.photoFan.prefs.archive.flDateNestedFolders local (day, month, year, hour, minute, second, pc = file.getpathchar ()) date.get (file.created (fsource), @day, @month, @year, @hour, @minute, @second) month = string.padwithzeros (month, 2) day = string.padwithzeros (day, 2) fdest = file.folderfrompath (fdest) + year + pc + month + pc + day + pc + file.filefrompath (fdest) file.surefilepath (fdest) try file.move (fsource, file.folderfrompath (fdest)) else msg (fdest) file.copy (fsource, fdest) file.delete (fsource) ctmoved++ else file.delete (fsource) ctdeleted++ bundle //delete folder if empty local (oldfolder = file.folderfrompath (fsource)) if file.filesinfolder (oldfolder, infinity) == 0 file.delete (oldfolder) ctfoldersdeleted++ bundle //do the log if (ctdeleted != 0) or (ctmoved != 0) or (ctfoldersdeleted != 0) local (s = ctdeleted + " files deleted, " + ctmoved + " files moved, and " + ctfoldersdeleted + " folders deleted.") photoFanSuite.addToLog ("Archive", s, startticks) bundle //test code archiver () WdatatablPGx'x' createdSun, 02 Dec 2007 17:13:17 GMTWdatatablG createdWed, 12 Mar 2008 19:45:03 GMTWdatatablG createdWed, 12 Mar 2008 19:45:04 GMTWdatatablG createdWed, 12 Mar 2008 19:45:38 GMTWdatatablPGx"x" createdMon, 03 Dec 2007 05:58:58 GMTWdatatablPGx#x# createdMon, 03 Dec 2007 05:58:59 GMTWdatatablGLL createdTue, 30 Oct 2007 18:33:02 GMTWdatatablGLL createdTue, 30 Oct 2007 18:33:07 GMTWdatatablGLL createdTue, 30 Oct 2007 18:33:45 GMTWdatatablGLȑLȑ createdTue, 30 Oct 2007 18:40:01 GMTWdatatablPGx&x& createdSun, 02 Dec 2007 17:09:11 GMTWdatatablPGx!^x!^ createdSun, 02 Dec 2007 16:46:22 GMTWdatatablGLCLC createdTue, 30 Oct 2007 18:34:27 GMTWdatatablGLǺLǺ createdTue, 30 Oct 2007 18:36:26 GMTWdatatablGLL createdTue, 30 Oct 2007 18:50:48 GMTWdatatablGL%L% createdTue, 30 Oct 2007 18:51:01 GMTWdatatablGLFLF createdTue, 30 Oct 2007 18:38:46 GMTWdatatablGLL createdTue, 30 Oct 2007 18:33:48 GMTWdatatablPGx!x! createdSun, 02 Dec 2007 16:48:14 GMTWdatatablGLL createdTue, 30 Oct 2007 18:37:01 GMTWdatatablGLL createdTue, 30 Oct 2007 18:38:01 GMTWdatatablGL%L% createdTue, 30 Oct 2007 18:38:13 GMTWdatatablGL+L+ createdTue, 30 Oct 2007 18:38:19 GMTWdatatablGL1L1 createdTue, 30 Oct 2007 18:38:25 GMTWdatatablGLL createdTue, 30 Oct 2007 18:49:49 GMTWdatatablGLLLL createdTue, 30 Oct 2007 18:51:40 GMTWdatatablGLSLS createdTue, 30 Oct 2007 18:51:47 GMTWdatatablGLxLx createdTue, 30 Oct 2007 18:52:24 GMTWdatatablGLˀLˀ createdTue, 30 Oct 2007 18:52:32 GMTWdatatablGL˟L˟ createdTue, 30 Oct 2007 18:53:03 GMTWdatatablPGx"x" createdSun, 02 Dec 2007 16:51:40 GMTWdatatablG createdWed, 12 Mar 2008 19:50:23 GMTWdatatabl0Gdd createdSat, 08 Mar 2008 05:31:19 GMTWdatatabl0Gdd createdSat, 08 Mar 2008 05:31:19 GMTWdatatabl0Gfufu createdSat, 08 Mar 2008 05:39:01 GMTWdatatablPGx"x" createdSun, 02 Dec 2007 16:52:32 GMTWdatatabl0Gcc createdSat, 08 Mar 2008 05:28:08 GMTWdatatablGLoLo createdTue, 30 Oct 2007 18:56:31 GMTWdatatabl0Gcc createdSat, 08 Mar 2008 05:28:16 GMTWdatatabl0Gdd createdSat, 08 Mar 2008 05:31:58 GMTWdatatablGLoLo createdTue, 30 Oct 2007 18:56:31 GMTWdatatabl0Gcc createdSat, 08 Mar 2008 05:28:24 GMTWdatatablPGx&x& createdSun, 02 Dec 2007 17:10:03 GMTWdatatablGLL createdTue, 30 Oct 2007 18:58:37 GMTWdatatablGLL createdTue, 30 Oct 2007 18:58:39 GMTWdatatablPGx'x' createdSun, 02 Dec 2007 17:10:41 GMTWdatatablPGx#yx#y createdSun, 02 Dec 2007 16:55:21 GMTWdatatablPGx#x# createdSun, 02 Dec 2007 16:55:29 GMTWdatatablPGx#x# createdSun, 02 Dec 2007 16:55:52 GMTWdatatablPGx#x# createdSun, 02 Dec 2007 16:56:22 GMTWdatatablPGx'x' createdSun, 02 Dec 2007 17:10:53 GMTWdatatablPGx&gx&g createdSun, 02 Dec 2007 17:07:51 GMTWdatatablPGxڐxڐ createdMon, 03 Dec 2007 05:56:32 GMTWdatatablPGx&nx&n createdSun, 02 Dec 2007 17:07:58 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGx'x' createdSun, 02 Dec 2007 17:13:22 GMTWdatatablPGx'x' createdSun, 02 Dec 2007 17:13:26 GMT aiKGeneva_{x)ZoLANDmac on authFlickrThread (frob) Changes 11/13/07; 6:29:23 PM by DW Created. Launched from photoFanWebsite.authenticateWithFlickr. After we redirect to the authentication page, wait, then ask for the token. If it's not ready, wait and ask again. Up to a minute. If the token isn't avalable after a minute, we're fucked. local (i) for i = 1 to 6 clock.waitseconds (10) try flickr.api.auth.getToken (frob) break WdatatablG__ createdWed, 14 Nov 2007 02:29:38 GMTWdatatablG__ createdWed, 14 Nov 2007 02:29:22 GMTWdatatablG__ createdWed, 14 Nov 2007 02:29:24 GMTWdatatablG__ createdWed, 14 Nov 2007 02:29:58 GMTWdatatablG__ createdWed, 14 Nov 2007 02:13:34 GMTWdatatablG__ createdWed, 14 Nov 2007 02:14:21 GMTWdatatablG__ createdWed, 14 Nov 2007 02:14:30 GMTWdatatablG‘L‘L createdSun, 10 Jun 2007 13:38:33 GMTWdatatablG__ createdWed, 14 Nov 2007 02:14:32 GMTi Genevao&! \LANDmac Changes 1/20/08; 9:32:07 AM by DW Make sure errors can't prevent code updating (that's how we fix errors). 12/3/07; 2:50:55 PM by DW Do nightly backup at the appointed hour, if enabled. 12/2/07; 9:15:42 AM by DW Add call to archiver. 11/30/07; 11:42:35 AM by DW Do the ping at the beginning instead of the end, and do it in a separate thread so nothing waits for it. 11/30/07; 7:31:23 AM by DW Add call to ping. 11/29/07; 10:10:56 AM by DW Synch contacts at least once an hour. 11/25/07; 3:34:31 PM by DW Created. try //make sure errors can't prevent code updating (that's how we fix errors) thread.callscript (@photoFanSuite.ping, {}) bundle //nightly backup check if user.photoFan.prefs.backup.enabled if date.hour () == user.photoFan.prefs.backup.hourToStart thread.callscript (@photoFanSuite.backupFlickrPics, {}) photoFanSuite.checkFeeds () photoFanSuite.synchFlickrContacts () photoFanSuite.archiver () photoFanSuite.updateEverything () WdatatablPGøŗøŗ createdSun, 20 Jan 2008 17:32:07 GMTWdatatablPGøŘøŘ createdSun, 20 Jan 2008 17:32:08 GMTWdatatablPGyOyO createdMon, 03 Dec 2007 22:50:55 GMTWdatatablPGyPyP createdMon, 03 Dec 2007 22:50:56 GMTWdatatablPGx(>x(> createdSun, 02 Dec 2007 17:15:42 GMTWdatatablPGx(?x(? createdSun, 02 Dec 2007 17:15:43 GMTWdatatablPGuu createdFri, 30 Nov 2007 19:42:35 GMTWdatatablPGuu createdFri, 30 Nov 2007 19:42:36 GMTWdatatablPGulul createdFri, 30 Nov 2007 15:31:23 GMTWdatatablPGulul createdFri, 30 Nov 2007 15:31:23 GMTWdatatablPGt@t@ createdThu, 29 Nov 2007 18:10:55 GMTWdatatablPGt@t@ createdThu, 29 Nov 2007 18:10:56 GMTWdatatablPGoFoF createdSun, 25 Nov 2007 23:34:29 GMTWdatatablPGoFoF createdSun, 25 Nov 2007 23:34:31 GMTWdatatablPGøxøx createdSun, 20 Jan 2008 17:31:36 GMTWdatatablPGulul createdFri, 30 Nov 2007 15:31:17 GMTWdatatablPGyy createdMon, 03 Dec 2007 22:49:32 GMTWdatatablPGyǯyǯ createdMon, 03 Dec 2007 22:48:15 GMTWdatatablPGyy createdMon, 03 Dec 2007 22:48:38 GMTWdatatablPGyy createdMon, 03 Dec 2007 22:48:56 GMTWdatatablPGx(9x(9 createdSun, 02 Dec 2007 17:15:37 GMT CQ*lmGenevao&:Jf>LANDmac Changes 3/30/08; 12:17:09 PM by DW Init the bookmarks menu. 3/23/08; 12:46:06 PM by DW flickrToTwitter hookup. 3/17/08; 1:25:42 PM by DW Check feeds at the appointed minute in a separate thread. 3/15/08; 8:37:28 PM by DW If the default feeds aren't present there was an error initializing, so we re-init them. 3/6/08; 10:17:40 PM by DW Some users report that AP and AFP feeds aren't updating. Try the relocation routine again. 2/20/08; 6:41:38 PM by DW Some downloaded pics have pubDates in the future, fix them. 2/19/08; 9:42:50 AM by DW Download podcatcher.root into the Tools folder. 2/6/08; 7:08:42 PM by DW New maintenence check. 2/5/08; 10:17:51 AM by DW Relocate AFP feed. 2/2/08; 10:03:21 PM by DW Install AFP feed. 1/20/08; 8:11:04 AM by DW Updates for new Events page. 1/10/08; 10:56:28 AM by DW Ping after detecting an update. 12/31/07; 10:15:55 AM by DW Only publish the feed if it's already been published. 12/31/07; 10:07:12 AM by DW One-time code. Rebuild the feed so the corner turns on the username problem. 12/31/07; 4:32:21 AM by DW One-time code. Delete all feed tables that don't have a title. These are created when we attempt to subscribe to a feed and fail. It won't happen in the future (knock wood) so this code needs to run just once to fix installations that were broken by previous errant code. 12/17/07; 1:02:11 PM by DW Add log message to Events page for new or updated parts. See Frontier.tools.data.updateCommandScript for code that implements. 12/4/07; 11:38:57 AM by DW Work around installation problem. 12/1/07; 9:43:58 AM by DW If photoFanSuite.myFeed.publish is true, publish the feed and set it false. 11/28/07; 11:38:17 AM by DW Created. Just calls photoFanSuite.init. local (minute = date.minute ()) photoFanSuite.init () bundle //flickrToTwitter if user.photoFan.prefs.flickrToTwitter.enabled if (minute % user.photoFan.prefs.flickrToTwitter.minutesBetweenChecks) == 0 photoFanSuite.flickrToTwitter.checkFeed () bundle //if it's the minute for scans, check feeds in a separate thread if minute == user.photoFan.prefs.minuteToDownload thread.callscript (@photoFanSuite.checkFeeds, {}) bundle //do maintenence checks if not defined (user.photoFan.prefs.flags.flFixBookmarkMenu) //3/30/08 by DW try try {delete (@user.menus.bookmarksMenu)} user.menus.bookmarksMenu = bookmarksMenu.init () user.prefs.flBookmarkMenu = true menus.buildMenuBar () user.photoFan.prefs.flags.flFixBookmarkMenu = clock.now () filemenu.save () if not defined (user.photoFan.prefs.flags.flFixDefaultSubs) //3/15/08 by DW on check (url) try if not defined (user.photofan.feeds.[url]) photoFanSuite.addFeed (url) check (photoFanSuite.data.urls.ap) check (photoFanSuite.data.urls.afp) //2/5/08; 12:15:14 PM by DW check ("http://xml.flickrfan.org/river/defaultReadingList.opml") user.photoFan.prefs.flags.flFixDefaultSubs = clock.now () filemenu.save () if not defined (user.photoFan.prefs.flags.flFixPictureDates) //2/20/08 by DW try photoFanSuite.utilities.fixPictureDates () user.photoFan.prefs.flags.flFixPictureDates = clock.now () filemenu.save () if not defined (user.photoFan.prefs.flags.flDownloadPodcatcher) //2/19/08 by DW try photoFanSuite.utilities.downloadPodcatcher () user.photoFan.prefs.flags.flDownloadPodcatcher = clock.now () if not defined (user.photoFan.prefs.flags.flMoveApFeed2) //2/6/08 by DW try table.rename (@user.photofan.feeds.["http://static.flickrfan.org/ap2/rss.xml"], photoFanSuite.data.urls.ap) user.photoFan.prefs.flags.flMoveApFeed2 = clock.now () if not defined (user.photoFan.prefs.flags.flMoveAfpFeed2) //2/5/08 by DW try table.rename (@user.photofan.feeds.["http://static.flickrfan.org/afp/rss.xml"], photoFanSuite.data.urls.afp) user.photoFan.prefs.flags.flMoveAfpFeed2 = clock.now () if not defined (user.photoFan.prefs.flags.flAddAgenceFrancePresse) //2/2/08 by DW try if not defined (user.photoFan.feeds.[photoFanSuite.data.urls.afp]) photoFanSuite.addFeed (photoFanSuite.data.urls.afp) user.photoFan.prefs.flags.flAddAgenceFrancePresse = clock.now () if not defined (user.photoFan.prefs.flags.flRebuildMyFeed) //12/31/07 by DW try if sizeof (user.photoFan.prefs.myFeed.url) > 0 //it's been published before photoFanSuite.myFeed.publish () photoFanSuite.ping () user.photoFan.prefs.flags.flRebuildMyFeed = clock.now () if not defined (user.photoFan.prefs.flags.flCheckBrokenFeedsPage) //12/31/07 by DW local (i, adrfeed) for i = sizeof (user.photoFan.feeds) downto 1 adrfeed = @user.photoFan.feeds [i] if not defined (adrfeed^.title) delete (adrfeed) user.photoFan.prefs.flags.flCheckBrokenFeedsPage = clock.now () if not defined (user.photoFan.prefs.flags.flApFeedMove) //1/2/08 by DW local (adrfeed = @user.photofan.feeds.["http://static.flickrfan.org/ap/rss.xml"]) if defined (adrfeed^) table.rename (adrfeed, photoFanSuite.data.urls.ap) user.photoFan.prefs.flags.flApFeedMove = clock.now () if not defined (user.photoFan.prefs.flags.flNewEventsPage) //1/20/08 by DW photoFanSuite.utilities.mergeLogs () user.photoFan.prefs.flags.flNewEventsPage = clock.now () if user.photoFan.prefs.myFeed.fldirty photoFanSuite.myFeed.publish () user.photoFan.prefs.myFeed.fldirty = false bundle //log new parts if defined (system.temp.ctNewParts) if system.temp.ctNewParts > 0 local (s = system.temp.ctNewParts + " new or updated parts.") photoFanSuite.addToLog ("Code Update", s, clock.ticks ()) system.temp.ctNewParts = 0 thread.callscript (@photoFanSuite.ping, {}) //1/10/08 by DW bundle //12/4/07 by DW -- work around installation problem In photoFanThread.script, we called photoFanSuite.init too early. When it would set up the initial feeds, it would fail to read the feed and the title wouldn't be set, causing lots of breakage elsewhere. It may have happened on some initial users systems, rather than make them reinstall, we fix it here. on checkfeed (url) local (adrfeed = @user.photoFan.feeds.[url]) if not defined (adrfeed^.title) photoFanSuite.getFeedInfo (adrfeed) checkfeed (photoFanSuite.data.urls.ap) checkfeed (photoFanSuite.data.urls.defaultReadingList) Wdatatabl0G5E5E createdSun, 30 Mar 2008 19:17:09 GMTWdatatabl0G5F5F createdSun, 30 Mar 2008 19:17:10 GMTWdatatabl0G   createdSun, 23 Mar 2008 19:46:05 GMTWdatatabl0G   createdSun, 23 Mar 2008 19:46:07 GMTWdatatablG!! createdMon, 17 Mar 2008 20:25:41 GMTWdatatablG!! createdMon, 17 Mar 2008 20:25:43 GMTWdatatablG createdSun, 16 Mar 2008 03:37:28 GMTWdatatablG  createdSun, 16 Mar 2008 03:37:29 GMTWdatatabl0G createdFri, 07 Mar 2008 06:17:39 GMTWdatatabl0G createdFri, 07 Mar 2008 06:17:40 GMTWdatatablG$$ createdThu, 21 Feb 2008 02:41:38 GMTWdatatablG$$ createdThu, 21 Feb 2008 02:41:39 GMTWdatatablGUU createdTue, 19 Feb 2008 17:42:49 GMTWdatatablGUU createdTue, 19 Feb 2008 17:42:50 GMTWdatatablPG϶:϶: createdThu, 07 Feb 2008 03:08:42 GMTWdatatablPG϶;϶; createdThu, 07 Feb 2008 03:08:43 GMTWdatatablPGOO createdTue, 05 Feb 2008 18:17:51 GMTWdatatablPGPP createdTue, 05 Feb 2008 18:17:52 GMTWdatatabl0Gʙ(ʙ( createdSun, 03 Feb 2008 06:03:20 GMTWdatatabl0Gʙ)ʙ) createdSun, 03 Feb 2008 06:03:21 GMTWdatatablPGøø createdSun, 20 Jan 2008 16:11:03 GMTWdatatablPGøø createdSun, 20 Jan 2008 16:11:04 GMTWdatatablPGë\ë\ createdThu, 10 Jan 2008 18:56:28 GMTWdatatablPGë]ë] createdThu, 10 Jan 2008 18:56:29 GMTWdatatablPGÞqÞq createdMon, 31 Dec 2007 18:15:54 GMTWdatatablPGÞqÞq createdMon, 31 Dec 2007 18:15:55 GMTWdatatablPGÞoÞo createdMon, 31 Dec 2007 18:07:11 GMTWdatatablPGÞoÞo createdMon, 31 Dec 2007 18:07:12 GMTWdatatablGÞ!UÞ!U createdMon, 31 Dec 2007 12:32:21 GMTWdatatablGÞ!VÞ!V createdMon, 31 Dec 2007 12:32:22 GMTWdatatablGÌ#Ì# createdMon, 17 Dec 2007 21:02:10 GMTWdatatablGÌ#Ì# createdMon, 17 Dec 2007 21:02:11 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:38:57 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:38:58 GMTWdatatablPGv]v] createdSat, 01 Dec 2007 17:43:57 GMTWdatatablPGv_v_ createdSat, 01 Dec 2007 17:43:59 GMTWdatatablGss createdWed, 28 Nov 2007 19:38:16 GMTWdatatablGss createdWed, 28 Nov 2007 19:38:18 GMTWdatatabl0G createdSun, 23 Mar 2008 19:43:09 GMTWdatatabl0G createdSun, 23 Mar 2008 19:42:35 GMTWdatatabl0G createdSun, 23 Mar 2008 19:42:44 GMTWdatatabl0G createdSun, 23 Mar 2008 19:43:00 GMTWdatatabl0G Z Z createdSun, 23 Mar 2008 19:45:14 GMTWdatatablG!:!: createdMon, 17 Mar 2008 20:23:06 GMTWdatatablG!K!K createdMon, 17 Mar 2008 20:23:23 GMTWdatatablG!`!` createdMon, 17 Mar 2008 20:23:44 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:25:44 GMTWdatatablGbb createdSun, 16 Mar 2008 03:21:54 GMTWdatatabl0G5f5f createdSun, 30 Mar 2008 19:17:42 GMTWdatatabl0G77 createdSun, 30 Mar 2008 19:28:24 GMTWdatatabl0G44 createdSun, 30 Mar 2008 19:15:19 GMTWdatatablG$$ createdThu, 21 Feb 2008 02:40:18 GMTWdatatablGbb createdSun, 16 Mar 2008 03:21:54 GMTWdatatablG createdSun, 16 Mar 2008 03:24:13 GMTWdatatablGVV createdSun, 16 Mar 2008 03:25:58 GMTWdatatablG createdSun, 16 Mar 2008 03:24:17 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablG$$ createdThu, 21 Feb 2008 02:40:18 GMTWdatatablPG createdTue, 05 Feb 2008 18:11:34 GMTWdatatablPGEE createdTue, 05 Feb 2008 18:13:25 GMTWdatatablPGyy createdTue, 05 Feb 2008 18:14:17 GMTWdatatablG$$ createdThu, 21 Feb 2008 02:40:18 GMTWdatatablPG createdTue, 05 Feb 2008 18:11:34 GMTWdatatablPGEE createdTue, 05 Feb 2008 18:13:25 GMTWdatatablPGyy createdTue, 05 Feb 2008 18:14:17 GMTWdatatablPG createdTue, 05 Feb 2008 18:11:34 GMTWdatatablPGEE createdTue, 05 Feb 2008 18:13:25 GMTWdatatablPGyy createdTue, 05 Feb 2008 18:14:17 GMTWdatatablPG createdTue, 05 Feb 2008 18:11:34 GMTWdatatablPGEE createdTue, 05 Feb 2008 18:13:25 GMTWdatatablPGyy createdTue, 05 Feb 2008 18:14:17 GMTWdatatabl0Gʘʘ createdSun, 03 Feb 2008 05:58:44 GMTWdatatabl0Gʘʘ createdSun, 03 Feb 2008 06:02:28 GMTWdatatabl0Gʘʘ createdSun, 03 Feb 2008 06:02:01 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:25:54 GMTWdatatablPGÞqÞq createdMon, 31 Dec 2007 18:12:35 GMTWdatatablPGÞqÞq createdMon, 31 Dec 2007 18:12:36 GMTWdatatablPGÞq`Þq` createdMon, 31 Dec 2007 18:13:52 GMTWdatatablPGÞpnÞpn createdMon, 31 Dec 2007 18:09:50 GMTWdatatablGÞ VÞ V createdMon, 31 Dec 2007 12:28:06 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:25:54 GMTWdatatablGÞ _Þ _ createdMon, 31 Dec 2007 12:28:15 GMTWdatatablGÞ uÞ u createdMon, 31 Dec 2007 12:28:37 GMTWdatatablGÞ Þ createdMon, 31 Dec 2007 12:29:19 GMTWdatatablGÞ Þ createdMon, 31 Dec 2007 12:28:51 GMTWdatatablGÞ Þ createdMon, 31 Dec 2007 12:29:34 GMTWdatatablGÞ VÞ V createdMon, 31 Dec 2007 12:28:06 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:25:54 GMTWdatatablPGá%á% createdThu, 03 Jan 2008 04:40:05 GMTWdatatablPGáá createdThu, 03 Jan 2008 04:39:28 GMTWdatatablPGá á createdThu, 03 Jan 2008 04:39:41 GMTWdatatablGÞ VÞ V createdMon, 31 Dec 2007 12:28:06 GMTWdatatablGøYøY createdSun, 20 Jan 2008 15:48:41 GMTWdatatablGø|ø| createdSun, 20 Jan 2008 15:49:16 GMTWdatatablPGvFvF createdSat, 01 Dec 2007 17:43:34 GMTWdatatablPGvUvU createdSat, 01 Dec 2007 17:43:49 GMTWdatatablPGvIvI createdSat, 01 Dec 2007 17:43:37 GMTWdatatablGÌ#&Ì#& createdMon, 17 Dec 2007 20:59:18 GMTWdatatablGÌ#Ì# createdMon, 17 Dec 2007 21:00:47 GMTWdatatablGÌ#Ì# createdMon, 17 Dec 2007 21:00:54 GMTWdatatablGÌ#Ì# createdMon, 17 Dec 2007 21:01:19 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablGÌ#Ì# createdMon, 17 Dec 2007 21:01:53 GMTWdatatablPGulul createdFri, 30 Nov 2007 15:31:17 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:39:27 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:39:51 GMTWdatatablPGz=z= createdTue, 04 Dec 2007 19:45:01 GMTWdatatablPGzTzT createdTue, 04 Dec 2007 19:45:24 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:43:55 GMTWdatatablGNgNg createdFri, 20 Apr 2007 19:51:11 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:46:08 GMTWdatatablPGzz createdTue, 04 Dec 2007 19:46:08 GMTCQ Genevao&O7-oLANDmac Changes 2/2/08; 4:40:02 PM by DW Remove all image tables created more than a week ago whose files have been deleted. The "week ago" constraint makes it much faster and still achieves the desired effect of keeping the table from growing out of control. bundle //remove all image tables whose files have been deleted local (i, adr, ctdeleted=0, marktime = clock.now () - (60 * 60 * 24 * 7)) for i = sizeof (user.photofan.images) downto 1 adr = @user.photofan.images [i] if timecreated (adr) < marktime if defined (adr^.f) if not file.exists (adr^.f) delete (adr) ctdeleted++ else delete (adr) ctdeleted++ if ctdeleted > 0 filemenu.save () dialog.alert (ctdeleted) WdatatablGMaMa createdSun, 03 Feb 2008 00:40:01 GMTWdatatablGMcMc createdSun, 03 Feb 2008 00:40:03 GMTWdatatablPGOO createdSun, 03 Feb 2008 00:47:03 GMTWdatatablGJJ createdSun, 03 Feb 2008 00:29:00 GMTWdatatablGJJ createdSun, 03 Feb 2008 00:29:15 GMTWdatatablGJJ createdSun, 03 Feb 2008 00:29:20 GMTWdatatablGJJ createdSun, 03 Feb 2008 00:29:26 GMTWdatatablPGN5N5 createdSun, 03 Feb 2008 00:43:33 GMTWdatatablGK$K$ createdSun, 03 Feb 2008 00:30:28 GMTWdatatablGKK createdSun, 03 Feb 2008 00:29:54 GMTWdatatablGK K createdSun, 03 Feb 2008 00:30:02 GMTWdatatablGK>K> createdSun, 03 Feb 2008 00:30:54 GMTWdatatablGK-K- createdSun, 03 Feb 2008 00:30:37 GMTWdatatablGK0K0 createdSun, 03 Feb 2008 00:30:40 GMTWdatatablGK>K> createdSun, 03 Feb 2008 00:30:54 GMTWdatatablGLL createdSun, 03 Feb 2008 00:37:55 GMTWdatatablGLL createdSun, 03 Feb 2008 00:38:01 GMTWdatatablGKZKZ createdSun, 03 Feb 2008 00:31:22 GMT {w.o&-  ". 9 everyHour_ everyMinutek# everyNight{GenevaW9x,q(yiLANDmac on backupFlickrPics () Changes 12/2/07; 9:24:04 AM by DW Ported from flickrRivr. photoFanSuite.init () if user.photoFan.prefs.backup.enabled or user.photoFan.prefs.backup.flImmediateBackup local (backupstartticks = clock.ticks ()) user.photoFan.prefs.backup.flImmediateBackup = false //consume it bundle //add new photos to table local (photos, now = clock.now (), mindate, adr, serialnum) local (id = user.photoFan.prefs.flickr.id) bundle //set mindate if user.photoFan.prefs.backup.whenLastBackup == date (0) mindate = nil //go all the way back to the beginning else mindate = user.photoFan.prefs.backup.whenLastBackup - (60 * 60) //one hour grace Flickr.photos.search (id, minUploadDate:mindate, adrphotosarray:@photos) for adr in @photos serialnum = user.photoFan.prefs.backup.serialnum++ user.photoFan.prefs.backup.photos.[string.padwithzeros (serialnum, 5)] = adr^ user.photoFan.prefs.backup.whenLastBackup = now filemenu.save () bundle //download all the photos local (i, adr) for i = sizeof (user.photoFan.prefs.backup.photos) downto 1 local (startticks = clock.ticks (), logtext) adr = @user.photoFan.prefs.backup.photos [i] try local (subfolder) msg ("Backing up: " + adr^.title) subfolder = Flickr.photos.backup (adr^.id, user.photoFan.prefs.backup.folder) bundle //set logtext local (openfolderurl = photoFanSuite.data.urls.openFolderUrl + string.urlencode (subfolder)) local (foldersize = string.megabytestring (file.bytesInFolder (subfolder))) logtext = "Backed up " + adr^.title + " (" + foldersize + ")." delete (adr) else logtext = "Error backing up \"" + nameof (adr^) + "\": " + tryerror adr^.error = tryerror photoFanSuite.addToLog ("Backup", logtext, startticks) msg ("") photoFanSuite.addToLog ("Backup", "Backup complete.", backupstartticks) bundle //test code backupFlickrPics () WdatatablPGWLWL createdWed, 07 Nov 2007 15:48:28 GMTWdatatablPGll createdSat, 24 Nov 2007 05:37:38 GMTWdatatablPGll createdSat, 24 Nov 2007 05:37:39 GMTWdatatablPG\a\a createdSun, 11 Nov 2007 18:22:25 GMTWdatatablPGll createdSat, 24 Nov 2007 05:37:15 GMTWdatatablPG]ڃ]ڃ createdMon, 12 Nov 2007 18:25:07 GMTWdatatablPGW=AW=A createdWed, 07 Nov 2007 18:00:33 GMTWdatatablPGTT createdMon, 05 Nov 2007 17:54:14 GMTWdatatablPGWW createdWed, 07 Nov 2007 15:55:25 GMTWdatatablPGWW createdWed, 07 Nov 2007 15:55:29 GMTWdatatablPGW %W % createdWed, 07 Nov 2007 15:56:21 GMTWdatatablPGW RW R createdWed, 07 Nov 2007 15:57:06 GMTWdatatablPGW 4W 4 createdWed, 07 Nov 2007 15:56:36 GMTWdatatablGKK createdWed, 22 Aug 2007 00:11:39 GMTWdatatablPGW> W> createdWed, 07 Nov 2007 18:03:55 GMTWdatatablPGW>wW>w createdWed, 07 Nov 2007 18:05:43 GMTWdatatablPGW>W> createdWed, 07 Nov 2007 18:03:59 GMTWdatatablPGWW createdWed, 07 Nov 2007 15:51:31 GMTWdatatablPGW>W> createdWed, 07 Nov 2007 18:06:22 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:10:12 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:10:23 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:10:27 GMTWdatatablPGl}l} createdSat, 24 Nov 2007 02:37:49 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:10:32 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:10:53 GMTWdatatablPGlvlv createdSat, 24 Nov 2007 03:07:34 GMTWdatatablPGll createdSat, 24 Nov 2007 02:47:53 GMTWdatatablPGlӘlӘ createdSat, 24 Nov 2007 02:59:36 GMTWdatatablPGlОlО createdSat, 24 Nov 2007 02:46:54 GMTWdatatablPGlclc createdSat, 24 Nov 2007 02:58:43 GMTWdatatablPGl-l- createdSat, 24 Nov 2007 02:36:29 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:10:59 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:11:04 GMTWdatatablPGl-l- createdSat, 24 Nov 2007 02:36:29 GMTWdatatablPGW?W? createdWed, 07 Nov 2007 18:11:06 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGll createdSat, 24 Nov 2007 03:09:06 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGW qW q createdWed, 07 Nov 2007 15:57:37 GMTWdatatablPGW uW u createdWed, 07 Nov 2007 15:57:41 GMT o&o& o&o& o&o& nj.o&o&  ' ,fileMenuradiousern=-U?Genevaûʪ:rsLANDmac FlickrFan Change Notes Minor fixes in 0.57 Per Stephen Edgar's excellent report. 1. No longer, under any circumstances, will the home page of the FlickrFan site open on launch. We're no longer shipping a single-purpose OPML app, so it's not appropriate, and trying to turn it off with a flag left it in a confusing state. Rather than fix related bugs, I decided to just wire the feature off. The code is still in photoFanThread if it should need to, for some reason, be revived. 2. The option that controls whether we use Firefox or Safari or the user's default browser is strictly a Mac thing, and given #1, no longer relevant. The option was removed from the prefs page. Integrating with the August 2008 release of the OPML Editor Various changes to allow it to install from the net into the Tools folder of the OPML Editor. 1. No longer open the FlickrFan home page when the editor launches. 2. New menu command to open the home page in the sub-menu of the Tools menu. 3. Add #installer table with an onInstall script that opens the home page. 4. No longer update ourselves, that's going to be handled by the OPML Editor. 5. Version 0.55. FlickrToTwitter functionality baked into FlickrFan I operate a web service that watches people's Flickr feeds and when a new picture shows up, it automatically posts that picture to their Twitter account. It can also be set up to only forward pictures with a specific tag. The service was enhanced to also route pictures to Pownce. Since other similar services are popping up, and I have limited ability to pay for other people's web services, I decided to start adding these features to FlickrFan. If it proves popular I can easily add more features here since bandwidth isn't of concern (it's a fully distributed app). How to... 1. First set up the prefs. (Click this link with FlickrFan running. Screen shot.) 2. When it checks for the first time, none of the pictures in your feed will be posted. Only new pictures are posted. 3. No more than 5 pictures are posted every hour. 4. It checks once every 10 minutes, so the average amount of time it takes to update after posting a new picture to Flickr is 5 minutes. (This number can be configured.) 5. If you're already using TwitterGram, you should turn that one off when you start using this one (otherwise your pictures will be posted twice to your Twitter account). Please report back here if it works, or if it doesn't. Agence France-Presse photos in FlickrFan Something new today for FlickrFan users! There's now a new built-in feed from one of the great international news organizations, Agence France-Presse. The result is now ready for FlickrFan users to try out.

How to

To get the latest version, 0.46... 1. You should already have the automatic update that comes at the top of the hour. If not, click here to update immediately. 2. Within a minute, your copy of FlickrFan will automatically subscribe to the Agence France-Presse feed. 3. At the top of the hour it will download the first batch of pictures.

Welcome to my fire hose

Now, there are a lot of pictures. Yesterday their feed contained over 3000 pictures. I don't know whether this is good or not. When they asked what kind of pictures I wanted I said I want them all, and I guess that's what they gave me. I figured we could create sub-feeds if we needed to.

Matt Mullenweg saved the day

Because there are so many pictures, I asked my friend Matt Mullenweg, if his company Automattic could help us out with server space and bandwidth, and he said yes. So the AFP pictures are hosted on wordpress.com. Many thanks to Matt and his company for helping us out. If you can find a way of thanking them, please do. :=)

Opting-out

If you want to opt-out of the AFP feed, you can easily do so: 1. Visit the Feeds page (click this link on the machine running FlickrFan). 2. Scroll down to the bottom of the page where you'll see a checkbox for the Agence France-Presse feed. (Screen shot.) 3. Uncheck the box, and click on Submit. You can go into the Finder and delete the folder in the screenSaverPics folder.

Getting the full version

I'm going to do a new build of the full app after I'm sure this update goes through without glitches. Check back here later today for a pointer. New features and fixes in 0.45 1. New page on the desktop website that allows you to subscribe to a feed provided as an argument in the web address. Makes it easy for me to publish a link that with one click will subscribe users to a feed. 2. Updated the Feeds page so that the Agence France-Presse feed has equal billing with the AP feed. Also expanded "AP" to "Associated Press." 3. Thanks to Matt Mullenweg, Automattic and Wordpress.com for generously hosting the Agence France-Presse photos. There are lots of them (you'll see, it's quite a flow) and they're big). My bandwidth expense would have been huge without their help, which is much appreciated. 4. In photoFanSuite.background.everyNight, remove all image tables created more than a week ago whose files have been deleted. 5. We pass through the pubDate from the RSS feed, if provided, in the creation and modified dates of the image files. photoFanSuite.parseXstruct, photoFanSuite.downloadImage. Roll the clock back on updates A new page lets you set the date for updating. Screen shot. We install all new or updated parts since that date. This page is added primarily for support, when it seems as if a user is missing some updates, it gives us a way to get them fully updated, for sure. Click here to get all updates released since Dec 1, 2007. RSS feed for changes There's a new RSS feed for changes recorded on this site. New features for the Events page in v0.43 There are two new links on the Events page, Previous and Next, which move you back and forward in time. When you click on the Events link on each page you're looking at the events for today (pictures downloaded, code updates, Flickr backups, etc). When you click on the Previous link you see yesterday's events, click on Next to move forward in time. Screen shot. In the upper-left corner of the page you can see the date whose events are being displayed. The links and date display are repeated at the bottom of the page. If you don't have version 0.43, you can update manually by clicking this link. PS: If it works and you like it, feel free to post a note here or send an email. It helps to know when it's not working and when it is working. :-) If your FlickrFan stopped updating There have been reports of problems with FlickrFan installations not updating, or cryptic error messages showing up when refreshing the desktop website. All the problems that have been reported so far can be cured by clicking on the link below: http://127.0.0.1:5337/photofan/updateNow After updating, refresh the home page. The version number, in the upper-left corner of the home page should say "Beta version 0.41." If this does not cure the problem and you either aren't getting updates, or the desktop website isn't working, please post a comment below. I want to get everyone working as soon as possible. Upload defaults This is a convenience, not earth-shaking, but nice to have... 1. Update to get the new features, version 0.39. 2. There's a new prefs page for setting Upload defaults. 3. You can set the default description, tags, access controls (public, friends, family, or hidden from Flickr's search command), content type or safety level. These values apply to all uploads through the drop folder. Of course you can use the Flickr website to change the values for any individual picture. How to be absolutely sure you have the latest version If for some reason your copy of FlickrFan isn't updating, you can always get the latest version, quickly, without losing any of your data or prefs or downloading any pictures again. (Key point.) 1. Download photoFan.root. 2. Open the OPML folder, copy it into Guest Databases/Apps/Tools. 3. Quit the OPML and relaunch. 4. Check the version number in the upper left corner of the desktop website home page. Screen shot. If FlickrFan is opening the wrong browser... If your default browser is not Safari or Firefox, on startup, FlickrFan will launch one of those browsers to display the home page of the desktop website. This change note explains a feature, new in version 0.38, that makes it possible to turn off this feature. 1. Update FlickrFan to v0.38. 2. Visit the Advanced prefs page. The third item is the one you want. Screen shot. 3. Check the box, click on Submit. Next time you launch OPML, the desktop website home page will open in the default browser, OmniWeb, Opera, Camino, etc. (Even Firefox or Safari, for that matter.) Eventually, if everything goes well, we'll phase out the feature. Didn't want to do it all at once because it's a dangerous place for breakage. One step at a time. Subscribe to a Flickr tag New in version 0.37. It was always possible to subscribe to a Flickr tag, if you knew the syntax for RSS feeds that do that, but this new page makes it as easy as entering a tag into a web form. The new page is linked to from the bottom of the Feeds page. When you successfully add a Flickr tag feed it will appear near the bottom of the Feeds page, and will work like any other feed you subscribe to. Screen shot. Lots of little fixes for 0.35 1. A new page that Updates Now so users don't have to trek into the OPML Editor to cause an update to happen immediately. Screen shot. 2. Link from each Change Note to the home page of the change notes site. 3. One-time code to rebuild feeds Fixed major bug on Feeds page The ability to subscribe to an arbitrary feed was added late in the pre-public-beta period, and wasn't tested thoroughly enough. If you tried to subscribe to a feed that couldn't be processed, the Feeds page would break. Many apologies to the people who reported and experienced this bug. It's been fixed.

How to manually udate

FlickrFan will automatically get the updates at the top of the hour. If you can't wait till then to try it out, you can update manually as follows: 1. Bring the OPML app to the front. 2. In the WIndow menu choose photoFan.root, bringing that file to the front. 3. From the Tools menu, choose Update front tool. If it worked, you should see a dialog like this. A picture named newparts.gif It may take a minute to fix the database so the Feeds page correctly displays.

How to tell if you got the update

Now if you subscribe to a bad feed it should give you an error message in red, and proceed without any further problems. Also, I bumped the version to 0.34, look in the top left corner of any page on the FlickrFan local website. If it says 0.34, you have the new code. Again apologies for this programming error. How to find a user's feed, if they have one As you may know, every FlickrFan user can have a feed of pictures they want to share with others. It works much like the POST button in Radio 8 or a linkblog with Google Reader. On the public list, there's now a white-on-orange XML icon next to every user who has a feed who hasn't opted-out. You can set it up on the first two Prefs pages. On the first page, you set the password that protects the feed so only you can write to it. You can also uncheck a box to opt-out of the public list of users. Screen shot. On the second page, you can set the title and description of the feed. Screen shot. You must share one or more items in order for the feed to be generated. You can do that by browsing pictures on the Events page. Click on the title of the picture to view it, and then click the Share button at the bottom of the Share Picture page. So far there are only a handful of people with feeds, and most people are just trying it out, but we're still in the first 48 hours. :-) List of newly-installed FlickrFans Every hour on the hour, after doing its scan of RSS feeds, FlickrFan pings the community server. It maintains a reverse-chronologic list of newly installed copies of FlickrFan with links to the Flickr accounts of each of the users. You can opt-out of this list on the first Prefs page. To do so, uncheck the box at the bottom of the page then click the Submit button. At the top of the hour it will transmit this preference and your name will be removed from the list. If you change your mind and want to be on the list, just check the box and click Submit. Installation tips for v0.33
To install a fresh version of FlickrFan, download the disk image, drag the OPML folder into the Applications folder. Copy the whole folder, every file is important. To get started, open the folder and double-click on the OPML application. It takes a minute the first time it runs. When it's ready it opens a page in the browser, either Firefox or Safari. Follow the instructions on the opening page. If you have questions, post a comment here. I hope you like it! Dave Version number in the user interface The version number and release date appear in the UI above the name of the product. Bumped the version number to 0.32. Various UI, small nice-to-have features 1. Change the name in the UI from Rrromantico! to FlickrFan. The name is totally parameterized so it is easy to change again. 2. When you subscribe to new feeds on the Feeds page immediately read them instead of waiting until the top of the hour. It seems silly for the app to just sit there waiting. 3. When new parts are received through updates, log them on the Events page. Frontier.tools.data.updateCommandScript Add comments to change notes using Disqus I want to give users a way to ask questions about new features as they come online, so I added the ability to comment on each item. Turns out to be a fairly complicated change because there must now be a page for each individual change. Flickr drop folder If enabled, we create a folder on the desktop called Flickr. Any pictures you drop in that folder are automatically posted to Flickr. You must authorize the OPML Editor app to upload to your Flickr account, a link is provided on the prefs page Advanced prefs page A new page allows you to set the maximum concurrent downloads and the smallest picture size, and perhaps other things later. Archiving pictures You can set a limit of the number of pictures in the screen saver folder, when that limit is reached, we automatically delete or archive the oldest pictures first. By default the feature is enabled and it deletes pictures it doesn't save them. The default limit is 5000 pictures. Backing up your Flickr pictures A new set of prefs controls the backing up of the pictures stored on flickr.com. You must authorize the OPML Editor to read and write your Flickr account (this is necessary to download the original pictures, otherwise we can only download smaller versions, it's also necessar for uploading pictures). The first prefs page for backup has this link. The second page allows you to schedule an incremental backup every evening, we only download the new pictures since the last time we backed up. You can also specify the start hour. Sharing pictures Thanks to Scoble for driving this. Now there's a Share This Picture button at the bottom of the Picture Viewer page. Press the button and a form pops up with a place for a title and description, pre-populated with the title and description that the original photographer provided. You can edit either, then click the Share button, and it is added to your RSS feed. The form is displayed again, but this time the Share button says Update, so you can continue to edit as long as you want. There's a new Prefs page that allows you to set the title and description of your feed, and choose a password so that no one else can upload your feed (lightweight blog-style security). There's an option to have your password mailed to you. (To do: find a mail server to relay through.) Port the prefs system from FlickrFan There are lots of options users need to be able to set that go beyond setup, that's what the browser-based prefs system is for. Revamp picture viewing in the browser The random page had most of the code I wanted. Instead of linking from the Event Log directly to the picture, we're linking to a new page that displays the picture. Example. This gives us a place to implement the collaborative features I've been talking about with Scoble. The starting point is the Events page, that's where you see the pictures as they came in, it's like a blog or the feed in Facebook or the Home page in Twitter. Every event is listed there. New look and organization for the desktop website The menus behave as they should, with the current page highlighted. The graphic at the top of the page is gone. There's a background picture, which the user will be able to set (eventually). I played around with product names, and found one that makes me laugh. So wtf, I put it at the top of the screen, along with the menu of pages. It's all still rough, but getting less so and more functional. Pinging Every copy of photoFan pings back to a central server every hour at the top of the hour, telling us what feeds it's subscribed to, how many times each feed has been checked, how many pictures have been downloaded from each feed. This data will be used to form an aggregate picture of the picture feed ecosystem. We will also use this facility in the future for community features, as yet undetermined. :-) The ping call appears in the log. New change notes reporting system I have a new editorial system for creating and editing change notes, not just for photoFan.root but for all OPML Editor based apps. The notes are published in HTML and in OPML. Clearly they should also be published in RSS (but not today, I'm rushed to get out of town). Synching contacts Your contacts now are kept in synch with the contacts from flickr.com. When you make a change, either removing someone or adding someone, that will be reflected within 5 minutes on your Feeds page, usually more quickly. (This is a function of how frequently we check.) Better logging of picture downloads The Log page now includes descriptive information about each picture as it is being downloaded. To-do Random command appears on the viewpicture page. Add element to the feed. Use real semaphores in photoFan contact synching. Flickr drop boxes. RSS version of change notes. $datatablfûûJdatatabl:$ʩʩ! ʩ changenumcreatedJdatatabl:$  changenumcreatedJdatatabl:$   changenumcreatedWdatatabl0G   createdSun, 23 Mar 2008 18:10:17 GMTWdatatabl0G ; ; createdSun, 23 Mar 2008 18:10:51 GMTWdatatabl0G R R createdSun, 23 Mar 2008 18:11:14 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:11:25 GMTWdatatabl0G ? ? createdMon, 24 Mar 2008 18:24:46 GMTWdatatabl0G createdSun, 23 Mar 2008 19:21:22 GMTWdatatabl0G createdSun, 23 Mar 2008 19:21:30 GMTWdatatabl0G createdSun, 23 Mar 2008 19:22:01 GMTWdatatabl0G createdSun, 23 Mar 2008 19:22:20 GMTWdatatabl0G @ @ createdMon, 24 Mar 2008 18:25:12 GMTWdatatabl0G @ @ createdMon, 24 Mar 2008 18:25:02 GMTJdatatabl:$̘2̘2 ̘2 changenumcreatedWdatatablPG̘>̘> createdMon, 04 Feb 2008 18:23:58 GMTWdatatablPG̘Q̘Q createdMon, 04 Feb 2008 18:24:17 GMTWdatatablPG̙̙ createdMon, 04 Feb 2008 18:27:17 GMTWdatatablPG̙̙ createdMon, 04 Feb 2008 18:27:32 GMTWdatatablPG̚ ̚ createdMon, 04 Feb 2008 18:31:41 GMTWdatatablPG̚Q̚Q createdMon, 04 Feb 2008 18:32:49 GMTWdatatablPG̚i̚i createdMon, 04 Feb 2008 18:33:13 GMTWdatatablPG̚u̚u createdMon, 04 Feb 2008 18:33:25 GMTWdatatablPG̚̚ createdMon, 04 Feb 2008 18:34:54 GMTWdatatablPG̛4̛4 createdMon, 04 Feb 2008 18:36:36 GMTWdatatablPG̛C̛C createdMon, 04 Feb 2008 18:36:51 GMTWdatatablPG̛S̛S createdMon, 04 Feb 2008 18:37:07 GMTWdatatablPG̛v̛v createdMon, 04 Feb 2008 18:37:42 GMTWdatatablPG̛̛ createdMon, 04 Feb 2008 18:37:59 GMTWdatatablPG̝̝ createdMon, 04 Feb 2008 18:46:46 GMTJdatatablP:$KK K changenumcreatedWdatatablPGW"W" createdSun, 03 Feb 2008 01:21:38 GMTWdatatablPGWMWM createdSun, 03 Feb 2008 01:22:21 GMTWdatatablPGWW createdSun, 03 Feb 2008 01:24:16 GMTWdatatablPGNN createdSun, 03 Feb 2008 00:45:32 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:51:27 GMTJdatatabl:$ûû û changenumcreatedWdatatablPGûû createdTue, 22 Jan 2008 19:11:23 GMTWdatatablPGûKûK createdTue, 22 Jan 2008 19:13:15 GMTWdatatablPGûû createdTue, 22 Jan 2008 19:11:47 GMTWdatatablPGû+û+ createdTue, 22 Jan 2008 19:16:59 GMThdatatabl`X$ûû   changenum27created1/21/08; 12:39:59 PMWdatatablGûû createdMon, 21 Jan 2008 20:40:04 GMThdatatabl`X$ûû   changenum26created1/20/08; 10:05:09 AMWdatatablGûû createdSun, 20 Jan 2008 18:05:20 GMTWdatatablGûû createdSun, 20 Jan 2008 18:06:55 GMTWdatatablGûû createdSun, 20 Jan 2008 18:05:51 GMTWdatatablGûû createdSun, 20 Jan 2008 18:08:26 GMTWdatatablGûû createdSun, 20 Jan 2008 18:08:36 GMTWdatatablGûû createdSun, 20 Jan 2008 18:36:24 GMTfdatatabl`V$ûû   changenum25created1/9/08; 6:38:32 PMWdatatablGûû createdThu, 10 Jan 2008 02:38:42 GMTWdatatablGûû createdThu, 10 Jan 2008 02:39:20 GMTWdatatablGûû createdThu, 10 Jan 2008 02:40:44 GMTWdatatablGûû createdThu, 10 Jan 2008 02:41:38 GMTWdatatablGûû createdThu, 10 Jan 2008 02:40:56 GMTfdatatabl`V$ûû   changenum24created1/6/08; 7:05:55 PMWdatatablGûû createdMon, 07 Jan 2008 03:06:00 GMTWdatatablGûû createdMon, 07 Jan 2008 03:06:15 GMTWdatatablGûû createdMon, 07 Jan 2008 03:07:42 GMTWdatatablGûû createdMon, 07 Jan 2008 03:07:58 GMTWdatatablGûû createdMon, 07 Jan 2008 03:08:39 GMTgdatatabl`W$ûû   changenum23created1/6/08; 11:11:47 AMWdatatablGûû createdSun, 06 Jan 2008 19:18:11 GMTWdatatablGûû createdSun, 06 Jan 2008 19:05:26 GMTWdatatablGûû createdSun, 06 Jan 2008 19:05:36 GMTWdatatablGûû createdSun, 06 Jan 2008 19:06:05 GMTWdatatablGûû createdSun, 06 Jan 2008 19:06:17 GMTgdatatabl`W$ûû   changenum22created1/6/08; 10:05:41 AMWdatatablGûû createdSun, 06 Jan 2008 18:06:01 GMTWdatatablGûû createdSun, 06 Jan 2008 18:15:02 GMTWdatatablGûû createdSun, 06 Jan 2008 18:07:24 GMTWdatatablGûû createdSun, 06 Jan 2008 19:03:38 GMTWdatatablGûû createdSun, 06 Jan 2008 19:03:56 GMTWdatatablGûû createdSun, 06 Jan 2008 19:18:49 GMTgdatatabl`W$ûû   changenum21created1/2/08; 12:18:55 PMWdatatablGûû createdWed, 02 Jan 2008 20:21:13 GMTWdatatablGûû createdWed, 02 Jan 2008 20:19:26 GMTWdatatablGûû createdWed, 02 Jan 2008 20:20:10 GMTWdatatablGûû createdWed, 02 Jan 2008 20:21:03 GMThdatatabl`X$ûû   changenum20created12/31/07; 8:30:10 AMWdatatablGûû createdMon, 31 Dec 2007 16:30:17 GMTWdatatablGûû createdMon, 31 Dec 2007 16:49:00 GMTWdatatablGûû createdMon, 31 Dec 2007 18:11:44 GMThdatatabl`X$ûû   changenum19created12/31/07; 4:12:38 AMWdatatablGûû createdMon, 31 Dec 2007 12:12:51 GMTWdatatablGûû createdMon, 31 Dec 2007 12:53:43 GMTWdatatablGûû createdMon, 31 Dec 2007 12:14:24 GMTWdatatablGûû createdMon, 31 Dec 2007 12:14:54 GMTWdatatablGûû createdMon, 31 Dec 2007 12:15:00 GMTWdatatablGûû createdMon, 31 Dec 2007 12:15:20 GMTWdatatablGûû createdMon, 31 Dec 2007 12:15:40 GMTWdatatablGûû createdMon, 31 Dec 2007 12:15:48 GMTWdatatablGûû createdMon, 31 Dec 2007 12:15:49 GMTWdatatablGûû createdMon, 31 Dec 2007 12:54:35 GMTWdatatablGûû createdMon, 31 Dec 2007 12:16:08 GMTWdatatablGûû createdMon, 31 Dec 2007 12:54:55 GMTWdatatablGûû createdMon, 31 Dec 2007 12:16:28 GMThdatatabl`X$ûû   changenum18created12/29/07; 9:19:21 AMWdatatablGûû createdSat, 29 Dec 2007 17:19:31 GMTWdatatablGûû createdSat, 29 Dec 2007 17:30:19 GMTWdatatablGûû createdSat, 29 Dec 2007 17:26:28 GMTWdatatablGûû createdSat, 29 Dec 2007 17:23:07 GMTWdatatablGûû createdSat, 29 Dec 2007 17:23:33 GMTWdatatablGûû createdSat, 29 Dec 2007 17:26:32 GMTWdatatablGûû createdSat, 29 Dec 2007 17:50:33 GMTWdatatablGûû createdSat, 29 Dec 2007 17:27:56 GMThdatatabl`X$ûû   changenum17created12/28/07; 1:20:27 PMWdatatablGûû createdFri, 28 Dec 2007 21:20:36 GMTWdatatablGûû createdFri, 28 Dec 2007 21:23:04 GMTWdatatablGûû createdFri, 28 Dec 2007 21:22:05 GMTWdatatablGûû createdFri, 28 Dec 2007 21:26:11 GMThdatatabl`X$ûû   changenum16created12/27/07; 2:32:37 PMWdatatablGûû createdThu, 27 Dec 2007 22:33:38 GMTWdatatablGûû createdThu, 27 Dec 2007 22:34:15 GMTWdatatablGûû createdThu, 27 Dec 2007 22:42:01 GMTWdatatablGûû createdThu, 27 Dec 2007 22:42:12 GMTWdatatablGûû createdThu, 27 Dec 2007 22:42:19 GMTidatatabl`Y$ûû   changenum15created12/23/07; 10:50:07 AMWdatatablGûû createdSun, 23 Dec 2007 18:50:15 GMTWdatatablGûû createdSun, 23 Dec 2007 18:50:48 GMTidatatabl`Y$ûû   changenum14created12/17/07; 12:24:21 PMWdatatablGûû createdMon, 17 Dec 2007 20:24:50 GMTWdatatablGûû createdMon, 17 Dec 2007 20:31:09 GMTWdatatablGûû createdMon, 17 Dec 2007 20:57:42 GMTWdatatablGûû createdMon, 17 Dec 2007 20:58:27 GMTidatatabl`Y$ûû   changenum13created12/17/07; 10:04:38 AMWdatatablGûû createdMon, 17 Dec 2007 18:04:49 GMTWdatatablGûû createdMon, 17 Dec 2007 18:47:02 GMTgdatatabl`W$ûû   changenum12created12/3/07; 9:04:02 AMWdatatablGûû createdMon, 03 Dec 2007 17:04:07 GMTgdatatabl`W$ûû   changenum11created12/3/07; 8:09:48 AMWdatatablGûû createdMon, 03 Dec 2007 16:09:53 GMTgdatatabl`W$ûû   changenum10created12/3/07; 6:53:52 AMWdatatablGûû createdMon, 03 Dec 2007 14:53:57 GMTfdatatabl`V$ûû   changenum9created12/3/07; 6:49:39 AMWdatatablGûû createdMon, 03 Dec 2007 14:49:46 GMTfdatatabl`V$ûû   changenum8created12/1/07; 8:23:45 AMWdatatablGûû createdSat, 01 Dec 2007 16:23:50 GMTWdatatablGûû createdMon, 03 Dec 2007 14:43:43 GMTgdatatabl`W$ûû   changenum7created11/30/07; 1:49:19 PMWdatatablGûû createdFri, 30 Nov 2007 21:43:26 GMThdatatabl`X$ûû   changenum6created11/30/07; 12:05:17 PMWdatatablGûû createdFri, 30 Nov 2007 20:05:28 GMTWdatatablGûû createdFri, 30 Nov 2007 20:07:24 GMTgdatatabl`W$ûû   changenum5created11/30/07; 9:32:12 AMWdatatablGûû createdFri, 30 Nov 2007 17:32:21 GMTgdatatabl`W$ûû   changenum4created11/30/07; 7:23:33 AMWdatatablGûû createdFri, 30 Nov 2007 15:23:41 GMTWdatatablGûû createdFri, 30 Nov 2007 15:27:48 GMTWdatatablGûû createdFri, 30 Nov 2007 15:25:27 GMTWdatatablGûû createdFri, 30 Nov 2007 16:08:31 GMTgdatatabl`W$ûû   changenum3created11/30/07; 6:41:35 AMWdatatablGûû createdFri, 30 Nov 2007 14:41:46 GMTgdatatabl`W$ûû   changenum2created11/30/07; 6:19:55 AM$datatablfûûgdatatabl`W$ûû   changenum1created11/30/07; 6:19:54 AMWdatatablGûû createdFri, 30 Nov 2007 13:59:47 GMTWdatatablGûû createdFri, 30 Nov 2007 14:44:14 GMTWdatatabl`Gûû createdSun, 02 Dec 2007 15:20:30 GMTWdatatabl`Gûû createdSat, 01 Dec 2007 16:25:17 GMTWdatatabl`Gûû createdFri, 30 Nov 2007 14:44:28 GMTWdatatabl`Gûû createdFri, 30 Nov 2007 14:44:53 GMTWdatatabl`Gûû createdFri, 30 Nov 2007 14:44:16 GMT!Geneva UCHM0LANDmac on checkfeed (adrfeed) Changes 3/15/08; 8:19:30 PM by DW Replace remaining call to tcp.httpReadUrl with photoFanSuite.httpClient. 2/8/08; 11:27:50 AM by DW Use photoFanSuite.httpClient. 11/25/07; 1:35:44 PM by DW Ported from flickrFan. photoFanSuite.initFeed (adrfeed) edit (adrfeed) if adrfeed^.enabled local (url = nameof (adrfeed^), urllist = string.urlsplit (url), flchanged, xmltext) adrfeed^.ctChecks++; adrfeed^.whenLastCheck = clock.now () if string.lower (urllist [2]) endswith "flickr.com" xmltext = flickr.readfeed (url, @flchanged) else xmltext = photoFanSuite.httpClient (url, flmessages:false) //2/8/08 by DW flchanged = true if flchanged local (xstruct) xml.compile (xmltext, @xstruct) if adrfeed^.type == "rss" local (subfoldername = nil) if defined (adrfeed^.title) if adrfeed^.title != "" subfoldername = adrfeed^.title photoFanSuite.parseXstruct (@xstruct, adrfeed) if adrfeed^.type == "opml" local (adropml = xml.getaddress (@xstruct, "opml")) local (adrbody = xml.getaddress (adropml, "body"), adr) for adr in adrbody if nameof (adr^) contains "outline" try local (subfoldername) bundle //set subfoldername try subfoldername = adr^.["/atts"].title else subfoldername = nil local (url = xml.entitydecode (adr^.["/atts"].xmlUrl, true)) //10/30/07 by DW local (xmltext = photoFanSuite.httpClient (url, flmessages:false), xstruct) xml.compile (xmltext, @xstruct) photoFanSuite.parseXstruct (@xstruct, adrfeed) bundle //test code local (url = "http://api.flickr.com/services/feeds/photos_public.gne?lang=en-us&format=rss_200&id=22221172@N00") photoFanSuite.init () checkfeed (@user.photoFan.feeds.[url]) WdatatablGMdMd createdSat, 07 Oct 2006 21:05:39 GMTWdatatablPGVV createdTue, 06 Nov 2007 19:56:06 GMTWdatatablG createdSun, 16 Mar 2008 03:19:29 GMTWdatatablG createdSun, 16 Mar 2008 03:19:30 GMTWdatatablG55 createdFri, 08 Feb 2008 19:27:49 GMTWdatatablG66 createdFri, 08 Feb 2008 19:27:50 GMTWdatatablPGo*o* createdSun, 25 Nov 2007 21:35:43 GMTWdatatablPGo*o* createdSun, 25 Nov 2007 21:35:44 GMTWdatatablPGqkqk createdTue, 27 Nov 2007 20:30:35 GMTWdatatablGs%s% createdWed, 28 Nov 2007 22:02:45 GMTWdatatablPGVV createdTue, 06 Nov 2007 19:55:56 GMTWdatatablG createdFri, 25 Aug 2006 17:25:34 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:31:07 GMTWdatatablPGL1L1 createdTue, 30 Oct 2007 16:17:37 GMTWdatatablPGLaLa createdTue, 30 Oct 2007 16:18:25 GMTWdatatablPGLfLf createdTue, 30 Oct 2007 16:18:30 GMTWdatatablPGLaLa createdTue, 30 Oct 2007 16:18:25 GMTWdatatablPGLhLh createdTue, 30 Oct 2007 16:18:32 GMTWdatatablG%J%J createdSun, 30 Sep 2007 19:41:51 GMTWdatatablGVmyVmy createdWed, 07 Nov 2007 03:14:01 GMTWdatatablGNoNo createdSat, 21 Apr 2007 04:26:07 GMTWdatatablGNN createdSat, 21 Apr 2007 04:15:51 GMTWdatatablGf]:f]: createdMon, 19 Nov 2007 05:20:58 GMTWdatatablGf]Cf]C createdMon, 19 Nov 2007 05:21:07 GMTWdatatablGf]Lf]L createdMon, 19 Nov 2007 05:21:16 GMTWdatatablGf]Sf]S createdMon, 19 Nov 2007 05:21:23 GMTWdatatablG1212 createdSun, 01 Jan 2006 15:11:46 GMTWdatatablGNN createdSat, 21 Apr 2007 04:16:05 GMTWdatatablG1212 createdSun, 01 Jan 2006 15:11:46 GMTWdatatablG1K1K createdSun, 01 Jan 2006 15:12:11 GMTWdatatablGNLNL createdSat, 21 Apr 2007 04:17:00 GMTWdatatablGNPNP createdSat, 21 Apr 2007 04:17:04 GMTWdatatablGNtNt createdSat, 21 Apr 2007 04:17:40 GMTWdatatablGf^f^ createdMon, 19 Nov 2007 05:26:54 GMTWdatatablGf^f^ createdMon, 19 Nov 2007 05:24:42 GMTWdatatablGf^(f^( createdMon, 19 Nov 2007 05:24:56 GMTWdatatablGf^tf^t createdMon, 19 Nov 2007 05:26:12 GMTWdatatablGf^zf^z createdMon, 19 Nov 2007 05:26:18 GMTWdatatablGf^|f^| createdMon, 19 Nov 2007 05:26:20 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:29:23 GMTWdatatablGNN createdSat, 21 Apr 2007 04:19:16 GMTWdatatablGNpNp createdSat, 21 Apr 2007 04:21:52 GMTWdatatablGNyNy createdSat, 21 Apr 2007 04:22:01 GMTWdatatablPGUVUV createdTue, 06 Nov 2007 16:24:54 GMTWdatatablGs%ys%y createdWed, 28 Nov 2007 22:02:33 GMTWdatatablPGoA5oA5 createdSun, 25 Nov 2007 23:11:49 GMTWdatatablPGU[U[ createdTue, 06 Nov 2007 16:24:59 GMTGeneva.@ʲ[pKLANDmac on checkFeeds () Changes 8/15/08; 4:10:47 AM by DW Make sure the lastError sub-table exists, in case there was an error init'ing the feed. 4/16/08; 1:50:23 PM by DW Respect user.photoFan.prefs.enabled. 3/7/08; 9:52:05 AM by DW Record errors in the new feed-level lastError table. 11/18/07; 9:18:30 PM by DW Give it a standard arrangement with a test code bundle at the bottom. 11/6/07; 10:12:43 AM by DW Break out checkfeed into a separate debuggable object. 11/3/07; 12:25:41 PM by DW Disable debugging messages on tcp.httpReadUrl calls. 11/2/07; 7:02:51 AM by DW Remove code that updates tools. 10/30/07; 9:15:07 AM by DW If it's not flickr.com, don't use flickr.readFeed. For OPML files this is important because it's possible that the OPML hasn't changed, but the RSS feeds it links to have. 10/29/07; 5:27:03 PM by DW Update opml.root in addition to flickrRivr.root. 9/30/07; 12:40:29 PM by DW Use new optimized Flickr feed reader. 5/6/07; 12:38:20 PM by DW Use the new code updating method. 4/22/07; 2:24:24 PM by DW Update the flickrRivr tool every hour, in a separate thread so we can update this script too. 4/21/07; 6:22:22 PM by DW Call flickrRivrSuite.parseXstruct instead of local routine. 4/20/07; 9:14:57 PM by DW Add support for OPML reading lists. 1/1/06; 6:59:20 AM by DW Created. photoFanSuite.init () if user.photoFan.prefs.enabled //4/16/08 by DW user.photoFan.stats.ctChecks++ user.photoFan.stats.whenLastCheck = clock.now () filemenu.save () local (adrfeed) for adrfeed in @user.photoFan.feeds try photoFanSuite.checkFeed (adrfeed) else if not defined (adrfeed^.lastError) //8/15/08 by DW new (tabletype, @adrfeed^.lastError) adrfeed^.lastError.what = tryerror //3/7/08 by DW adrfeed^.lastError.when = clock.now () flickrRivrSuite.deleteSmallPics () bundle //test code checkFeeds () WdatatablGf\f\ createdMon, 19 Nov 2007 05:18:12 GMTWdatatablG++ createdWed, 16 Apr 2008 20:50:22 GMTWdatatablG++ createdWed, 16 Apr 2008 20:50:23 GMTWdatatabl0G createdFri, 07 Mar 2008 17:52:04 GMTWdatatabl0G createdFri, 07 Mar 2008 17:52:05 GMTWdatatablGf\f\ createdMon, 19 Nov 2007 05:18:30 GMTWdatatablGf\f\ createdMon, 19 Nov 2007 05:18:31 GMTWdatatablPGUU createdTue, 06 Nov 2007 18:12:43 GMTWdatatablPGUU createdTue, 06 Nov 2007 18:12:44 GMTWdatatablGRERE createdSat, 03 Nov 2007 19:25:41 GMTWdatatablGRFRF createdSat, 03 Nov 2007 19:25:42 GMTWdatatablPGP|P| createdFri, 02 Nov 2007 14:02:50 GMTWdatatablPGP|P| createdFri, 02 Nov 2007 14:02:51 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:15:06 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:15:07 GMTWdatatablGKgKg createdTue, 30 Oct 2007 00:27:03 GMTWdatatablGKhKh createdTue, 30 Oct 2007 00:27:04 GMTWdatatablG%I%I createdSun, 30 Sep 2007 19:40:28 GMTWdatatablG%I%I createdSun, 30 Sep 2007 19:40:29 GMTWdatatablGc|c| createdSun, 06 May 2007 19:38:19 GMTWdatatablGc|c| createdSun, 06 May 2007 19:38:21 GMTWdatatabl`GQ Q createdSun, 22 Apr 2007 21:24:22 GMTWdatatabl`GQ Q createdSun, 22 Apr 2007 21:24:24 GMTWdatatablGPP createdSun, 22 Apr 2007 01:22:21 GMTWdatatablGPP createdSun, 22 Apr 2007 01:22:22 GMTWdatatablGNN createdSat, 21 Apr 2007 04:14:56 GMTWdatatablGNN createdSat, 21 Apr 2007 04:14:57 GMTWdatatablG.F.F createdSun, 01 Jan 2006 14:59:18 GMTWdatatablG.H.H createdSun, 01 Jan 2006 14:59:20 GMTWdatatablG0ҿ0 createdSun, 01 Jan 2006 15:10:10 GMTWdatatablG++ createdWed, 16 Apr 2008 20:50:11 GMTWdatatablGVV createdSun, 01 Jan 2006 17:52:52 GMTWdatatablGVV createdSun, 01 Jan 2006 17:53:01 GMTWdatatablGWW createdSun, 01 Jan 2006 17:53:06 GMTWdatatablGMdMd createdSat, 07 Oct 2006 21:06:54 GMTWdatatablGMeMe createdSat, 07 Oct 2006 21:07:02 GMTWdatatablGGG createdSun, 15 Apr 2007 17:58:58 GMTWdatatablGMe Me createdSat, 07 Oct 2006 21:07:06 GMTWdatatabl0G createdFri, 07 Mar 2008 17:43:30 GMTWdatatabl0G createdFri, 07 Mar 2008 17:44:01 GMTWdatatabl0G createdFri, 07 Mar 2008 17:44:01 GMTWdatatablGf\f\ createdMon, 19 Nov 2007 05:18:18 GMTWdatatablGf\f\ createdMon, 19 Nov 2007 05:18:23 GMTS$omom  ! cellBgColorFFFFFF frameColorDCDCDCVGeneva 2u Genevar@á1Y'KLANDmac
<%feedsList%>

Feed:

<%addFeedMessage%>



See also: Subscribe to Flickr tag feeds.


WdatatablPGá0á0 createdWed, 02 Jan 2008 20:14:35 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:28 GMTWdatatablPGrA-rA- createdWed, 28 Nov 2007 05:48:29 GMTWdatatablPGÌXÌX createdTue, 18 Dec 2007 00:48:33 GMTWdatatablPGÌXÌX createdTue, 18 Dec 2007 00:48:34 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:33 GMTWdatatablPGá0á0 createdWed, 02 Jan 2008 20:14:44 GMTWdatatablPGá0Pá0P createdWed, 02 Jan 2008 20:13:04 GMTWdatatablPGá1 á1 createdWed, 02 Jan 2008 20:16:12 GMT&Genevaé3?éG ?@LANDmac

Copy/paste this text into a blog post or web page.


Image preview
<%imagehtml%>
WdatatablPGé3^é3^ createdTue, 08 Jan 2008 22:04:14 GMTWdatatablPGé8é8 createdTue, 08 Jan 2008 22:26:33 GMTWdatatablPGé<é< createdTue, 08 Jan 2008 22:41:05 GMTWdatatablPGé< é< createdTue, 08 Jan 2008 22:41:13 GMTWdatatablPGé<é< createdTue, 08 Jan 2008 22:41:18 GMTWdatatablPGé<é< createdTue, 08 Jan 2008 22:41:05 GMTWdatatablPGé< é< createdTue, 08 Jan 2008 22:41:13 GMTWdatatablPGé<é< createdTue, 08 Jan 2008 22:41:18 GMT8Genevav Fv= gLANDmac
WdatatablPGq q  createdTue, 27 Nov 2007 07:45:28 GMTWdatatablPGv v createdSat, 01 Dec 2007 02:57:24 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:33 GMT8 -%Genevaqe:"`LANDmac <%linkproductname%> is a new kind of RSS reader. You subscribe to feeds of cool pictures and show them on the screen of your laptop, desktop or best of all, a big screen high-def TV in your den, office or living room!

How to set up <%productname%>

There are three easy steps to setting up the <%productname%> screen saver.

  1. Enter your Flickr username here:   and click the button.

    <%setUsernameResult%>

    If you don't remember your username, you can enter the email address you registered with Flickr.

  2. Configure your screen saver to show pictures gathered by <%productname%>.

  3. That's it! You can visit the other pages on this site, they're listed at the top of each page, or you can hide the app (leave it running) and just enjoy the pictures from various sources.

What can <%productname%> do?



WdatatablPGyy createdMon, 03 Dec 2007 23:52:32 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:28 GMTWdatatablPGqq createdTue, 27 Nov 2007 23:09:53 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:22:40 GMTWdatatablPGq#q# createdTue, 27 Nov 2007 07:24:19 GMTWdatatablPGqq createdTue, 27 Nov 2007 23:08:50 GMTWdatatablPGtt createdFri, 30 Nov 2007 03:01:23 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:33 GMTWdatatablPGy`y` createdMon, 03 Dec 2007 23:59:28 GMTWdatatablGÓOÓO createdSun, 23 Dec 2007 19:00:31 GMTWdatatablGÓÓ createdSun, 23 Dec 2007 19:02:14 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:01:08 GMTWdatatablPGy؊y؊ createdTue, 04 Dec 2007 00:00:10 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:01:41 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:01:41 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:01:15 GMTWdatatablPGy?y? createdMon, 03 Dec 2007 23:58:55 GMT Genevaqs^LANDmac

There are five easy steps to setting up the <%productname%> screen saver.

1. Enter your Flickr username here: 

<%setUsernameError%>

2. > Check this box to subscribe to your own photos.

3. >Check this box if you want your Flickr contacts on the Feeds page.

4. We're storing the pictures we download in this folder: 

It's easy to configure your Mac screen saver to show pictures in this folder.

5. That's it! You can visit the other pages on this site, they're listed in the left margin, or you can hide the app (leave it running) and just enjoy the pictures from various sources.



WdatatablPGq q  createdTue, 27 Nov 2007 07:45:28 GMTWdatatablPGqq createdTue, 27 Nov 2007 23:09:53 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:22:40 GMTWdatatablPGqzqz createdTue, 27 Nov 2007 16:57:30 GMTWdatatablPGqq createdTue, 27 Nov 2007 22:32:17 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:24:01 GMTWdatatablG)) createdSun, 20 Aug 2006 22:01:04 GMTWdatatablPGq#q# createdTue, 27 Nov 2007 07:24:19 GMTWdatatablPGqq createdTue, 27 Nov 2007 23:08:50 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:33 GMTWIGenevav5y>LLANDmac
Title:
Description:
  <%confirmation%>
 

<%twitterCheckBox%>

See also: Prefs pages for identity and RSS feed.

WdatatablPGv v createdSat, 01 Dec 2007 02:57:24 GMTWdatatablPGv v createdSat, 01 Dec 2007 02:57:24 GMTWdatatablPGy_y_ createdMon, 03 Dec 2007 15:25:02 GMTWdatatablPGy_y_ createdMon, 03 Dec 2007 15:25:08 GMTWdatatablPGy_y_ createdMon, 03 Dec 2007 15:25:20 GMTW:Genevaáá'mLANDmac

You can subscribe to new Flickr pictures tagged with the word snowstorm for example, by entering it into the form below, and click on Submit.

Tag(s) to subscribe to:

<%subscriberesult%>



WdatatablPGyy createdMon, 03 Dec 2007 23:52:32 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:28 GMTWdatatablPGá)á) createdWed, 02 Jan 2008 18:34:17 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:22:40 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:33 GMTWdatatablPGáá createdWed, 02 Jan 2008 18:36:31 GMT]Genevaû%Mû' 3TLANDmac

Please enter a date in the form and click Submit. We'll install all FlickrFan parts that were created or updated since that date. This is a way to be sure that you have all the latest updates.

When:


WdatatablPGû'û' createdTue, 22 Jan 2008 12:52:24 GMTWdatatablPGû'û' createdTue, 22 Jan 2008 12:54:23 GMTWdatatablPGû%qû%q createdTue, 22 Jan 2008 12:45:37 GMTWdatatablPGû%sû%s createdTue, 22 Jan 2008 12:45:39 GMTWdatatablPGû%û% createdTue, 22 Jan 2008 12:47:19 GMTWdatatablPGû%û% createdTue, 22 Jan 2008 12:46:53 GMTWdatatablPGq q  createdTue, 27 Nov 2007 07:45:33 GMTWdatatablPGû'û' createdTue, 22 Jan 2008 12:54:38 GMTWdatatablPGû&û& createdTue, 22 Jan 2008 12:51:34 GMT3`qʨ  $0 CO Ye r~ feedsPage imageHtmlPagepicViewerShareForm{ setupPage setupPageOld sharePicFormQtagSubscribePageupdateWhenPageYVGeneva 2;FFFF000000060001001777AA000000000071000000001001710000001-7FFF6FBE1800000480048062A200-175797579062A222FFFF01037B00001000000370000000107E4084062A22243048C0001862A1A20000200000083000000007E,Click here to see the folder.00040000000A00000002018010005000000090000000208000006000000630000000210A210FFFF0A00000 10 E310FFFF0E00000 10 000700000019000000010201800008000000970000000140,Geneva40,4030 10000900000015000000023B02F73B02F7000A000000150000000262A22262A222000B00000005000000020000C0000001B000000017B757922168118910000F0000005200000000400 10 4,4,4,4,>64,~4,4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAGr~;1FFFF000000060001001777AA00000000006D000000001001710000001-7FFF6FBE1800000480048062A200-1ADAD062A222FFFF01032800001000000370000000107D4084062A2223F048C0001862A1990000200000082000000007D,Click here to see the feed.00040000000A00000002017F10005000000090000000207F00006000000630000000210A210FFFF0A00000 10 E310FFFF0E00000 10 000700000019000000010201800008000000970000000140,Geneva40,4030 10000900000015000000023B02F73B02F7000A000000150000000262A22262A222000B00000005000000020000C00000016000000012820EF3012B0000F0000005200000000400 10 4,4,4,4,>64,~4,4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAGrZ}1Q$r"r   folderimgʹxmlimgVGeneva 2@88:u%MGenevaJtʫ,]}LANDmac Basic stuff Who are you? Please enter your name and mail address below. We'll use the name for default text in messages, the title of your RSS feed (for example). The mail address is used for password recovery.

<%radio.prefs.stringPref ("Name", @user.prefs.name, size:25)%> <%radio.prefs.stringPref ("Email", @user.prefs.mailaddress, size:25)%>
Choose a password, below, to protect your RSS feed (see the next page), so that only you can update it.

<%if html.getpagetableaddress ()^.method != "POST" {system.temp.newsRiver.repeatedPassword = user.photoFan.prefs.myFeed.password}; ""%> <%radio.prefs.stringPref ("Password", @system.temp.newsRiver.repeatedPassword, type:"password", size:25)%> <%radio.prefs.stringPref ("Repeat", @user.photoFan.prefs.myFeed.password, type:"password", size:25)%> <%try {delete (@system.temp.newsRiver.repeatedPassword)}; ""%>
If you've forgotten your password, click this link, and we'll mail it to you.
<%radio.prefs.checkboxPref ("Check this box if it's OK to include your name and link to your Flickr page in the public list of users.", @user.photoFan.prefs.flPubliclyListUser)%> Your RSS Feed When viewing a picture, you can click the Share button at the bottom of the page to add it to your RSS feed. This page allows you to set the title and description of the <%photoFanSuite.website.prefsSnippets.seeMyRssFeed ("feed")%>.

<%radio.prefs.stringPref ("Title", @user.photoFan.prefs.myFeed.title, size:65)%> <%radio.prefs.textAreaPref ("Description", @user.photoFan.prefs.myFeed.description, cols:60, rows:5)%> Sharing with Twitter Please enter your Twitter username and password here if you want to share pointers to pictures with your Twitter followers.

<%radio.prefs.stringPref ("Twitter username", @user.photoFan.prefs.twitter.username, size:25)%> <%if html.getpagetableaddress ()^.method != "POST" {system.temp.newsRiver.repeatedPassword = user.photoFan.prefs.twitter.password}; ""%> <%radio.prefs.stringPref ("Password", @system.temp.newsRiver.repeatedPassword, type:"password", size:25)%> <%radio.prefs.stringPref ("Repeat", @user.photoFan.prefs.twitter.password, type:"password", size:25)%> <%try {delete (@system.temp.newsRiver.repeatedPassword)}; ""%>

Flickr-to-Twitter

We can watch your Flickr account and when a new picture shows up, automatically post it to Twitter. Docs for this feature, and a place to ask questions are here.

<%radio.prefs.checkboxPref ("Check this box if you want to automatically post links to your pictures to Twitter.", @user.photoFan.prefs.flickrToTwitter.enabled)%>
If you want all your Flickr pictures to flow to Twitter, leave the "Special tag" empty. If you only want some of them to, enter a tag, something like twitter or sentFromMyPhone.

<%radio.prefs.stringPref ("Special tag", @user.photoFan.prefs.flickrToTwitter.specialTag, size:25)%>
<%radio.prefs.numberPref ("Check for new pics every", @user.photoFan.prefs.flickrToTwitter.minutesBetweenChecks, lowerbound:1, upperbound:10000, textToRight:"  minute(s).")%> Archiving pictures It's nice to have a lot of pictures for the screen saver to display, but once you reach a certain level, you may prefer to have old ones removed. This keeps the amount of space used by this app from expanding indefinitely, and assures that the pictures you see are fresh.

<%radio.prefs.checkboxPref ("Check this box to limit the number of pictures in the screen saver folder.", @user.photoFan.prefs.archive.enabled)%>
How many pictures is the maximum?

<%radio.prefs.numberPref ("Number", @user.photoFan.prefs.archive.maxPics, lowerbound:100, upperbound:10000)%>
<%radio.prefs.checkboxPref ("Check this box if you want to copy the pictures to an archive folder.", @user.photoFan.prefs.archive.flCopyToArchiveFolder)%>
And where would you like the archived pictures to be stored?

<%radio.prefs.stringPref ("Folder", @user.photoFan.prefs.archive.folder, size:65)%> Advanced This page has settings we think most users won't need to change...

<%productName%> can download more than one picture at a time, and that keeps a slow server from blocking faster ones. However, if you notice that your network bogs down at the top of the hour, you may want to decrease this number; or increase it if you have a fast net connection.

<%radio.prefs.numberPref ("Maximum", @user.photoFan.prefs.maxConcurrentDownloads, lowerbound:1, upperbound:25, textToRight:" concurrent downloads.")%>
If you're displaying pictures on a large high-definition screen, small images can look grainy, and you may want to limit the size of the smallest image we'll keep.

<%radio.prefs.numberPref ("Smallest image", @user.photoFan.prefs.sizeSmallestImage, lowerbound:1024, upperbound:1024*1024, textToRight:" bytes.")%> Flickr backups Backup basics We can keep a backup copy of the pictures in your Flickr account on your local computer, and keep it current by downloading new pictures every night when you're not using your computer.

<%radio.prefs.checkboxPref ("Check this box if you'd like to do a backup right now.", @user.photoFan.prefs.backup.flImmediateBackup)%>
Important: If you want us to download the original pictures, you must authorize us to access the full-size versions of your pictures. Otherwise we'll only be able to access smaller versions of your pictures. Overnight backups Once you've done a full backup, it's a good idea to keep the backup current, by checking every night, and downloading new pictures that have been uploaded since the last backup. This usually takes much less time.

<%radio.prefs.checkboxPref ("Check this box if you'd like to back up every night.", @user.photoFan.prefs.backup.enabled)%>
At what hour each day should we begin the backup? (We use a 24-hour clock, so 2PM is 14, 10PM is 22.)

<%radio.prefs.numberPref ("Hour", @user.photoFan.prefs.backup.hourToStart, lowerbound:0, upperbound:23)%> Flickr uploads Drop folder <%flickr.folderwatcher.init ();""%>If you check the box below, we'll periodically look in a special folder. When a picture shows up, a GIF or JPEG, we'll upload the picture to your Flickr account, and delete it from the folder.

<%radio.prefs.checkboxPref ("Check this box to enable Flickr uploading through the drop folder.", @user.flickr.folderWatcher.enabled)%>
If you set the number of seconds to 10 (the default) then on average it will take five seconds before we notice a new picture. Scanning is very quick on today's computers, so you can set this number pretty low.

<%radio.prefs.numberPref ("Seconds", @user.flickr.folderWatcher.ctSecondsBetwScans, lowerbound:5, upperbound:60, textToRight:" between scans.")%>
By default the folder is on your desktop, but you can put it anywhere. It may make sense to put it in a place that's shared between all the computers on your network.

<%radio.prefs.stringPref ("Folder", @user.flickr.folderWatcher.folder, size:60)%>
<%radio.prefs.checkboxPref ("Check this box if you want the speaker to beep after a file is uploaded.", @user.flickr.folderWatcher.flBeepAfterUpload)%> <%radio.prefs.checkboxPref ("Check this box if you want a preview page to open in the browser after images are uploaded.", @user.photoFan.prefs.flViewImageHtml)%>
Important: You must authorize us to upload to your account. Upload defaults We use these values when uploading pictures from the drop folder. They are just defaults, you can change them for any individual picture with the Flickr user interface.

<%radio.prefs.textAreaPref ("Description", @user.flickr.folderWatcher.defaults.description, 65, 4)%>
Separate tags by spaces. If a tag contains one or more spaces enclose it in "double quotes."

<%radio.prefs.textAreaPref ("Tags", @user.flickr.folderWatcher.defaults.tags, 65, 4)%>

Access controls

The following prefs determine who can view the photo. <%radio.prefs.checkboxPref ("Uploaded pictures are, by default, public (anyone can view them).", @user.flickr.folderWatcher.defaults.flpublic)%> <%radio.prefs.checkboxPref ("Uploaded pictures can be viewed by friends.", @user.flickr.folderWatcher.defaults.flfriends)%> <%radio.prefs.checkboxPref ("Uploaded pictures can be viewed by family.", @user.flickr.folderWatcher.defaults.flfamily)%> <%radio.prefs.checkboxPref ("Uploaded pictures are included in global search results.", @user.flickr.folderWatcher.defaults.flnothidden)%>

Content categories

The following prefs set default categories for uploaded photos. <%radio.prefs.numberPref ("Safety level", @user.flickr.folderWatcher.defaults.safetyLevel, lowerbound:1, upperbound:3, textToRight:"   1 for Safe, 2 for Moderate, or 3 for Restricted.")%> <%radio.prefs.numberPref ("Content type", @user.flickr.folderWatcher.defaults.contentType, lowerbound:1, upperbound:3, textToRight:"   1 for Photo, 2 for Screenshot, or 3 for Other.")%>
For more information on the defaults see the docs on the Flickr website. WdatatablPGxx createdSun, 02 Dec 2007 15:36:13 GMTWdatatablGOAOA createdThu, 01 Nov 2007 15:41:23 GMTWdatatablPGx@x@ createdSun, 02 Dec 2007 18:59:28 GMT$datatabl(+l(+l$datatabl(+l(+l$datatabl(+l(+l$datatabl(+l(+lWdatatablPGxDxD createdSun, 02 Dec 2007 19:17:41 GMT$datatabl(+l(+lWdatatablPGxx createdSun, 02 Dec 2007 15:35:14 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:35:18 GMTWdatatablPGynyn createdTue, 04 Dec 2007 00:29:34 GMTWdatatablPGyqyq createdTue, 04 Dec 2007 00:29:37 GMT$datatabl(+l(+l$datatabl(+l(+l$datatabl(+l(+l$datatabl(+l(+lWdatatabl0G 3~ 3~ createdMon, 24 Mar 2008 17:31:26 GMT$datatabl(+l(+lWdatatabl0G z z createdSun, 23 Mar 2008 18:16:10 GMT$datatabl(+l(+lWdatatablGJ J createdSun, 28 Oct 2007 16:57:26 GMTWdatatablPGKR8KR8 createdMon, 29 Oct 2007 16:02:48 GMT$datatabl(+l(+lWdatatablGJ J createdSun, 28 Oct 2007 16:58:00 GMT$datatabl(+l(+l$datatabl(+l(+lWdatatablGJJ createdSun, 28 Oct 2007 16:32:53 GMTWdatatablPGyhEyhE createdMon, 03 Dec 2007 16:01:09 GMTWdatatablPGyhGyhG createdMon, 03 Dec 2007 16:01:11 GMT$datatabl(+l(+lWdatatablPGyhyh createdMon, 03 Dec 2007 16:03:46 GMT$datatabl(+l(+lWdatatablPG]] createdMon, 12 Nov 2007 18:02:00 GMTWdatatablPG]] createdMon, 12 Nov 2007 18:06:11 GMTWdatatablPG]] createdMon, 12 Nov 2007 17:10:12 GMT$datatabl(+l(+lWdatatablPG]ץ]ץ createdMon, 12 Nov 2007 18:12:53 GMTWdatatablPG]] createdMon, 12 Nov 2007 18:13:58 GMTWdatatablPG];]; createdMon, 12 Nov 2007 18:15:23 GMT$datatabl(+l(+l$datatabl(+l(+lWdatatablPGyUyU createdMon, 03 Dec 2007 19:00:37 GMTWdatatablPGy y createdMon, 03 Dec 2007 19:03:37 GMTWdatatablPGy*y* createdMon, 03 Dec 2007 19:04:10 GMT$datatabl(+l(+lWdatatablPGyy createdMon, 03 Dec 2007 19:06:00 GMT$datatabl(+l(+lWdatatablPGy y createdMon, 03 Dec 2007 19:07:57 GMT$datatabl(+l(+l$datatabl(+l(+lWdatatablPGy!y! createdMon, 03 Dec 2007 19:21:05 GMTWdatatablPGæ8æ8 createdSun, 06 Jan 2008 21:50:48 GMTWdatatablPGææ createdSun, 06 Jan 2008 22:10:50 GMTWdatatablPGæ>æ> createdSun, 06 Jan 2008 21:50:54 GMTWdatatablGæ>æ> createdMon, 07 Jan 2008 02:58:06 GMTWdatatablPGæ>æ> createdSun, 06 Jan 2008 21:50:54 GMTWdatatablPGæSæS createdSun, 06 Jan 2008 22:12:35 GMT$datatabl(+l(+l$datatabl(+l(+l$datatabl(+l(+l$datatabl(+l(+lWdatatablGæijæij createdMon, 07 Jan 2008 01:47:31 GMT$datatabl(+l(+l$datatabl(+l(+lWdatatablPGææ createdSun, 06 Jan 2008 22:11:20 GMT8:0uƆʫ prefsVGeneva 2QoE  * -R a C Kn |   &N \ afp"http://feeds.flickrfan.org/afp.xmlap!http://feeds.flickrfan.org/ap.xmlchangesOutline,http://codecasting.org/photoFan/changes.opmldefaultReadingList6http://xml.flickrfan.org/river/defaultReadingList.opml flickrTagFeedShttp://api.flickr.com/services/feeds/photos_public.gne?lang=en-us&format=rss2&tags=homeUrlhttp://127.0.0.1:5337/photoFan/ openFolderUrl1http://127.0.0.1:5337/photoFan/openFolder?folder= picViewerhttp://127.0.0.1:5337/pfi/ picViewerPage0http://127.0.0.1:5337/photoFan/viewPicture?file= pingServer$xmlrpc://rpc.flickrfan.org:5337/RPC2 publishServer$xmlrpc://rpc.flickrfan.org:5337/RPC2 viewImageHtml/http://127.0.0.1:5337/photofan/viewImageHtml?s=VGenevaRCz8&.`o4ûj  % *6 Fw  colorspformsp htmlp=linkProductName-FlickrFanlogNamephotoFanoutlines: productName FlickrFanurlsVGeneva 2GenevaqEq) wLANDmac on disableFeed (url) Changes 11/27/07; 10:13:40 AM by DW Created. if url != "" user.photoFan.feeds.[url].enabled = false bundle //test code disableFeed ("http://api.flickr.com/services/feeds/photos_public.gne?lang=en-us&format=rss_200&id=22221172@N00") WdatatablPGo'o' createdSun, 25 Nov 2007 21:23:11 GMTWdatatablPGq q createdTue, 27 Nov 2007 18:12:25 GMTWdatatablPGqVqV createdTue, 27 Nov 2007 18:13:42 GMTWdatatablPGqq createdTue, 27 Nov 2007 18:12:16 GMTWdatatablPGo%9o%9 createdSun, 25 Nov 2007 21:12:25 GMTWdatatablPGq|q| createdTue, 27 Nov 2007 18:14:20 GMTWdatatablPGqq createdTue, 27 Nov 2007 18:14:25 GMT:$GenevaQ!vtLTLANDmac on downloadImage (url, adrimg, adrfeed) Changes 2/20/08; 6:26:52 PM by DW Don't let the created and modified dates be in the future. 2/2/08; 4:55:09 PM by DW Set the created and modified dates of the image files using the pubdate in the image table, if provided. 11/30/07; 12:12:59 PM by DW Convert to using the new photo viewer page in the logging code. 11/29/07; 12:42:32 PM by DW Upgrade logging to use the info passed from adrfeed. 11/23/07; 1:45:21 PM by DW startticks was being set before we enter the wait loop, so the total time elapsed in the log would reflect (mostly) the amount of time we had to wait to start downloading. 11/23/07; 1:30:27 PM by DW Change "Image download" to "Download" in the log. 11/21/07; 10:18:55 AM by DW Hot-up the domain in the log html text so it points at the picture we downloaded. Should help to debug. 11/21/07; 6:19:49 AM by DW Link the small version of the image to the full one. 11/21/07; 6:06:50 AM by DW Pass the image html to the log. 11/20/07; 9:26:17 PM by DW Include a thumb of the image in the log. 11/20/07; 1:12:21 PM by DW Make sure system.temp.flickrRivr.ctConcurrentDownloads doesn't go above user.flickrRivr.maxThreads. 11/20/07; 12:31:43 PM by DW Log the download of each image. 11/6/07; 9:12:58 AM by DW Add optional param, subfoldername. Don't delete the image sub-table, it's how we keep from reading files twice. 11/3/07; 12:26:41 PM by DW Disable debugging messages on tcp.httpReadUrl call. 10/31/07; 12:39:20 PM by DW No Error Info windows. The user doesn't care if a download results in an error. 5/8/07; 2:12:49 PM by DW If the file is too small to keep, don't write it to disk, and delete the image table. 4/22/07; 8:47:21 PM by DW Log file downloads. 4/22/07; 12:12:27 PM by DW Created. Factored into a separate routine so each download can run in its own thread. local (now = clock.now ()) adrfeed^.ctPicsDownloaded++; adrfeed^.whenLastPicDownloaded = now local (serialnum = user.photoFan.prefs.serialnum++, folder = adrfeed^.folder) bundle //set folder local (day, month, year, hour, minute, second, pc = file.getpathchar ()) date.get (clock.now (), @day, @month, @year, @hour, @minute, @second) folder = folder + year + pc + string.padwithzeros (month, 2) + pc + string.padwithzeros (day, 2) + pc local (f = folder + "pic" + string.padwithzeros (serialnum, 6) + ".jpg") file.surefilepath (f) local (s = "", secs, startticks) bundle //read the file startticks = clock.ticks () try {s = tcp.httpreadurl (url, flmessages:false)} secs = double (clock.ticks () - startticks) / 60 adrimg^.ctSecsToRead = secs if sizeof (s) >= user.photoFan.prefs.sizeSmallestImage //big enough to keep file.writewholefile (f, s) if defined (adrimg^.pubdate) //2/2/08 by DW local (thedate = adrimg^.pubdate) if thedate > now //2/20/08 by DW thedate = now file.setcreated (f, thedate) file.setmodified (f, thedate) adrimg^.f = f adrimg^.whenRead = now bundle //log the download, 11/29/07 by DW local (htmltext) bundle //set htmltext local (phototitle) if adrimg^.title != "" phototitle = adrimg^.title else phototitle = file.filefrompath (adrimg^.f) local (fileurl = string.delete (adrimg^.f, 1, sizeof (user.photoFan.prefs.screenSaverFolder))) fileurl = photoFanSuite.data.urls.picViewerPage + string.replaceall (fileurl, file.getpathchar (), "/") fileurl = fileurl + "&title=" + string.urlencode (phototitle) local (photolink = "" + phototitle + "") local (feedurl = adrfeed^.link) if feedurl == "" feedurl = nameof (adrfeed^) local (feedlink = "" + adrfeed^.title + "") local (sizestring = string.megabytestring (file.size (adrimg^.f))) htmltext = "

" + photolink + " (" + sizestring + ") downloaded from " + feedlink + ".

" if sizeof (adrimg^.description) > 0 htmltext = htmltext + "

" + adrimg^.description + "

" photoFanSuite.addToLog ("Download", htmltext, startticks) bundle //log the download, old version local (sizestring = string.megabytestring (file.size (f))) local (ul = string.urlsplit (url), domain = ul [2]) local (fileurl = string.delete (f, 1, sizeof (user.photoFan.prefs.screenSaverFolder))) fileurl = photoFanSuite.data.urls.picViewer + string.replaceall (fileurl, file.getpathchar (), "/") local (imghtml = " ") try //set imghtml local (hw = html.getJpegHeightWidth (f), h = 50) local (w = hw [2] * (double (h) / double (hw [1]))) imghtml = "" local (htmltext = "" + file.filefrompath (f) + " downloaded from " + domain + " (" + sizestring + ")") photoFanSuite.addToLog ("Download", htmltext, startticks, imghtml) system.temp.photoFan.ctConcurrentDownloads-- bundle //test code local (url = "http:///static.flickrfan.org/ap/2007/11/23/0271.jpg") url = "http:///static.flickrfan.org/ap/2007/11/24/0314.jpg" local (adrimg = @user.photoFan.images.[url]) local (adrfeed = @user.photoFan.feeds.["http://static.flickrfan.org/ap/rss.xml"]) adrfeed = @user.photoFan.feeds.["http://api.flickr.com/services/feeds/photos_public.gne?lang=en-us&format=rss_200&id=98251250@N00"] downloadImage (url, adrimg, adrfeed) Wdatatabl`GQQ createdSun, 22 Apr 2007 19:12:22 GMTWdatatablG!l!l createdThu, 21 Feb 2008 02:26:52 GMTWdatatablG!m!m createdThu, 21 Feb 2008 02:26:53 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:55:09 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:55:10 GMTWdatatablPGuu createdFri, 30 Nov 2007 20:12:45 GMTWdatatablPGuu createdFri, 30 Nov 2007 20:12:46 GMTWdatatablPGtd7td7 createdThu, 29 Nov 2007 20:42:31 GMTWdatatablPGtd8td8 createdThu, 29 Nov 2007 20:42:32 GMTWdatatablPGll createdFri, 23 Nov 2007 21:45:20 GMTWdatatablPGll createdFri, 23 Nov 2007 21:45:21 GMTWdatatablPGlsls createdFri, 23 Nov 2007 21:30:27 GMTWdatatablPGltlt createdFri, 23 Nov 2007 21:30:28 GMTWdatatablGii createdWed, 21 Nov 2007 18:18:54 GMTWdatatablGii createdWed, 21 Nov 2007 18:18:55 GMTWdatatablGi~i~ createdWed, 21 Nov 2007 14:19:48 GMTWdatatablGi~i~ createdWed, 21 Nov 2007 14:19:49 GMTWdatatablGi{yi{y createdWed, 21 Nov 2007 14:06:49 GMTWdatatablGi{{i{{ createdWed, 21 Nov 2007 14:06:51 GMTWdatatablGiyiy createdWed, 21 Nov 2007 05:26:17 GMTWdatatablGiziz createdWed, 21 Nov 2007 05:26:18 GMTWdatatablGhh createdTue, 20 Nov 2007 21:12:22 GMTWdatatablPGh.h. createdTue, 20 Nov 2007 20:31:42 GMTWdatatablPGh/h/ createdTue, 20 Nov 2007 20:31:43 GMTWdatatablPGUU createdTue, 06 Nov 2007 17:12:57 GMTWdatatablPGUU createdTue, 06 Nov 2007 17:12:58 GMTWdatatablPGUU createdTue, 06 Nov 2007 18:09:07 GMTWdatatablGRR createdSat, 03 Nov 2007 19:26:41 GMTWdatatablGRR createdSat, 03 Nov 2007 19:26:42 GMTWdatatablPGN'N' createdWed, 31 Oct 2007 19:39:20 GMTWdatatablPGN'N' createdWed, 31 Oct 2007 19:39:21 GMTWdatatablGf5f5 createdTue, 08 May 2007 21:12:48 GMTWdatatablGf5f5 createdTue, 08 May 2007 21:12:50 GMTWdatatabl`GQzWQzW createdMon, 23 Apr 2007 03:47:19 GMTWdatatabl`GQzZQzZ createdMon, 23 Apr 2007 03:47:22 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 19:12:25 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 19:12:27 GMTWdatatablG! ! createdThu, 21 Feb 2008 02:25:13 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:31:07 GMTWdatatablG33 createdSun, 01 Jan 2006 15:23:34 GMTWdatatablPGVV createdTue, 06 Nov 2007 20:00:22 GMTWdatatablPGV.V. createdTue, 06 Nov 2007 20:01:50 GMTWdatatablG33 createdSun, 01 Jan 2006 15:22:03 GMTWdatatablG44 createdSun, 01 Jan 2006 15:27:53 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 21:11:59 GMTWdatatabl`GQcQc createdSun, 22 Apr 2007 21:10:43 GMTWdatatablPGl}l} createdFri, 23 Nov 2007 21:43:25 GMTWdatatabl`GQiQi createdSun, 22 Apr 2007 21:10:49 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 21:11:23 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 21:12:11 GMTWdatatablGf5f5 createdTue, 08 May 2007 21:11:43 GMTWdatatablG0ǿ0 createdSun, 01 Jan 2006 15:09:59 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:53:44 GMTWdatatablG createdThu, 21 Feb 2008 02:23:35 GMTWdatatablG createdThu, 21 Feb 2008 02:24:09 GMTWdatatablG createdThu, 21 Feb 2008 02:24:15 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:54:00 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:54:06 GMTWdatatabl`GQlQl createdSun, 22 Apr 2007 19:07:08 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 21:12:36 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:29:01 GMTWdatatablPGthth createdThu, 29 Nov 2007 21:02:46 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:50:35 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:52:57 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:18 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:31 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:48 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:50 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:25:35 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:26:02 GMTWdatatablPGuu createdFri, 30 Nov 2007 20:11:53 GMTWdatatablPGtfytfy createdThu, 29 Nov 2007 20:52:09 GMTWdatatablPGthhthh createdThu, 29 Nov 2007 21:00:24 GMTWdatatablPGthth createdThu, 29 Nov 2007 21:00:59 GMTWdatatablPGthth createdThu, 29 Nov 2007 21:01:03 GMTWdatatablPGtfytfy createdThu, 29 Nov 2007 20:52:09 GMTWdatatablPGtf!tf! createdThu, 29 Nov 2007 20:50:41 GMTWdatatablPGtjtj createdThu, 29 Nov 2007 21:10:27 GMTWdatatablPGtjtj createdThu, 29 Nov 2007 21:10:36 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:29:01 GMTWdatatablPGh$h$ createdTue, 20 Nov 2007 20:18:44 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:25:35 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:26:02 GMTWdatatablPGo4\o4\ createdSun, 25 Nov 2007 22:17:00 GMTWdatatablPGo4Co4C createdSun, 25 Nov 2007 22:16:35 GMTWdatatablGhh createdWed, 21 Nov 2007 05:06:20 GMTWdatatablGhh createdWed, 21 Nov 2007 05:07:19 GMTWdatatablGhh createdWed, 21 Nov 2007 05:05:14 GMTWdatatablPGh*h* createdTue, 20 Nov 2007 20:14:34 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablGhRhR createdTue, 20 Nov 2007 21:06:26 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 21:02:56 GMTWdatatablPGtiatia createdThu, 29 Nov 2007 21:04:33 GMTWdatatablPGtlgtlg createdThu, 29 Nov 2007 21:17:27 GMTWdatatablPGtiCtiC createdThu, 29 Nov 2007 21:04:03 GMTWdatatablPGtiJtiJ createdThu, 29 Nov 2007 21:04:10 GMTWdatatablPGtktk createdThu, 29 Nov 2007 21:15:27 GMTWdatatabl`GQQ createdSun, 22 Apr 2007 21:03:02 GMT:DI-$<Geneva)) Ĝ*ILANDmac on checkFeed () Changes 7/11/08; 7:35:31 AM by DW If user.photoFan.prefs.flickrToTwitter.flUseBitly is true, use bit.ly to shorten the URL. 3/24/08; 2:11:47 PM by DW Maintain user.photoFan.prefs.flickrToTwitter.ctTicksLastCheck. 3/23/08; 11:43:54 AM by DW Created. local (now = clock.now (), startticks = clock.ticks (), xmltext, fldebugging = false) on decode (s) return (xml.entitydecode (s, flAlphaEntities:true)) on setticks () user.photoFan.prefs.flickrToTwitter.ctTicksLastCheck = clock.ticks () - startticks on shorturl (url) if user.photoFan.prefs.flickrToTwitter.flUseBitly return (bitly.create (url)) else return (tinyurl.create (url)) photofansuite.init () user.photoFan.prefs.flickrToTwitter.ctchecks++ user.photoFan.prefs.flickrToTwitter.whenLastCheck = now bundle //read xmltext, exit if no change local (flchanged) if user.photoFan.prefs.flickr.feed == "" setticks () return xmltext = flickr.readfeed (user.photoFan.prefs.flickr.feed, @flchanged) if (not flchanged) and (not fldebugging) setticks () return xml.compile (xmltext, @xstruct) scratchpad.xstruct = xstruct local (adrrss = xml.getaddress (@xstruct, "rss"), adr) local (adrchannel = xml.getaddress (adrrss, "channel")) for adr in adrchannel if nameof (adr^) endswith "item" try local (link = xml.getvalue (adr, "link"), adritem = adr) local (title = xml.getvalue (adr, "title")) local (guid = xml.getvalue (adr, "guid")) local (adrhistory = @user.photoFan.prefs.flickrToTwitter.history.[guid]) if not defined (adrhistory^) new (tabletype, adrhistory) adrhistory^.when = now adrhistory^.title = title local (flcategorycheck = true) //passed the category check bundle //check category, 8/9/07 by DW local (tag = string.lower (user.photoFan.prefs.flickrToTwitter.specialTag)) tag = string.replaceall (tag, " ", "") //remove blanks, 10/16/07 by DW if sizeof (tag) > 0 //if tag is empty, don't check local (adrcat, flhavetag = false) for adrcat in adr if nameof (adrcat^) endswith "category" try if adrcat^.["/atts"].namespace == "media:" if adrcat^.["/atts"].scheme == "urn:flickr:tags" local (s = string.lower (adrcat^.["/pcdata"]), i) for i = 1 to string.countfields (s, " ") if string.nthfield (s, " ", i) == tag flhavetag = true break if string.lower (adrcat^.["/pcdata"]) == tag flhavetag = true break if not flhavetag //the picture isn't going to Twitter! flcategorycheck = false if flcategorycheck if not user.photoFan.prefs.flickrToTwitter.flFirstCheck //don't post on first check if photoFanSuite.flickrToTwitter.howManyPicsSince (clock.now () - (60*60)) <= 5 //10/8/07 by DW try //post message to twitter local (s = string (title) + ": " + shorturl (link)) adrhistory^.twitterPost = s user.photoFan.prefs.flickrToTwitter.lastPost = s user.photoFan.prefs.flickrToTwitter.whenLastPost = now user.photoFan.prefs.flickrToTwitter.ctposts++ if fldebugging dialog.alert (s) else //send to twitter twitter.newpost (s, user.photoFan.prefs.twitter.username, user.photoFan.prefs.twitter.password, source:"twittergram") twitterGramSuite.addToLog ("flickrToTwitter.checkUser", s, startticks) bundle //send to Pownce if enabled, 3/4/08 by DW if defined (adrsub^.pownce) try local (username = adrsub^.pownce.username) local (password = adrsub^.pownce.password) if username != "" pownce.newpost (title, username, password, link) else adrsub^.pownce.lastError = tryerror adrsub^.pownce.whenLastError = clock.now () if twitterGramData.prefs.flickrToTwitter.globalAccount.enabled try local (username = twitterGramData.prefs.flickrToTwitter.globalAccount.username) local (password = twitterGramData.prefs.flickrToTwitter.globalAccount.password) twitter.newpost (s, username, password, source:"twittergram") twitterGramData.prefs.flickrToTwitter.globalAccount.lastPost = s twitterGramData.prefs.flickrToTwitter.globalAccount.whenLastPost = now else twitterGramData.prefs.flickrToTwitter.globalAccount.error = tryerror twitterGramData.prefs.flickrToTwitter.globalAccount.whenLastError = now bundle //post to the flickrFeed, 10/8/07; 8:25:39 PM by DW local (serialnum = twitterGramData.prefs.flickrToTwitter.feedSerialNum++) local (adrtable = @twittergramData.flickrFeed.[string.padwithzeros (serialnum, 7)]) new (tabletype, adrtable) try adrtable^.twitterusername = nameof (adruser^) adrtable^.title = title adrtable^.link = link adrtable^.description = decode (xml.getvalue (adritem, "description")) local (adrimg = xml.getaddress (adritem, "content")) local (adratts = @adrimg^.["/atts"]) adrtable^.imgHeight = adratts^.height adrtable^.imgWidth = adratts^.width adrtable^.imgUrl = adratts^.url adrtable^.pubDate = xml.getvalue (adritem, "pubDate") else adrtable^.error = tryerror else adrhistory^.error = tryerror msg (link) else user.photoFan.prefs.flickrToTwitter.lastError = tryerror user.photoFan.prefs.flickrToTwitter.flFirstCheck = false twitterGramSuite.addToLog ("flickrToTwitter.checkUser", nameof (adruser^), startticks) setticks () bundle //test code checkFeed () Wdatatabl0G createdSun, 23 Mar 2008 18:43:50 GMTWdatatabl0GĜĜ createdFri, 11 Jul 2008 14:35:31 GMTWdatatabl0GĜĜ createdFri, 11 Jul 2008 14:35:32 GMTWdatatabl0G g" g" createdMon, 24 Mar 2008 21:11:46 GMTWdatatabl0G g$ g$ createdMon, 24 Mar 2008 21:11:48 GMTWdatatabl0G createdSun, 23 Mar 2008 18:43:53 GMTWdatatabl0G createdSun, 23 Mar 2008 18:43:55 GMTWdatatablGXX createdMon, 06 Aug 2007 11:46:07 GMTWdatatablG0A*0A* createdTue, 09 Oct 2007 00:18:50 GMTWdatatablG0A-0A- createdTue, 09 Oct 2007 00:18:53 GMTWdatatabl0G e e createdMon, 24 Mar 2008 21:05:35 GMTWdatatabl0G e~ e~ createdMon, 24 Mar 2008 21:04:46 GMTWdatatabl0Gěě createdThu, 10 Jul 2008 17:06:32 GMTWdatatabl0Gěě createdThu, 10 Jul 2008 17:06:37 GMTWdatatabl0Gěě createdThu, 10 Jul 2008 17:06:50 GMTWdatatabl0Gěě createdThu, 10 Jul 2008 17:07:20 GMTWdatatabl0Gěě createdThu, 10 Jul 2008 17:06:56 GMTWdatatabl0G   createdSun, 23 Mar 2008 19:35:32 GMTWdatatabl0G C C createdSun, 23 Mar 2008 18:57:55 GMTWdatatabl0G I I createdSun, 23 Mar 2008 18:58:01 GMTWdatatablG%GD%GD createdSun, 30 Sep 2007 19:29:56 GMTWdatatablG%Gg%Gg createdSun, 30 Sep 2007 19:30:31 GMTWdatatabl0G 9< 9< createdMon, 24 Mar 2008 17:55:56 GMTWdatatabl0G e~ e~ createdMon, 24 Mar 2008 21:04:46 GMTWdatatabl0G 9@ 9@ createdMon, 24 Mar 2008 17:56:00 GMTWdatatablG%GM%GM createdSun, 30 Sep 2007 19:30:05 GMTWdatatablG%G%G createdSun, 30 Sep 2007 19:30:57 GMTWdatatabl0G e~ e~ createdMon, 24 Mar 2008 21:04:46 GMTWdatatablG%G%G createdSun, 30 Sep 2007 19:31:00 GMTWdatatablGNoNo createdSat, 21 Apr 2007 04:26:07 GMTWdatatablG2j2j createdWed, 08 Aug 2007 15:42:18 GMTWdatatablG1212 createdSun, 01 Jan 2006 15:11:46 GMTWdatatablG1K1K createdSun, 01 Jan 2006 15:12:11 GMTWdatatablG1c1c createdSun, 01 Jan 2006 15:12:35 GMTWdatatablGVV createdMon, 06 Aug 2007 11:41:28 GMTWdatatablG22 createdWed, 08 Aug 2007 15:44:39 GMTWdatatablGWW createdMon, 06 Aug 2007 11:41:38 GMTWdatatablGWW createdMon, 06 Aug 2007 11:41:38 GMTWdatatablGWW createdMon, 06 Aug 2007 11:41:38 GMTWdatatablGWW createdMon, 06 Aug 2007 11:44:25 GMTWdatatablGWW createdMon, 06 Aug 2007 11:44:43 GMTWdatatablGWW createdMon, 06 Aug 2007 11:44:50 GMTWdatatablGWW createdMon, 06 Aug 2007 11:45:04 GMTWdatatablGWW createdMon, 06 Aug 2007 11:45:04 GMTWdatatablG createdThu, 09 Aug 2007 21:10:47 GMTWdatatablG77 createdSun, 14 Oct 2007 18:36:54 GMTWdatatablG createdThu, 09 Aug 2007 21:10:47 GMTWdatatablG createdThu, 09 Aug 2007 21:11:08 GMTWdatatablG:S:S createdTue, 16 Oct 2007 18:37:42 GMTWdatatablGoo createdThu, 09 Aug 2007 21:13:03 GMTWdatatablG createdThu, 09 Aug 2007 21:14:34 GMTWdatatablG|| createdThu, 09 Aug 2007 21:13:16 GMTWdatatablG createdThu, 09 Aug 2007 21:14:41 GMTWdatatablG createdThu, 09 Aug 2007 21:15:26 GMTWdatatablG createdThu, 09 Aug 2007 21:15:31 GMTWdatatablG createdThu, 09 Aug 2007 21:15:51 GMTWdatatablG:K:K createdTue, 16 Oct 2007 18:06:09 GMTWdatatablG:K:K createdTue, 16 Oct 2007 18:06:34 GMTWdatatablG:K:K createdTue, 16 Oct 2007 18:06:47 GMTWdatatablGrr createdThu, 09 Aug 2007 21:17:22 GMTWdatatablGvv createdThu, 09 Aug 2007 21:17:26 GMTWdatatablG22 createdThu, 09 Aug 2007 21:16:18 GMTWdatatablGrr createdThu, 09 Aug 2007 21:17:22 GMTWdatatablGvv createdThu, 09 Aug 2007 21:17:26 GMTWdatatablGҒҒ createdThu, 09 Aug 2007 21:17:54 GMTWdatatablGҗҗ createdThu, 09 Aug 2007 21:17:59 GMTWdatatablG7676 createdSun, 14 Oct 2007 18:38:30 GMTWdatatablG createdThu, 09 Aug 2007 16:25:17 GMTWdatatablG/5/5 createdMon, 08 Oct 2007 17:55:01 GMTWdatatablGXX createdMon, 06 Aug 2007 11:49:46 GMTWdatatablGXX createdMon, 06 Aug 2007 11:48:59 GMTWdatatablGgg createdMon, 06 Aug 2007 12:53:46 GMTWdatatablG00 createdWed, 08 Aug 2007 15:35:42 GMTWdatatablG00 createdWed, 08 Aug 2007 15:36:04 GMTWdatatablG11 createdWed, 08 Aug 2007 15:36:21 GMTWdatatabl0G u u createdSun, 23 Mar 2008 19:32:53 GMTWdatatablGYTYT createdMon, 06 Aug 2007 11:51:32 GMTWdatatablG// createdWed, 08 Aug 2007 15:30:51 GMTWdatatablGX|X| createdMon, 06 Aug 2007 11:47:56 GMTWdatatablGgg createdTue, 04 Mar 2008 16:40:07 GMTWdatatablG createdTue, 04 Mar 2008 16:40:37 GMTWdatatablG createdTue, 04 Mar 2008 16:46:16 GMTWdatatablG<< createdTue, 21 Aug 2007 02:08:44 GMTWdatatablGBB createdTue, 21 Aug 2007 02:08:50 GMTWdatatablG createdTue, 04 Mar 2008 20:15:34 GMTWdatatablG createdTue, 04 Mar 2008 16:42:14 GMTWdatatablG createdTue, 04 Mar 2008 16:46:19 GMTWdatatablG createdTue, 04 Mar 2008 16:46:24 GMTWdatatablG createdTue, 04 Mar 2008 16:46:35 GMTWdatatablG createdTue, 21 Aug 2007 02:08:15 GMTWdatatablG createdTue, 21 Aug 2007 02:10:09 GMTWdatatablG<< createdTue, 21 Aug 2007 02:08:44 GMTWdatatablGBB createdTue, 21 Aug 2007 02:08:50 GMTWdatatablGX|X| createdMon, 06 Aug 2007 11:47:56 GMTWdatatablG createdTue, 21 Aug 2007 02:11:18 GMTWdatatablG createdTue, 21 Aug 2007 02:11:18 GMTWdatatablG createdTue, 21 Aug 2007 02:10:12 GMTWdatatablG createdTue, 21 Aug 2007 02:10:13 GMTWdatatablG createdTue, 21 Aug 2007 02:10:13 GMTWdatatablG0>@0>@ createdTue, 09 Oct 2007 00:06:24 GMTWdatatablG0?-0?- createdTue, 09 Oct 2007 00:10:21 GMTWdatatablG0>M0>M createdTue, 09 Oct 2007 00:06:37 GMTWdatatablG0?w0?w createdTue, 09 Oct 2007 00:11:35 GMTWdatatablG0BY0BY createdTue, 09 Oct 2007 00:23:53 GMTWdatatablG0@U0@U createdTue, 09 Oct 2007 00:15:17 GMTWdatatablG0@b0@b createdTue, 09 Oct 2007 00:15:30 GMTWdatatablG0@|0@| createdTue, 09 Oct 2007 00:15:56 GMTWdatatablG0@0@ createdTue, 09 Oct 2007 00:16:06 GMTWdatatablG0A0A createdTue, 09 Oct 2007 00:20:33 GMTWdatatablG0E0E createdTue, 09 Oct 2007 00:37:36 GMTWdatatablG0A0A createdTue, 09 Oct 2007 00:21:02 GMTWdatatablG0A0A createdTue, 09 Oct 2007 00:21:02 GMTWdatatablG0A0A createdTue, 09 Oct 2007 00:21:02 GMTWdatatablG0B!0B! createdTue, 09 Oct 2007 00:22:57 GMTWdatatablG0B[0B[ createdTue, 09 Oct 2007 00:23:55 GMTWdatatablG0B`0B` createdTue, 09 Oct 2007 00:24:00 GMTWdatatablGgg createdMon, 06 Aug 2007 12:53:15 GMTWdatatablGgg createdMon, 06 Aug 2007 12:53:17 GMTWdatatablGWW createdMon, 06 Aug 2007 11:41:52 GMTWdatatablG3-3- createdWed, 08 Aug 2007 15:45:33 GMTWdatatablGgg createdMon, 06 Aug 2007 12:53:17 GMTWdatatabl0G e~ e~ createdMon, 24 Mar 2008 21:04:46 GMTWdatatabl0G U U createdSun, 23 Mar 2008 19:15:17 GMTWdatatabl0G Y Y createdSun, 23 Mar 2008 19:15:21 GMTDIb Geneva/8i rs;LANDmac on howManyPicsSince (marktime) Changes 10/8/07; 1:07:51 PM by DW Created. How many pics has the user posted since marktime. local (ct = 0, i, adrhistory) for i = sizeof (user.photoFan.prefs.flickrToTwitter.history) downto 1 adrhistory = @user.photoFan.prefs.flickrToTwitter.history [i] if adrhistory^.when < marktime break ct++ return (ct) bundle //test code dialog.alert (howManyPicsSince (clock.now () - (24 * 60 * 60))) WdatatablG/#/# createdMon, 08 Oct 2007 17:07:47 GMTWdatatablG/&/& createdMon, 08 Oct 2007 17:07:50 GMTWdatatablG/'/' createdMon, 08 Oct 2007 17:07:51 GMTWdatatablG/S/S createdMon, 08 Oct 2007 17:08:35 GMTWdatatablG/|/| createdMon, 08 Oct 2007 17:09:16 GMTWdatatablG/ܐ/ܐ createdMon, 08 Oct 2007 17:09:36 GMTWdatatablG// createdMon, 08 Oct 2007 17:11:06 GMTWdatatablG// createdMon, 08 Oct 2007 17:11:18 GMTWdatatablG// createdMon, 08 Oct 2007 17:11:34 GMTWdatatablG/ / createdMon, 08 Oct 2007 17:11:38 GMTWdatatablG// createdMon, 08 Oct 2007 17:11:42 GMTWdatatablG// createdMon, 08 Oct 2007 17:11:46 GMT[$ Ğw;  ' checkFeedRZhowManyPicsSinceVGeneva 2 Genevap= n return (f) loop local (foldernum = random (1, file.filesinfolder (rootfolder, 1))) local (subfolder = nthSub (rootfolder, foldernum)) if file.isfolder (subfolder) //might be a file local (ctfiles = file.filesinfolder (subfolder, 1)) if ctfiles > 0 local (filenum = random (1, ctfiles)) local (f = nthSub (subfolder, filenum)) try local (hw = html.getJpegHeightWidth (f)) //make sure it's a valid jpg file return (f) bundle //test code webbrowser.opendocument (getrandompicture ()) WdatatablGnnnn createdSun, 25 Nov 2007 16:01:50 GMTWdatatablGnn createdSun, 25 Nov 2007 17:03:13 GMTWdatatablGnn createdSun, 25 Nov 2007 17:03:15 GMTWdatatablGnpnp createdSun, 25 Nov 2007 16:01:52 GMTWdatatablGnqnq createdSun, 25 Nov 2007 16:01:53 GMTWdatatablGnݵnݵ createdSun, 25 Nov 2007 16:07:17 GMTWdatatablGnݾnݾ createdSun, 25 Nov 2007 16:07:26 GMTWdatatablGnono createdSun, 25 Nov 2007 16:06:07 GMTWdatatablGn{n{ createdSun, 25 Nov 2007 16:06:19 GMTWdatatablGnݗnݗ createdSun, 25 Nov 2007 16:06:47 GMTWdatatablGnn createdSun, 25 Nov 2007 16:12:51 GMTWdatatablGnn createdSun, 25 Nov 2007 16:03:46 GMTWdatatablGnݟnݟ createdSun, 25 Nov 2007 16:06:55 GMTWdatatablGnn createdSun, 25 Nov 2007 16:55:29 GMTWdatatablGnn createdSun, 25 Nov 2007 16:12:28 GMTWdatatablGnn createdSun, 25 Nov 2007 16:13:03 GMTWdatatablGnn createdSun, 25 Nov 2007 16:03:46 GMTWdatatablGnn createdSun, 25 Nov 2007 16:08:35 GMTWdatatablGnn createdSun, 25 Nov 2007 16:45:21 GMTWdatatablGnn createdSun, 25 Nov 2007 16:45:23 GMTWdatatablGnn createdSun, 25 Nov 2007 16:08:57 GMTWdatatablGnn createdSun, 25 Nov 2007 16:08:59 GMTWdatatablGnn createdSun, 25 Nov 2007 16:09:03 GMT  Geneva!LANDmac on httpClient (url, flmessages=false, username="", password="") Changes 2/9/08; 9:27:57 AM by DW New hash coder. 2/8/08; 10:02:17 AM by DW Created. local (urllist, headers) bundle //set urllist try urllist = string.urlsplit (url) else urllist = string.urlsplit (url + "/") bundle //set headers on getHash () Changes 2/9/08; 8:57:10 AM by DW Created. bundle //do table sort once for each startup if not defined (system.temp.feedsFickrOrg) new (tabletype, @system.temp.feedsFickrOrg) if not defined (system.temp.feedsFickrOrg.fltablesorted) local (oldtarget = target.set (@compiler.language.keywords)) table.sortby ("Name") target.set (oldtarget) system.temp.feedsFickrOrg.fltablesorted = true local (tz = date.getCurrentTimeZone ()) local (when = clock.now () - tz, day, month, year, hour, minute, second) date.get (date.yesterday (when), @day, @month, @year, @hour, @minute, @second) hour = string (nameof (compiler.language.keywords [hour-1])) local (hash = string.hashmd5 (string (month) + string (hour) + string (day) + string (year))) return (hash) local (os = "Mac") new (tabletype, @headers) if system.environment.isWindows os = "Windows" headers.["User-Agent"] = photoFanSuite.data.productName + "/" + photoFanInfo.version + " (" + os + ")" if urllist [2] == "feeds.flickrfan.org" headers.Hash = getHash () return (string.httpResultSplit (tcp.httpClient (server:urllist [2], path:urllist [3], ctFollowRedirects:3, flMessages:flmessages, username:username, password:password, adrhdrtable:@headers))) bundle //test code wp.newtextobject (httpclient (photoFanSuite.data.urls.afp), @scratchpad.feedtext) WdatatablG'' createdFri, 08 Feb 2008 18:02:15 GMTWdatatablG"" createdSat, 09 Feb 2008 17:27:57 GMTWdatatablG"" createdSat, 09 Feb 2008 17:27:58 GMTWdatatablG)) createdFri, 08 Feb 2008 18:02:17 GMTWdatatablG** createdFri, 08 Feb 2008 18:02:18 GMTWdatatablG createdFri, 25 Aug 2006 17:25:28 GMTWdatatablG-- createdFri, 08 Feb 2008 18:06:37 GMTWdatatablG createdFri, 25 Aug 2006 17:25:33 GMTWdatatablG createdFri, 25 Aug 2006 17:25:34 GMTWdatatablG createdFri, 25 Aug 2006 17:25:44 GMTWdatatablG createdFri, 25 Aug 2006 17:25:45 GMTWdatatablG createdFri, 08 Feb 2008 18:05:34 GMTWdatatablGcc createdSat, 09 Feb 2008 16:57:07 GMTWdatatablGee createdSat, 09 Feb 2008 16:57:09 GMTWdatatablGgg createdSat, 09 Feb 2008 16:57:11 GMTWdatatablG createdSat, 09 Feb 2008 17:10:23 GMTWdatatablG createdSat, 09 Feb 2008 17:10:53 GMTWdatatablG createdSat, 09 Feb 2008 17:11:05 GMTWdatatablG createdSat, 09 Feb 2008 17:11:42 GMTWdatatablG createdSat, 09 Feb 2008 17:12:01 GMTWdatatablG createdSat, 09 Feb 2008 17:12:38 GMTWdatatablG createdSat, 09 Feb 2008 17:12:32 GMTWdatatablG createdSat, 09 Feb 2008 17:11:26 GMTWdatatablG createdSat, 09 Feb 2008 16:57:38 GMTWdatatablPGþ !þ ! createdThu, 24 Jan 2008 18:59:45 GMTWdatatablPG,, createdSat, 26 Jan 2008 17:38:52 GMTWdatatablPGþ!þ! createdThu, 24 Jan 2008 19:06:14 GMTWdatatablG createdSat, 09 Feb 2008 16:58:34 GMTWdatatablG createdFri, 08 Feb 2008 18:09:44 GMTWdatatablG createdFri, 08 Feb 2008 18:05:37 GMTWdatatablGڧڧ createdFri, 08 Feb 2008 18:08:39 GMTWdatatablG createdFri, 08 Feb 2008 18:09:04 GMTWdatatablG?? createdFri, 08 Feb 2008 18:06:55 GMTWdatatablG createdFri, 08 Feb 2008 18:10:32 GMTWdatatablPGþ!þ! createdThu, 24 Jan 2008 19:06:14 GMTWdatatablGےے createdFri, 08 Feb 2008 18:12:34 GMTWdatatablGۖۖ createdFri, 08 Feb 2008 18:12:38 GMTyN*:GenevaSo'4¼ hLANDmac Changes 8/14/08; 11:08:40 AM by DW Init user.photoFan.prefs.flOpenHomePageOnStartup to false. 7/26/08; 10:38:13 PM by DW Init user.photoFan.prefs.flOpenHomePageOnStartup. If false, the home page doesn't get displayed when the OPML Editor starts up. 7/11/08; 7:34:17 AM by DW Init user.photoFan.prefs.flickrToTwitter.flUseBitly. 4/16/08; 1:46:42 PM by DW Init user.photoFan.prefs.enabled. 3/23/08; 11:48:13 AM by DW Init user.photoFan.prefs.flickrToTwitter. 3/12/08; 12:47:31 PM by DW Init user.photoFan.prefs.archive.flDateNestedFolders. 2/7/08; 7:56:14 PM by DW Init user.photoFan.prefs.minuteToDownload. 2/5/08; 12:15:22 PM by DW Add AFP as a default feed. 2/5/08; 12:02:10 PM by DW Add call to flickr.folderwatcher.init before installing callback script. 1/20/08; 8:03:05 AM by DW Init user.photofan.calendar. 1/8/08; 3:12:25 PM by DW Init afterUpload callback, user.photoFan.prefs.flViewImageHtml. 1/6/08; 10:22:20 AM by DW Init user.photoFan.prefs.flMacDefaultBrower. 1/1/08; 2:38:25 PM by DW Init user.callbacks.systemTrayIconRightClick.photoFan. 12/31/07; 4:27:09 AM by DW Init user.photoFan.prefs.flags. 12/27/07; 10:14:53 AM by DW Init user.photoFan.prefs.flPubliclyListUser. 12/5/07; 11:08:52 AM by DW Init user.photoFan.prefs.myFeed.url and user.photoFan.prefs.twitter. 12/5/07; 9:34:50 AM by DW Define user.photoFan.prefs.folder on Windows. 12/2/07; 3:20:38 PM by DW Init system.temp.newsRiver. Used in password prefs, see radio.prefs.stringPref. 12/2/07; 8:15:38 AM by DW Init user.photoFan.prefs.backup. 12/2/07; 7:56:01 AM by DW Init user.photoFan.prefs.archive. 12/1/07; 9:43:01 AM by DW Init user.photoFan.prefs.myFeed.fldirty. 12/1/07; 9:09:34 AM by DW Init user.photoFan.prefs.myFeed.language. 11/30/07; 8:38:55 PM by DW Init user.photoFan.myFeed. 11/27/07; 12:13:14 AM by DW Init user.photoFan.prefs.flickr. 11/25/07; 6:28:52 PM by DW Initialize the cache in the system.temp table. 11/25/07; 1:20:59 PM by DW Created. if not defined (user.photoFan) new (tabletype, @user.photoFan) if not defined (user.photoFan.images) new (tabletype, @user.photoFan.images) if not defined (user.photofan.calendar) //1/20/08 by DW new (tabletype, @user.photofan.calendar) bundle //prefs if not defined (user.photoFan.prefs) new (tabletype, @user.photoFan.prefs) if not defined (user.photoFan.prefs.enabled) //4/16/08 by DW user.photoFan.prefs.enabled = true if not defined (user.photoFan.prefs.folder) if system.environment.isMac user.photoFan.prefs.folder = file.getSpecialFolderPath ("", "Pictures", true) + "photoFan" + file.getpathchar () else user.photoFan.prefs.folder = frontier.pathstring + "Pictures" + file.getpathchar () file.surefilepath (user.photoFan.prefs.folder + "xxx") if not defined (user.photoFan.prefs.screenSaverFolder) user.photoFan.prefs.screenSaverFolder = user.photoFan.prefs.folder + "screenSaverPics" + file.getpathchar () file.surefilepath (user.photoFan.prefs.screenSaverFolder + "xxx") if not defined (user.photoFan.prefs.serialnum) user.photoFan.prefs.serialnum = 1 if not defined (user.photoFan.prefs.sizeSmallestImage) user.photoFan.prefs.sizeSmallestImage = 100 * 1024 //100K if not defined (user.photoFan.prefs.flLog) user.photoFan.prefs.flLog = true if not defined (user.photoFan.prefs.maxConcurrentDownloads) user.photoFan.prefs.maxConcurrentDownloads = 5 if not defined (user.photoFan.prefs.flPubliclyListUser) user.photoFan.prefs.flPubliclyListUser = true if not defined (user.photoFan.prefs.flMacDefaultBrower) //1/6/08 by DW user.photoFan.prefs.flMacDefaultBrower = false if not defined (user.photoFan.prefs.flViewImageHtml) //1/8/08 by DW user.photoFan.prefs.flViewImageHtml = true if not defined (user.photoFan.prefs.minuteToDownload) //2/7/08 by DW user.photoFan.prefs.minuteToDownload = random (0, 59) if not defined (user.photoFan.prefs.flOpenHomePageOnStartup) //7/26/08 by DW user.photoFan.prefs.flOpenHomePageOnStartup = false //8/14/08 by DW, change from true to false if not defined (user.photoFan.prefs.flags) new (tabletype, @user.photoFan.prefs.flags) bundle //init user.photoFan.prefs.flickr if not defined (user.photoFan.prefs.flickr) new (tabletype, @user.photoFan.prefs.flickr) if not defined (user.photoFan.prefs.flickr.username) user.photoFan.prefs.flickr.username = "" if not defined (user.photoFan.prefs.flickr.flSubscribeToOwnPhotos) user.photoFan.prefs.flickr.flSubscribeToOwnPhotos = true if not defined (user.photoFan.prefs.flickr.id) user.photoFan.prefs.flickr.id = "" if not defined (user.photoFan.prefs.flickr.feed) user.photoFan.prefs.flickr.feed = "" if not defined (user.photoFan.prefs.flickr.flShowContacts) user.photoFan.prefs.flickr.flShowContacts = false bundle //stats if not defined (user.photoFan.stats) new (tabletype, @user.photoFan.stats) if not defined (user.photoFan.stats.ctChecks) user.photoFan.stats.ctChecks = 0 if not defined (user.photoFan.stats.whenLastCheck) user.photoFan.stats.whenLastCheck = date (0) bundle //feeds if not defined (user.photoFan.feeds) new (tabletype, @user.photoFan.feeds) photoFanSuite.addFeed (photoFanSuite.data.urls.ap) photoFanSuite.addFeed (photoFanSuite.data.urls.afp) //2/5/08; 12:15:14 PM by DW photoFanSuite.addFeed ("http://xml.flickrfan.org/river/defaultReadingList.opml") bundle //myFeed if not defined (user.photoFan.myFeed) new (tabletype, @user.photoFan.myFeed) if not defined (user.photoFan.prefs.myFeed) new (tabletype, @user.photoFan.prefs.myFeed) if not defined (user.photoFan.prefs.myFeed.serialnum) user.photoFan.prefs.myFeed.serialnum = 1 if not defined (user.photoFan.prefs.myFeed.title) if sizeof (user.photoFan.prefs.flickr.username) > 0 user.photoFan.prefs.myFeed.title = user.photoFan.prefs.flickr.username + "'s Shared Photo Feed" else user.photoFan.prefs.myFeed.title = "" if not defined (user.photoFan.prefs.myFeed.link) user.photoFan.prefs.myFeed.link = "" if not defined (user.photoFan.prefs.myFeed.description) user.photoFan.prefs.myFeed.description = "" if not defined (user.photoFan.prefs.myFeed.language) //12/1/07 by DW user.photoFan.prefs.myFeed.language = "en-us" if not defined (user.photoFan.prefs.myFeed.fldirty) //12/1/07 by DW user.photoFan.prefs.myFeed.fldirty = false if not defined (user.photoFan.prefs.myFeed.password) //12/1/07 by DW user.photoFan.prefs.myFeed.password = "" if not defined (user.photoFan.prefs.myFeed.url) //12/5/07 by DW user.photoFan.prefs.myFeed.url = "" bundle //archiving if not defined (user.photoFan.prefs.archive) new (tabletype, @user.photoFan.prefs.archive) if not defined (user.photoFan.prefs.archive.enabled) user.photoFan.prefs.archive.enabled = true if not defined (user.photoFan.prefs.archive.maxPics) user.photoFan.prefs.archive.maxPics = 5000 if not defined (user.photoFan.prefs.archive.flCopyToArchiveFolder) user.photoFan.prefs.archive.flCopyToArchiveFolder = false if not defined (user.photoFan.prefs.archive.flDateNestedFolders) //3/12/08 by DW user.photoFan.prefs.archive.flDateNestedFolders = false if not defined (user.photoFan.prefs.archive.folder) user.photoFan.prefs.archive.folder = user.photoFan.prefs.folder + "screenSaverArchive" + file.getpathchar () bundle //backup if not defined (user.photoFan.prefs.backup) new (tabletype, @user.photoFan.prefs.backup) if not defined (user.photoFan.prefs.backup.enabled) user.photoFan.prefs.backup.enabled = false if not defined (user.photoFan.prefs.backup.flImmediateBackup) user.photoFan.prefs.backup.flImmediateBackup = false if not defined (user.photoFan.prefs.backup.whenLastBackup) user.photoFan.prefs.backup.whenLastBackup = date (0) if not defined (user.photoFan.prefs.backup.serialnum) user.photoFan.prefs.backup.serialnum = 1 if not defined (user.photoFan.prefs.backup.hourToStart) user.photoFan.prefs.backup.hourToStart = 2 if not defined (user.photoFan.prefs.backup.folder) user.photoFan.prefs.backup.folder = user.photoFan.prefs.folder + "flickrBackup" + file.getpathchar () if not defined (user.photoFan.prefs.backup.photos) new (tabletype, @user.photoFan.prefs.backup.photos) bundle //twitter if not defined (user.photoFan.prefs.twitter) new (tabletype, @user.photoFan.prefs.twitter) if not defined (user.photoFan.prefs.twitter.username) user.photoFan.prefs.twitter.username = "" if not defined (user.photoFan.prefs.twitter.password) user.photoFan.prefs.twitter.password = "" bundle //flickrToTwitter, 3/23/08 by DW if not defined (user.photoFan.prefs.flickrToTwitter) new (tabletype, @user.photoFan.prefs.flickrToTwitter) if not defined (user.photoFan.prefs.flickrToTwitter.enabled) user.photoFan.prefs.flickrToTwitter.enabled = false if not defined (user.photoFan.prefs.flickrToTwitter.flFirstCheck) //we don't post on first check user.photoFan.prefs.flickrToTwitter.flFirstCheck = true if not defined (user.photoFan.prefs.flickrToTwitter.specialTag) user.photoFan.prefs.flickrToTwitter.specialTag = "" if not defined (user.photoFan.prefs.flickrToTwitter.ctchecks) user.photoFan.prefs.flickrToTwitter.ctchecks = 0 if not defined (user.photoFan.prefs.flickrToTwitter.ctposts) user.photoFan.prefs.flickrToTwitter.ctposts = 0 if not defined (user.photoFan.prefs.flickrToTwitter.lastPost) user.photoFan.prefs.flickrToTwitter.lastPost = "" if not defined (user.photoFan.prefs.flickrToTwitter.whenLastCheck) user.photoFan.prefs.flickrToTwitter.whenLastCheck = date (0) if not defined (user.photoFan.prefs.flickrToTwitter.whenLastPost) user.photoFan.prefs.flickrToTwitter.whenLastPost = date (0) if not defined (user.photoFan.prefs.flickrToTwitter.minutesBetweenChecks) user.photoFan.prefs.flickrToTwitter.minutesBetweenChecks = 10 if not defined (user.photoFan.prefs.flickrToTwitter.history) new (tabletype, @user.photoFan.prefs.flickrToTwitter.history) if not defined (user.photoFan.prefs.flickrToTwitter.flUseBitly) //7/10/08 by DW user.photoFan.prefs.flickrToTwitter.flUseBitly = true bundle //system table if not defined (system.temp.photoFan) new (tabletype, @system.temp.photoFan) if not defined (system.temp.photoFan.cache) new (tabletype, @system.temp.photoFan.cache) if not defined (system.temp.photoFan.ctConcurrentDownloads) system.temp.photoFan.ctConcurrentDownloads = 0 if not defined (system.temp.newsRiver) //used in password prefs, see radio.prefs.stringPref new (tabletype, @system.temp.newsRiver) bundle //system tray icon callback if not defined (user.callbacks.systemTrayIconRightClick.photoFan) user.callbacks.systemTrayIconRightClick.photoFan = @photoFanSuite.systemTrayIconCallback bundle //afterUpload callback flickr.folderwatcher.init () //2/5/08 by DW if not defined (user.flickr.folderWatcher.callbacks.afterUpload.photoFan) user.flickr.folderWatcher.callbacks.afterUpload.photoFan = @photoFanSuite.afterUploadCallback Wdatatabl0GĜxĜx createdFri, 11 Jul 2008 14:34:16 GMTWdatatabl0GĜzĜz createdFri, 11 Jul 2008 14:34:18 GMTWdatatablG++ createdWed, 16 Apr 2008 20:46:42 GMTWdatatablG++ createdWed, 16 Apr 2008 20:46:43 GMTWdatatabl0G createdSun, 23 Mar 2008 18:48:13 GMTWdatatabl0G createdSun, 23 Mar 2008 18:48:14 GMTWdatatablGcc createdWed, 12 Mar 2008 19:47:31 GMTWdatatablGdd createdWed, 12 Mar 2008 19:47:32 GMTWdatatablG createdFri, 08 Feb 2008 03:56:13 GMTWdatatablG createdFri, 08 Feb 2008 03:56:14 GMTWdatatablPG createdTue, 05 Feb 2008 20:15:22 GMTWdatatablPG createdTue, 05 Feb 2008 20:15:23 GMTWdatatablPG createdTue, 05 Feb 2008 20:02:10 GMTWdatatablPG createdTue, 05 Feb 2008 20:02:11 GMTWdatatablGøø createdSun, 20 Jan 2008 16:03:05 GMTWdatatablGøø createdSun, 20 Jan 2008 16:03:06 GMTWdatatablPGéCYéCY createdTue, 08 Jan 2008 23:12:25 GMTWdatatablPGéCZéCZ createdTue, 08 Jan 2008 23:12:26 GMTWdatatablPGæ\\æ\\ createdSun, 06 Jan 2008 18:22:20 GMTWdatatablPGæ\]æ\] createdSun, 06 Jan 2008 18:22:21 GMTWdatatablGàà createdTue, 01 Jan 2008 22:38:25 GMTWdatatablGàà createdTue, 01 Jan 2008 22:38:25 GMTWdatatablGÞ Þ  createdMon, 31 Dec 2007 12:27:09 GMTWdatatablGÞ Þ  createdMon, 31 Dec 2007 12:27:10 GMTWdatatablPGÙ+Ù+ createdThu, 27 Dec 2007 18:14:52 GMTWdatatablPGÙ+Ù+ createdThu, 27 Dec 2007 18:14:53 GMTWdatatablG|7C|7C createdWed, 05 Dec 2007 19:08:51 GMTWdatatablG|7D|7D createdWed, 05 Dec 2007 19:08:52 GMTWdatatablG|!9|!9 createdWed, 05 Dec 2007 17:34:49 GMTWdatatablG|!;|!; createdWed, 05 Dec 2007 17:34:51 GMTWdatatablPGx}x} createdSun, 02 Dec 2007 23:20:38 GMTWdatatablPGx}x} createdSun, 02 Dec 2007 23:20:38 GMTWdatatablPGx)x) createdSun, 02 Dec 2007 16:15:37 GMTWdatatablPGx*x* createdSun, 02 Dec 2007 16:15:38 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:55:59 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:56:02 GMTWdatatablPGv$v$ createdSat, 01 Dec 2007 17:43:00 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 17:43:01 GMTWdatatablPGvLvL createdSat, 01 Dec 2007 17:09:32 GMTWdatatablPGvOvO createdSat, 01 Dec 2007 17:09:35 GMTWdatatablPGv%_v%_ createdSat, 01 Dec 2007 04:38:55 GMTWdatatablPGv%_v%_ createdSat, 01 Dec 2007 04:38:55 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:13:14 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:13:15 GMTWdatatablPGoocooc createdMon, 26 Nov 2007 02:28:51 GMTWdatatablPGoodood createdMon, 26 Nov 2007 02:28:52 GMTWdatatablPGo':o': createdSun, 25 Nov 2007 21:20:58 GMTWdatatablPGo';o'; createdSun, 25 Nov 2007 21:20:59 GMTWdatatablPGo'Eo'E createdSun, 25 Nov 2007 21:21:09 GMTWdatatablPGo'Ko'K createdSun, 25 Nov 2007 21:21:15 GMTWdatatablPGo'Eo'E createdSun, 25 Nov 2007 21:21:09 GMTWdatatablPGo'Ko'K createdSun, 25 Nov 2007 21:21:15 GMTWdatatablGøø createdSun, 20 Jan 2008 16:03:33 GMTWdatatablGøø createdSun, 20 Jan 2008 16:03:42 GMTWdatatablPGo-do-d createdSun, 25 Nov 2007 21:47:16 GMTWdatatablPGo'Eo'E createdSun, 25 Nov 2007 21:21:09 GMTWdatatablPGo'Ko'K createdSun, 25 Nov 2007 21:21:15 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablGxx createdMon, 17 Oct 2005 13:04:53 GMTWdatatablG|G|G createdWed, 05 Dec 2007 17:17:59 GMTWdatatablGxx createdMon, 17 Oct 2005 13:05:03 GMTWdatatablG|X|X createdWed, 05 Dec 2007 17:18:16 GMTWdatatablG|[|[ createdWed, 05 Dec 2007 17:18:19 GMTWdatatablPGN'\N'\ createdWed, 31 Oct 2007 19:36:44 GMTWdatatablGxx createdMon, 17 Oct 2005 13:04:53 GMTWdatatablGxx createdMon, 17 Oct 2005 13:05:03 GMTWdatatablPGN'\N'\ createdWed, 31 Oct 2007 19:36:44 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGÙ+Ù+ createdThu, 27 Dec 2007 18:15:02 GMTWdatatablPGÙ+Ù+ createdThu, 27 Dec 2007 18:15:07 GMTWdatatablPGæ\Hæ\H createdSun, 06 Jan 2008 18:22:00 GMTWdatatablPGæ\Mæ\M createdSun, 06 Jan 2008 18:22:05 GMTWdatatablPGæ\Hæ\H createdSun, 06 Jan 2008 18:22:00 GMTWdatatablPGæ\Mæ\M createdSun, 06 Jan 2008 18:22:05 GMTWdatatablPGæ\Hæ\H createdSun, 06 Jan 2008 18:22:00 GMTWdatatablPGæ\Mæ\M createdSun, 06 Jan 2008 18:22:05 GMTWdatatablPGæ\Hæ\H createdSun, 06 Jan 2008 18:22:00 GMTWdatatablPGæ\Mæ\M createdSun, 06 Jan 2008 18:22:05 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:26:26 GMTWdatatablGÞ Þ  createdMon, 31 Dec 2007 12:26:42 GMTWdatatablPGqyqy createdTue, 27 Nov 2007 15:37:03 GMTWdatatablPGqyqy createdTue, 27 Nov 2007 15:37:21 GMTWdatatablPGqyqy createdTue, 27 Nov 2007 15:37:26 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:47:50 GMTWdatatablPGo-o- createdSun, 25 Nov 2007 21:48:19 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:38:14 GMTWdatatablPGq q createdTue, 27 Nov 2007 17:38:20 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:38:14 GMTWdatatablPGq q createdTue, 27 Nov 2007 17:38:20 GMTWdatatablPGo)o) createdSun, 25 Nov 2007 21:31:34 GMTWdatatablPGo'Eo'E createdSun, 25 Nov 2007 21:21:09 GMTWdatatablPGo'Ko'K createdSun, 25 Nov 2007 21:21:15 GMTWdatatablPGo)o) createdSun, 25 Nov 2007 21:31:56 GMTWdatatablPGo)o) createdSun, 25 Nov 2007 21:32:01 GMTWdatatablPGo)o) createdSun, 25 Nov 2007 21:32:11 GMTWdatatablPGo)o) createdSun, 25 Nov 2007 21:32:16 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:28 GMTWdatatablPGo'Eo'E createdSun, 25 Nov 2007 21:21:09 GMTWdatatablPGo'Ko'K createdSun, 25 Nov 2007 21:21:15 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGv%|v%| createdSat, 01 Dec 2007 04:39:24 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:29 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:42 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:42 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv)v) createdSat, 01 Dec 2007 04:58:06 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv)v) createdSat, 01 Dec 2007 04:58:12 GMTWdatatablPGv)v) createdSat, 01 Dec 2007 04:58:14 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%|v%| createdSat, 01 Dec 2007 04:39:24 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:42 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:40:09 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:52:14 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:52:14 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:52:14 GMTWdatatablPGv%v% createdSat, 01 Dec 2007 04:39:54 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:52:14 GMTWdatatablPGWOWO createdWed, 07 Nov 2007 15:44:15 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWOWO createdWed, 07 Nov 2007 15:44:15 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatabl0G ) ) createdSun, 23 Mar 2008 18:44:41 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:58:21 GMTWdatatabl0G b b createdSun, 23 Mar 2008 18:58:26 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:58:21 GMTWdatatabl0G b b createdSun, 23 Mar 2008 18:58:26 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:58:21 GMTWdatatabl0G b b createdSun, 23 Mar 2008 18:58:26 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:58:21 GMTWdatatabl0G b b createdSun, 23 Mar 2008 18:58:26 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:58:21 GMTWdatatabl0G b b createdSun, 23 Mar 2008 18:58:26 GMTWdatatabl0G ] ] createdSun, 23 Mar 2008 18:58:21 GMTWdatatabl0G b b createdSun, 23 Mar 2008 18:58:26 GMTWdatatabl0G   createdSun, 23 Mar 2008 19:03:11 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGWTWT createdWed, 07 Nov 2007 15:44:20 GMTWdatatablPGWbWb createdWed, 07 Nov 2007 15:44:34 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:38 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:43 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:57 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:43 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:57 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:58:13 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:58:17 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:43 GMTWdatatablPGo/o/ createdSun, 25 Nov 2007 21:57:57 GMTWdatatablGàà createdTue, 01 Jan 2008 22:37:01 GMTWdatatablGàà createdTue, 01 Jan 2008 22:37:08 GMTWdatatablGàà createdTue, 01 Jan 2008 22:37:40 GMTWdatatablPGéCéC createdTue, 08 Jan 2008 23:11:18 GMTWdatatablPG createdTue, 05 Feb 2008 20:01:46 GMTWdatatablPGéC%éC% createdTue, 08 Jan 2008 23:11:33 GMTWdatatablPGéC)éC) createdTue, 08 Jan 2008 23:11:37 GMTy `GenevaqTLANDmac on initFeed (adrfeed) Changes 3/7/08; 9:49:07 AM by DW Init lastError sub-table. 11/27/07; 12:26:05 PM by DW Created. if not defined (adrfeed^) new (tabletype, adrfeed) if not defined (adrfeed^.enabled) adrfeed^.enabled = false if not defined (adrfeed^.ctChecks) adrfeed^.ctChecks = 0 if not defined (adrfeed^.whenLastCheck) adrfeed^.whenLastCheck = date (0) if not defined (adrfeed^.ctPicsDownloaded) adrfeed^.ctPicsDownloaded = 0 if not defined (adrfeed^.whenLastPicDownloaded) adrfeed^.whenLastPicDownloaded = date (0) if not defined (adrfeed^.flContact) adrfeed^.flContact = false if not defined (adrfeed^.flickrUserId) //could be a Flickr user's feed adrfeed^.flickrUserId = "" if not defined (adrfeed^.folder) adrfeed^.folder = user.photoFan.prefs.screenSaverFolder + file.cleanfilename (adrfeed^.title) + file.getpathchar () bundle //lastError table -- 3/7/08 by DW if not defined (adrfeed^.lastError) new (tabletype, @adrfeed^.lastError) if not defined (adrfeed^.lastError.when) adrfeed^.lastError.when = date (0) if not defined (adrfeed^.lastError.what) adrfeed^.lastError.what = "" bundle //test code local (adr) for adr in @user.photoFan.feeds initFeed (adr) WdatatablPGq[q[ createdTue, 27 Nov 2007 20:26:03 GMTWdatatabl0G createdFri, 07 Mar 2008 17:49:07 GMTWdatatabl0G createdFri, 07 Mar 2008 17:49:08 GMTWdatatablPGq\q\ createdTue, 27 Nov 2007 20:26:04 GMTWdatatablPGq^q^ createdTue, 27 Nov 2007 20:26:06 GMTWdatatablPGqfqf createdTue, 27 Nov 2007 20:26:14 GMTWdatatablPGqsqs createdTue, 27 Nov 2007 20:26:27 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqkqk createdTue, 27 Nov 2007 22:21:31 GMTWdatatablPGqsqs createdTue, 27 Nov 2007 22:21:39 GMTWdatatablGs)9s)9 createdWed, 28 Nov 2007 22:18:33 GMTWdatatablPGqq createdTue, 27 Nov 2007 19:37:05 GMTWdatatabl0GPP createdFri, 07 Mar 2008 17:50:08 GMTWdatatablPGqfqf createdTue, 27 Nov 2007 20:26:14 GMTWdatatablPGqsqs createdTue, 27 Nov 2007 20:26:27 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqxqx createdTue, 27 Nov 2007 20:26:32 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:26:42 GMTWdatatablPGqq createdTue, 27 Nov 2007 20:28:11 GMTWdatatablPGqCqC createdTue, 27 Nov 2007 22:12:19 GMTWdatatablPGq0q0 createdTue, 27 Nov 2007 22:12:00 GMTWdatatablPGq4q4 createdTue, 27 Nov 2007 22:12:04 GMT PGenevaTĽLANDmac webbrowser.bringtofront () webbrowser.openurl (photoFanSuite.data.urls.homeUrl) ZGenevaĺLANDmac if dialog.confirm ("Scan photo feeds you're subscribed to?") photoFanSuite.checkFeeds () datata&!Genevao&İ?LANDmac PhotoFan Home Page Scan Now... b bpc8Genevap1 wB Genevav'xw: ]LANDmac on add (adrimg, title, description, adradritem) Changes 12/2/07; 3:31:52 PM by DW Changed the verb from "Created" to "Published." 12/2/07; 3:24:36 PM by DW Don't bother with the dirty boolean, publish the feed right here. 12/1/07; 9:45:05 AM by DW Set user.photoFan.prefs.myFeed.fldirty. 12/1/07; 8:20:09 AM by DW Corrected logging code so that it says "Updated" when the item was updated, and "Created" when it was created. 11/30/07; 9:12:22 PM by DW Add adradritem parameter which lets the user update existing shared pics. 11/30/07; 8:48:58 PM by DW Created. local (adritem, startticks = clock.ticks (), logverb = "Updated") if adradritem^ == nil //creating local (serialnum = user.photoFan.prefs.myFeed.serialnum++) adritem = @user.photoFan.myFeed.[string.padwithzeros (serialnum, 5)] new (tabletype, adritem) adradritem^ = adritem logverb = "Published" else //updating adritem = adradritem^ adritem^.title = title adritem^.description = description adritem^.url = adrimg^.url adritem^.type = adrimg^.type adritem^.size = file.size (adrimg^.f) user.photoFan.prefs.myFeed.fldirty = true //12/2/07 by DW filemenu.save () bundle //add to log local (s = logverb + " picture \" + title + " in your RSS 2.0 feed.") photoFanSuite.addToLog ("Share", s, startticks) photoFanSuite.myFeed.publish () //12/2/07 by DW bundle //test code local (adrimg = @user.photoFan.images.["http:///static.flickrfan.org/ap/2007/11/21/0232.jpg"]) local (adritem = @user.photoFan.myFeed.["00004"]) add (adrimg, adrimg^.title, adrimg^.description, @adritem) WdatatablPGv'v' createdSat, 01 Dec 2007 04:48:51 GMTWdatatablPGxhxh createdSun, 02 Dec 2007 23:31:52 GMTWdatatablPGxixi createdSun, 02 Dec 2007 23:31:53 GMTWdatatablPGx~x~ createdSun, 02 Dec 2007 23:24:36 GMTWdatatablPGx~x~ createdSun, 02 Dec 2007 23:24:37 GMTWdatatablPGvݠvݠ createdSat, 01 Dec 2007 17:45:04 GMTWdatatablPGvݡvݡ createdSat, 01 Dec 2007 17:45:05 GMTWdatatablPGvɸvɸ createdSat, 01 Dec 2007 16:20:08 GMTWdatatablPGvɺvɺ createdSat, 01 Dec 2007 16:20:10 GMTWdatatablPGv-5v-5 createdSat, 01 Dec 2007 05:12:21 GMTWdatatablPGv-6v-6 createdSat, 01 Dec 2007 05:12:22 GMTWdatatablPGv'v' createdSat, 01 Dec 2007 04:48:52 GMTWdatatablPGv'v' createdSat, 01 Dec 2007 04:48:58 GMTWdatatablPGv(nv(n createdSat, 01 Dec 2007 04:51:58 GMTWdatatablPGv-fv-f createdSat, 01 Dec 2007 05:13:10 GMTWdatatablPGv'v' createdSat, 01 Dec 2007 04:49:09 GMTWdatatablPGv'v' createdSat, 01 Dec 2007 04:49:17 GMTWdatatablPGv'v' createdSat, 01 Dec 2007 04:50:07 GMTWdatatablPGv-Cv-C createdSat, 01 Dec 2007 05:12:35 GMTWdatatablPGvɠvɠ createdSat, 01 Dec 2007 16:19:44 GMTWdatatablPGv-v- createdSat, 01 Dec 2007 05:13:46 GMTWdatatablPGv-v- createdSat, 01 Dec 2007 05:13:48 GMTWdatatablPGv( v( createdSat, 01 Dec 2007 04:50:21 GMTWdatatablPGv(v( createdSat, 01 Dec 2007 04:50:28 GMTWdatatablPGv(v( createdSat, 01 Dec 2007 04:50:36 GMTWdatatablPGv(1v(1 createdSat, 01 Dec 2007 04:50:57 GMTWdatatablPGv(Bv(B createdSat, 01 Dec 2007 04:51:14 GMTWdatatablPGvݚvݚ createdSat, 01 Dec 2007 17:44:58 GMTWdatatablPGv([v([ createdSat, 01 Dec 2007 04:51:39 GMTWdatatablPGv(v( createdSat, 01 Dec 2007 04:53:13 GMTWdatatablPGv(v( createdSat, 01 Dec 2007 04:53:25 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGx~x~ createdSun, 02 Dec 2007 23:24:17 GMTWdatatablPGv)v) createdSat, 01 Dec 2007 04:54:42 GMTWdatatablPGv)?v)? createdSat, 01 Dec 2007 04:55:27 GMTWdatatablPGvv createdSat, 01 Dec 2007 16:21:14 GMTWdatatablPGv)v) createdSat, 01 Dec 2007 04:54:48 GMT1 XGeneva vrÝA`5ELANDmac on publish () Changes 12/30/07; 12:35:56 PM by DW Use the Flickr ID not username in forming the opml2:ownerId element. 12/29/07; 9:25:27 PM by DW Big change. The ID we send is the "nsid" not the username, because as Trevor Manternach observed, the username that Flickr sends back is actually a screen name. I'm not willing to bet on them being unique. So we'll transition, early-on, to the more cryptic but guaranteed to be unique ID. 12/29/07; 4:02:13 PM by DW The feeds being published by users are missing the xmlns declaration for the opml2 namespace. 12/2/07; 3:35:55 PM by DW Add logging code. 12/2/07; 12:17:48 PM by DW Hooked up to new file storage web service. 12/1/07; 8:23:21 AM by DW Created. local (xmltext = "", indentlevel = 0, startticks = clock.ticks ()) on add (s) xmltext = xmltext + (string.filledstring ("\t", indentlevel) + s + "\r\n"); on encode (s) if system.environment.isMac return (xml.entityEncode (latinToMac.macToLatin (s), true)) else return (xml.entityEncode (s, true)) local (now = clock.now (), maxitems = 100, ctitems = 0) add ("") add ("") add (""); indentlevel++ //12/29/07 by DW add (""); indentlevel++ bundle //add header elements add ("" + encode (user.photoFan.prefs.myFeed.title) + "") add ("" + encode (user.photoFan.prefs.myFeed.link) + "") add ("" + encode (user.photoFan.prefs.myFeed.description) + "") add ("" + user.photoFan.prefs.myFeed.language + "") add ("" + date.netstandardstring (now) + "") add ("" + date.netstandardstring (now) + "") add ("http://cyber.law.harvard.edu/rss/rss.html") add ("" + frontier.getprogramname () + "") bundle //add items local (i, adritem, title) for i = sizeof (user.photoFan.myFeed) downto 1 adritem = @user.photoFan.myFeed [i] add (""); indentlevel++ add ("" + encode (adritem^.title) + "") add ("") add ("" + date.netstandardstring (timeCreated (adritem)) + "") add ("" + encode (adritem^.url) + "") add ("http://flickr.com/photos/" + user.photoFan.prefs.flickr.id + "/") add (""); indentlevel-- if ++ctitems > maxitems break add (""); indentlevel-- add (""); indentlevel-- op.newoutlineobject (xmltext, @scratchpad.rsstext) bundle //publish the feed local (server = photoFanSuite.data.urls.publishServer) local (id = user.photoFan.prefs.flickr.id) //12/29/07 by DW, used to be user.photoFan.prefs.flickr.username. local (password = string (user.photoFan.prefs.myFeed.password)) user.photoFan.prefs.myFeed.url = [server].flickrFan.publishFile (id, password, user.prefs.mailaddress, "rss.xml", xmltext) bundle //add to log local (s = "Your RSS 2.0 picture feed was published.") photoFanSuite.addToLog ("Publish", s, startticks) bundle //test code publish () WdatatablPGvvvv createdSat, 01 Dec 2007 16:23:18 GMTWdatatablGÝA,ÝA, createdSun, 30 Dec 2007 20:35:56 GMTWdatatablGÝA,ÝA, createdSun, 30 Dec 2007 20:35:56 GMTWdatatablGÜkÜk createdSun, 30 Dec 2007 05:25:27 GMTWdatatablGÜkÜk createdSun, 30 Dec 2007 05:25:28 GMTWdatatablGÜ Ü  createdSun, 30 Dec 2007 00:02:12 GMTWdatatablGÜ Ü  createdSun, 30 Dec 2007 00:02:13 GMTWdatatablPGx[x[ createdSun, 02 Dec 2007 23:35:55 GMTWdatatablPGx\x\ createdSun, 02 Dec 2007 23:35:56 GMTWdatatablPGxRxR createdSun, 02 Dec 2007 20:17:47 GMTWdatatablPGxRxR createdSun, 02 Dec 2007 20:17:48 GMTWdatatablPGvyvy createdSat, 01 Dec 2007 16:23:21 GMTWdatatablPGvzvz createdSat, 01 Dec 2007 16:23:22 GMTWdatatablG++ createdFri, 16 Feb 2007 17:37:42 GMTWdatatablG§=§= createdWed, 27 Jun 2007 18:49:17 GMTWdatatablG§A§A createdWed, 27 Jun 2007 18:49:21 GMTWdatatablG§I§I createdWed, 27 Jun 2007 18:49:29 GMTWdatatablG§O§O createdWed, 27 Jun 2007 18:49:35 GMTWdatatablG¨ ¨ createdWed, 27 Jun 2007 18:57:20 GMTWdatatablG¨(¨( createdWed, 27 Jun 2007 19:10:16 GMTWdatatablG¨ ¨ createdWed, 27 Jun 2007 18:57:20 GMTWdatatablG¨¨ createdWed, 27 Jun 2007 19:16:20 GMTWdatatablG¨ ¨ createdWed, 27 Jun 2007 18:57:20 GMTWdatatablG©ŧ©ŧ createdFri, 29 Jun 2007 03:08:07 GMTWdatatablG©Ů©Ů createdFri, 29 Jun 2007 03:08:14 GMTWdatatablG§§ createdWed, 27 Jun 2007 17:52:48 GMTWdatatablPGxPxP createdSun, 02 Dec 2007 20:08:45 GMTWdatatablPGxPxP createdSun, 02 Dec 2007 20:08:59 GMTWdatatablPGxPxP createdSun, 02 Dec 2007 20:09:21 GMTWdatatablPGxQxQ createdSun, 02 Dec 2007 20:12:08 GMTWdatatablPGxPjxPj createdSun, 02 Dec 2007 20:07:06 GMTWdatatablPGv(v( createdSat, 01 Dec 2007 04:53:13 GMTWdatatablPGv(v( createdSat, 01 Dec 2007 04:53:25 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGv׺v׺ createdSat, 01 Dec 2007 17:19:54 GMTWdatatablPGv׾v׾ createdSat, 01 Dec 2007 17:19:58 GMTL$v'ûk  adde&publishycVGeneva 2 *Geneva P1A6LANDmac on parseXstruct (adrxstruct, adrfeed) Changes 2/2/08; 4:54:40 PM by DW Pass through pubDate from the RSS feed, if present, in the image table. 11/26/07; 11:12:51 AM by DW Copy title, link and description into the image table, add fltesting flag. Set fltesting if you want it to read pictures that we've already read, for testing purposes. 11/25/07; 1:36:20 PM by DW Ported from flickrRivr. local (fltesting = false) //set false before releasing on decode (s) return (xml.entitydecode (s, flAlphaEntities:true)) on doimage (imgurl, adratts, title, link, description, pubdate) local (adrimg = @user.photoFan.images.[imgurl]) imgurl = decode (imgurl) if (not defined (adrimg^)) or fltesting adrimg^ = adratts^ adrimg^.title = title adrimg^.link = link adrimg^.description = description adrimg^.pubdate = pubdate while system.temp.photoFan.ctConcurrentDownloads > user.photoFan.prefs.maxConcurrentDownloads thread.sleepfor (3) system.temp.photoFan.ctConcurrentDownloads++ thread.callscript (@photoFanSuite.downloadImage, {imgurl, adrimg, adrfeed}) local (adrrss = xml.getaddress (adrxstruct, "rss"), adr) local (adrchannel = xml.getaddress (adrrss, "channel")) for adr in adrchannel nameitem = string.nthfield (nameof (adr^), '\t', 2) if nameitem == "item" local (title = "", link = "", description = "", pubdate = clock.now ()) bundle //set title, description try {title = decode (xml.getvalue (adr, "title"))} try {link = decode (xml.getvalue (adr, "link"))} try {description = decode (xml.getvalue (adr, "description"))} try {pubdate = date (decode (xml.getvalue (adr, "pubDate")))} try //see if the item has a media:content element local (adrcontent = xml.getaddress (adr, "content")) local (adratts = @adrcontent^.["/atts"]) if adratts^.namespace == "media:" if adratts^.type == "image/jpeg" doimage (adratts^.url, adratts, title, link, description, pubdate) else try //see if it has an enclosure element local (adrenclosure = xml.getaddress (adr, "enclosure")) local (adratts = @adrenclosure^.["/atts"]) if adratts^.type == "image/jpeg" doimage (adratts^.url, adratts, title, link, description, pubdate) if (adratts^.type == "x-audio/mp3") or (adratts^.type == "audio/mpeg") try {photoFanSuite.podcatcher.addToQueue (adratts^.url)} bundle //test code local (url = "http://static.flickrfan.org/afp/rss.xml") local (url = "http://api.flickr.com/services/feeds/photos_public.gne?id=51035555243@N01&format=rss_200") local (s = tcp.httpreadurl (url)) xml.compile (s, @scratchpad.xstruct) parseXstruct (@scratchpad.xstruct, "AP Photos") WdatatablGN߉N߉ createdSat, 21 Apr 2007 04:22:17 GMTWdatatablGPP createdSun, 22 Apr 2007 01:20:47 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:54:39 GMTWdatatablPGPP createdSun, 03 Feb 2008 00:54:40 GMTWdatatablPGpZpZ createdMon, 26 Nov 2007 19:12:51 GMTWdatatablPGpZpZ createdMon, 26 Nov 2007 19:12:52 GMTWdatatablPGp^5p^5 createdMon, 26 Nov 2007 19:27:49 GMTWdatatablPGo*o* createdSun, 25 Nov 2007 21:36:20 GMTWdatatablPGo*o* createdSun, 25 Nov 2007 21:36:21 GMTWdatatablPGp]Ap]A createdMon, 26 Nov 2007 19:23:45 GMTWdatatablG0A*0A* createdTue, 09 Oct 2007 00:18:50 GMTWdatatablG0A-0A- createdTue, 09 Oct 2007 00:18:53 GMTWdatatablPGee createdSun, 18 Nov 2007 21:37:27 GMTWdatatablG22 createdSun, 01 Jan 2006 15:17:34 GMTWdatatablGMkMk createdSat, 07 Oct 2006 21:36:02 GMTWdatatablG33 createdSun, 01 Jan 2006 15:19:28 GMTWdatatablG3E3E createdSun, 01 Jan 2006 15:20:37 GMTWdatatablPGpYFpYF createdMon, 26 Nov 2007 19:06:46 GMTWdatatablPGpYFpYF createdMon, 26 Nov 2007 19:06:46 GMTWdatatablPGpYFpYF createdMon, 26 Nov 2007 19:06:46 GMTWdatatablPGpYFpYF createdMon, 26 Nov 2007 19:06:46 GMTWdatatablPGUTUT createdTue, 06 Nov 2007 17:07:32 GMTWdatatablPGUzUz createdTue, 06 Nov 2007 17:08:10 GMTWdatatablPGo7Mo7M createdSun, 25 Nov 2007 22:29:33 GMTWdatatabl`GQ Q createdSun, 22 Apr 2007 21:17:45 GMTWdatatablG1212 createdSun, 01 Jan 2006 15:11:46 GMTWdatatablG1K1K createdSun, 01 Jan 2006 15:12:11 GMTWdatatablG1c1c createdSun, 01 Jan 2006 15:12:35 GMTWdatatablG1o1o createdSun, 01 Jan 2006 15:12:47 GMTWdatatablG11 createdSun, 01 Jan 2006 15:13:26 GMTWdatatablPGpXpX createdMon, 26 Nov 2007 19:04:44 GMTWdatatablPGpXpX createdMon, 26 Nov 2007 19:05:18 GMTWdatatablPGpXpX createdMon, 26 Nov 2007 19:05:26 GMTWdatatablPGpXpX createdMon, 26 Nov 2007 19:05:26 GMTWdatatablPGpXpX createdMon, 26 Nov 2007 19:05:26 GMTWdatatablPGpXpX createdMon, 26 Nov 2007 19:05:26 GMTWdatatablPGee createdSun, 18 Nov 2007 21:33:08 GMTWdatatablG11 createdSun, 01 Jan 2006 15:13:31 GMTWdatatablG1ֿ1 createdSun, 01 Jan 2006 15:14:30 GMTWdatatablG2 2 createdSun, 01 Jan 2006 15:15:22 GMTWdatatablG2W2W createdSun, 01 Jan 2006 15:16:39 GMTWdatatablPGee createdSun, 18 Nov 2007 21:38:08 GMTWdatatablPGee createdSun, 18 Nov 2007 21:34:15 GMTWdatatablPGee createdSun, 18 Nov 2007 21:34:17 GMTWdatatablPGee createdSun, 18 Nov 2007 21:34:25 GMTWdatatablG1ֿ1 createdSun, 01 Jan 2006 15:14:30 GMTWdatatablPGee createdSun, 18 Nov 2007 21:38:08 GMTWdatatablPGëë createdThu, 10 Jan 2008 23:09:51 GMTWdatatablPGëë createdThu, 10 Jan 2008 23:13:44 GMTWdatatablGPP createdSun, 22 Apr 2007 01:13:29 GMTWdatatablPGee createdSun, 18 Nov 2007 21:41:49 GMTWdatatablPGee createdSun, 18 Nov 2007 21:41:49 GMTWdatatablGPP createdSun, 22 Apr 2007 01:14:39 GMTWdatatablGPP createdSun, 22 Apr 2007 01:18:25 GMTWdatatablGPP createdSun, 22 Apr 2007 01:13:35 GMT*d\ GenevaS&T/<ULANDmac on ping () Changes 4/19/08; 1:10:48 PM by DW Allow for the possibility that the user.photoFan.prefs.screenSaverFolder folder got deleted. 3/7/08; 9:54:46 AM by DW Report new error-tracking feed-level data. 2/20/08; 10:30:47 AM by DW Report the podcatcher version number. 2/19/08; 2:17:35 PM by DW Report the number of podcasts in the Podcatcher folder, if there are any. 12/28/07; 1:31:58 PM by DW Transmit the URL of the user's feed. 12/27/07; 10:24:28 AM by DW Transmit user.photoFan.prefs.flPubliclyListUser. 12/4/07; 1:59:29 AM by DW Don't ping if we haven't set user.photoFan.prefs.flickr.username. 12/3/07; 6:28:13 AM by DW No need to log every ping call. 11/30/07; 8:10:24 AM by DW Add logging. Parameterize server address. Don't send IP address. 11/30/07; 7:05:12 AM by DW Ported from flickrFan. 11/6/07; 7:21:23 PM by DW Save user.flickrRivr.feedInfo in the ping record. 11/5/07; 11:52:25 AM by DW Call ping handler at on a different server. 11/4/07; 12:58:30 PM by DW Add a field to the struct with the time on the server. 11/4/07; 10:06:11 AM by DW It's taking forever for Godaddy to map the ping domain, so I added a workaround until they get it done. 11/4/07; 7:33:48 AM by DW Ping the central server with basic information about the server. if sizeof (user.photoFan.prefs.flickr.username) > 0 local (struct, startticks = clock.ticks ()) new (tabletype, @struct) struct.now = clock.now () struct.flickrUserName = user.photoFan.prefs.flickr.username struct.urlMyFeed = user.photoFan.prefs.myFeed.url struct.photoFanVersion = photoFanInfo.version struct.myIP = tcp.dns.getMyDottedId () struct.myDomain = tcp.dns.getMyDomainName () struct.userName = user.prefs.name struct.ctchecks = user.photoFan.stats.ctChecks struct.whenLastCheck = user.photoFan.stats.whenLastCheck struct.flPubliclyListUser = user.photoFan.prefs.flPubliclyListUser //12/27/07 by DW bundle //set struct.ctPicFiles, 4/19/08 by DW try struct.ctPicFiles = file.filesinfolder (user.photoFan.prefs.screenSaverFolder, infinity) else struct.ctPicFiles = 0 bundle //struct.feeds local (adrfeed) new (tabletype, @struct.feeds) for adrfeed in @user.photoFan.feeds photoFanSuite.initFeed (adrfeed) //3/7/08 by DW if adrfeed^.enabled local (adrstructfeed = @struct.feeds.[nameof (adrfeed^)]) new (tabletype, adrstructfeed) adrstructfeed^.ctChecks = adrfeed^.ctChecks adrstructfeed^.ctPicsDownloaded = adrfeed^.ctPicsDownloaded adrstructfeed^.title = adrfeed^.title adrstructfeed^.flickrUserId = adrfeed^.flickrUserId bundle //new stuff, 3/7/08 by DW adrstructfeed^.whenLastPicDownloaded = adrfeed^.whenLastPicDownloaded bundle //ctFilesInFolder try adrstructfeed^.ctFilesInFolder = file.filesinfolder (adrfeed^.folder, infinity) else adrstructfeed^.ctFilesInFolder = 0 adrstructfeed^.lastError = adrfeed^.lastError bundle //report podcatcher data, if available, 2/19/08 by DW try local (adrdata = podcatchersuite.init ()) struct.ctPodcastsDownloaded = file.filesInFolder (adrdata^.prefs.downloadFolder, infinity) struct.podcatcherVersion = podcatcherInfo.version [photoFanSuite.data.urls.pingServer].flickrFan.ping (struct) photoFanSuite.addToLog ("Ping", "Made ping call to central server.", startticks) //12/3/07 by DW -- disabled bundle //test code ping () WdatatablGS&XS&X createdSun, 04 Nov 2007 15:33:44 GMTWdatatabl0G// createdSat, 19 Apr 2008 20:10:47 GMTWdatatabl0G// createdSat, 19 Apr 2008 20:10:48 GMTWdatatabl0Gff createdFri, 07 Mar 2008 17:54:46 GMTWdatatabl0Gff createdFri, 07 Mar 2008 17:54:46 GMTWdatatablG createdWed, 20 Feb 2008 18:30:47 GMTWdatatablG createdWed, 20 Feb 2008 18:30:48 GMTWdatatablG createdTue, 19 Feb 2008 22:17:35 GMTWdatatablG createdTue, 19 Feb 2008 22:17:36 GMTWdatatablPGÚNÚN createdFri, 28 Dec 2007 21:31:58 GMTWdatatablPGÚOÚO createdFri, 28 Dec 2007 21:31:59 GMTWdatatablPGÙ-Ù- createdThu, 27 Dec 2007 18:24:28 GMTWdatatablPGÙ-Ù- createdThu, 27 Dec 2007 18:24:28 GMTWdatatablPGzeze createdTue, 04 Dec 2007 09:59:28 GMTWdatatablPGzeze createdTue, 04 Dec 2007 09:59:29 GMTWdatatablPGyR}yR} createdMon, 03 Dec 2007 14:28:13 GMTWdatatablPGyR~yR~ createdMon, 03 Dec 2007 14:28:14 GMTWdatatablPGuuuu createdFri, 30 Nov 2007 16:10:23 GMTWdatatablPGuuuu createdFri, 30 Nov 2007 16:10:24 GMTWdatatablPGufuf createdFri, 30 Nov 2007 15:05:12 GMTWdatatablPGufuf createdFri, 30 Nov 2007 15:05:12 GMTWdatatablGVo3Vo3 createdWed, 07 Nov 2007 03:21:23 GMTWdatatablGVo4Vo4 createdWed, 07 Nov 2007 03:21:24 GMTWdatatablPGTyTy createdMon, 05 Nov 2007 19:52:25 GMTWdatatablPGTzTz createdMon, 05 Nov 2007 19:52:26 GMTWdatatablGSrvSrv createdSun, 04 Nov 2007 20:58:30 GMTWdatatablGSrwSrw createdSun, 04 Nov 2007 20:58:31 GMTWdatatablGSJSJ createdSun, 04 Nov 2007 18:06:11 GMTWdatatablGSJSJ createdSun, 04 Nov 2007 18:06:12 GMTWdatatablGS&[S&[ createdSun, 04 Nov 2007 15:33:47 GMTWdatatablGS&\S&\ createdSun, 04 Nov 2007 15:33:48 GMTWdatatablPGzeze createdTue, 04 Dec 2007 09:59:54 GMTWdatatablGS&gS&g createdSun, 04 Nov 2007 15:33:59 GMTWdatatablGS&pS&p createdSun, 04 Nov 2007 15:34:08 GMTWdatatablGSrbSrb createdSun, 04 Nov 2007 20:58:10 GMTWdatatablGS&vS&v createdSun, 04 Nov 2007 15:34:14 GMTWdatatablPGÚAÚA createdFri, 28 Dec 2007 21:31:45 GMTWdatatablPGÚAÚA createdFri, 28 Dec 2007 21:31:45 GMTWdatatablPGujuj createdFri, 30 Nov 2007 15:19:48 GMTWdatatablPGujuj createdFri, 30 Nov 2007 15:19:48 GMTWdatatablGS'JS'J createdSun, 04 Nov 2007 15:37:46 GMTWdatatablGS&vS&v createdSun, 04 Nov 2007 15:34:14 GMTWdatatablGS&vS&v createdSun, 04 Nov 2007 15:34:14 GMTWdatatablPGÙ-Ù- createdThu, 27 Dec 2007 18:23:58 GMTWdatatabl0G// createdSat, 19 Apr 2008 20:10:00 GMTWdatatabl0G// createdSat, 19 Apr 2008 20:10:25 GMTWdatatablGS'S' createdSun, 04 Nov 2007 15:36:57 GMTWdatatabl0G// createdSat, 19 Apr 2008 20:10:31 GMTWdatatabl0G// createdSat, 19 Apr 2008 20:10:33 GMTWdatatablPGuhuh createdFri, 30 Nov 2007 15:13:21 GMTWdatatablPGuhuh createdFri, 30 Nov 2007 15:14:00 GMTWdatatablPGuhuh createdFri, 30 Nov 2007 15:13:30 GMTWdatatablPGuhuh createdFri, 30 Nov 2007 15:14:03 GMTWdatatabl0GRR createdFri, 07 Mar 2008 17:54:26 GMTWdatatablPGuhuh createdFri, 30 Nov 2007 15:14:17 GMTWdatatablPGuhuh createdFri, 30 Nov 2007 15:14:27 GMTWdatatablPGuiui createdFri, 30 Nov 2007 15:15:13 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatabl0GRR createdFri, 07 Mar 2008 17:28:50 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatabl0G"" createdFri, 07 Mar 2008 17:28:02 GMTWdatatabl0G createdFri, 07 Mar 2008 17:27:39 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatabl0G createdFri, 07 Mar 2008 17:27:47 GMTWdatatabl0G createdFri, 07 Mar 2008 17:27:49 GMTWdatatablPGui#ui# createdFri, 30 Nov 2007 15:15:47 GMTWdatatablG createdTue, 19 Feb 2008 22:11:25 GMTWdatatablG createdTue, 19 Feb 2008 22:11:34 GMTWdatatablG## createdTue, 19 Feb 2008 22:11:47 GMTWdatatablG-- createdTue, 19 Feb 2008 22:11:57 GMTWdatatablGᱤᱤ createdWed, 20 Feb 2008 18:29:56 GMTWdatatablGS'hS'h createdSun, 04 Nov 2007 15:38:16 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablGS'S' createdSun, 04 Nov 2007 15:39:14 GMTWdatatablGS'S' createdSun, 04 Nov 2007 15:39:20 GMT*dJGenevadoe LANDmac on responder (pta) Changes 11/23/07; 1:57:47 PM by DW Decode the URL as you turn it into a file path. 5/8/07; 10:27:01 AM by DW Implements the responder that displays images from the folder. local (s = pta^.path) s = string.delete (s, 1, sizeof ("/pfi/")) s = string.replaceall (s, "/", file.getpathchar ()) s = string.urldecode (s) //11/23/07 by DW if sizeof (s) > 0 pta^.code = 200 //everything was OK pta^.responseHeaders.["Content-Type"] = "image/gif" pta^.responseBody = string (file.readwholefile (user.photoFan.prefs.screenSaverFolder + s)) return (true) WdatatablGff createdTue, 08 May 2007 17:26:57 GMTWdatatablPGll createdFri, 23 Nov 2007 21:57:46 GMTWdatatablPGll createdFri, 23 Nov 2007 21:57:47 GMTWdatatablGff createdTue, 08 May 2007 17:26:59 GMTWdatatablGff createdTue, 08 May 2007 17:27:01 GMTWdatatablGd~d~ createdMon, 07 May 2007 18:01:18 GMTWdatatablGdd createdMon, 07 May 2007 18:01:26 GMTWdatatablGdd createdMon, 07 May 2007 18:01:57 GMTWdatatablPGll createdFri, 23 Nov 2007 21:57:23 GMTWdatatablGdd createdMon, 07 May 2007 18:02:25 GMTWdatatablGdd createdMon, 07 May 2007 18:03:22 GMTW Genevay/y!uLANDmac on sendToTwitter (title, url) Changes 12/3/07; 4:54:22 PM by DW Created. new (tabletype, @scratchpad.sendtotwitter) scratchpad.sendtotwitter.title = title scratchpad.sendtotwitter.url = url try {url = tinyurl.create (url)} local (s = "[" + photoFanSuite.data.productName + "] " + title + ". " + url) local (username = user.photoFan.prefs.twitter.username) local (password = user.photoFan.prefs.twitter.password) twitter.newpost (s, username:username, password:password) dialog.alert (s) bundle //test code sendToTwitter (scratchpad.sendtotwitter.title, scratchpad.sendtotwitter.url) WdatatablPGy;y; createdTue, 04 Dec 2007 00:54:19 GMTWdatatablPGy=y= createdTue, 04 Dec 2007 00:54:21 GMTWdatatablPGy>y> createdTue, 04 Dec 2007 00:54:22 GMTWdatatablPGyIyI createdTue, 04 Dec 2007 00:54:33 GMTWdatatablPGyVyV createdTue, 04 Dec 2007 00:54:46 GMTWdatatablPGyZyZ createdTue, 04 Dec 2007 00:54:50 GMTWdatatablG«« createdSat, 30 Jun 2007 14:58:01 GMTWdatatabl GOTOT createdSat, 21 Apr 2007 22:20:52 GMTWdatatablPGyZyZ createdTue, 04 Dec 2007 01:03:22 GMTWdatatablPGy`y` createdTue, 04 Dec 2007 01:03:28 GMTWdatatabl GOgOg createdSat, 21 Apr 2007 22:21:11 GMTWdatatablPGyy createdTue, 04 Dec 2007 01:00:18 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:57:08 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:57:12 GMT }Geneva o&o&LANDmac This script returns a string which appears in the Status Center on the Radio UserLand home page. return ("I'm a cool Tool!") MepGenevat+t?kLANDmac on synchFlickrContacts () Changes 11/29/07; 10:02:20 AM by DW Add logging code. 11/29/07; 9:43:55 AM by DW Protect the running of this code by the same semaphore as is used in addContactFeeds. These routines could take a long time to run if there are a lot of changes, and they can't run concurrently. 11/29/07; 8:42:51 AM by DW Created. Add new contacts, delete contacts that have been removed on Flickr but are not enabled feeds here. (In other words, if you're subscribed we don't throw them out.) local (contacts) bundle //do nothing if the contact feeds are being added, or we don't know the user's id if defined (system.temp.photofan.flAddContactFeedsRunningNow) return if user.photoFan.prefs.flickr.id == "" return system.temp.photofan.flAddContactFeedsRunningNow = true Flickr.contacts.getPublicList (user.photoFan.prefs.flickr.id, @contacts) bundle //add any new contacts local (adr, url) for adr in @contacts url = Flickr.people.getUsersFeed ("", adr^.id) if not defined (user.photofan.feeds.[url]) local (startticks = clock.ticks (), htmltext, adrfeed) adrfeed = photoFanSuite.addFeed (url, enabled:false, flickrUserId:adr^.id, flContact:true) bundle //htmltext htmltext = "Contact feed added: " + adrfeed^.title + "." photoFanSuite.addToLog ("Synch", htmltext, startticks) bundle //remove any that have been deleted, and are not enabled local (adrfeed, i) for i = sizeof (user.photofan.feeds) downto 1 adrfeed = @user.photofan.feeds [i] if adrfeed^.flcontact local (flfound = false) for adrcontact in @contacts if adrcontact^.id == adrfeed^.flickrUserId flfound = true break if not flfound if not adrfeed^.enabled local (startticks = clock.ticks (), htmltext) edit (adrfeed) bundle //htmltext htmltext = "Contact feed deleted: " + adrfeed^.title + "." delete (adrfeed) photoFanSuite.addToLog ("Synch", htmltext, startticks) delete (@system.temp.photofan.flAddContactFeedsRunningNow) bundle //test code synchFlickrContacts () WdatatablPGt,t, createdThu, 29 Nov 2007 16:42:47 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:02:19 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:02:20 GMTWdatatablPGt:Zt:Z createdThu, 29 Nov 2007 17:43:54 GMTWdatatablPGt:[t:[ createdThu, 29 Nov 2007 17:43:55 GMTWdatatablPGt, t, createdThu, 29 Nov 2007 16:42:51 GMTWdatatablPGt, t, createdThu, 29 Nov 2007 16:42:52 GMTWdatatablPGt,t, createdThu, 29 Nov 2007 16:46:47 GMTWdatatablPGt,Ft,F createdThu, 29 Nov 2007 16:43:50 GMTWdatatablGsQsQ createdWed, 28 Nov 2007 21:10:41 GMTWdatatablGsTsT createdWed, 28 Nov 2007 21:10:44 GMTWdatatablPGt-ut-u createdThu, 29 Nov 2007 16:48:53 GMTWdatatablPGt-zt-z createdThu, 29 Nov 2007 16:48:58 GMTWdatatablGsVsV createdWed, 28 Nov 2007 21:10:46 GMTWdatatablPGUԆUԆ createdTue, 06 Nov 2007 16:21:26 GMTWdatatablPGU@U@ createdTue, 06 Nov 2007 16:28:48 GMTWdatatablPGt.t. createdThu, 29 Nov 2007 16:54:27 GMTWdatatablPGt.t. createdThu, 29 Nov 2007 16:54:32 GMTWdatatablPGt.t. createdThu, 29 Nov 2007 16:54:36 GMTWdatatablPGt3t3 createdThu, 29 Nov 2007 17:12:46 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:02:36 GMTWdatatablPGt2t2 createdThu, 29 Nov 2007 17:08:34 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:03:07 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:03:12 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablPGUU createdTue, 06 Nov 2007 16:32:26 GMTWdatatablPGURUR createdTue, 06 Nov 2007 16:33:22 GMTWdatatablPGt3_t3_ createdThu, 29 Nov 2007 17:14:07 GMTWdatatablPGt3kt3k createdThu, 29 Nov 2007 17:14:19 GMTWdatatablPGt3{t3{ createdThu, 29 Nov 2007 17:14:35 GMTWdatatablPGt3t3 createdThu, 29 Nov 2007 17:14:39 GMTWdatatablPGt3t3 createdThu, 29 Nov 2007 17:15:11 GMTWdatatablPGt3t3 createdThu, 29 Nov 2007 17:15:21 GMTWdatatablPGt3t3 createdThu, 29 Nov 2007 17:15:48 GMTWdatatablPGt3t3 createdThu, 29 Nov 2007 17:15:53 GMTWdatatablPGt4Yt4Y createdThu, 29 Nov 2007 17:18:17 GMTWdatatablPGt4bt4b createdThu, 29 Nov 2007 17:18:26 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:02:36 GMTWdatatablPGt5t5 createdThu, 29 Nov 2007 17:24:32 GMTWdatatablPGt?et?e createdThu, 29 Nov 2007 18:05:25 GMTWdatatablPGt>t> createdThu, 29 Nov 2007 18:03:12 GMTWdatatablPGt4jt4j createdThu, 29 Nov 2007 17:18:34 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:13:34 GMTWdatatablGf;f; createdMon, 19 Nov 2007 00:56:27 GMTWdatatablGf?f? createdMon, 19 Nov 2007 00:56:31 GMTMzGenevaßßLANDmac on systemTrayIconCallback (adradrmenu) Changes 1/1/08; 2:17:19 PM by DW Created. Called when the user right-clicks on the system tray icon (on the Mac, click-holds on the dock icon). adradrmenu^ = @photoFanSuite.menu WdatatablGßß createdTue, 01 Jan 2008 22:17:17 GMTWdatatablGßß createdTue, 01 Jan 2008 22:17:19 GMTWdatatablGßß createdTue, 01 Jan 2008 22:17:20 GMTWdatatablGßß createdTue, 01 Jan 2008 22:17:52 GMTGenevaoGzoGLANDmac Changes 11/25/07; 3:38:40 PM by DW Nothing other than a script to test updating of this new root. dialog.alert ("Hello World.") WdatatablPGoGoG createdSun, 25 Nov 2007 23:38:39 GMTWdatatablPGoGoG createdSun, 25 Nov 2007 23:38:40 GMTWdatatablPGoGoG createdSun, 25 Nov 2007 23:39:01 GMT rGenevatethLsLANDmac local (adrimg = @xxx) local (adrfeed = @xxx) local (htmltext) bundle //set htmltext local (phototitle) if adrimg^.title != "" phototitle = adrimg^.title else phototitle = file.filefrompath (adrimg^.f) local (fileurl = string.delete (adrimg^.f, 1, sizeof (user.photoFan.prefs.screenSaverFolder))) fileurl = photoFanSuite.data.urls.picViewer + string.replaceall (fileurl, file.getpathchar (), "/") local (photolink = "" + phototitle + "") local (feedurl = adrfeed^.link) if feedurl == "" feedurl = nameof (adrfeed^) local (feedlink = "" + adrfeed^.title + "") local (sizestring = string.megabytestring (file.size (adrimg^.f))) htmltext = "Photo " + photolink + " downloaded from " + feedlink + ". (" + sizestring + ")" WdatatablPGtete createdThu, 29 Nov 2007 20:49:33 GMTWdatatablPGtete createdThu, 29 Nov 2007 20:49:39 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:50:35 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:52:57 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:18 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:31 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:48 GMTWdatatablPGtftf createdThu, 29 Nov 2007 20:53:50 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:25:35 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:26:02 GMTWdatatablPGtfytfy createdThu, 29 Nov 2007 20:52:09 GMTWdatatablPGthhthh createdThu, 29 Nov 2007 21:00:24 GMTWdatatablPGthth createdThu, 29 Nov 2007 21:00:59 GMTWdatatablPGthth createdThu, 29 Nov 2007 21:01:03 GMTWdatatablPGtfytfy createdThu, 29 Nov 2007 20:52:09 GMTWdatatablPGtf!tf! createdThu, 29 Nov 2007 20:50:41 GMT rW$oGote  # helloWorld 9 logdownload ]VGeneva 2?GenevaPzņ:4LANDmac on updateEverything () Changes 8/14/08; 11:19:50 AM by DW Wired off, updating now handled by the OPML Editor. 12/17/07; 4:41:56 PM by DW Even better, have a flag just for updating this mofo. 12/3/07; 4:25:41 PM by DW Better yet, don't do anything on a dev machine. 12/2/07; 3:52:52 PM by DW Don't update the changeNotes outline on the developer machine. 12/2/07; 2:56:29 PM by DW Also update the changeNotes outline. 11/2/07; 6:57:33 AM by DW Created. Update photoFan.root, opml.root. As we add more tools, we'll add code to update them here. return //wired off, updating now handled by the OPML Editor. 8/14/08 by DW if defined (user.prefs.flNoUpdatePhotoFan) //don't update dev machines, avoid grief if user.prefs.flNoUpdatePhotoFan return bundle //update changeNotes outline try local (opmltext = tcp.httpreadurl (photoFanSuite.data.urls.changesOutline)) op.xmltooutline (opmltext, @photoFanSuite.changeNotes) bundle //update photoFan.root thread.callscript (@photoFanSuite.updateTool, {}) bundle //update opml.root system.temp.updateCommandScript = Frontier.tools.data.updateCommandScript thread.callScript (@system.temp.updateCommandScript, {false}) bundle //test code updateEverything () WdatatablPGPzPz createdFri, 02 Nov 2007 13:57:58 GMTWdatatablPGÌWTÌWT createdTue, 18 Dec 2007 00:41:56 GMTWdatatablPGÌWUÌWU createdTue, 18 Dec 2007 00:41:57 GMTWdatatablPGyޅyޅ createdTue, 04 Dec 2007 00:25:41 GMTWdatatablPGyކyކ createdTue, 04 Dec 2007 00:25:42 GMTWdatatablPGxSxS createdSun, 02 Dec 2007 23:52:51 GMTWdatatablPGxTxT createdSun, 02 Dec 2007 23:52:52 GMTWdatatablGxxxx createdSun, 02 Dec 2007 22:56:28 GMTWdatatablGxxxx createdSun, 02 Dec 2007 22:56:29 GMTWdatatablPGPzPz createdFri, 02 Nov 2007 13:57:32 GMTWdatatablPGPzPz createdFri, 02 Nov 2007 13:57:33 GMTWdatatablPGxx createdSun, 02 Dec 2007 23:51:30 GMTWdatatablPGxx createdSun, 02 Dec 2007 23:51:51 GMTWdatatablPGx"x" createdSun, 02 Dec 2007 23:52:02 GMTWdatatablGxw\xw\ createdSun, 02 Dec 2007 22:53:16 GMTWdatatablGxwxw createdSun, 02 Dec 2007 22:54:58 GMTWdatatablGxwhxwh createdSun, 02 Dec 2007 22:53:28 GMTWdatatablGxwxw createdSun, 02 Dec 2007 22:54:05 GMTWdatatablPGP{!P{! createdFri, 02 Nov 2007 13:58:41 GMTWdatatabl`GQ QQ Q createdSun, 22 Apr 2007 21:23:13 GMTWdatatablPGP{.P{. createdFri, 02 Nov 2007 13:58:54 GMTWdatatablGڀ ڀ createdWed, 12 Jul 2006 17:31:40 GMTWdatatablPGPzPz createdFri, 02 Nov 2007 13:58:05 GMTWdatatablPGP{P{ createdFri, 02 Nov 2007 13:58:11 GMT?fGenevac}oG1 8LANDmac Changes 5/6/07; 12:42:19 PM by DW Simple, safe update method for flickrRivr.root. local (s = "Frontier.tools.commands.updateFrontTool (@photoFanSuite, false)") script.newscriptobject (s, @system.temp.updatePhotoFanTool) thread.callscript (@system.temp.updatePhotoFanTool, {}) WdatatablGc}c} createdSun, 06 May 2007 19:42:15 GMTWdatatablGc}c} createdSun, 06 May 2007 19:42:18 GMTWdatatablGc}c} createdSun, 06 May 2007 19:42:19 GMTWdatatablGc}Bc}B createdSun, 06 May 2007 19:40:34 GMTWdatatablGc}sc}s createdSun, 06 May 2007 19:41:23 GMTfQGeneva/ 5LANDmac Changes 2/18/08; 9:53:28 AM by DW Mistakenly called tcp.httpclient, meant to call tcp.httpreadurl. 2/17/08; 12:22:30 PM by DW A utility that downloads the podcatcher app and installs it. local (s = tcp.httpreadurl ("http://codecasting.org/podcatcher/podcatcher.root")) local (f = Frontier.tools.getToolsFolderPath () + "podcatcher.root") file.writewholefile (f, s) file.settype (f, 'TABL') file.setcreator (f, 'LAND') Frontier.tools.install (f) WdatatablPGׁׁ createdSun, 17 Feb 2008 20:22:25 GMTWdatatablPG createdMon, 18 Feb 2008 17:53:28 GMTWdatatablPG createdMon, 18 Feb 2008 17:53:29 GMTWdatatablPGׅׅ createdSun, 17 Feb 2008 20:22:29 GMTWdatatablPG׆׆ createdSun, 17 Feb 2008 20:22:30 GMTWdatatablPG!! createdSun, 17 Feb 2008 20:20:49 GMTWdatatablPG createdSun, 17 Feb 2008 20:20:43 GMTWdatatablPG createdSun, 17 Feb 2008 20:23:32 GMTWdatatablPG createdSun, 17 Feb 2008 20:23:32 GMTKGeneva!#KGLANDmac Changes 2/20/08; 6:28:55 PM by DW Created. Some of the pictures have pubDates far in the future. I just updated the picture download routine so it will never set a date in the future. This script fixes the dates for all files we've already downloaded. local (f, now = clock.now ()) fileloop (f in user.photoFan.prefs.screenSaverFolder, infinity) msg (f) if file.modified (f) > now file.setmodified (f, now) if file.created (f) > now file.setcreated (f, now) WdatatablG!! createdThu, 21 Feb 2008 02:28:54 GMTWdatatablG!! createdThu, 21 Feb 2008 02:28:55 GMTWdatatablG"d"d createdThu, 21 Feb 2008 02:31:00 GMTWdatatablG"g"g createdThu, 21 Feb 2008 02:31:03 GMTWdatatablG"" createdThu, 21 Feb 2008 02:31:52 GMTWdatatablG"l"l createdThu, 21 Feb 2008 02:31:08 GMTWdatatablG"" createdThu, 21 Feb 2008 02:31:37 GMTWdatatablG"l"l createdThu, 21 Feb 2008 02:31:08 GMTWdatatablG"" createdThu, 21 Feb 2008 02:31:32 GMTpGenevao_ÌTh;LANDmac html.loadimagefile ("macintosh hd:users:davewiner:desktop:flickrfan.gif", @photoFanWebsite.images, "flickrfan")  JXGeneva÷ø |LANDmac Changes 1/20/08; 4:59:48 AM by DW Prepare for a new calendar-based logging system. Convert the existing log files into a new calendar structure. Parts that change in this release. photoFanSuite.website.viewLog photoFanSuite.addToLog photoFanSuite.init photoFanWebsite.log photoFanSuite.background.everyMinute local (adrcal = @user.photofan.calendar, f) photoFanSuite.init () window.about () fileloop (f in user.log.prefs.folder) if f endswith ".root" filemenu.open (f, hidden:true) local (adrsource = @[f] [1].photofan) if not defined (adrsource^) adrsource = @[f] [1].flickrfan if defined (adrsource^) local (adrhour) msg (file.filefrompath (f) + " == " + sizeof (adrsource^) + " items") for adrhour in adrsource local (adritem) for adritem in adrhour local (when = date (string.nthfield (nameof (adritem^), "\t", 2))) local (adrday = mainresponder.calendar.getdayaddress (adrcal, when)) local (adrsub = xml.addtable (adrday, when)) adrsub^ = adritem^ msg (when) filemenu.close (f) clock.waitsixtieths (10) filemenu.save () msg ("") WdatatablGøø createdSun, 20 Jan 2008 12:59:44 GMTWdatatablGøø createdSun, 20 Jan 2008 12:59:47 GMTWdatatablGøø createdSun, 20 Jan 2008 12:59:49 GMTWdatatablGø6ø6 createdSun, 20 Jan 2008 13:01:42 GMTWdatatablPGøø createdSun, 20 Jan 2008 16:07:51 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 22:45:44 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 22:45:59 GMTWdatatabl0G÷ ÷ createdSat, 19 Jan 2008 22:43:44 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 22:43:26 GMTWdatatabl0G÷±÷± createdSat, 19 Jan 2008 23:07:29 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 22:46:16 GMTWdatatabl0G÷R÷R createdSat, 19 Jan 2008 23:05:54 GMTWdatatabl0G÷X÷X createdSat, 19 Jan 2008 23:06:00 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 23:04:17 GMTWdatatablGøSøS createdSun, 20 Jan 2008 12:32:19 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 22:43:30 GMTWdatatablGøAøA createdSun, 20 Jan 2008 12:32:01 GMTWdatatablGøø createdSun, 20 Jan 2008 12:33:58 GMTWdatatablGøMøM createdSun, 20 Jan 2008 12:32:13 GMTWdatatablGø~ø~ createdSun, 20 Jan 2008 12:33:02 GMTWdatatablGøø createdSun, 20 Jan 2008 12:38:06 GMTWdatatablGøø createdSun, 20 Jan 2008 12:39:57 GMTWdatatablGøø createdSun, 20 Jan 2008 12:43:51 GMTWdatatablGøø createdSun, 20 Jan 2008 12:33:44 GMTWdatatabl0G÷÷ createdSat, 19 Jan 2008 23:03:43 GMTWdatatabl0G÷4÷4 createdSat, 19 Jan 2008 22:44:04 GMTWdatatablGøeøe createdSun, 20 Jan 2008 15:40:21 GMTWdatatablGøeøe createdSun, 20 Jan 2008 13:02:29 GMTGenevaøUøLANDmac local (adrtable = @workspace.parts) new (tabletype, adrtable) adrtable^.viewlog = photoFanSuite.website.viewLog adrtable^.addtolog = photoFanSuite.addToLog adrtable^.init = photoFanSuite.init adrtable^.websitelog = photoFanWebsite.log adrtable^.everyminute = photoFanSuite.background.everyMinute adrtable^.mergelogs = photoFanSuite.utilities.mergeLogs adrtable^.packparts = this^ export.sendobject (adrtable, "Ohio:parts.fttb") WdatatablPGøø createdSun, 20 Jan 2008 16:28:04 GMTWdatatablPGøø createdSun, 20 Jan 2008 16:07:51 GMTWdatatablPGø ø createdSun, 20 Jan 2008 16:30:24 GMTWdatatablPGø ø createdSun, 20 Jan 2008 16:30:01 GMTRz`GenevaÞXÞX wLANDmac Changes 12/31/07; 8:28:17 AM by DW Created. A utility just for me so I can get new versions on different machines. The automatic updating is disabled for me, so as not to step on current unpublished work-in-progress. local (opmltext = tcp.httpreadurl (photoFanSuite.data.urls.changesOutline)) op.xmltooutline (opmltext, @photoFanSuite.changeNotes) WdatatablPGÞXÞX createdMon, 31 Dec 2007 16:28:15 GMTWdatatablPGÞXÞX createdMon, 31 Dec 2007 16:28:17 GMTWdatatablGxwhxwh createdSun, 02 Dec 2007 22:53:28 GMTWdatatablGxwxw createdSun, 02 Dec 2007 22:54:05 GMTRGenevaPj( tcLANDmac local (path = "/static.flickrfan.org/download/opml.dmg") local (f = "ohio:opml.dmg") s3.newobject (path, file.readwholefile (f)) WdatatablPGNdNd createdThu, 01 Nov 2007 04:47:16 GMTWdatatablPGPP createdFri, 02 Nov 2007 15:55:54 GMTWdatatablPGNN createdThu, 01 Nov 2007 04:44:49 GMTkVo^  /; GS ]i s downloadPodcatcher)UfixPictureDates. loadPicture4 mergeLogs5 packpartsDupdateChangeNotesHy uploadOpmlDmgKVGeneva 2kGenevayc)yd-@LANDmac on seeMyRssFeed (linetext) Changes 12/3/07; 7:43:11 AM by DW Created. Called from the "Your RSS Feed" prefs page. if user.photoFan.prefs.myFeed.url != "" return ("" + linetext + "") else return (linetext) WdatatablPGycyc createdMon, 03 Dec 2007 15:41:27 GMTWdatatablPGyd yd createdMon, 03 Dec 2007 15:43:08 GMTWdatatablPGydyd createdMon, 03 Dec 2007 15:43:10 GMTWdatatablPGydyd createdMon, 03 Dec 2007 15:43:11 GMTWdatatablPGyc7yc7 createdMon, 03 Dec 2007 15:39:35 GMTWdatatablPGyc\yc\ createdMon, 03 Dec 2007 15:40:12 GMTWdatatablPGyc]yc] createdMon, 03 Dec 2007 15:40:13 GMT7ycyh' seeMyRssFeedOjVGeneva 2aGenevavyE+LANDmac on sharePicture (f) Changes 12/3/07; 5:06:57 PM by DW Early support for sharing pics via Twitter. 12/1/07; 8:26:35 AM by DW Initialize the confirmation message to "" to avoid an error message. 11/30/07; 9:36:18 PM by DW Let the user update the title and description after submitting. 11/30/07; 7:40:56 PM by DW Created. local (pta = html.getpagetableaddress (), adrimg=nil, t, adritem = nil) scratchpad.shareparams = pta^; scratchpad.f = f new (tabletype, @t) t.adritem = "nil" t.buttonName = "Share" t.confirmation = "" bundle //set adrimg local (adr) for adr in @user.photofan.images if defined (adr^.f) if adr^.f == f adrimg = adr break if adrimg != nil t.title = adrimg^.title t.description = adrimg^.description else t.title = "" t.description = "" bundle //set t.twitterCheckbox t.twitterCheckbox = "" if (sizeof (user.photoFan.prefs.twitter.username) > 0) and (sizeof (user.photoFan.prefs.twitter.password) > 0) local (s = "") s = s + " Check this box to send the Title and a link to the picture to your Twitter followers.

" t.twitterCheckbox= s if pta^.method == "POST" local (args) new (tabletype, @args) webserver.parseargs (pta^.requestbody, @args) if defined (args.sendToTwitter) photoFanSuite.sendToTwitter (args.title, adrimg^.url) if defined (args.adritem) scratchpad.args = args; edit (@scratchpad.args) if args.adritem != "nil" adritem = address (string.urldecode (args.adritem)) t.confirmation = "The title and description have been updated. It's very cooool. :-)" else t.confirmation = "The picture has been added to your RSS 2.0 feed, with the title and description you entered. :-)" photoFanSuite.myFeed.add (adrimg, args.title, args.description, @adritem) t.title = args.title t.description = args.description t.adritem = string.urlencode (adritem) t.buttonName = "Update" local (formtext = string (photoFanSuite.data.forms.sharePicForm)) t.f = f formtext = string.multiplereplaceall (formtext, @t, false, "<%", "%>") return (formtext) bundle //test code html.setpagetableaddress (@scratchpad.shareparams) sharePicture (scratchpad.f) WdatatablPGvv createdSat, 01 Dec 2007 03:40:52 GMTWdatatablPGy0y0 createdTue, 04 Dec 2007 01:06:56 GMTWdatatablPGy2y2 createdTue, 04 Dec 2007 01:06:58 GMTWdatatablPGv:v: createdSat, 01 Dec 2007 16:26:34 GMTWdatatablPGv;v; createdSat, 01 Dec 2007 16:26:35 GMTWdatatablPGv2v2 createdSat, 01 Dec 2007 05:36:17 GMTWdatatablPGv2v2 createdSat, 01 Dec 2007 05:36:19 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:40:55 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:40:56 GMTWdatatablPGuJuJ createdFri, 30 Nov 2007 19:49:30 GMTWdatatablPGv/tv/t createdSat, 01 Dec 2007 05:21:56 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:34 GMTWdatatablPGv.v. createdSat, 01 Dec 2007 05:17:55 GMTWdatatablPGv0)v0) createdSat, 01 Dec 2007 05:24:57 GMTWdatatablPGpepe createdMon, 26 Nov 2007 19:57:15 GMTWdatatablPGpe pe createdMon, 26 Nov 2007 19:57:20 GMTWdatatablPGpe(pe( createdMon, 26 Nov 2007 19:57:28 GMTWdatatablPGpe/pe/ createdMon, 26 Nov 2007 19:57:35 GMTWdatatablPGpeEpeE createdMon, 26 Nov 2007 19:57:57 GMTWdatatablPGpeMpeM createdMon, 26 Nov 2007 19:58:05 GMTWdatatablPGpeRpeR createdMon, 26 Nov 2007 19:58:10 GMTWdatatablPGvgvg createdSat, 01 Dec 2007 04:13:27 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:28:21 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:28:21 GMTWdatatablPGvpvp createdSat, 01 Dec 2007 04:13:36 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:28:21 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:28:21 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:43:10 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:44:12 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:43:18 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:44:18 GMTWdatatablPGynyn createdTue, 04 Dec 2007 00:46:38 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:47:21 GMTWdatatablPGv v createdSat, 01 Dec 2007 04:18:11 GMTWdatatablGRR createdMon, 21 Aug 2006 19:09:32 GMTWdatatablGSS createdMon, 21 Aug 2006 19:09:50 GMTWdatatablGRR createdMon, 21 Aug 2006 19:09:00 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:51:57 GMTWdatatablPGyy createdTue, 04 Dec 2007 00:52:13 GMTWdatatablPGv/v/ createdSat, 01 Dec 2007 05:23:53 GMTWdatatablPGqYqY createdTue, 27 Nov 2007 08:07:53 GMTWdatatablPGv.v. createdSat, 01 Dec 2007 05:16:03 GMTWdatatablPGv.v. createdSat, 01 Dec 2007 05:16:08 GMTWdatatablPGv,v, createdSat, 01 Dec 2007 05:09:50 GMTWdatatablPGv2v2 createdSat, 01 Dec 2007 05:33:14 GMTWdatatablPGv,v, createdSat, 01 Dec 2007 05:09:50 GMTWdatatablPGv,Hv,H createdSat, 01 Dec 2007 05:08:24 GMTWdatatablPGv1v1 createdSat, 01 Dec 2007 05:31:49 GMTWdatatablPGv1v1 createdSat, 01 Dec 2007 05:31:53 GMTWdatatablPGv-v- createdSat, 01 Dec 2007 05:15:29 GMTWdatatablPGv0)v0) createdSat, 01 Dec 2007 05:24:57 GMTWdatatablG¥`¥` createdTue, 26 Jun 2007 02:56:16 GMTWdatatablPGvv createdSat, 01 Dec 2007 04:15:40 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:24:29 GMTWdatatablPGv v  createdSat, 01 Dec 2007 02:51:05 GMTWdatatablPGv/}v/} createdSat, 01 Dec 2007 05:22:05 GMTWdatatablPGv/v/ createdSat, 01 Dec 2007 05:22:10 GMTWdatatablPGv/v/ createdSat, 01 Dec 2007 05:22:16 GMTaSGenevaqq (LANDmac on viewContactList () Changes 11/27/07; 12:01:13 AM by DW Created. if user.photoFan.prefs.flickr.flShowContacts if user.photoFan.prefs.flickr.username == "" return ("There are no contacts to view because the Flickr username is empty.") local (htmltext = "", indentlevel = 0, adr) on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" for adr in @user.photoFan.feeds if adr^.flcontact add (adr^.flickrUserId + "
") return (htmltext) else return ("") WdatatablPGqq createdTue, 27 Nov 2007 08:01:10 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:01:13 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:01:14 GMTWdatatablPGq[q[ createdTue, 27 Nov 2007 22:46:51 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:15:11 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:01:16 GMTWdatatablGê(ê( createdFri, 05 Jan 2007 15:09:28 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:01:16 GMTWdatatablPGqީqީ createdTue, 27 Nov 2007 22:48:09 GMTWdatatablPGqޯqޯ createdTue, 27 Nov 2007 22:48:15 GMTWdatatablPGqq createdTue, 27 Nov 2007 22:48:58 GMTWdatatablPGqbqb createdTue, 27 Nov 2007 22:46:58 GMTWdatatablPGqdqd createdTue, 27 Nov 2007 22:47:00 GMTStFG-Geneva!r@zLELANDmac on viewFeeds () Changes 2/2/08; 10:49:18 AM by DW Add special section for Agence France-Presse photos. Change "AP" to Associated Press. 1/3/08; 2:25:14 PM by DW Put the body of viewFeed in a try. If the user goes to the Feeds page at startup, we won't fail because the title hasn't been defined. 12/31/07; 4:41:57 AM by DW Improve the error message when we fail to subscribe. Include the text "Can't subscribe." And encode left angle brackets so they don't get swallowed by the browser. 12/30/07; 9:22:37 AM by DW Turn off some debugging code. 12/27/07; 5:52:46 PM by DW Check if adrfeed^.type is defined before using it. Apparently in some circumstances it's not (probably some other error). Dave Sifry reported this problem. 12/18/07; 6:04:02 AM by DW Disable code that blocks display of the page when the contacts are updating. We'll take our chances. 12/17/07; 6:42:33 PM by DW View feeds that are not the users, contacts, the AP feed, or a reading list (basically feeds subscribed to through the box). 12/17/07; 5:14:50 PM by DW Add support for direct subscribing to feeds that are not contacts. 12/17/07; 12:33:48 PM by DW When you subscribe to new feeds, immediately read them instead of waiting until the top of the hour. 11/29/07; 9:36:44 AM by DW Synch contacts if it's been more than five minutes since we last synched, but do it in a separate thread, don't wait around for the results. 11/27/07; 9:45:42 PM by DW Created. bundle //add subscription table add ("
"); indentlevel++ add (""); indentlevel++ local (i, adrsort, adr, adrsource, ct = 0) bundle //add header add ("") on addrow (idForCheckbox, title, channeldescription, channellink, timeLastChange, ctChanges, xmlUrl) local (link) add (""); indentlevel++ bundle //add checkbox local (name = nameof (adr^)) local (checkboxval = "xxx ") if false checkboxval = checkboxval + "checked" add ("") if sizeof (title) > 50 title = string.mid (title, 1, 50) + ".." bundle //set link if sizeof (channellink) > 0 link = "" + newsRiverSuite.decodeEntities (title) + "" else link = newsRiverSuite.decodeEntities (title) add ("") add ("") add ("") add ("") add (""); indentlevel-- bundle //add reading list subscriptions if sizeof (adrdata^.newsriver.readinglists) > 0 local (adrlist) add ("") for adrlist in @adrdata^.newsriver.readinglists addrow (indexOf (adrlist^) + 100000, adrlist^.title, "", "", adrlist^.stats.timeLastChange, adrlist^.stats.ctChanges, nameof (adrlist^)) add ("") for adrsort in @sortedtable adr = @adrdata^.services.[adrsort^] if defined (adr^.compilation) if sizeof (adr^.compilation) > 0 local (title = "Untitled feed") if defined (adr^.compilation.channeltitle) title = adr^.compilation.channeltitle local (channeldescription = "", channellink = "") if defined (adr^.compilation.channeldescription) channeldescription = newsRiverSuite.decodeEntities (adr^.compilation.channeldescription) if defined (adr^.compilation.channellink) channellink = adr^.compilation.channellink addrow (indexOf (adr^), title, channeldescription, channellink, adr^.timeLastChange, adr^.ctChanges, nameof (adr^)) add ("
 NameUpdatedCt 
" + link + "" + newsRiverSuite.getDateString (timeLastChange, false) + "" + ctChanges + "" + xmlimg + "
R E A D I N G   L I S T S
F E E D S
"); indentlevel-- add ("
"); indentlevel-- bundle //synch contacts local (flsynch = false, now = clock.now ()) if defined (system.temp.photoFan.whenLastContactSynch) if (now - system.temp.photoFan.whenLastContactSynch) > (60 * 5) //5 minutes have elapsed flsynch = true else flsynch = true if flsynch system.temp.photoFan.whenLastContactSynch = now thread.callscript (@photoFanSuite.synchFlickrContacts, {}) local (pta = html.getpagetableaddress (), addFeedMessage= "") scratchpad.params = pta^; edit (@scratchpad.params) photoFanSuite.init () if defined (system.temp.photofan.flAddContactFeedsRunningNow) return ("The feeds list is being updated with your Flickr contacts. Please try refreshing this page in a couple of minutes. This message will go away as soon as the update is complete.") if pta^.method == "POST" local (args, adr, i) new (tabletype, @args) webserver.parseargs (pta^.requestbody, @args) scratchpad.args = args; edit (@scratchpad.args) local (flcheckfeeds = false) //turns true if one or more new feeds were subscribed to for adr in @args if nameof (adr^) beginswith "feed" local (ix = number (string.delete (nameof (adr^), 1, sizeof ("feed")))) local (adrfeed = @user.photofan.feeds [ix]) if not adrfeed^.enabled flcheckfeeds = true adrfeed^.enabled = true for i = 1 to sizeof (user.photofan.feeds) local (adrfeed = @user.photofan.feeds [i]) if adrfeed^.enabled if not defined (args.["feed" + string.padwithzeros (i, 4)]) adrfeed^.enabled = false bundle //check for a new url field, 12/17/07 by DW if defined (args.url) if args.url != "http://" //user edited it try photoFanSuite.addFeed (args.url) addFeedMessage = "It worked! We were able to subscribe to the feed." flcheckfeeds = true else addFeedMessage = "Can't subscribe. \"" + xml.entityencode (tryerror, true) + "\"" filemenu.save () if flcheckfeeds //12/17/07 by DW thread.callscript (@photoFanSuite.checkFeeds, {}) local (feedshtml) bundle //set feedshtml local (htmltext = "", indentlevel = 0, now = clock.now ()) on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" on titlerow (s) add (""); indentlevel++ add ("
" + s + "
") add (""); indentlevel-- on viewfeed (adrfeed) try //1/3/08 by DW local (cbval, namelink, checkbox, whenupdate) bundle //set checkbox if adrfeed^.enabled cbval = "xxx checked" else cbval = "xxx " checkbox = "" bundle //set namelink local (id = adrfeed^.flickrUserId) if id == "" namelink = adrfeed^.title else namelink = "" + adrfeed^.title + "" bundle //set whenupdate local (when = adrfeed^.whenLastPicDownloaded) if when == date (0) whenupdate = " " else if date.sameday (when, now) whenupdate = date.timestring (when) else whenupdate = date.shortstring (when) add (""); indentlevel++ add ("" + checkbox + "") add ("" + namelink + "") add ("" + whenupdate + "") add ("" + adrfeed^.ctPicsDownloaded + "") add ("" + string (photoFanSuite.data.html.xmlimg) + "") bundle //folder local (s) if file.exists (adrfeed^.folder) add ("" + string (photoFanSuite.data.html.folderimg) + "") else add (" ") add (""); indentlevel-- adrfeed^.flNotViewed = false add ("
"); indentlevel++ add ("") bundle //mark all the feeds as not viewed local (adrfeed) for adrfeed in @user.photofan.feeds adrfeed^.flNotViewed = true bundle //add your feed local (adrfeed = @user.photofan.feeds.[user.photofan.prefs.flickr.feed]) if defined (adrfeed^) titlerow ("Y O U R   F L I C K R   F E E D") viewfeed (adrfeed) bundle //add Flickr contacts local (adrfeed, fltitleshown = false) for adrfeed in @user.photofan.feeds if defined (adrfeed^.flcontact) //edge case -- user visits this page while contacts are being loaded if adrfeed^.flcontact if not fltitleshown titlerow ("Y O U R   F L I C K R   C O N T A C T S") fltitleshown = true try {viewfeed (adrfeed)} bundle //add AP feed local (adrfeed = @user.photofan.feeds.[photoFanSuite.data.urls.ap]) if defined (adrfeed^) titlerow ("A S S O C I A T E D   P R E S S   P H O T O   F E E D") viewfeed (adrfeed) bundle //add AFP feed local (adrfeed = @user.photofan.feeds.[photoFanSuite.data.urls.afp]) if defined (adrfeed^) titlerow ("A G E N C E   F R A N C E - P R E S S E   P H O T O   F E E D") viewfeed (adrfeed) bundle //add reading lists local (adrfeed) titlerow ("R E A D I N G   L I S T S") for adrfeed in @user.photofan.feeds if defined (adrfeed^.type) //12/27/07 by DW if adrfeed^.type == "opml" viewfeed (adrfeed) bundle //add all feeds that have not already been added local (adrfeed) titlerow ("O T H E R   F E E D S") for adrfeed in @user.photofan.feeds if adrfeed^.flNotViewed viewfeed (adrfeed) add ("
") add ("
") feedshtml = htmltext local (htmltext = "", indentlevel = 0) on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" bundle //do string processing local (formtext = string (photoFanSuite.data.forms.feedsPage)) local (t) new (tabletype, @t) t.productName = photoFanSuite.data.productName t.flickrUsername = user.photoFan.prefs.flickr.username t.feedslist = feedshtml t.addFeedMessage = addFeedMessage scratchpad.t = t; edit (@scratchpad.t) formtext = string.multiplereplaceall (formtext, @t, false, "<%", "%>") add (formtext) return (htmltext) bundle //test code html.setpagetableaddress (@scratchpad.params) viewfeeds () WdatatablPGr@r@ createdWed, 28 Nov 2007 05:45:38 GMTWdatatablG.. createdSat, 02 Feb 2008 18:49:18 GMTWdatatablG.. createdSat, 02 Feb 2008 18:49:18 GMTWdatatablPGââ createdThu, 03 Jan 2008 22:25:14 GMTWdatatablPGââ createdThu, 03 Jan 2008 22:25:14 GMTWdatatablGÞ#Þ# createdMon, 31 Dec 2007 12:41:56 GMTWdatatablGÞ#Þ# createdMon, 31 Dec 2007 12:41:57 GMTWdatatablGÝÝ createdSun, 30 Dec 2007 17:22:37 GMTWdatatablGÝÝ createdSun, 30 Dec 2007 17:22:38 GMTWdatatabl0GÙÙ createdFri, 28 Dec 2007 01:52:45 GMTWdatatabl0GÙÙ createdFri, 28 Dec 2007 01:52:46 GMTWdatatablPGÍQÍQ createdTue, 18 Dec 2007 14:04:01 GMTWdatatablPGÍRÍR createdTue, 18 Dec 2007 14:04:02 GMTWdatatablPGÌsÌs createdTue, 18 Dec 2007 02:42:32 GMTWdatatablPGÌsÌs createdTue, 18 Dec 2007 02:42:33 GMTWdatatablPGÌ_ Ì_ createdTue, 18 Dec 2007 01:14:49 GMTWdatatablPGÌ_ Ì_ createdTue, 18 Dec 2007 01:14:50 GMTWdatatablGÌ+Ì+ createdMon, 17 Dec 2007 20:33:47 GMTWdatatablGÌ,Ì, createdMon, 17 Dec 2007 20:33:48 GMTWdatatablPGt8t8 createdThu, 29 Nov 2007 17:36:44 GMTWdatatablPGt8t8 createdThu, 29 Nov 2007 17:36:45 GMTWdatatablPGr@r@ createdWed, 28 Nov 2007 05:45:41 GMTWdatatablPGr@r@ createdWed, 28 Nov 2007 05:45:42 GMTWdatatablG00 createdMon, 16 Jan 2006 01:02:11 GMTWdatatablG<"<" createdMon, 16 Jan 2006 01:51:30 GMTWdatatablG<< createdMon, 16 Jan 2006 01:51:24 GMTWdatatablG<.<. createdMon, 16 Jan 2006 01:51:42 GMTWdatatablG<8<8 createdMon, 16 Jan 2006 01:51:52 GMTWdatatablG
***
") local (dnt = "
***
") local (dt = "
***
") caltext = mainresponder.calendar.draw (adrcal, urlprefix:pta^.uri + "?d=", colWidth:19, rowHeight:10, tableBorder:0, monthYearTemplate:myt, dayNameTemplate:dnt, dayTemplate:dt, curdate: when) local (prevlink = "Previous", nextlink = "Next") bundle //set prevlink local (nomad = when) loop nomad = date.yesterday (nomad) if date.sameday (nomad, mainresponder.calendar.getfirstday (adrcal)) break try local (adrtable = mainresponder.calendar.getdayaddress (adrcal, nomad, false)) if defined (adrtable^) local (day, month, year, hour, minute, second) date.get (nomad, @day, @month, @year, @hour, @minute, @second) month = string.padwithzeros (month, 2) day = string.padwithzeros (day, 2) prevlink = "" + prevlink + "" break else break bundle //set nextlink local (nomad = when) loop if date.sameday (nomad, now) break nomad = date.tomorrow (nomad) local (adrtable = mainresponder.calendar.getdayaddress (adrcal, nomad, false)) if defined (adrtable^) local (day, month, year, hour, minute, second) date.get (nomad, @day, @month, @year, @hour, @minute, @second) month = string.padwithzeros (month, 2) day = string.padwithzeros (day, 2) nextlink = "" + nextlink + "" break navtable = "
" + date.longstring (when) + "" + prevlink + " / " + nextlink + "
" add (navtable + "
") add ("
"); indentlevel++ add ("
"); indentlevel++ add (""); indentlevel++ bundle //add header add (""); indentlevel++ add ("") add ("") add ("") //11/23/07 by DW -- disabled add ("") add ("") add (""); indentlevel-- local (adrhour, adritem, i, j, ct = 0) for i = sizeof (adrlog^) downto 1 adritem = @adrlog^ [i] if flusecache and defined (adritem^.cache) add (adritem^.cache) else local (s) s = s + "" s = s + "" bundle //add htmltext local (htt = adritem^.htmlText) htt = string.replaceall (htt, "/frimg/", "/pfi/") s = s + "" bundle //imghtml, you can simplify this tomorrow, //11/23/07 by DW -- disabled if defined (adritem^.imghtml) s = s + "" else s = s + "" s = s + "" s = s + "" s = s + "" adritem^.cache = s add (s) ct++ if ct >= 100 break bundle //code for old log format for i = sizeof (adrlog^) downto 1 adrhour = @adrlog^ [i] for j = sizeof (adrhour^) downto 1 adritem = @adrhour^ [j] if flusecache and defined (adritem^.cache) add (adritem^.cache) else local (s) s = s + "" s = s + "" bundle //add htmltext local (htt = adritem^.htmlText) htt = string.replaceall (htt, "/frimg/", "/pfi/") s = s + "" bundle //imghtml, you can simplify this tomorrow, //11/23/07 by DW -- disabled if defined (adritem^.imghtml) s = s + "" else s = s + "" s = s + "" s = s + "" s = s + "" adritem^.cache = s add (s) ct++ if ct >= 100 break if ct >= 100 break add ("
EventWhat Happened
Picture
WhenSeconds
" + adritem^.eventType + " " + htt + "
" + adritem^.imghtml + "
 " + date.timestring (xml.convertToDisplayName (nameof (adritem^))) + "" + adritem^.secs + "
" + adritem^.eventType + " " + htt + "
" + adritem^.imghtml + "
 " + date.timestring (xml.convertToDisplayName (nameof (adritem^))) + "" + adritem^.secs + "
"); indentlevel-- add ("
"); indentlevel-- add ("
"); indentlevel-- add ("
" + navtable) filemenu.savemyroot (adrlog) system.temp.photoFan.cache.viewEventsLog = htmlText return (htmlText) bundle //test code webbrowser.displaytext (viewlog ()) WdatatablPG createdTue, 05 Feb 2008 20:32:18 GMTWdatatablPG createdTue, 05 Feb 2008 20:32:18 GMTWdatatablGøcøc createdSun, 20 Jan 2008 13:28:03 GMTWdatatablGøcøc createdSun, 20 Jan 2008 13:28:03 GMTWdatatablPGonon createdMon, 26 Nov 2007 02:27:10 GMTWdatatablPGonon createdMon, 26 Nov 2007 02:27:11 GMTWdatatablPGon0on0 createdMon, 26 Nov 2007 02:23:44 GMTWdatatablPGon3on3 createdMon, 26 Nov 2007 02:23:47 GMTWdatatablPGll createdFri, 23 Nov 2007 21:23:18 GMTWdatatablPGll createdFri, 23 Nov 2007 21:23:19 GMTWdatatablGø[ø[ createdSun, 20 Jan 2008 13:32:11 GMTWdatatablGi}i} createdWed, 21 Nov 2007 14:13:28 GMTWdatatablGi}i} createdWed, 21 Nov 2007 14:13:40 GMTWdatatablPGhu$hu$ createdTue, 20 Nov 2007 19:27:32 GMTWdatatablPGhu*hu* createdTue, 20 Nov 2007 19:27:38 GMTWdatatablGø4ø4 createdSun, 20 Jan 2008 13:31:32 GMTWdatatablGøø createdSun, 20 Jan 2008 13:13:14 GMTWdatatablGøø createdSun, 20 Jan 2008 13:15:45 GMTWdatatablGøXøX createdSun, 20 Jan 2008 13:57:44 GMTWdatatablGøiøi createdSun, 20 Jan 2008 13:58:01 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:32 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:10 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:18 GMTWdatatablGøsøs createdSun, 20 Jan 2008 13:58:11 GMTWdatatablGø ø createdSun, 20 Jan 2008 14:00:45 GMTWdatatablPG createdTue, 05 Feb 2008 20:32:03 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:57 GMTWdatatablGø;ø; createdSun, 20 Jan 2008 14:05:47 GMTWdatatablGøø createdSun, 20 Jan 2008 14:08:39 GMTWdatatablGøø createdSun, 20 Jan 2008 14:08:39 GMTWdatatablGøDøD createdSun, 20 Jan 2008 14:05:56 GMTWdatatablGøø createdSun, 20 Jan 2008 14:07:28 GMTWdatatablPG createdTue, 05 Feb 2008 20:32:05 GMTWdatatablPG createdTue, 05 Feb 2008 20:32:07 GMTWdatatablGøiøi createdSun, 20 Jan 2008 13:58:01 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:32 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:10 GMTWdatatablGøsøs createdSun, 20 Jan 2008 13:58:11 GMTWdatatablGø ø createdSun, 20 Jan 2008 14:00:45 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:18 GMTWdatatablGøø createdSun, 20 Jan 2008 14:00:57 GMTWdatatablGø;ø; createdSun, 20 Jan 2008 14:05:47 GMTWdatatablGøø createdSun, 20 Jan 2008 14:08:39 GMTWdatatablGøø createdSun, 20 Jan 2008 14:08:39 GMTWdatatablGøDøD createdSun, 20 Jan 2008 14:05:56 GMTWdatatablGøø createdSun, 20 Jan 2008 14:07:28 GMTWdatatablGøvøv createdSun, 20 Jan 2008 15:36:22 GMTWdatatablGøø createdSun, 20 Jan 2008 14:16:38 GMTWdatatablPGll createdFri, 23 Nov 2007 21:24:33 GMTWdatatablGs!gs!g createdWed, 28 Nov 2007 21:45:11 GMTWdatatablGs!rs!r createdWed, 28 Nov 2007 21:45:22 GMTWdatatablGs!{s!{ createdWed, 28 Nov 2007 21:45:31 GMTWdatatablGi{i{ createdWed, 21 Nov 2007 14:08:50 GMTWdatatablGi| i| createdWed, 21 Nov 2007 14:09:14 GMTWdatatablGi|i| createdWed, 21 Nov 2007 14:09:19 GMTWdatatablGøø createdSun, 20 Jan 2008 13:33:04 GMTWdatatablGs!gs!g createdWed, 28 Nov 2007 21:45:11 GMTWdatatablGs!rs!r createdWed, 28 Nov 2007 21:45:22 GMTWdatatablGs!{s!{ createdWed, 28 Nov 2007 21:45:31 GMTWdatatablGi{i{ createdWed, 21 Nov 2007 14:08:50 GMTWdatatablGi| i| createdWed, 21 Nov 2007 14:09:14 GMTWdatatablGi|i| createdWed, 21 Nov 2007 14:09:19 GMTWdatatablGøø createdSun, 20 Jan 2008 14:16:38 GMTWdatatablGøvøv createdSun, 20 Jan 2008 15:36:22 GMTWdatatablGø4ø4 createdSun, 20 Jan 2008 13:14:28 GMTWdatatablGø8ø8 createdSun, 20 Jan 2008 13:14:32 GMT2eGenevau>v*LANDmac on viewPicture (f) Changes 11/30/07; 6:42:42 PM by DW Changed maxpicwidth to 640 from 750. Add Share button. 11/30/07; 11:49:25 AM by DW Created. local (maxpicwidth = 640) local (pta = html.getpagetableaddress (), adrimg=nil) local (htmltext = "", indentlevel = 0, now = clock.now ()) on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" bundle //set adrimg local (adr) for adr in @user.photofan.images if defined (adr^.f) if adr^.f == f adrimg = adr break local (fileurl = string.delete (f, 1, sizeof (user.photoFan.prefs.screenSaverFolder))) fileurl = string.replaceall (fileurl, " ", "%20") fileurl = photoFanSuite.data.urls.picViewer + string.replaceall (fileurl, file.getpathchar (), "/") local (hw = html.getJpegHeightWidth (f), w = hw [2], h = hw [1]) if w > maxpicwidth h = number (h * (double (maxpicwidth) / double (w))) w = maxpicwidth local (imghtml = "") add ("

" + imghtml + "

") local (fldescadded = false) //did we add a description? bundle //add the description, if there is one if adrimg != nil if defined (adrimg^.description) if adrimg^.description != "" add ("

" + searchengine.stripmarkup (adrimg^.description) + "

") fldescadded = true if not fldescadded add ("

" + f + "

") bundle //add share button local (formtext = string (photoFanSuite.data.forms.picViewerShareForm), t) new (tabletype, @t) t.f = string.urlencode (f) formtext = string.multiplereplaceall (formtext, @t, false, "<%", "%>") add (formtext) return (htmltext) WdatatablPGuCuC createdFri, 30 Nov 2007 19:49:23 GMTWdatatablPGv !v ! createdSat, 01 Dec 2007 02:42:41 GMTWdatatablPGv "v " createdSat, 01 Dec 2007 02:42:42 GMTWdatatablPGuDuD createdFri, 30 Nov 2007 19:49:24 GMTWdatatablPGuEuE createdFri, 30 Nov 2007 19:49:25 GMTWdatatablPGv v  createdSat, 01 Dec 2007 02:42:30 GMTWdatatablPGuJuJ createdFri, 30 Nov 2007 19:49:30 GMTWdatatablGê(ê( createdFri, 05 Jan 2007 15:09:28 GMTWdatatablPGpepe createdMon, 26 Nov 2007 19:57:15 GMTWdatatablPGpe pe createdMon, 26 Nov 2007 19:57:20 GMTWdatatablPGpe(pe( createdMon, 26 Nov 2007 19:57:28 GMTWdatatablPGpe/pe/ createdMon, 26 Nov 2007 19:57:35 GMTWdatatablPGpeEpeE createdMon, 26 Nov 2007 19:57:57 GMTWdatatablPGpeMpeM createdMon, 26 Nov 2007 19:58:05 GMTWdatatablPGpeRpeR createdMon, 26 Nov 2007 19:58:10 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:25:35 GMTWdatatablPGococ createdMon, 26 Nov 2007 01:38:17 GMTWdatatablPGhh createdTue, 20 Nov 2007 20:26:02 GMTWdatatablGhh createdWed, 21 Nov 2007 05:06:20 GMTWdatatablGnn createdSun, 25 Nov 2007 16:32:27 GMTWdatatablGnn createdSun, 25 Nov 2007 16:33:15 GMTWdatatablGnn createdSun, 25 Nov 2007 16:34:02 GMTWdatatablGhh createdWed, 21 Nov 2007 05:05:14 GMTWdatatablGnn createdSun, 25 Nov 2007 16:24:07 GMTWdatatablPGpepe createdMon, 26 Nov 2007 20:01:00 GMTWdatatablPGpespes createdMon, 26 Nov 2007 19:58:43 GMTWdatatablPGpepe createdMon, 26 Nov 2007 19:58:57 GMTWdatatablPGpepe createdMon, 26 Nov 2007 19:59:06 GMTWdatatablPGpepe createdMon, 26 Nov 2007 19:59:14 GMTWdatatablGnn createdSun, 25 Nov 2007 16:24:07 GMTWdatatablPGpepe createdMon, 26 Nov 2007 20:00:36 GMTWdatatablPGpepe createdMon, 26 Nov 2007 20:00:45 GMTWdatatablGnn createdSun, 25 Nov 2007 16:24:07 GMTWdatatablPGv v createdSat, 01 Dec 2007 02:50:52 GMTWdatatablG¥`¥` createdTue, 26 Jun 2007 02:56:16 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:34 GMTWdatatablPGvv createdSat, 01 Dec 2007 03:28:21 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:24:29 GMTWdatatablPGv v  createdSat, 01 Dec 2007 02:51:05 GMTWdatatablPGu]u] createdFri, 30 Nov 2007 19:49:49 GMT0 M,GenevaqtIdLANDmac on viewSetupPage () Changes 11/29/07; 7:13:49 PM by DW Allow the user to enter an email address instead of a username. Confirm when the username was correctly set. 11/29/07; 9:02:36 AM by DW In call to photoFanSuite.addFeed pass flickrUserId to photoFanSite.addFeed. 11/26/07; 11:26:08 PM by DW Created. local (pta = html.getpagetableaddress ()) scratchpad.params = pta^ photoFanSuite.init () local (htmltext = "", indentlevel = 0) on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" on errorhtml (s) if not (s endswith ".") s = s + "." return ("" + s + "") on coooolhtml (s) if not (s endswith ".") s = s + "." return ("" + s + "") local (setUsernameResult= "") if pta^.method == "POST" local (args) new (tabletype, @args) webserver.parseargs (pta^.requestbody, @args) scratchpad.args = args; edit (@scratchpad.args) bundle //set username if args.flickrUsername == "" user.photoFan.prefs.flickr.username = "" user.photoFan.prefs.flickr.id = "" user.photoFan.prefs.flickr.feed = "" user.photoFan.prefs.flickr.flSubscribeToOwnPhotos = false else if args.flickrUsername != user.photoFan.prefs.flickr.username //changed user.photoFan.prefs.flickr.username = args.flickrUsername try if args.flickrUsername contains "@" Flickr.people.findByEmail (args.flickrUsername, @user.photoFan.prefs.flickr.id, @user.photoFan.prefs.flickr.username) else user.photoFan.prefs.flickr.id = Flickr.people.findByUsername (args.flickrUsername) user.photoFan.prefs.flickr.feed = Flickr.people.getUsersFeed ("", user.photoFan.prefs.flickr.id) photoFanSuite.addFeed (user.photoFan.prefs.flickr.feed, flickrUserId:user.photofan.prefs.flickr.id) //11/29/07 thread.callscript (@photoFanSuite.addContactFeeds, {}) setUsernameResult = coooolhtml ("Thanks! That's a good username, you can advance to step 2, below.") else setUsernameResult = errorhtml (tryerror) user.photoFan.prefs.flickr.id = "" bundle //flSubscribeToOwnPhotos local (flsubscribe = defined (args.flSubscribeOwnPhotos)) if user.photoFan.prefs.flickr.username == "" flsubscribe = false if flsubscribe photoFanSuite.addFeed (user.photoFan.prefs.flickr.feed) else try {photoFanSuite.disableFeed (user.photoFan.prefs.flickr.feed)} user.photoFan.prefs.flickr.flSubscribeToOwnPhotos = flsubscribe bundle //flShowContacts local (flshow = defined (args.flShowContacts)) if user.photoFan.prefs.flickr.username == "" flshow = false if flshow if not user.photoFan.prefs.flickr.flShowContacts //changing thread.callscript (@photoFanSuite.addContactFeeds, {}) user.photoFan.prefs.flickr.flShowContacts = flshow filemenu.save () bundle //do string processing local (formtext = string (photoFanSuite.data.forms.setupPage)) local (t) new (tabletype, @t) t.productName = photoFanSuite.data.productName t.flickrUsername = user.photoFan.prefs.flickr.username t.screenSaverFolder = user.photoFan.prefs.screenSaverFolder t.flickrContactList = photoFanSuite.website.viewContactList () bundle //t.flSubscribeToOwnPhotos if user.photoFan.prefs.flickr.flSubscribeToOwnPhotos and (t.flickrUsername != "") t.flSubscribeToOwnPhotos = "xxx checked" else t.flSubscribeToOwnPhotos = "xxx" bundle //setUsernameResult t.setUsernameResult = setUsernameResult bundle //t.flShowContacts if user.photoFan.prefs.flickr.flShowContacts and (t.flickrUsername != "") t.flShowContacts = "xxx checked" else t.flShowContacts = "xxx" scratchpad.t = t; edit (@scratchpad.t) formtext = string.multiplereplaceall (formtext, @t, false, "<%", "%>") add (formtext) return (htmltext) bundle //test code html.setpagetableaddress (@scratchpad.params) viewSetupPage () WdatatablPGqq createdTue, 27 Nov 2007 07:26:05 GMTWdatatablPGtt createdFri, 30 Nov 2007 03:13:48 GMTWdatatablPGtt createdFri, 30 Nov 2007 03:13:49 GMTWdatatablPGt0t0 createdThu, 29 Nov 2007 17:02:35 GMTWdatatablPGt0t0 createdThu, 29 Nov 2007 17:02:36 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:26:07 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:26:08 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 02:41:10 GMTWdatatablGss createdWed, 28 Nov 2007 19:43:28 GMTWdatatablPGq gq g createdTue, 27 Nov 2007 07:51:03 GMTWdatatablGê(ê( createdFri, 05 Jan 2007 15:09:28 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:58:50 GMTWdatatablPGqdqd createdTue, 27 Nov 2007 17:01:24 GMTWdatatablPGqkqk createdTue, 27 Nov 2007 17:01:31 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:58:54 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:58:50 GMTWdatatablPGqdqd createdTue, 27 Nov 2007 17:01:24 GMTWdatatablPGqkqk createdTue, 27 Nov 2007 17:01:31 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:58:54 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:55:55 GMTWdatatablPGqQqQ createdTue, 27 Nov 2007 08:07:45 GMTWdatatablGRR createdMon, 21 Aug 2006 19:09:32 GMTWdatatablGSS createdMon, 21 Aug 2006 19:09:50 GMTWdatatablGRR createdMon, 21 Aug 2006 19:09:00 GMTWdatatablPGqYqY createdTue, 27 Nov 2007 08:07:53 GMTWdatatablPGqkqk createdTue, 27 Nov 2007 16:27:23 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:14:54 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:32:36 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:28:14 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:07:31 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:15:00 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:27:50 GMTWdatatablPGq2q2 createdTue, 27 Nov 2007 08:11:30 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:53:50 GMTWdatatablPGtmtm createdFri, 30 Nov 2007 02:50:21 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:28:14 GMTWdatatablPGtutu createdFri, 30 Nov 2007 02:50:29 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:28:14 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:07:31 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:54:27 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:54:25 GMTWdatatablPGqq createdTue, 27 Nov 2007 16:54:27 GMTWdatatablPGqzqz createdTue, 27 Nov 2007 17:01:46 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:16:36 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:17:10 GMTWdatatablPGqIqI createdTue, 27 Nov 2007 18:04:57 GMTWdatatablPGqNqN createdTue, 27 Nov 2007 18:05:02 GMTWdatatablPGqZqZ createdTue, 27 Nov 2007 17:31:06 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGqq createdTue, 27 Nov 2007 18:11:40 GMTWdatatablPGqq createdTue, 27 Nov 2007 18:11:43 GMTWdatatablPGq|q| createdTue, 27 Nov 2007 15:49:23 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:16:36 GMTWdatatablPGqq createdTue, 27 Nov 2007 17:17:10 GMTWdatatablPGqIqI createdTue, 27 Nov 2007 18:04:57 GMTWdatatablPGqNqN createdTue, 27 Nov 2007 18:05:02 GMTWdatatablPGqZqZ createdTue, 27 Nov 2007 17:31:06 GMTWdatatablPGqq createdTue, 27 Nov 2007 22:44:36 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGq|q| createdTue, 27 Nov 2007 15:49:23 GMTWdatatablPGqq createdTue, 27 Nov 2007 18:03:34 GMTWdatatablG¥Ժ¥Ժ createdTue, 26 Jun 2007 03:23:22 GMTWdatatablG¥`¥` createdTue, 26 Jun 2007 02:56:16 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:29 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:34 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:59 GMTWdatatablPGq sq s createdTue, 27 Nov 2007 07:46:59 GMTWdatatablPGq sq s createdTue, 27 Nov 2007 07:46:59 GMTWdatatablPGqq createdTue, 27 Nov 2007 08:00:41 GMTWdatatablPGq|q| createdTue, 27 Nov 2007 15:47:42 GMTWdatatablG createdThu, 09 Aug 2007 17:08:28 GMTWdatatablG createdThu, 09 Aug 2007 17:08:30 GMTWdatatablG,, createdThu, 09 Aug 2007 17:08:44 GMTWdatatablG.. createdThu, 09 Aug 2007 17:08:46 GMTWdatatablPGq+q+ createdTue, 27 Nov 2007 16:56:11 GMTWdatatablPGqFqF createdTue, 27 Nov 2007 16:56:38 GMTWdatatablPGq|q| createdTue, 27 Nov 2007 15:47:42 GMTWdatatablG createdThu, 09 Aug 2007 17:08:28 GMTWdatatablG createdThu, 09 Aug 2007 17:08:30 GMTWdatatablG,, createdThu, 09 Aug 2007 17:08:44 GMTWdatatablG.. createdThu, 09 Aug 2007 17:08:46 GMTWdatatablPGq q createdTue, 27 Nov 2007 16:59:56 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:24:29 GMTWdatatablG¥Z¥Z createdTue, 26 Jun 2007 02:56:10 GMTWdatatablPGr@r@ createdWed, 28 Nov 2007 05:46:21 GMTWdatatablGss createdWed, 28 Nov 2007 19:43:44 GMTWdatatablGss createdWed, 28 Nov 2007 19:43:49 GMTWdatatablGss createdWed, 28 Nov 2007 19:43:58 GMT0X UGenevaátá' LANDmac on viewTagSubscribe () Changes 1/2/08; 10:22:51 AM by DW Created. The logic for the Tag Subscribe page. local (pta = html.getpagetableaddress ()) local (htmltext = "", indentlevel = 0, subscriberesult = "") on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" if pta^.method == "POST" local (args) new (tabletype, @args) webserver.parseargs (pta^.requestbody, @args) scratchpad.args = args; edit (@scratchpad.args) if defined (args.tag) if args.tag != "" //user edited it try local (t, tags) new (tabletype, @t) t.[" or "] = "+or+" tags = string.multiplereplaceall (args.tag, @t, false, "<%", "%>") local (tags = string.replaceall (args.tag, " ", "+")) local (url = photoFanSuite.data.urls.flickrTagFeed + string.urlencode (tags)) photoFanSuite.addFeed (url) subscriberesult = "It worked! We were able to subscribe to the feed." else subscriberesult = "Can't subscribe. \"" + xml.entityencode (tryerror, true) + "\"" bundle //do string processing local (formtext = string (photoFanSuite.data.forms.tagSubscribePage)) local (t) new (tabletype, @t) t.subscriberesult = subscriberesult formtext = string.multiplereplaceall (formtext, @t, false, "<%", "%>") add (formtext) return (htmltext) WdatatablPGáxáx createdWed, 02 Jan 2008 18:22:48 GMTWdatatablPGázáz createdWed, 02 Jan 2008 18:22:50 GMTWdatatablPGá{á{ createdWed, 02 Jan 2008 18:22:51 GMTWdatatablPGáAáA createdWed, 02 Jan 2008 18:47:29 GMTWdatatablGê(ê( createdFri, 05 Jan 2007 15:09:28 GMTWdatatablPGáOáO createdWed, 02 Jan 2008 18:47:43 GMTWdatatablGRR createdMon, 21 Aug 2006 19:09:32 GMTWdatatablGSS createdMon, 21 Aug 2006 19:09:50 GMTWdatatablGRR createdMon, 21 Aug 2006 19:09:00 GMTWdatatablPGqYqY createdTue, 27 Nov 2007 08:07:53 GMTWdatatablPGÌZÌZ createdTue, 18 Dec 2007 00:53:45 GMTWdatatablPGÌZ!ÌZ! createdTue, 18 Dec 2007 00:53:53 GMTWdatatablPGÌZÌZ createdTue, 18 Dec 2007 00:56:30 GMTWdatatablPGá$á$ createdWed, 02 Jan 2008 19:24:46 GMTWdatatablPGá%á% createdWed, 02 Jan 2008 19:24:51 GMTWdatatablPGá% á% createdWed, 02 Jan 2008 19:24:59 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:24:29 GMTWdatatablPGá%á% createdWed, 02 Jan 2008 19:27:04 GMTWdatatablPGá#á# createdWed, 02 Jan 2008 19:18:36 GMTWdatatablPGo'o' createdSun, 25 Nov 2007 21:22:44 GMTWdatatablPGÌZÌZ createdTue, 18 Dec 2007 00:57:11 GMTWdatatablPGÌZÌZ createdTue, 18 Dec 2007 00:57:09 GMTWdatatablPGÌZÌZ createdTue, 18 Dec 2007 00:57:11 GMTWdatatablG¥Ժ¥Ժ createdTue, 26 Jun 2007 03:23:22 GMTWdatatablG¥`¥` createdTue, 26 Jun 2007 02:56:16 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:29 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:23:34 GMTWdatatablPGá0á0 createdWed, 02 Jan 2008 18:47:12 GMTWdatatablG¥¥ createdTue, 26 Jun 2007 03:24:29 GMTWdatatablG¥Z¥Z createdTue, 26 Jun 2007 02:56:10 GMTWdatatablPGá1á1 createdWed, 02 Jan 2008 18:25:53 GMTX,`o^ûq  '3 CO Ye my prefsSnippetsS sharePictureT,viewContactListr viewFeedsyviewLog viewPicture! viewSetupPage6viewTagSubscribegVGeneva 2xo&.  $0 9E Ye nz  & +7 CO ]i y        &2 ?K P\ fr       +7 AM UaddContactFeeds`addFeed`$addToLog`'9afterUploadCallback`5archiver`91authFlickrThread`Y background`VbackupFlickrPics` callbacks`K changeNotes` checkFeed`c checkFeeds`|Pdata` disableFeed` downloadImage`7flickrToTwitter`O freshStart` getFeedInfo`getRandomPicture` httpClient`init`ւinitFeed`PYmenu`dmyFeed` parseXstruct`ping` responder` sendToTwitter`statusCenterMessage`synchFlickrContacts`systemTrayIconCallback`[testing`updateEverything` updateTool`% utilities`Mwebsite`x 'Genevao&ʨ%|LANDmac Changes 8/15/08; 3:28:19 AM by DW Wired off, it no longer, under any circumstances, will open the home page of the FlickrFan site on launch. 8/14/08; 1:50:42 PM by DW Don't try if user.photoFan.prefs.flOpenHomePageOnStartup isn't defined. 7/26/08; 10:33:27 PM by DW Support new pref, user.photoFan.prefs.flOpenHomePageOnStartup. If false, we just do the stuff that has to do with initializing photoFan.root, we don't do anything with the web browser. 3/15/08; 8:42:55 PM by DW Call checkFeeds to do a scan at startup, we had changed everyHour so it didn't do a scan, so that not every installation would scan at the same time. This broke the scanning at startup. Oy. 1/6/08; 10:40:02 AM by DW Support a new pref, user.photoFan.prefs.flMacDefaultBrower, that allows user to disable automatic launching of Firefox or Safari to display the desktop website. 12/4/07; 11:20:11 AM by DW Call photoFanSuite.init after networking is initialized, otherwise on the first run it won't successfully read the initial feeds and they won't work. 11/25/07; 3:29:34 PM by DW Ported from FlickrRivr. Big diff, we do a scan on startup with no user prefs required. return //wired off -- 8/15/08 by DW if not defined (system.temp.photoFan.flStarted) if defined (user.photoFan.prefs.flOpenHomePageOnStartup) if user.photoFan.prefs.flOpenHomePageOnStartup local (homeurl = photoFanSuite.data.urls.homeUrl) window.about () loop try tcp.httpreadurl (homeurl, flMessages:false) break photoFanSuite.init () if system.environment.ismac and (not user.photoFan.prefs.flMacDefaultBrower) webbrowser.launchMacBrowser () system.temp.photoFan.flStarted = true if user.photoFan.prefs.flMacDefaultBrower sys.unixShellCommand("open " + homeurl) else webbrowser.openurl (homeurl) webbrowser.bringtofront () else photoFanSuite.init () system.temp.photoFan.flStarted = true photoFanSuite.checkFeeds () //do a scan on startup, 3/15/08 by DW photoFanSuite.background.everyHour () //do a scan on startup WdatatablPGoEVoEV createdSun, 25 Nov 2007 23:29:26 GMTWdatatablG createdThu, 14 Aug 2008 20:50:42 GMTWdatatablG createdThu, 14 Aug 2008 20:50:43 GMTWdatatablGOO createdSun, 16 Mar 2008 03:42:55 GMTWdatatablGPP createdSun, 16 Mar 2008 03:42:56 GMTWdatatablPGæ`æ` createdSun, 06 Jan 2008 18:40:01 GMTWdatatablPGæ`æ` createdSun, 06 Jan 2008 18:40:02 GMTWdatatablPGzjzj createdTue, 04 Dec 2007 19:20:10 GMTWdatatablPGzlzl createdTue, 04 Dec 2007 19:20:12 GMTWdatatablPGoE]oE] createdSun, 25 Nov 2007 23:29:33 GMTWdatatablPGoE_oE_ createdSun, 25 Nov 2007 23:29:35 GMTWdatatablPGLSLS createdTue, 30 Oct 2007 19:51:31 GMTWdatatablG createdThu, 14 Aug 2008 20:50:30 GMTWdatatablPGOLLOLL createdThu, 01 Nov 2007 16:26:36 GMTWdatatablPGLذLذ createdTue, 30 Oct 2007 19:48:48 GMTWdatatablPGLL createdTue, 30 Oct 2007 19:45:49 GMTWdatatablPGLL createdTue, 30 Oct 2007 19:45:52 GMTWdatatablPGLL createdTue, 30 Oct 2007 19:45:54 GMTWdatatablPGL"L" createdTue, 30 Oct 2007 19:46:26 GMTWdatatablPGMM createdWed, 31 Oct 2007 16:38:18 GMTWdatatablPGM`M` createdWed, 31 Oct 2007 16:37:36 GMTWdatatablPGalal createdThu, 15 Nov 2007 19:39:24 GMTWdatatablPGæ_æ_ createdSun, 06 Jan 2008 18:36:37 GMTWdatatablPGæ_æ_ createdSun, 06 Jan 2008 18:36:43 GMTWdatatablPGæ_æ_ createdSun, 06 Jan 2008 18:36:44 GMT datataWdatatablPGalal createdThu, 15 Nov 2007 19:39:24 GMTWdatatablPGN(iN(i createdWed, 31 Oct 2007 19:41:13 GMTTP.o&ʫ ctenabledscript`cT/BGenevaFq 2yLANDmac on finalFilter (pta) Changes 11/26/07; 11:43:21 PM by DW Add call to html.processMacros, for some reason macros weren't getting processed. This took care of it. pta^.renderedText = html.processmacros (pta^.renderedText) pta^.renderedText = string.replace (pta^.renderedText, "[[title]]", "") return (true) ���������Wdatatabl�P���G������q q �������� ����created���Tue, 27 Nov 2007 07:43:18 GMT����Wdatatabl�P���G������q q �������� ����created���Tue, 27 Nov 2007 07:43:20 GMT����Wdatatabl�P���G������q q �������� ����created���Tue, 27 Nov 2007 07:43:22 GMT�������������������a�������h�����Geneva������������������������������������������EuÙa�����cLAND������mac ������������on firstFilter (pta) Changes 12/27/07; 2:04:24 PM by DW Set pta^.linkProductName, which links to the product website. 12/27/07; 8:05:51 AM by DW Add the word Beta to the beginning of the version string. 12/23/07; 10:44:57 AM by DW Set pta^.version, a string which tells the user what the version number is, and when it was released. 12/3/07; 7:52:40 AM by DW Set pta^.productName. pta^.productName = photoFanSuite.data.productName pta^.linkProductName = photoFanSuite.data.linkProductName pta^.version = "Beta version " + photoFanInfo.version + ", " + date.shortstring (photoFanInfo.releaseDate) + "." return (true) ���������Wdatatabl�P���G������yfDyfD�������� ����created���Mon, 03 Dec 2007 15:52:36 GMT����Wdatatabl�P���G������ÙagÙag�������� ����created���Thu, 27 Dec 2007 22:04:23 GMT����Wdatatabl�P���G������ÙahÙah�������� ����created���Thu, 27 Dec 2007 22:04:24 GMT����Wdatatabl�P���G������Ù _Ù _�������� ����created���Thu, 27 Dec 2007 16:05:51 GMT�����Wdatatabl�P���G������Ù `Ù `�������� ����created���Thu, 27 Dec 2007 16:05:52 GMT����Wdatatabl����G������ÓÓ�������� ����created���Sun, 23 Dec 2007 18:44:56 GMT�����Wdatatabl����G������ÓÓ�������� ����created���Sun, 23 Dec 2007 18:44:57 GMT����Wdatatabl�P���G������yfFyfF�������� ����created���Mon, 03 Dec 2007 15:52:38 GMT�����Wdatatabl�P���G������yfHyfH�������� ����created���Mon, 03 Dec 2007 15:52:40 GMT����Wdatatabl�P���G������yfRyfR�������� ����created���Mon, 03 Dec 2007 15:52:50 GMT����Wdatatabl�P���G������yfRyfR�������� ����created���Mon, 03 Dec 2007 15:52:50 GMT����Wdatatabl����G������ÓÓ�������� ����created���Sun, 23 Dec 2007 18:45:23 GMT�������a����������*��[����Geneva���������������������������� ��������������Eu ���r���}�2'LAND������mac ������������on pageFilter (pta) if typeOf (pta^.template) == outlineType or typeOf (pta^.template) == wpTextType table.assign (@pta^.template, string (pta^.template)) if typeOf (pta^.template) == stringType and not pta^.indirectTemplate pta^.template = string.replace (pta^.template, "<title>", "[[title]]") html.addPageToGlossary (pta) return (true) �����������������������������������������������y���.���Eûk�������� ���� ��� ����$���0 ����; finalFilter����p�r firstFilter����p�g pagefilter����p���VGeneva���������������������������� �����������G�N��)�����������������������������������@������7o&�������� ����url���http://127.0.0.1/photoFan/��VGeneva���������������������������� ������������A��'����������������������������O�������K���$���ʩʩ�������� ���� ��� ����linetext���Homepath��� index.wsf���O���V�������R���$���ʫBʫB�������� ���� ��� ����linetext��� Preferencespath��� prefs.wsf���V����������Q���$�������ʫB�������� ������� ����Home�����b Preferences�������VArial����������������������������� ����������������������������������������������������������W����������������������space���/GIFfGIF89a�������!����,�������D�;��VArial����������������������������� ��������������������������������������������������������8���~�������ûn���������������� ������� ����#���-�������6�������B ����G���Q ����d���j ������� ������� ������� ���� activeUrlsalink���008000bgcolor���FFFFFFflRender flShowTitlelink���0000FFmacroEndCharacters���%>macroStartCharacters���<%spaceGif���spacetext���000000vlink���800080��VArial����������������������������� ������������������������������������������������� �������������Geneva������������������������������������������FT���t���vLAND������mac ������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title><%title%> (<%productName%>) <%metaTags ()%>

<%version%>
<%menu (flhorizontal:true)%>
<%showTitle ()%> <%bodytext%>




WdatatablPGuu createdFri, 30 Nov 2007 17:01:20 GMTWdatatablPGu^u^ createdFri, 30 Nov 2007 19:37:02 GMTWdatatablPGKEKE createdMon, 29 Oct 2007 15:10:04 GMTWdatatablPGoOoO createdSun, 25 Nov 2007 19:00:31 GMTWdatatablPGueue createdFri, 30 Nov 2007 17:46:13 GMTWdatatablGÌ Ì createdMon, 17 Dec 2007 20:20:48 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:08:42 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:08:48 GMTWdatatablPGoYoY createdSun, 25 Nov 2007 19:00:41 GMTWdatatablPGowow createdSun, 25 Nov 2007 19:01:11 GMTWdatatablPGoOoO createdSun, 25 Nov 2007 19:00:31 GMTWdatatablPGoYoY createdSun, 25 Nov 2007 19:00:41 GMTWdatatablPGowow createdSun, 25 Nov 2007 19:01:11 GMTWdatatablPGKEKE createdMon, 29 Oct 2007 15:10:07 GMTWdatatablPGKEKE createdMon, 29 Oct 2007 15:10:09 GMTWdatatablPGKEKE createdMon, 29 Oct 2007 15:10:16 GMTWdatatablPGKEKE createdMon, 29 Oct 2007 15:10:18 GMTWdatatablPGKEKE createdMon, 29 Oct 2007 15:10:22 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:01:32 GMTWdatatablPGy y createdMon, 03 Dec 2007 23:06:51 GMT BKGenevaÍ%`Í&S7LANDmac on linkToFolder (folder, linetext) Changes 12/18/07; 7:21:17 AM by DW Created. Called from the "Backup Basics" prefs panel. if file.exists (folder) return ("" + linetext + "") else return (linetext) bundle //test code webbrowser.displaytext (linkToFolder (user.photoFan.prefs.backup.folder, "folder")) WdatatablGÍ%iÍ%i createdTue, 18 Dec 2007 15:21:13 GMTWdatatablGÍ%lÍ%l createdTue, 18 Dec 2007 15:21:16 GMTWdatatablGÍ%nÍ%n createdTue, 18 Dec 2007 15:21:18 GMTWdatatablGÍ&Í& createdTue, 18 Dec 2007 15:26:51 GMTWdatatablGÍ%wÍ%w createdTue, 18 Dec 2007 15:21:27 GMTWdatatablGÍ&Í& createdTue, 18 Dec 2007 15:26:58 GMTWdatatablGÍ&Í& createdTue, 18 Dec 2007 15:27:00 GMTWdatatablGÍ%Í% createdTue, 18 Dec 2007 15:22:16 GMTWdatatablGÍ%Í% createdTue, 18 Dec 2007 15:22:20 GMTB &Genevau|xLANDmac on menu (flhorizontal=false) Changes 12/2/07; 8:21:16 AM by DW Go to the first prefs page on the prefs command, not the index page. 12/2/07; 7:20:00 AM by DW Replace the Random command with the Prefs command. 11/30/07; 11:45:35 AM by DW Change the Log item to Events. 11/30/07; 10:08:02 AM by DW Allow for horizontal or vertical menu. 11/30/07; 8:41:41 AM by DW Macro that displays the desktop website menu. local (pta = html.getpagetableaddress ()) scratchpad.params = pta^ local (htmltext = "", indentlevel = 0) on add (s) htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r" on additem (pagename, linetext, fllast=false) if flhorizontal add ("") else add ("

"); indentlevel++ if string.popsuffix (string.lastfield (pta^.path, "/")) == string.popsuffix (pagename, "?") add ("" + string.upper (linetext) + "") else add ("" + linetext + "") if flhorizontal if not fllast add ("|") else add ("

"); indentlevel-- additem ("index", "Home") additem ("feeds", "Feeds") additem ("log", "Events") additem ("prefs?page=1.1", "Prefs", true) return (htmltext) bundle //test code html.setpagetableaddress (@scratchpad.params) menu (true) WdatatablPGuu createdFri, 30 Nov 2007 17:48:00 GMTWdatatablPGu}Bu}B createdFri, 30 Nov 2007 16:41:38 GMTWdatatablPGx{x{ createdSun, 02 Dec 2007 16:21:15 GMTWdatatablPGx|x| createdSun, 02 Dec 2007 16:21:16 GMTWdatatablPGx x  createdSun, 02 Dec 2007 15:19:59 GMTWdatatablPGx x createdSun, 02 Dec 2007 15:20:00 GMTWdatatablPGu]u] createdFri, 30 Nov 2007 19:45:33 GMTWdatatablPGu_u_ createdFri, 30 Nov 2007 19:45:35 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:08:01 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:08:02 GMTWdatatablPGu}Du}D createdFri, 30 Nov 2007 16:41:40 GMTWdatatablPGu}Eu}E createdFri, 30 Nov 2007 16:41:41 GMTWdatatablPGu}u} createdFri, 30 Nov 2007 16:42:55 GMTWdatatablPGu}u} createdFri, 30 Nov 2007 16:43:04 GMTWdatatablGê(ê( createdFri, 05 Jan 2007 15:09:28 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:48:24 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:48:30 GMTWdatatablPGujuj createdFri, 30 Nov 2007 18:03:22 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:48:30 GMTWdatatablPGu}u} createdFri, 30 Nov 2007 16:44:40 GMTWdatatablPGu|u| createdFri, 30 Nov 2007 16:39:42 GMTWdatatablPGu~;u~; createdFri, 30 Nov 2007 16:45:47 GMTWdatatablPGu|u| createdFri, 30 Nov 2007 16:39:42 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:48:24 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:04:27 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:48:30 GMTWdatatablPGuxux createdFri, 30 Nov 2007 18:03:36 GMTWdatatablPGuu createdFri, 30 Nov 2007 17:48:30 GMTWdatatablPGu} u} createdFri, 30 Nov 2007 16:40:43 GMTWdatatablPGu} u} createdFri, 30 Nov 2007 16:40:43 GMTWdatatablPGu} u} createdFri, 30 Nov 2007 16:40:43 GMTWdatatablPGu} u} createdFri, 30 Nov 2007 16:40:43 GMTWdatatablPGu|u| createdFri, 30 Nov 2007 16:39:35 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:05:35 GMTWdatatablPGu u createdFri, 30 Nov 2007 18:06:01 GMTWdatatablPGuu createdFri, 30 Nov 2007 18:05:40 GMTL4Genevaxx"LANDmac Changes 12/2/07; 7:27:22 AM by DW Created. local (pta = html.getpagetableaddress ()) if pta^.flShowTitle return ("

" + pta^.title + "

") return ("") WdatatablPGxx createdSun, 02 Dec 2007 15:27:21 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:27:23 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:27:29 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:27:39 GMTWdatatablPGx x createdSun, 02 Dec 2007 15:28:12 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:28:28 GMTLr.ûi  * 4 linkToFoldermenuA showTitleVArial y Geneva_x dLANDmac Changes 11/13/07; 6:27:03 PM by DW Created. Redirect to the page on the Flickr site where the user authenticates us to do stuff like download pictures for a backup and upload pictures. local (pta = html.getpagetableaddress ()) pta^.code = 302 //non-permanent redirect pta^.responseBody = webserver.util.buildErrorPage ("302 FOUND", "Found the page.") local (frob, url = Flickr.authPageUrl (@frob)) pta^.responseHeaders.location = url pta^.responseHeaders.URI = url thread.callscript (@photoFanSuite.authFlickrThread, {frob}) WdatatablG__ createdWed, 14 Nov 2007 02:27:02 GMTWdatatablG__ createdWed, 14 Nov 2007 02:27:04 GMTWdatatablGQQ createdSat, 03 Nov 2007 01:08:07 GMTWdatatablG_B_B createdWed, 14 Nov 2007 02:28:18 GMTWdatatablG_X_X createdWed, 14 Nov 2007 02:28:40 GMTy4 Genevar@á0+lLANDmac Changes 12/3/07; 2:35:46 PM by DW Don't show the title on this page, it looks better without it. local (pta = html.getpagetableaddress ()) pta^.title = "Feeds" pta^.flShowTitle = false //the page looks better without it return (photoFanSuite.website.viewFeeds ()) WdatatablPGyy createdMon, 03 Dec 2007 22:36:34 GMTWdatatablPGyy createdMon, 03 Dec 2007 22:35:46 GMTWdatatablPGyy createdMon, 03 Dec 2007 22:35:46 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:19:07 GMTWdatatablPGxx createdSun, 02 Dec 2007 15:26:22 GMTWdatatablPGqq createdTue, 27 Nov 2007 07:19:21 GMTGenevao _ÓJUAKLANDmac #title "How to Set up the Mac Screen Saver" #renderoutlinewith "justtext"

1. Open the System Preferences app. It should be in your Dock on your Mac desktop.

2. In the Desktop & Screen Saver panel (the first section), click on the Screen Saver tab, then scroll down to and click on Choose Folder. Here's a screen shot that illustrates.

3. In the dialog that pops up, navigate to the "screenSaverPics" folder and click the Choose button.

<%user.photoFan.prefs.screenSaverFolder%>

4. That's it. Now the screen saver will display pictures from the folder that <%photoFanSuite.data.productName%> is managing.


WdatatablGO?O? createdThu, 01 Nov 2007 15:30:21 GMTWdatatablGQLQL createdSat, 03 Nov 2007 00:52:12 GMTWdatatablPGoLoL createdSun, 25 Nov 2007 20:30:04 GMTWdatatablPGoYoY createdSun, 25 Nov 2007 20:30:17 GMTWdatatablGss createdWed, 28 Nov 2007 19:52:50 GMTWdatatablPGoaoa createdSun, 25 Nov 2007 20:30:25 GMTWdatatablGÓ6Ó6 createdSun, 23 Dec 2007 19:04:22 GMTɣGIFfGIF89a1cZ֜sR9Δ1֥)ε1罄{s!޽޵ޭΔƥ֭1֥cεkέΜ{ΔZΔJΌBΌkֽƽƵƥƌ9ƌ)kεkR!s1ccB9s{kƥΥcc!{Rs9scB1电ck{kZc!cZ9RcR!ތ֌ƽք{{{{{{{{s{s9{ZssssZssZscRsZksZcsR9sJ!sJsBRskkkkkkskkkkskkkccckBcRc19ZZZZZcZZRcRRRRR{RkRJZRB{JJcJckJRZJJZJJJB9J1J!!JJBBB{BJBJJBBJBBBB1!B9BBB999s9cZ9J99J91{9!111s1k1!!1J))))))k)Z)B{)9!!!!{!1!1c!11!!1!!)kJ!!!skkZRRJkB9B1))kk),8 *40aÅ#BD/jǍ;)dȓ$QLrK0[|)` 7qJ3ϝ?{*hУDMtSPF}**իSZՊu׮`:6,ٳf͊"!}w.\nڭ/]w_ ^qLj#l2cȔ/Kx̝Ac<3iϡOF]:׮c}P7JM&oݿ}{pŃ#~\ГGg.:ı/}ֻ>^t῟W<{ˏO}}?Ͷ(` "6Vbhan衆 v"H#h(Pn!ی(c8ި<> ?)DdL"O6 RVTbieT+`)fhln  nw橧q{)ܟ| Z(x(zږ}>zR褑f 馘rZ*jz2jj+~ۋ_:Ic";zlBl>kbKZmFmN+䂫n.n {-믾 Zp3pÉBlg{Jl?qS1Gql\2$_̲.,s4/3ۜ:s-Z"=D=NQWLC}\[4`wu?cL3xCS^9K97\@5=_z1RN" ˎ ^Ϯ{._[x >˿~?_XT@& ȁ ޵vm5j̠.h4 ΃ 1(~Є!< SBW`=ry6a?as2/ GAD$oL_D91Tb)nQW"8OD [6'<؍Ȱ9ʮ4c#=>0w# ?q|L$"yFёXmHJђ5iINn')/ eDePU򕭜*Y9KXR%.cYK^򕻼e,g;y|2HSCXjnКԼ6Mmӛݤ6INq~ӜT,Pp76)Oy7=IO!ӟC:P)ԠM(B:*etA!PJ-(JIsA,gH96㵬g(`ҕg.YLa ۼh 3$Cw@ T}. <8GSTS GDԠ`dLaMkZ+*խhRQVn졭le+\V64 d؃8X$T dPg1֛,d'kNVYf3ٰyͲ׋neq6tJ-V:c4lAUVU .@)$ad@.rCq׺ӵr]z$ z7%&uϫr׸IG+Z>V̉G"xo+Nl;/ f0^ b-1Ow3d,PA)\:%txF%j;d ?V>fzKBA^J=!?J_G'4LL؃ƾ St^4n;~"=3UJ~ + }`!@_wo//SƇu}k|};W_~>sa `0s8Q@;SpD0sJ%(ar1sh(Q (`_wx{ e% y1yfw wi'  w{ Ex`Ge%2Dz ᠄{'vX2 |ƷB{gGo|{ͧ|\ !KB9 7 9`, H@(x8X؉ȉ8xHȊ؊(HhhthBpJb#hA@PVeRLPVP=r`0 @ j XgG@V VHz @ p{kY oggg蠐xxe@x|ZݰkzҐvPyⰑwz`dpW @2x2yHx8]-0u6p"4FHɔT)KGYJGHUYW)GuwLLYRbזSV f9sXgL9lٗaY{ynv)9IYapVɗViw'20`t ["C):@v80d @ 4_c'oٛIfpn)IЅ)yvoǩ Fqzй PV 0@zƙky'ٞPv B@z6Q dyZ9eI镍ٟtYIfØu*upu8))*wKX;Yr"ʠ;Q%z* ..j1ڢ/5J *7ʣ /! (SH F 8p? КʰB9't-br 8jzggPFonde yk{ Ѕ{PmzWzR wJ FkvI_nʧ|p 6r=uEjDѢJa :3Sqq7AhjZϪ0@zB!p0ݪz Jr:Z㚮z(ʮZJJm!5 7 =!>DQ%)}&*']$qSfܷy<Ž|kl +8Ȑ|&=Ԕ}+\DlR\X zY]Ӛ͙Ω}K9|L[KLP^'VVO]|A_d^f~VnhlJ WŽm' ?Ё^،ۆ\ȹ T'͐ ΡkZ~~鲎N-굞4۹nZ4꼎(Ϋ]$>۲}W->ƝCv۾=Ȃ;jK&ǽr:qohS Owoޫ_mkռ(񶎶#ɽۡq[ ?Ҏ|[,F6о9_^n{Fưl>;̾;~+qa:札i-2vҺ1./h $ݫՎyˤRfHYm7ǐ{, q6!$@"&[oNǶbLhTVZd-= =u>K}X@6_FYk(Ξ$K |3AZ7ȕhd%.#ɝO&w?Le_Z U}G$ ⽷dEӪaM^x+{Ă6IۍڈޖvLꊀZI`ط'1dB2G%p=~MaJ'瓂2|#1*^='! ~A1e 6Zi%jw2o2sGK|.od_#& ։w!0S4벭`iF"Ksdt 4QQDw 1'4]* .;RT0 @K| 4 '!F 4pjj?ώ6]qEAQŦTEzCh'B>ć hx|!8}؁`BA6#jb/ChR7Tu7" bm!H  @ 7%$|x PG,0?8bL48))Kp6=0LZ|XC/ d ,y BiE T۷1@"* ڐ92?!3bE:4b(Ӻ ݄Lk"!!&u8`o q/#x' Y#xʤb؛˾9"Ae)$[$t$omM| !5tSx`H0hSw+j;s |9jlR-Lc i8H]yݔe+<ۀG%.4 `) q;>u;w*$az;~SL@4@S@?l@, T[G>382>$?s>8p uAAAA B!B",B#qyMYbQmQdXV,O;} T <k@L|`yxX3jX1I"eP'V P~W Y2HqV[4];xQPYTȤ{20eVlZgPUkPRuZtGX!)I6 t !)hOu=*#yhO}]LXQ^-[ޥQP4/xIG|R Xgu`u -NXguxp JXpl\H nI#1؅Ιl6D `ה=k§k<Ԓ<莆j#5" ՒjL 0"BT@kņKKEH8h &XvkRn6T^ ,^l>I&Ԗ]:T[Tt 0ߦ:Bn>%^LnAR*5E˰OH!n#msOM>]6)qBp!VdQ;MmPoYQE oA!'(8hdp@u0Θ][;H`/԰D* @ZO[LNXOpOJ!I!I@$o_gf4%}} V  } PsQ MPfK&_r$ ޤV gւZS0sAə P?8i6zsW:" r~PR^'~RVtA)x6Unl)WCM5 Pew@pSh)<* Xui U/%:xmY Ͷ4HV;o`k;VrlIzZ4Vv@q6U_TNNov[ 8;ONhX%=UUؚtc;p8ߧ|6w?U _i[0)Pݵ ˒$*gg(&%I7X0Y PqK.f=NA Gdov~k)flR(Ug\%%ܼve_<^)tW ţ*~FeQlOi{fYP Ge]^u guop/pا(Z1XQCӑw=l_z@dlX` ^ \u)1[ 2tp_ ^|x爬OIL B"DH!Ĉ'Rh"ƌ7r#H 6$ Ñ)&$I2gҔiٺ<޽S,ϨQi5'*ӗf28E^L@,k,ڴjײm-)9,H(@dGJi0Ċ3㼂s,8&5T';]VT;v֥[N&`S &86 EVʗ3o|y 7n@KS$[ \paǓ/$z7>pPpB.a5*OQS^zu;S##@$ G<:SYCTCsz!jt ݕc8$ae9d5xcbA]"L2 E:j4:H9`[x%Yj7PxŴ$&m9I&!]fr\ 8jH%[*(uh]Ly 2`)،nz)EcPƩwCJB \$0K6IhD)+sJJ)vQJ@*:{QzqJRB+ W~ycSj+KSRgLV$۬<`Gg*tQQGoGK1źkUаPe\pJ0IuީifD19suPc#6|B4vgW3YgtG9.н5}6چ!̙{`Ч5yn;Z"ԻЦ#}lډ+%du$`b[6SK-LtbK)ؔ"}zlfw8CId]Au(#//E :xnAK@$RҺ=J8 }u}jIO_=:w%_YvPm9A` ں[[Fv#JpGjxA/ 7݅Rc^}.\jɌ0؊CT )AѠ3F)g]%nG{5VaRP2d3 s OȎg4"!%C=?bS@_xA6GAhhfqI>O[;uzXwi4wAKn\"F7Qoelۋ 8:ш`zx/"PD\b!K7o{cμ7`2>\ u"3Ja =z^/.$zɋ@pWat)hA"(93F ~GN`MmAB0OO'<t@􈟸< B H Y+ \᝾7^70C7 4NPKw`)ZB<0܏ZTIv`ԏ[ ND1]By^ 7`_. RWf\N;h$QF E_Ͱe!Dݝ75[1ܟ>˴|`}RNڤUZ{ȐȌ!BD.HM _7`.88NOE 4D)ZlMD):>&͢9p ԁ&[.. 0/S#[t$Q 5Rk5G Q66KQd ֔$,~⾅.ޜM+B9MI`0?QE'l15B~L0C|BL<+\A%ȳ8lE7=d* $C !CG H/[*.1_&w#[B@C-䁭5B1kBBk%S|UD$?Y|x2gT۹{&qBՁ^Ib,Z"%Ip{|eL3Mq Q8UsgSUńTń E*J98JM䴇^k /lZ(X% =T)!~ƀQaiS,> pXc  EiمL wh f~`+Z%Cnc-a)RIaMŐG$ٔP>99yL(H5@<ĥPZ*\$ Ú z%B.0.zk^1_,m)*d** ʓ 5Z+D{8^̋)7A*d~INlt k`@o$#MI KE,U6ްH&wȩ%fN"() [Me]#`۫( R Jx۴u ]Q[S^[O$5^ W1V@'Y1(3.!e  [HE ;R&uB*Mt%e\,_Z/T(A.T¥S4C8T@k/<w&~VK^tH]E'0Va%U%e0L0E%=,$C\U@TWM@tY-Hp⽸軙îBA%Bn,bK@H8LY\_0G-d!5rh r%p}n陦 @Yl;Ej-Vc;@VsC7p؇GZ=CTVh7/9#8DLq dHs'Dʎ'؂%|x%(Apw[KbId3.0 E-0;LiU*P<8u1|8dYue/7 9L@?| pHLo9=ej]D%KXlLxE.,~ܤH Ta &wNsM8Phq209kW9CTײτf=3|L8?A@E>8ž?Ć${L`OW2ĖPsԙ9a=Ge,PC ϒ. -E⊮yXY`]BȔ7Zd ӘC1hBwdeBxZ*I.-jnA ? 4xaBCH0DÇ9DHh("l<$@H#I%Jkؽ[rv1WgN;yhPCđ 8$I{X(c vj\%!p Jr,ɁTz7a,<7: A,Ҕ*W\S^ɓ6r-baJ[Tgw^n͢i׶}7m%8nܐ0Il U(7 ~*W]uoh7:jإ!VsҥCۋy+YX'+24 袆䣡ȃkqhjGp EĒvB "Ō$8SNm4'%"oC{%?f^,bM.lϺKĕْKsoX+":kĊ8i)س> -c :D]Q7X"A$D)贊95ȡKebx0]1&\9sԃ,9WQoKs1c5fRUT2d:KNIr͝ |c!*hɊ l5LfQI^!r^VX?KK~D9˅)c-gc&nꕬ,lANEHŒν-ֳh$;djۆV:Klb4 ŏ:୷ qeXMP,Y y P-PҐ OK\nY/^{ !)`#0[;H!M=z-8sE;l@"ʏ1O 7kw%)c F..&??d|+sL_9ڿ1GsH6a<6x QZt3:a lp`]9Q0.g)!xx 3X"Brh!Gi KD78}p% :k cΔ C:f%aKRaXx͢9qB\ " IP(|fPFGԠfC'BA (2HG)IY霂:I3 R .7%(a fX,eYβ<;Rq*yu59cNs*TI?[_L8NMcLaJ--Y30gNxE) 䄴}S  *ob 48 ؎C%[%`(.(4n!Si/%!)m0-Z p{E5EMlf'tn}j*!SC`K (GMbySP}GA&"A`S)bT0G@4R@?5"Y11_sT(>OR&^6-H3N!9I2Q8c&pK!<$yYM` F@$8V8)1 "Hăhör %Q?-}IʅPG(KYs$kM}?]LPOo35>rrUc֭){ J'u11;1 @$p@a eF27 ;N>7%a`>1OP'moPP8$ےSXɋ#1NX? *61$ lD>>o3 ٌgJlH`>0Xl<W k$$Ђ@"D,]C?9Fu~*H+-ZC,_.<29@o.P=s?|x%>(wέ_Chq|gE1tu&1Oeo+lG")-5 5SqVUgD<` #Ǿ2|a X0P#@?e|5EB~{@p081 .NuTYcL&gN' r [m))BKQ:[~zB֬8k7uwV|XA` +Ҥ+xDढ़EbڭjL#(=i7ӓ=MH XM u}5\}X uX@!i?&t!dC6 qdT BpX?P@Gt=:zAFʮ(6ȶJt"A$i<~Bh6n:j+0 Ƈ̳ȧ,c}8CrH^I gHZh@YNDLpʐ~ @*po>NP#:aR`nF!$`'$b.  !$&`؈ XVVN0"z--8)#*Sz Bw`,0dG0:pjH-.OnGk1@NþqLAX ܄,b3(0\B'h`X(BH 0`|!R $1'L N 0q~A~M`@]`FVF"M}(k >A!@*M:c9^A *`"]l ˾>J ʭO,p’CKpDi1Jk1b HeId}@ O23"<s@h(l!!F`c5!o}#MQBap$P$^" 2f 5@Lɠ dA&dA3]%G(p@`!!AF^D`qtPecla) bbj,LF_g1I1_0LnI6c8o4y$"6 ̩NP(lA ӫ\N^e tlt‚` GljL0N<1 P6Q"I!$vl%@gC `s:Sl,%_(=# @d *-` >=/Ԡ,ݼX pQ,{RA֒ܒ1ĚUI.eUYrX^Z*ll*XXCo$p$2Brn 8Ps$O a t @`EL\5i9_6rLAl0X h8s[n+= Zr d*lM+Ç0֭b^+1rnRC-gqQb9rP1SǨ2Kf.A.Ԩd$tK8 Z$n-">0Jh)`6fB&d(|`ڕ9mC `A!.a Fub&%BdKxa ^0ql?cRh npS+ *X6=^6,AJ1bB2XC kׄs_m  ]q(#Z` f ]`=o*Qb|Rqc(dh@ TJ땩h+lj:nPccZputvV.b,'4$K&`O耾O` PQxk4LEd @ĢʎXZ`<&Fa |XPlEQQ:{np~@d;8OrSoQ LFUVZE j YCď8DȀ ^yA.S^K=,a׌+wgq-;q'W-#lye.+B)"*SVbw69xG$ 9b @ \A ,CViDELXOxmm>3qgp>v-:~޲#ZI9s!0 rYUa@z3ˤ 7'ZڥGD ʠ `x@E޴uvN^X`aCj }>U@Ud m}de e[Inv:>  '0ٜy Ԑ}kEl% ۺRCn"`G^= H[c/I-/_-Wx.E|`CU {4u rȸ@ \ ½t9Kx yDa 7i@rŇLO(p cE!@dwrOEѼZIPTksPW_<\Aں :C)b<s <*Bt2%A)R7`q#lDolefH+:2QkPmy 78#cPd.(sGP=%.01mf(n@`"^ uFͥ=͏cuZ*F,!1"rRaf{c07zrG? N?ޝ c!W6 1ƢTFW~ 23~ J(g'@ @#Ѿ"&!`GI0^ˮoKa[|- JDWL~ʭz+#ƿ1}{~1@õp\H5Z@ JU>3L$s( * l` ? 4Bf vHơ\s ~$x`H\2f6K h !n7%"> ){N~ƾV0荳g⒨KuP2L*U.(N\_2WX"s*R$XP*,W\Pڼٲ7T/СD=h$p4D "!6 رdj1Sfʔ;wrΝIhn); -=`lX(>,XDq1+[#73_ {c#=d D8qf*jCCq-\~ǒҫ4P`K uĆ*#XBI I6YYL5[į_1 `TTKI "\VUa)i%WfWqxRFXH*aMHP0Տ CƨZ0285 dOcM? 0: 4O?R%$^Y geJvkyH  n(:9u<!P sQgteA5$ DVԐEdQFQ.},*wM/uk.M Hl.TM19TUUN )`qhi1bZB$v!e"dZ6H?4`C ?@$4HH20λxpScaO486!OxD?O&!,gYmrf1,hvqZ)(KH2[]S"0K9RLp"ism]! d AJBfJxET+UD{!4G#}6BKRK/EM77"5L/ >.bՅqH!Jء.v$1q[b= ;D?g5-a 0PRH' E‹eYbKBA啌t @8h}bi{SJ'y֧ JԆxP7+k,Q }-;-F3TxPGT}r9K뒙d]w Bˀ&3*(Q˪Cɠ8Xt$P8`Ӡ'$ KxOa\k|c199aɨq2AҬR %䰆7)'lTfe[A'?S)J?%T]چAD^Lw^(75uU5Ah mx{^wVBoe{v)xA`i9w|b %(i ԸjD<P&'@lIxȶ8F> afeJd|^Ig7bb "gVxV ZyVw v҇ADo"'H؛!r}y@d}v8`7 6ac mOWH)uFBxL Yh 8LOɆT)e CoSMS`ٴXqstp:oH馗>;H'}U4Y~+85_SSfCC 1+)?g.Bsu&h01>U! R鞶xhBUj%F C6->>$SpADhJ:PZ[ [p: tQiaÂ<&}qEG ਗ&8w+.᱄ 'AnQף L7hY_ؤv9SBQxH`Oq;$prIajg6ɗ|:ie@1CP0[0#cdcb>LV x*?zjp<80>U*8z+)Q:BD hUgx>Sʩ_{5[8A8_mU97{ [t%./:S@*RPZaaT$[vyE[b>@3ۺ` 'zxM'*` =]A*>i)7#{#8w\ZWy{{Qچp[5AçV"b`[v&C$%Kޢv@{Pc`l;KB3C%VBc)2aA&"dA =bP E%9) )3GC}i1!{, am屘AP3M^),n蔻h{ xOy;kOeXPiCiGsailx&S4_TŜcD;";1C1PE1Pa2(b1XEFS0dH`/F#X-=:CRf6()xۗ"Q{~*A9,1Ljhe&3NHJ YbSA1-Y*xx|t^:f:e"#-T5GSb-&F3#,bFϳPc ٳ=ZHE P0OPeCkv ?0SY4[> !AQ02 uY壼ĀHJ_\L:}C{\ u̫ qKaiSng&9Dh9;-qp.:STfTO`t;cOc0 GAq;rFi%9آ!C`ve N;rqb$@ Gc";Q Z #/7@Px-ގEm- `Qi[$3-"ɼ'~B-M* ~7[ijKL^˲ ϛh~tOoqIMp[{p:W&j>.bAC!W.=o8 A $$"V&lG\" !%$t^熽d>{9{R,wԣ8*Mؓ(+^=}hhӠÎnh@ ?EU_+ߐ+~䐪Iv B|M!9Ti Dpt:#613/kS^>٧Cdk},"5E̿KoK{ yuxƬE\ZG&\d n%IiӄVM!7p gqfaH"Gr#'78h\80 ڣA+eXJzRIkh&^x6L% 򙶠:K8*Xs|qikx̯wl9hY~>6rŚ+ռDI8N& @:6UOSMLryBN Ȉ4r H$ &.D[-@ =vDPHlk]VebԶL0/1Vrxgo:z,+`#Қr.'c\TjsOD"a.xc($8dE?Qr5JŁkÃJ^֍Xj- KUlJO`8T-^J=%fX~( ;(U75HsJ͆*dZ!dt? 1 a-p@- э8Ip~bG ^LmD[1tCTmR"7F>@ nF@c0)2H;5s4MنwE>bZ  &" l2-ї VM y؝R1Հ͙/G.vLGูIlTA&ƫ`'G9\aJ Iq5&2thMAB_d(J0(QeFaa^E&/ҙ"\>@2m!2Nml$M0[:5tIM m&JIO/(&\B $ 9{ai915_?5$&M`l<LScW;axP\Bh>9"Il8&\bCs c,|! Y0pO{PC )*p@Fh(K G(2pyXyy0 A|;.[?$؃AX+5^*9=03)5LCObGJc+{ob3#66 :\/۶Pds.@[" 볉 S袚:P 8؀@_^ h VpRRq-2%`-A()M˛4{9C3/7lƱ9 L<4k6#RFS7Fӳ C\.(78+s60#~4(hY.w2x0){ j"E<#FnT@86*3c:gCSCP\6t=6,8n s؂ýt +h 8h++B#HjG A&JY1f|@It= Dp@͚ƒ,:sIkFQt=BOZ:QnNX5xf3 P~Hh%LHg`8"SB7KFVg0H,B=x_h`Ϳ:eReRf`/&vb6k3uUYFkbZW*bW5^eUDp7f0xcX 1_j'H_IC h{(A jG]z;;tfpqP1;{V2,GQI]#-sPc0fSKgv/~hR)b,7U]híD`uc @xf^Xi_8k~.dV #P‡Jڴ`PO0 %;֍xyrH))q\n[0~nYVhogn&+W\vS, ҸWhi>q *0 lCp4K  [t^38xtw΃dhGcnNwngq~6qGFGKQUq( > Nb0?p^S2,r ~^"XgbikF_ܶfhdf۾=7 ((8k1d`ᰅ-9E9)0NQv6Eq_"wrvnGqtς q 6Lt2 6\bXYLSvSl0c7$Pakh+@_W&tm Vmh3_>8~v9u^\ yT:E\wqwwHyVthnh߶n[qx#0hNO"D5'sS-;@rlfx xn $2t;`v1gv{ :];@G>ܳ7ww/nztyw|}Y=ٟtz/^7MQm?Lrʡ…]?La6] (OL8 nicDx_|^K/ggVъ# \} znUb +W HQ#W &8"A%K$*U+CJ%jfc}߿> *t? !0zT G?!AUlMu+׮]r1 E{% n+w.ݺvͫw{ʔ!S=RH $H6F5*5/ 5r“ $Q!Ȃ?[tC_i`h٬C{FId1S9s%Q/s 3s!ܨP:@Ĕ2HuP'WPx}3!H+>Wb2vJ=R(W 2R1؜Du4[mQCIjQDldafJ"+4B(L<#PNI0v"x`-w\R\q\Tᗥ[r[JH`vB願$aCMfscMJ"nM!H8vTZHIw(ly2Lg& ~Cґ]TETT%!2xZ[K#bzXcIjX Ky"pR(n驢zbm϶$o+"+ÉRq^ZL1O#*UR8 z0Ek|캇0eQ#UFbKSe," :-BbL)E{RrH"ȑgnÅRRbɍ]G1?8Q6M&ܴO1 v6#T)Hc6{qR@;hNk#ˢڏzҝϺ}({褩Gq5lɦ;Rd;d!j\H矃Nc=L#˜%9H )3WL}üo=..@k;Y.5e% +xl ̕:Q")Yv! )%A(D+DS߿}@aG8¡ a a8k*Jžs"pp^^$.ypx]b&B y+L8FKW4K%r-"vؑ@չ @+NJb/.TA{pr;ؾ3#9W# -&4 '=VjF0 "{0f"g.WS$ K\OgwGM:KTjقixnPT`_ p)Z1tKl >B#5B1gMJ+3S fyL{zDd.iKs#BJ3tzb{ l A)Y%xj~8ep 0QD Sp dE$܌ p6pԕSKѴR'9S87+>YP{>:t(&KKFp<\a HP숴b8*9"` Uh62Qi)s&\ gHt]YhS5֒,:s88d>-q KAQ? "rT 1t[PXI2_>L?(\q?Cyqu%t;ps Wš \Le5OKCՓ}srK ESyR5-`BtOfal "q'[ܻ@nsc+0G2zle z𮗔0:`_KAbO V6S6#RkHCqi=uY$M%Kˆ510ij[* PqJI@%/)I]`0` H@0LF s 2pG?^!=WxxVJ1HyZ S`?l<1僃p\z.%NTq@}vO2 rS]3'qw>OkA":Pv$|@j Ý2`E/M0B 2̀D@#4 6mGȃnQ@?pǠp&  $$І` D0c Z:׽(9|:JżБ CAjb (m_d*͈'i]x{mwSLǷb,h P!h7@{Rĥ`#l %(Ai>MV\#Xy`ؚ[I?@@HmPPG׊1lKMʅ\"y_`d;N-}Or87y%l֟%`>)8Uq蓦 R h'AI ؟ Z!G1qÅ lj)ɇE1  FD@xAyqV?B'[iŐ%[0?/DB  8]Ƀ]Ii+BBԕVH$`4AdC( ~)=aO(i* U5"*"ShQS}$ny^AbĉЀ` .Z@5I 2h]4$ ܠ$ !W WZr1BA!e d!q93&9~@/@Cŷɕ$D,,wBx+U*:!vbN$.$:dB.b$='Y*((Z^ 7A "XE! ڠ\d bM!IqA88Z X[8@  #/yWp# % 4W-YVܘ]Y !5ʣ]̡IYB.\@\(5Qd?| h"F">5Bz0'.-b)SYS(R1$G !b)+( 8Ϭ4ZQ-nBŠD@M mf@  tO=5V?VOh_sXn tI94vN9a9X\E[ɝ #<Ɔm5"3Xi-&GU@*i$(I$jLTy,"@rIxٝ )P]E\\ !ҊTq-_L&L̂XǪb`2"eFb&؇v頝IfVg)X獦AphFiJ&+&+),dPmѦ]nʥpZ ^ 'Z}@[鸑W"$Ǚf7e&$yhGvޗցp}: B^A>b'FiȄ,Ǟ*"AvIā 8AxzAA ¥N$)?+#*֪(",!x^U$*lZ TB".i9(hҩh*Xc.ڟǣlMn ,l,A|AkXVLwLhٔ*k1IE hh~dhhnOVplN&e:ܟkzLpK!ڽR,ELuLE]&#,#,*.‚" ΅@ӛTeITLнD7p'B(bm,)il5XGfC7%n)Pj)( ZAn%D@T(nOLΟVJi,r/OuQST AyJ7,A|e쫚h% ŒpA/UEX6+6R]ج[5 $pL$ oo7pArrr6r7ww7 Twq/qS7w3wGuO 647rwr7q?wq+w|w 7{{7 7wx w~o77zOww6|whvw6}#pKssc7|{AԇW xxlvŦG('?'Klxvt*WRxc.aMeky8yxI0ulc+v\T[_y?,RWyJ@^݅xRb^m,NEGRX`x ɠzySkX ?ݏo9Rz)úGynX+dk>vyO+E)::JТyx_A._c/R+>Z3H+ɸ. ւԑ׋ y3wSDI.ԝRuތS(K9/Ѡt#Ea;Wzl:jS,WOʃ{(ѴK)CFmk9.Q %]|;{ϫ8(In;}ج`9AUc?:v݋ Vg_R6c G;2_س& V:|SJF٢kRd|@߳: 7myO|Jϯ|˳=C8TG߳}*~z}è/GƫC3=G=ۿ@};{_я>l6T@;3ZkCm"< .ʭ a{׸iI+e*/}Ӻz8@s??@H!PD $"a d  N,XЁă|0HpdMaD(\G#Ά>%nT"D0X&Sf|k,ˌ$yh3gNZlۦgP$ά8?r*2+C1+.u"Lx}e lZ@>fvZQqן?TpեZOb/޹k!Jh9V} ۰n .A@UӾ"%֥rЄrΘGORmFֽ.nm*ݽ٪i:'-#, 4Ch|+'T#j`ZAk-vm<++&ςBJr૷b:Bc:+ |HT.1AAxԨIςb$I%t;\n-2s$Һыrm@>1D{HN[QDSSѕ3@L'FT*Z@LLS2ͤ$1NCB9J;3M1F7o?^lLVQ*脄 ¨2^ {-ER=r؂ .87tm\<؍]w=]<0j!}CP [r$WRPr)KC4!>KT ,RR3VX'8;alN<8E6[7S<+ D(A AK<ʡ%E#klv(:56aDBVٰAe͋PūЌrpBN:ǂJ)\#nX/Iiӻ*qԙيb ͨ|l4+tW%^ߍ xs`Ң&U(7Jz(0NDp僺[ B)Eوch JT-ID~"PT͠f5S%6*JV ,3˃DSt*j nYbu&gfQ ˨v4ygZx Ά#DQ(Eԓ\ hD<H,ӏ$P_A=k*rիӑgc,%fe8y J6O Ej:'b55(BD5J ,r8 aA%PF3^ے!ˆ+V\&'Xq0CPM80`a;ZP2HZ"D*C7h?ݡ^X/Ѡ JHyO!$TPB25#',qxI]# $ѝn t[|3?aaOI\F\M()M63 Y(ɮPPv#-ܟ=)Cv<5Fի[U(;pNYG 4B׈ $u2,,&By  %A h$1 Eh! qgE`L4 PQ@ȥ 2ԐT_l'6MHWPL6oɛ̱EF I@"Ґb\&(s()#n$ߺқ2Q@)CFc n*pҫ8L  ($ sȇetT,"+x_n} 'Ep*I 6 P B#D4AhFX4ȃ^e)D`N51b6y,j3`VDIǼ6OtLM> i2<2ND6Ho;=ӋVhzKC b NƐ!"or,AC!C-Sd4C*`m!q3:&ULZQޤB;q Gb9SU@O,ZH8u[Hh?nF<-ʶQ4J۳(Xn小n*E` : /M 0 `2F0 5lJ35n5{!lܾȌҲ38cX╔Ƀ/<'m":R-7M/&i:d5V,t25/:=BD,J> ,p;P jRjR@}a$LvbD*: N!,mvv|ɣSK=g6蒑sv9m%-avLThWsA)"#sM)Đ껐R0(,C` Va5@j 5",~g`}큊>t-֞Yv8YjGVqҳޭoQ>-Sz]D~xI0m vJԜMvKbM`A(C\!=hD ˢ Ә᪨Ӏ-O `ד7U'nciu_h_)ڿǜZlwli#%[Et{BA"ZiF"š ,0gÃ>X/"B|q 0&hxK1$ B GX8"?;Dcn}hO˕U>iWN u%VJ Qn WdB5K6XTw_|իE8qUZ^kd\YEAhjh9Xͺ7G H?|oVa(o{y2b\#l%`D<Ӗ_j躈EpثݷI՘4s!UWwc fVXWBsh񇡅 . Bv׉ufvmEJ-آuڏc7ܐeRݠJDhQ[e-}&тIT,P`hfQ0J5EbȦY&d9頢Nh]6Vayڦ7|!~XB2Huh _QxfRi%X%Ze>dg^RCŦ^U2([%ZF6!vJ-c:޵{CnZX/9 JPJ+ 2gAeZ &;llZ*+`(h5,rr>Zi"׼.^l36} f[ZʥgkepJajđɊhҘjl1Dv4tX'u hUVfuXfˠZZf&&syPWa|jok8:j߯GKUovw7^5r=r inK윶]n.*nv{zmҩcjN4*(]Jz^f&MkڋWv!xyQ >եv[V-S?赫c g$g r M,6lXzU9Ql۟Χ7-{D Rdy%@Xp%-[ݧbC9MR 7BlY Y˲urL*"&hd ¼PUNeP!#F\ jbNdϸ@Gr!I" rъ,5iA^^ u叐 rB#/J*OӬfEқdv]Β|na~7k[\dcE:lK@ͽ}L{KIp*rT_@>U%6~˨buƨQlTE *OrF\QYAHP) l,3 {f%~(FxBՙ߲n.['<vXP3!])IQĵh 0C[grHU.2;ID%3xFxgG"ଁկ 3bEaZp9LЖ3(jY!*B)h |tL<7B'A 1Dp6 \y`?!0d6h@V ?+r\A|ۓyPzaWӨ#&AqQ0J܌z<)Zڒ nQ_9:m#AzlP5H#%ܠ sR 0q%x@(/@;|I){eX?l{ Iӭb:,q8:RZ*3B֝ԊAX%4[ Si^Ij#*"($Ne )D+̣*Lo[X!ɡq5C?X _sy(#oGD 4"C | ɗg!T͏h-t UOf+s:< V*s!"!d?5!=ER= BD`\7ѡ6DCƮY[bf0 ޗ\xGvF# tݖ8_i?$+Ll6̝A(K0 `C$@ 0vce#l0q'6CW0TSyUHC)+?[VoG]Z:"A#C6K''o2D:qGv0Á1 q17cgqd:0ՇU"q !MU aqr 3~ !^AkVɰz13[%4Ct8Q[bOWQrZR(ZaK@Y'B42l`$dapk'f$LcVU6hсodpxC(F^_d1ZŠ)rx=4Z8Zb׋a{,$p%<<$!t;Z!B`|5{x95=G%43j<I6ʈPAaadT懁-(9GXuXHedRvgj8:x98rCQX=⸋Ž$;dU"ucB/P&dN(ct(ףzDDWQ 5YSjYeCDIL a.x=oD=J[TJe<5Z"W^aaأ/S2w=:;))5uUhX,;b:=1"RM&,{8I}d IcX#<B8Z[)/#6vɖ)<0*u:Q1  "P$EbpdaJazEnDC`8a4iSS,{xyL>T,WvSy"75bW"I6 Y `?s&#!؛ZU@$ _/YB/>y G凌1>YQ4Q I0:zI@ @]SnJ5I Wr$ҟ.9ﲏRM%"R{=CpiN{C&c>$`6I@IKJe` $A!*#;9+3S'3RF5t9:eYOHRØgju6i<4AV80{@~ڧ~J Q +u54tUhjH)Lé)֙y!/(>.  Z @ ` P{ɺ` ۠ꪥګګֺڪ š:J劮Z  ڪ)uY[TYȉa_0 ° ~ ±O0P~`xP|0{`p k ˱ ;%+ k>Kx`+Op xGkSkT{;"K;`۳?˳g;:kjnr/G"ƴ+i:*P\\[pk{K\คVPtP[uP` P Ь[0PKV@+uл[Ż˹KțK Ktйk٫^ʢ 9<2;@3?ڒcxK+{{+V쿅«\.P<:{ L l +'  l "\4̿ܿ[`oK*CcGw[:yܴ&k70 kVl V  ]\ Xň@ 2 \ pj@[^x|Za cy\OKdlǂ\*,f {ȑ I8^^éRdXHzh_ځi8ʝ(ji@ c3;h]<0Z^c9P }?>ݚ9'Hy#vܐR\8,1%g/yH%%ʎYRsFaަtWJZFt(['ap7k@|(8*HUS|FJ dW{ut_4W2<&~X AQ[ZoI>7@ X"[(؄!p٩O I^{8047풾[qI' LB 'lΦOO4k-L[mB=E,Z]>GBQjHtO0"E-tC)~Os[~KրcT&B5bGo[H{S33#K3B et.2$y}jxթxF\@qqaNBM00(N9#L"jߟX+g0|c%./ha A ~63j7rRr4a] A2PTٗB<0vo?6I=ZssL;uOܾhtO[%1)dDH0"$THp`A%:D1n†!A~HQ$ɐ1I  @I3~IP&'=sV,xF ǦkePNB* D9lYdaH6"Gq-).ݜ|vj؋ Jyװ]x2v&HjώU[h s#DU?8TY4a ߩ42l8 1Yə-i+O^ѹYdzkٛo(yp4U5Gfz:)G癐H *:8d՜cp(trNCpN: Cpĺ|B*p6ک‹ "L&CʨL@Jȁb3r@ l)BHR-覕N"PziKJ+rD9B4EA<kĨ+g l"LJɼ˃ 9N;MMp64DrQ&N+~T tş$"`)@lD46kW"a Ϲn[ItT沩芌uO鍨ه(T]7=ȍJ{!G"ˌ#K..V# vi ɷcLBM H$yQwQFs_SP̆Rs XκlzN,gPVƈ W_k8& iw&T jKNl#m7C hF8zJ`ܭpca+dw̸m<^n>NZ͝LHA<.*`ysc HѴ@%AdCP[ LFh҈&} Qs3/hب p㧉/* }Q5ɕE$G$7b( R%Sx@37PC^ i$U=:7\L(@F}cԴf34@& eo9UY%SM#<&ąMʬ$08 w4e,(Q|bxIk %#^QzIэ |DqJN1 kg)^np I/agHt%Ip@` CӗX.$IiG@햻\r#Qe? [.P~#Į!gN$^rtJYG1c*-FIUV?<@L%qT trA>L! Ioir:_NhdVT(uOIܦ&CO)Aٓ J;aHʣ1,mڝ Š;)M7ݙ 2^\>q`|OGhCt$ [W'DT]MSM^`)ZSN*VIDRS'QQ+%VM5rʒ$Pʰpf3K%,wֶf$MݪY瘧KDN5KHn`BtRb*`9JٳV!]WzsTT n$).쳘ͫt*W!‘*NSXHHjlM?ԀɭyEN%d'* Of:m}YjtE-bR4j~oG|$Cճ8]nv~E=ʵoByt*J/0kEv=`ze)Z}l*Ҙ;Ǝ2αK񫁫*# 9 w\H=*M嚲WpEXֹp+tpY:b8дdyWh9#*Kq}5X3AfD\*l0݄#bdrvtShid"(;$LMjq<:DRZ)ߑ呖]±nza<;RfVq!figI)8Y?zQ|6`HXwB&%aG"n%FF`A+?!ßG? ԝrQTZircB[XdVbzS5b=w?KRP:eAŏwzH^ZwyYȉ Uk =iujE$cfx" SYHYI1DQw%jХF%bQJ*RާCv^&Cug jhϬiTJTH D miI۪AU\NDU $/qKRei9Q{.4&A'mezhбAcz0V>Dp[ѻAz&TԠm62,kAzꐩEY-ЁT`z%0iSxLۧ*b SD4-W+L=}`c/ts͝kǻ]-н${GUzI-CXնN1c@vC[Q.SAQe)g+%P TG>;42C,(ZAzboY;_v(_hMXJt{4ɡ/53~wt>iS-m@ѧMm_y巴|[’\@{\V£0H/ n΄#70jQLKJBCV| 1AZ9 KXGMfͳ^<ɋ9DFf_b2:q]K74nSr-~IEEcBCMdH"5`ЀAFFo GhJH0nu-%D@!l\4N~(D&bE+S, &ʍ%I!ؑH,NJEF-0Ў缞Y 婜Q%dvo ;`Ȼ3sq$Q(B?jk"Oa1Sh+rH̢|,?Y`ҟ̨4J4zH8_Fp !KB8\a:fNuҴ#)%6ebQMB$L*B0uAb3L1y[Hxp5"܌*=B2BUknQ':9VqZ&HNJgOЃrf-?++.Q9ҕjԲdfeBPU^Mv4->J.D| PKPsmn գ 2-JkT!g4XR*U+ĐVSj+Z~kYOռZftYW5]IT{A_KhC \d">6+E Ind"<@2DdT,hCZM"/Rk4$ǥfvYb!+RpZӝvwN9'q+;z+b%zr&[ַU.P#o!b`HmE dS鰏D_%;a8&*"EDU(]Ft}B T.>pU7h7 Okʫ7mӄź{cSG"AƦR;](3Fr E(1;(ol.7-WrNS!5RIkNxϻ ; /JPEGJFIFHHC   #,%!*!&4'*./121%6:60:,010C  0  00000000000000000000000000000000000000000000000000" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? ) qڻNYYNr"U,#lOWC?w r6W d\t1̨u M4Ğ=Ufwn^xWӬ(α \JmSIEen]%g +v~`-e2iRjfѢ$'0H<Ʒ陵<9kqE*kw4YA61Ъw7zam%HfoM8ï'ҡзj7!e,=+M/lP[ #0OZܕb֟zavV]d`96%McrqZE9텼rxy^=ìW'0Zowmlޘܬn\(9$_^A7X8"omPwl`5hQ}hh1W~\B g|z5gKD=ڴO-͎uk5Ȃm-9?4h.ODc(t@?0ϾjbH#hd|h+rpF0 WZ9"gXU˸=Kӎ%ZW},t6s#ZJ,q4g@&q$6:u)OƲiE J`6X2:cve $ $1FTkB7ϋ`6e ;$י :znC'-? AgmAltUx渵\Sr|Urٲ:s,ܰhYZex@u#= Mi7*hZ(di^ld\sX?U IE>jF/Ǧw$ם<7WVz(EІ_+ˎ$Qx8zc=++Sw K|ǎ/V80{T ^obۂJ{Zg)~7or{UH1IFCׂ䢯&R v=yߎR&vKdVA?;|Rݙh29g@8܌ *NiڔZ~w.I~+Kneb">D`}xODF73|0\³ໞ3l&#̬rHߠGqwyټ(EJOqn/ODZNSf^ <vp=G9r+oGt;1!1sa}3q6 !F K(bAFaWguV.ys<#'P0 =kۣUkBMdxWm ×:qJCT=f@lc<=QmnN2 +СR3J*KCΏGMhPHPc/sjxPHa_>(5Eˆo w&-u[’eNO3lؖ@pfȮR{NS]is҇&P7;;c\7g^jÉGг#$9 :{ڪ3tm!fq.MdHyWwp9 inחYcKQتFrIjP{lmNihTV'--Efbd[my3\&wU y~U\|QHsPcHۮch9q9ɪ򵵢joyRG~kJO4B)o G\g95sVj6|_jo%ӢjdY6`&6$c̶'NgޑbC| 1Xwѵ*y2s!mZ)l܍p _$8kZ+mnnd&'@`aI<[,޻<.<7rN9uX@Y ^+I5m;nq֧es?Ri(DN0뚅@B)iPӌn$q5ެvgtX&X‰$eڽL-g̓ڢ9vEڤ =S<\n\9-ZWhnJ[29'5^i--]نI ;efmM^I+,ΊGbjL[wdPc"S+>}A'gȈh 1&K7R=kKlibAu.6eS>r##Fp:?AlUe'h #p;}i{cgpR\4SAQ+ɹA { ~ERf6*Z*7{U:z0ַEϷb=ͻ{98?Rc;1BciH dhvxҫ"c;u>*#j>Jݯ64=?*A%QcXK.;u2-TPX܄QSLow۵naYȩtPE(' zzy:b$u,x|9hPT)z/NPFr6qMAXy*0rۊhєǵDQ֤&&wqj ci$ ͜N L q?Aޭ#A`ap j;6}6toOH]V?8y#9\=W9pԭg|ֱebR.H.=gڪȯ'x;'9-V/*0Fm_lz-ʩh pD1)v zq 3G !8>5^/`E>r(Ҙqڭh^28Vw@˳H W+ӠխBy3Bܐ$_3zq{/:6.|lQ֥H0`!prGj }L)1}m[Z$*!oWɌD3SYl $n=p}j!Mz>YG\iۥpWh?tMHԴ;KbYk Ey (8'v9Z,t/{jp\%T<+dSk/($;1ax~ڼZšN瓋a7>lmt{ h6(`7p:`NF+t-Fi9;W3! \p3]ݭ$n-bPW-BЊWinH!U26[w:]Srԅ⤌_A]A2lNyC<:zgC!$Xe"fB6Y,x`èǧ%uP/ʖW~>g]lU16瑔5^JiN sy 떖Zk3<@ &j8]ּ?mrj:|q^'li-\bUwd89w5i8ү!1L$Gi8 ~R5gqnq<~\zg56,_tPy T8M=eԳ$=ԗ,6 Kz)5ԭSx.d #[͏P?z=8/nmԥ|6ƒ! khj9"[w K9#-5-~DFxz3{QKAy%, a)yg:4e <`sҕinI,"ICQdv׀kiY>;|]}Z; \i Xңw% i!=b=1y6*]J(IJըT҇t|3a_6g$w2hr߅NI$ o5o%ԠhbB#oeUՉrIp1Zu{)ceLf3ӷni3,c *0:Ŗ ēr*$32YԐ09?fCwgs.Ll"vGF= ~Y?N' 3 9<{ اA q* $H2p(1UnW׶ޙw?\ׅ f&$yHT;1'ֹWI]:=r#,6˟Kn+ݢ܆xݖ8Pe$2m`g95^Ur#2= T"n-z$S metᢒLC ~jy;ײFYPA 1W8nGdUVHL/%/rK@85C{J9?3wp%lj@V87`xoRU&3M$P[[I38nNI6uoo%d(n>E%Ԁk]MCc2Y0݌A8 }j:q^K Ncć Ns9 xT߫= (Ÿ2;mW@emR8wef;IV8#=j֧m5d3ŦE2,ccJ_BtpDV]R5vH㓐A Jfkw1Hv-Y"S.ݳ(8?*xj#ϓ:m{o&Į)O95"Xc/a< w`܊yF4CjĦzq9\>O¸>0{h[x387 zɭ"O8RZlp S${$drGtֹ1\IT<)lgz~xI$wI6ғ-u.U#C^qk&vcbk`Lj]0={s.d?VGdPw'YGhU7yW(kRbXO7h =*-D쏔 e^E]$"T́毡*wtYYܤ0z`e)O =bVŏz\]E$Ol`;T)+2ydqWZsKH+.AFYO2Bv⥖8F Y eo#qpI&+n2$BA'ӽCd^y[j ٖ96rO&3ݝI *ıqS#ݟ 6#ߟ,@xZ^(MGر2ip컃`^Nm4:2*CP,ۺpBuڨ#a oj1diLIxjQ4I9))&{d+Ҽ `$vu<~UMxqJPzweeo퐝UzuOQGa>1lrGz6 i"A-@X|`>\TgG՟\\YC;>h<ʌJnqׄ5yoZiSvr@xWVtyT@ H >%i/IP+m/R &ФQRP冇$[6P|7d]_$"HԖaUǶy < I.!DgY5RvgZƣmyz%U? FY=>a^oYx[~e%6y,`۸o_ |u;i81\D _~jF1侽%5H`D+$ .H$8 dkYyzto:9gHdڸ8#}漉؄0%o+OBsT1yMy!x+w:TrL,^2Ua-Հ~Wa*A:uw1Ffݟc4HN8_ӌT^+-$˜o,(G\˻NXR6[cˡ?e^ʏtmN.t.sl\nrA9'99UO*SWx6ySZSp+M [p]{/jlJ=[}=KWtx"R13GL~j:EKuwk[{ܸ1DsyJʓ<(0#=zb-i;sL3*]dƀ|6/ìln4bOF,1295ӿ&ܵg4t<5zֿ{/9YVgpNG=xk jzzySmFOD.a&R1@ɻ UV|)wexgUA-$M⹟w=p~ZV HF87S'>7VװIct_@IHn,HW9d Ǧǰ_U%”KMVʝIyڪxTy6RHG% `U/=ݵuD%ozסh9vJ'$PLijFXn?ZZih"6~wzdc?J6|sh<Hw #l{SkR2XYapX8*uU>n-?h.2!tx)ePT ?.=95纈k[U;9$*F@Zj\M%G@EQ~z).KkO%a" UrJg'ֵdM~akXF,z jT| O#2q뮷>MQhvݓז+ָMZA1!JYD3|VZ e?]$70ԃ/dIE(&2+H21pWc4Aű~;צ;)^1.Uۘg7,}% y8TUd~+'8 VXEx! wd}kvLaQuiw|r qО}{קʢcͩZJ Gsi4ۓ meo0F#x5; u鴋7~e­AG=Eo)+_$ WsSu>keudyK%yAfi14 ⣀qS6g?8C~j7ZYbNGǠ6rrHnA] zpV5q#(& 8=:zaZH#~_;;Yq"<'pp0vP N1AE@{ Ƿױ{G4 궖:lDCO,s9?5uj1NcH=8^sr=I,<7ť{"ݸ!-3e>W#O]Nj0 9$UGoγ:\f6 +q# H$ >ZOlb]1%[yOvnHQ0sȭ)/E&9 ^zT:=z|"-ynzY#V\zE{$Z6qϓ1xS%p{y58*E)+j6ln(YN{`xWW\\&(,Uݛl~sn✰0$gXE `zp; betbcAa8#<Д_46/KwPS efHf]3`{qt6SjS-yo>]Xȍ:!hlf5eKXyAe󍫑-A$A1ͨ*L=0N|`tKQN->bQ<e|h*Fpx\1&X8(PM,da ץx4m=:|{# G uR BIRrIJX`_Ckjlc[i$ʽNѴ\B]#mlŷ2k`<"d,9$`͋ΜVޖv;Oӭ>;e徒2ĶNFV%@VZb?0͑'nxTgGMG1$lm9aq#sUʷX٣m"Y"XUvǵ:<`}Ua!x9P_!9ޢ 3 Io ʛIw 30 Ǯ=46,ޕd$y:I#@ÑI'QIaӥkX{VtY<5v*T4P3qק"E$j|w ŌO sd*A+ ~vOTׇhm>ԗGsƦ=Kp=*Ijr09^j֛`.,uv(B dprzz~!pN~ͩjSlGb۲(38l3RQEn rjX-q?ttҀce}sC!q1R*D$dۜmZ֪"v;˵8Kv#aP;0ǧKtOXe$RO8%xI88e^8Y?z݆2I>dYNv*'iaq4+ILGO $6alcrb~`σYiuI,Ot˒q`WӁ};W<)蝗El(Y.'BTpsmR[ l!Oiv8=KM $va*; k_R n@gǁ848CPZ%7K$WaC?=Z1my3 ;J`7_NlZ,/5ͤeITnx 9)o'Yc>gWp{r>.jz!;%ߡ~C3뎣>8s5Ƀq("PΡ8Yf&WdeHAl_LrHҠT$H'CHmh=O@5_ wЩqAerJDLgRT1o={sӊҼռ@Hr^;ٙT)">^@R\jq$`ipep7^Al:8=ԖlZFn<r0xz`TWSXHŲXldczV^[,3ZƗ Í8,OmʯY-̃ *g0=VQB2ibY!^3,yVڣzBʤau>܊EY{|Flkhq4wvfRWG 0q,-FYb1ڶ  [himNȭd!e_5($rd?0lF85x_.>:Iu6 8JĊ4>`:'?ʪp凙4ck ]Eldq d֙b I2Jd 88M[0J#ֱrmf=FXqr >?kIc>)wH쪤yi֐: r". Ȯ/^6Su/oTX9'իZ5~Sz+Wm1PJn1 Iq g?1Ͻzovr:5+mǽyC7B E[~@q]n%Λ}Im$LNc*H㹮/m `xT[VX4n똄{OYʵe+1C0Yp~YujyfFHa}ۭ?S҈[mѷݕ<:0\>g}X_\Om ۹!Vr18g sqFM5>u*𽞏BuYJG s+,- w`QV;[#P6!XȒ=v[9>TvId[ej7ڍ=/ryZjqw3$?($muޤ:}qpRUC+#wv]AscIBzSf{}s#hT+!=88#ErVryzd¼kmڔڞCoO嶥o7oukgH \uH٢e&~o?dSpm`IUmR#~9<{zhwyS0`s#w>3NuMUI'c7mBۖ%"|CYHb͑ԁT?߇k4⪩t7ۧV,_d@0ϸ5KK̐"Gp2O8'sRxO&Ƞ_5#¹v9ٚ|ɉ^_,ǎUf}z{WZI YXH?u5M \+ 8 c|#e\]ǧZel *=q䞽3Z>1Y/Rΐh wH$+t%VmRIElw #%ę2}Ę,|ߊՓm]Kn,A ޝqu'u d }m?L[uqv%G&Tѡ{Z$ImaJn4ԭ-so*[8eEbVB/lսZc<тWRI3s]oiiI?LOPO*I.Q^we;+۴X&߬Wݝ7{ =vBW<2? k<ח?n`u ,RcLgr8Z lW]խo5)\>T;oɤ䮏˻&[lViO)r HܭY!tDf6#%9Ns0O^!Xfھq^AE{k,+FVéV$nGT'{m:h%7Uc# ;Ҿ'4RK/+qu[}=>2 ;rp OcAyti=[,y.XFˏsFy6϶8Hc wׂƯ BhK|m%J&zy"m=岶fϘ ]20 *TMt&ڕٷ-OJ<; ƛ=v[.>|' zI\/,Qo\{zqYvDҞ2]|р2GO=x K˻q(F:#~\=Ef")''tj 7,od@>l|qֳK-@m4c\\'U${Vε uW\# H4. sOZnJ&G%q\+PyعabX~u 926<6=ԊΒaA%pܮ`_g*C~#&XBl߮sZ[=UxfvBB3W'.Ql K dsn+{h"A%l-6؜TKgֱm I+s"00IqM P8_%X(cr~?#s|Cm-,]Եxmav~#0s~uE0$r"nyq֫[yOipZ&wHz (M2ѥs=R223~\d֜# ZaY'r}J0%<"sHӎ*9K'c `U|s$@6A,y=qj6Iduƽ!w%w/pkTliY F+ߗRGQ\* % ]O1>VZ^Ė6pZĨ dk]W^ሌU_]_M}(vW9oU*&Λl`[:yFA^%kq'X@ Hֽ.9f+#83dOmt_~FQv-𭖿aacΈ@iJ9Ҽ~ ͎qޙ {⦵qi-6Lh$sy OAh:f̰Dr9'ZxyC EU{3ʼjIđH3 t==CZay\TUz<+>%Ư&1R~w᷿o7*)<^8+qG{H~un~w5 d !HR sK 8} Xd!g5 b4]~/[\\K$XVۃ?~=*1:ٲcqx[Ma!uQ!LӃu]S& FČfnxFҴ&Ik[H x9_zJ"x7# WYƊ[ ҔoM?#4/6p+q:2 eGi'a W:[SKh[yvj8;k&n<ƂE0m%XdgܜW+HJ}򎇱,J9>AԭEYU ;N8 zYQajLƮC6<õFG8 ^?X16X&Gm[q:iY Ra~%/-ʱ GZY7aI5cNnu(.-$VޙouxĊRXEm~>&D6['KM *쁒]Moy?Jݳ]2[{UHC>ڹ K~ 7R˞pں_^aس+wIJjȤC 疑$.UˀF=?J7HoJ YʹUXed6 aoJ#? b>cs|ʺ^η. !'FaSc&]'ܪ5; abQϫ-x5 k#< 8]ogj涞W޻p;梬-qmE"ndg @BHکk:ZݥI,qXsQ]CZӭ[t;|v_fዳ]0 ÃY!TpH(4Rg!O(i IG8>wh+o!罻"/r#('T8$gIs*VS]]:5dQ @k i<_2>Kk-uk);.LY;q=*ºsCg4M|ˀnF6;)9$F1^s2ȅm`6H,ka^Y4e٦"Q\x8x~Xy^xl#[Uo*rX A5!%߆ty.aQ*# mm{b!]kc:iEj(] ?901j@Jm*;H,"wgG^[#Q-dOD6D@ayAh Qf&"b݁s^di(YwG 2喝Cch-ixI^b8򑞾1C*vp$JF^y+A&a==*KoFMCé%N R8>ۭfėoKh4MB29+wM3F$ٹ\lP  30Fz⹻bUPd-j*MJZ[v,~C}IZ.E>ƈ!ʖS<1 ;9tՍC.1x =MvNPEڢ7c$l*b6? ⦇V{xlml hE8RNߝs ̈3FBHA؎FEv Whzvnw.ݨ\ovA#kN-vCByU-`Ȉ6!,~\4 YUAS FAT@P9{EX:QK#KIž yy)./w44EF?K@R|r?3z4U=:-䋾;K-v:S(̬7dI\gY.v"幑EGAefcdnsT|4* vKx'̎Ӫiv@#L%&ɨAs)lx5cw$;Q0\sY-44H$:mpAu`1;pIv5xMVocHJBK,aR69ke V ޏ [ 6NXHכB-5d[ٲx]#8 ?~o/bԔ4[qT'zπ|/a7Sأ$L${IW8 Adz՟>R^G>%Im eRX/~bN@mbLs.p,^?vqly.Y"`qrx'z8a?j*J6n/Ėv_,9-Ibߦ1Y"Ksqelb7P~{mQ~5#oJBM@ I=צ{$ypEFp>$Cf laӯ?Z}=IT!e{Tqؐ$=xMe)]dZIhPcs*HmFV5st>Q=T;3ZԴٗ33[jxzN mvsn4"5KQ[4Q(]/>_-[xMhoP=}+%$9bKC,@Wia04SUm$Ѻ 沢ӀpJ8ZΣ⟵GVlWv8$ y{#ӰH w]^r(1bG-=2w%G~sj#FEG+|KQ'4hr7J0mp}\W/o'7L\{M[,nr DێqϦj{)ReM%';IqPN/˛nQQYב my븎MW.uխe߅Lp׹fInEB4H mM("kxeBI;;Oa'vU×Z]I `x$0=Tln[03F6zgj3]۽&MUB4Yl_H>єhBs=R0zfz\sYDa'dVvx[X6,_*̤|g?\Y-DM$yu8qV=%зؘ|-2$rӐH#WlA-;()!Al 2ʼnb-})%#[jیsdQ0K,@T-)t]B}CO '|p>@-3߾1X߱.7[nlg*(9 V5Hȉ9.2 esM_² ˁ||$7^4uX.!<hʖVK$0[\Rm!\pIn)sؓӜ&&dŜGEM ?.FxuJk7C'N G˭BFXݸ'֐h9Ց۱X̡eh`_P 9'{*8?Ŏ*yvhbHԆw߾An1!Ivȶ {G{] " ܮ yǩi.]Hmi7遞իb6d挎*Fy ='LK[}=vɿa*'pʰ-osywa$mgGr&Xʁ&v$[f&<{SKĈs*Y\{k.pD&\䮄+ufM">8'q[XY_vg0 gh>5q `z曤ϙRH7 l rΚK]M#Uҫ#=+[ ŏ5^0/psկx(-~dwHx' 䢒Wi\vOy9bb#')3). i`H{#y,ϔpp}Y'4?t}Z7l큏* '#i%Fqt89+`On-Y>/7R6Cϡfa|9x(dr#@I8F*ָͪxR)b0FW= !i37Lه:o9^1? /MOk_.%⸎q#*\=@lr:sk=R $yKAa2i:.^X$cR~a9^r.%ag #IawSְ5:iGVh(Jjt-ƔyRPԍpݒ8x<6}k#[F]bGG=M.w&;JZY 0>ŀڰMWQ4xUUX  G^y{j3t~ҷi)+4$nBZX<.C2D@ B6$jAXČ%( Pyl+ީxV0Q$sp!I'r H: o>[Y74F pO5S9P6J2wvkKvy_}Nr2x;p4h\4A ׯZtXvviw,"71l9asWt{q׾{O]>]Jh;1+"XuAZx,<}w{]O3 ܌ڛ# ogrG?vl Nj#Ȳ8j7?gdZ)N}?HdeF-h̓ԁVMCi =mE;v-,qwr>l#v*Yuk5g*g>3V6vwV."o 2buxj(_ŒD)IcCT[-`L9VO$Gj<ʼn#`Ce.tfQ0RrQçxI0BA\Iv R=*1s]-:>qP|Q&t v\'U[=4vxy.d[gphڇ:'{UA1^/p ʹfbqXsFk7L W%9#0U#emr+w92:֡fhZ1y3ކgP\3p2;WA>%펭鋧Y>LQK"F^W߾ <9q⮥nH򳪝;^$CYsj/qi3$q<+ٮ5![ICl8Tvzva߽y%׈-O 횇aD!!,Lh`1qx9vvwKyZh>c8,HRs?6O|c&迯ө5&hD0 2[{ciq?CbRdmc-%Kb@Rv/x 1\&[PWҮ]_OKTGff;Q鹎ak.FNิI4-eKx)!0$!9![p4uoi[>9K6A+I}$u'գl"kiK'j;<{)5g[KEMAP01B۲'hyjZ?s8.qzΉ%ϋu]/Noc!&2FA0@w,,-މyP n 'He&kYS:vhKhY?HT.$ᛌk2fHS=q& >5tZWrh:O}gsjI6NH@u5wBM.[B6J <'%r9*xgZCa8%Bu% xϘrd gfffC:Т @wg;_h[I${!tevg=fmȷi,2QU1 u zzX.g0cʓ4}QkGe$0"L< a"I(1i5!,dr>Ys'.˱[DI-@%;S}xId0x%p{qyI)$1Ko$\ WVX=TW3K6+Ӟ'"\Sid>duYr@y98皃OS簌M 9؟CAki"KnLcm5Tl3YUr€OA<ݗ<ѠoC+ͶAI\gSۚ[52J7aTw ç SI&,wt:6[OʹJ"ABއǵrM7{t{qQ-_a-"Q[vW*bɵ%.bGHъWy 0BʢHKap2F<`Nhkt$g!bLTcsYMbTZlG4Rssq T~x ۟h8eY71(^Tg'R+M+2[N# BAOUt562"sNGz*? R{!-fĺ ִ\ۍ&r d&X|&a[˵s;ZBGV;vU.Υ;/m$OO^M[T+XYA',xrqִ쭬cGk<$GuT9#鑐HM[#[82{r9kml!б2Ig)9K/Np4:t۲!$)j],{'h8 #P=0), }3CBn;z|hCOKxy$Gw2F@۽t.TXm[IdTC9c QK46-ݷdsIlV6h{y%Hiw<`8wy= Lg182A4f+?j83hv:NtG[pk%u I2[YYNhWW>{ƒ$ ̌d5~C5s5S[|j٭ntr[rX#95| XP{q\Ep"B FEtXԞd{[%Di2>˥N|Rx~-;O/t>]2 J*Ol֗m9|;$#c*ݗ6PpyЯ(@zr?G-'ɽ;Ǻ$Z Λla(c㌩q}g4A I_f7?>c {M5-QӭݣF;KrHvDbmBvD5Xo)x|v\^F`hydm98x)אƽl5YTKuϡRhdtOxֺ_ 41d=6j͊8dr?ҵHgqo m#z79>ky]Wc #'$zp)1tԬF8*liqGhcH{8EPD5Bcd*N HXu޵A/&f??y,=IVY$a@vXǭ-_VbdRcʊjHujNyb=~Mbڬiez2P!3m~Dl# a*B~l W.õKTy P#Н7;y;]3Ƃ@J hSO$l@# p#|5rFydaė.,@8⡒+9.TG4-N@\J LIXz[-ä 1%ԤmXHkQ.0#pǦMg^2%1YՑ[ f  7߼LeEY#$}99f}ҧ3koO)/)p92t;t1U_3~iJwu2ˑq:5mZ3E!/dkNFpNBq]]Ҵ+-`kmO$ʬvWP0nVZ1y\TF8サk}f[yLSr+gapzk]Eo޲ 5cg PjƩڨY*q*F1<+&FX@G<&iu D.Ѐ+G\I}xv=>MG˹mw`X-ru?7N5`nut幑WÃVu(+hФĬ0229$}qŋiZԄXOkѵM8i[kE1gp >iϰ85 ӵO|n* ~HTEDc^VO.t.˷#0If fPJ6 f>7oyl'PBH<>]|V U `98YCusv'j"D ٫ôۑ=C #r~\ڼ"W.6rC4kgb`?+ӡ{Tr-BU9hb$IbWu GkJg-tF,dB͓>T;q9Hs{xkcȬ\y.0$ d`p2;zV5)VFPMyv#yFrC!D89Ǧ3],n.5HҶ,y@<]qv^XA:[,eHg'*8tCqI:Ć[u߀lzGBCƳ[Mgu A%edclO*d#P>i-ۨE;Ns3guƒOk5:m72U ݳ2HH$YUm*~]Ʒ,S]N#\i٭Ge`7+9Ǿs%S*@#fˍ=f=:K; TrwbO$=7{U -ȒDr\e8sv6J獋?sy28`3MOjlϹbCԙᶎܷGqɤrz-<wO@ei5<=IgK+6Hg9QpZ^$ݑÅ'Ua,FDO;kɱm[97rsԱ[FcaB ]ٓ8\}' u=K+;Kܴnxs*C$F49 *7$z`~5R6_2hmZ( $Փ&Cm.㉒PŎN`Hs9tKy.dfEÙ7YB1Y&u*/9Җ-B)wHb(Bi^z#BKKnR%@[ʍ,0t$8m'bi\ i' H_uZ"DH7-nmU"x䍭d1TzLߞ!i>2@B7!%#WocF[a uĭ FT;<%`h%ķ36V64@(L: )#1dϫc,w"2& !giʂXg8oZM_bV4l+#~=J0#pbI12oV? "mاX:6Nr}=QYf͓ۮq}ty,x!Sn*pA9ެw\dކEͥ+y ,Y_jt- i.ߋk"ZIP*c 0GL*XN,P Zjh)"C,c$8 X3MoDdbFIć7ATWpڐGR.!'aledWW=2k{.,pkr-F<֚%G}lWPʥ'ePms˕lsq9Zk(f# $$=On q$́ 9秨] <ۼ.C31~Bubܢ;*JnMɽMIgnly\\1Wu'F8h.ft sZimFb@5}r#W!RR#ڮ֥$^nCӽ_E-ԯt>Ȩy~s&3+7T\[O%!?jE s0֞5h^p y m^ }*XuKo[yc#>H)tHɬ3U1K:j{.dkm͵8׭/d尢vɍi.$|g`ri'XSd'jE( :RiixLEQyޤV~ˣUO jgS~_M/,7=b2H<[Y֎}s:& r3Ԓ2O1UH!GNJ;ۯ5b{t逆fY61rks {S@p,1=?=.kͶ9-KҧWl<"kX'p @*[+/솒gx )w =s2ArhwQ \XUT)=Hr]wFp ]|,LjlOᝡpX=J6*+ -A?\fj7^Gnܸ'UVthb𵦢'gKetۍqd"W71 ymQ 8hWzc0\b0:9'q(R^3~O,v֚KUd8)ۉ=@$ILzBVI?W=ugEq\J2BK>cӔ>#u.2Q ;HbpH<w'8 f.r1)EmxVUǺTxBx5>sO(P#H\+GL-LJ݃[ 峰g## wIbo'U1^N$u^kInKJH&55ZI.$?5cMZ 1frG?&BhA>U M6-*cks/SYwcQ?*08vgx˨A138'|# Bw+iW-3ˆ_%z' oikm!x^ -\s]Nx*.mR>dB9V$F@r@9n=B?;k~spT$ `KGMmVKHb[E;ɍTFo}*=:|?b.omqiy.P7g#gVupiQ=%ppv:rs]?}wڅԗ1$P~RV-p=wV g#H/}NQ}wR-+ֱ2 (۰װj[-h^3jJ%bv,q)lj>d;\\FMTc*@ SgeroElrl+ry+b>TՎi?t˵ʸ1v.Twj׶Nmn峛0呎A.A#`xwEjDkvC mUNPTq^OCk_EZ>ɤr#Z+[}n(4@8pOޘiDxd >R1+V-Qg#GqfrHɃ9Q{ڤܧ߳@&0{5HꌫZ4ldivy8'?j|q248Mym,ʼn v1nMqsGT Ҥg[ƒ\1S {T)ZV܈9bv|`9+ ě#q@s 1WEg@܍BYX7F'''xbJ[BVLȶY)_3v̻AQەMDjO=˩YC;/ޝԅ=~|N),9EJi[C *(@5v%k g9T2X.dr6Ccf1cg%ٍLpI5:VSSnB ԞIte<#m ;VŽ̲Coe$6LY wӤtȥd[ي !2g:v-4HBIJyUF?3W*h](G'ӌ0zۂ:ĺ}9 r ~#Uy%\cVzP}F̶޴҆Nycn{U]#Myc/1ȱU9< $7H䤷'(Ҝǯ\FX\nJ0't'EK|!k(|Q2_fێ'x7s:"Hzf4ԥ&y] ^y4Y#SK$I+59`'2 ڮ})irg ?ސLH>9+сbI'ڵ4Rmn^[HI n'+y93ZckX7n9ZkYka *=j_k}=V<)[]hiq=mqď[VOܐG< `j]8&1=VvťiGּ}QS9YrHĽ8QZձ>*;QB >CYo&E3)ϫId:IE<`xyZե{m:W ʲ'-.\MFۧuAj֧:D O?|LU)Wm)^2#UgI-&GS)Z̍m=4'Ex(/Ő +a9wrfчc75Wm~"\`Ȼ\՛PY 4#=F?=jjn$Ae@ tկf$0x[~\diҸ7j$z&֥KHaڊ ,3!9 /FS>7"W2;9?8BEʠQ'\:fckXBIu:̶$TeE~k8g_&iٻcg8qTOq9%^--Z;K{sRnduۈՕlʲq֬YwkyLBcaUkceH[r[X}sJqGS+) #k6FLA$-Ϟ+ ; |[#i=HV~ F@fy\!PYHBĥW/AsT[&EZ·o|ol6zyӖ+bǎ@~Eh,-5@}nco-E@ŠN7GqM{W>OG2SLUIg+xy&ɴvxЏZѣ@P8:jR:#x!O<]hݏHB2:~\MGGu }g PfS֕qm"ietyȈNHT݀OuS;,줪 ?&ԕbq9]CDxH: ;mKTZ?bab^pS elVs޾|24P\Y\7Ɍ.N1NӾǗ=IZKʖhALq@CjF+*[ IY $< {U:՛oEfJH/n wzLlwE>v+#X@`vvh$`8u*Ƨiw4#)Ay%Ta9'jO ZL0\ k[` .EoTO1sGosA5i]pmG6:^l\}Ҭ#v"Ge1c&qfNim֢%3 2#VxtFcn@; 8\y5ؠ-սO1d21'9 {zV%y'a+  )~U$G낱 5sOfxEk6 Lc-Ѐr?zʥ$Sں&f&Ev.mh-PTQN-I?Nj67.ogWsU픬w0!y%z!Fiv_1Y|ͳp;ӫ搓ޅI4YlK.v1~hzTŢ.42Ub2Ia9 fKۥ-uz nfֹ{kdsan,Ϊ̋]۰@#>ރա6!!uK[e77Uf+'W{;$eHp8=f;Ocp®0yX@ךޣrH/w?d*"ﭴ!49-ɨ4w1b,d+1'ϧ25L2ճTvO`;X#=™ns?C siꚬi\ Qy1>@}dMo](MPBU˲`u eЁf+26ttfؙA(2_AӞ~̥!RWURI['#{[ixCAm,h㔪*yei7{I[c `iݷt7!''Lw5vlwtIyU`E| g ǰ BsM<,9Y]r=}iVny]db1 +,=GcQhvEIh6n%_!+ #X[Lm=̯'P{q֫shL%RB?xFCHG$dbxx!Cld|P{s\Jzhrc<_\o_*  tdCu%c̞[>nj7%$Fvy] :c uZri>xUE''һiTmc";uF$G>Pdt5\[>X<LH%aHy@ N\i:[$r+Ⴏv|vF}OmO2{J%Hf㊛Q(c&Bg^Tgu}elD“S<`*i-uJ'«O~^p88x|hv9ˍťMg AogsqS+,PVEͅ9g4#syKyrB ˺ߊvEy}1Ck"<.T* 33\;_c)>g`hEmp$ o#?:Y g=O!" p2Xp5IR A5d++\m˻s9QM= pJs!I(Oqev(.3jF)$A'-"œ:'_~jgm,).d .HZʆ,n4`Y\39P~^@9#54zqKr$b1,$ 8\tK%V(3kug!nY |iFC9%F0O6wWtfLEf[֧TgIJ($/Ҫ]猏Zտc,쑹YUSh銦ҖtTHꖖ5(МLtZ#EK;S)ZVZZ\"h-uF66qx85sTiW%Inlx8epqy?ˊfv6[ƍs3W45H<'Ͳ^GmлYWnޣEqCY[=&9cs&A{0=+ 0*&Tc;kOi xWzrA_vg? X(]7%G;lbiuw;ZD#f>D^(ֱ$B Yۅ^ŢmH[ZGMf޷}IW# (Y#Y XJJ: ѪKhd"ػ8yByQL $zPE6lmMEP;\s֏jrAy<a? |'$ih'd\FqZKo\;`_6o o!2_U;uleror =UN[O"d*d5^6!ykDWZ/`3ZXlj#H_{<qY-cīZ 9QDֵ-e +uksǏkns`o[) 7'f)I@=1, 5Kn`Ec@Q® 3_컓R6B"9(NOe`L˂oeP~Ics럳Fd%Ҍ ļjҳ|E՘a؜eZQKF\i_'9 xs7$rBo3ODǵeC}DAU 2a 8e?+ݻ'*O;9>syV:X)~PkM-DP%^%V :c֨O!'-H;O<'s+|;ZϭiO2)I74c_wV'+x6 m#cАxYbK[!`' ¬\©+ǥ2)rjM #8#Uk[u$ppJFF"On [" i'j lQ 1SY1D1FiW8_9[f|mvۈ@1$pV?Fcs'妭ͥڋg1*2+NML/Es4k$u#n~D.A3[yZ}N R\# +F3Ԛ4{Lv"J? ~+м;i.$BdH=>U䴡+hrUĖVMŴٵҟ{rrz >olmq%nTS YWƣn\ZH$}ӁI89VrQ]5K/M&o}aYluhB#nT}F$NJϹԯu =qЈ Lp˽#ݖz?JɵזkMFV-qc-Ϛlf \=t+Q"&c戣6p/HԼ:phZfs\7t0J[z-t&{e, @܏ҹwЉ\0@'}1Y/oo0ܪ38'㧽{.+SU%hxaTB6O\{dV5L,1 3}?\ ;ɂ1fjR<:ka[eHIe>d=9jy*'{Z1BܹN7rʧ<=){ٿ^/e6ȡcLO\ö7&*S0A.y5ڍBKKcpwIHf` n@Z-?7sf&wrN)ക|XgdS\mbdd>Jmm8 $,SMӁM4\] j%⢻玃Wx'deg[$gnU)?y6{m'Hnm߲v<Ҁ$QrT烛GF͂B.iR{d|l8'j ek(cX)b2c*En$6DdN881+(,gĢ2|1*^}1[z&y0B[s`(<^g%rCGvbhIs_Rg>vMgz 7e.x瑐*ƭci@UYʸ;<Mɯ5ȡc´D8URsq# UKW3h.aܛm q9f42poعJuk_#i 1d/p@YJ'<(;+?^_lvh6zRX&E m$#98J4.硢L>sysP[0sqNzC%֣<1%)ĝ韩(|4,qSq>Ҧ[xnvOkr-G8dBTH׮2zO+eԛ4-źkf&S c=9kޭȱI 0QYjCw<+`ƬDɑc.F]Q~d6ع|&xаClğ:W2;԰FA4!yhPNr0jAr$ʡ nS8G',ho) Yc'F=G#=ZAٴvlյ {{I,:1X-ܦ0s qU?Rՙ NI<4 7FNzju)GrioXmʊx{{WAGL'r$9 dt$uXbmB}j0V-h}dN$pDGa6FLcȐ݄N0])970`z/5k+0W8}^oh#1p@psׯCXCOr:E<~9=k(Su%DSoSGY$9>` =qd$r|ɢv|6$p8'Ӷ9Np[8#A.n 4X)XC^EuF1MTtA%%cǦONXG VsqϺxMJ) T(wg$bo.-"dUCu€FGn*]+50nXcܪe9M\T*ƨn.Q6S0U`tKT9~Mc#~4={tf $ZX,3Y,~eb+"տY:(ZPhZs#W'ei<;9]YOIHbz)u{MŒeЇ;xX^ R\njNj-?*> l 3y|_#g@-U7.+o }ZMIpOBBd5Y7bn9=tZqV2@22 i:נm?Wy RZ< ƊP4Rj1<}dΞv0;YbGYZU .'zjKX T ĴþUr:sʃ.{n l\-G-OP:1~&kKro`@lu>gg( 1iK$ڕJ# H9 ?$t 8){7J#L8<*h@J҉2rQ[IXԝa\4vV^$Cs*)"W <q޳`bRI$c}jB,pzZɱ3,dȪcx;Tvַ2mK3?%M+Y3+6Ztd 3$c[\][$rdہN`{+WWK|) 'h:zW|Fr{u==Rd*dH")}U]8!Oz ;񚨚,]29i"+Tj;v9Z]峕hؗ< 1}ts~eǷkX;N[Or>tѽR+s:Q[0Ě,"nP x(Yq#4)|m)*:+GQ5K%rGp31Q M3M{@ yZa#Gk4'M_ʺ}Hw;W,qԜsZʜ%jhzziSZiDT[(VeX9rV:Z[$;{ /ʠpkSxOXLV4e\hҕ8_ݝ$!եx7-d.3uxzW!e%Y"?+;OֽcB5Xm`@'l1TRӷ|3jFkVi2Ř&N1|%Fu՝ߌ#ӯ%B~U̡ȧ5֗6RM3nfEjއ(l|afK'+ Ru]io:Ou|+5'Ov,(Yj*(ow33`YTAQĺ~*p "=*2R,5Ɇ ǿ^պq'++mgoK m弘 7q #5_px\E#{ .y+S_DMB-c?3UMBGrѯ69-?:΍G"piWǪj6Lw `nMAU q]Ftt5DA$%;9=HLGϯ3|Q ;TV M&60zs ǹ$Mv:q[jGE=h%Pig*Dij7E~x^Kۖtln\H~A cYzY]E97]1xQ)XK}tCUͣ2.hz.W8ziNeEʹRJ#!}{sԞ+?R&HB]]ܖ‚3Um'/\n=CYΚWZK[mqm46 {@df{#v"Y8ɲFwlx=zzfmevdrIy|~Y55>`ԧ;5Πc0NV-ivo}$EtۤE,.%~ @c9$jIe9B.s#8-wS\el ˂>V:Ą/ʦ>Zbӿtn5 YR D q3Q\3IY9pv>j<7 "Fux&\B=Vk),4DyFI GEVmܷd,']`m:$d YA*0=+qF'ҵ(.B8)!Fa#o5tT%lj2AY[qx N;U.%k+/4HfU y/*w6OqE1D`dyZdy "VݞZĖPH}*^h[֍1C-9Hwҳakn#T7,ѱF99S֮R٭|#"PHa)}9-?ܴfɌ*7VIJ f =j1 NAhnя{TE'xVH$W/I6OGTKH;V* MsjfTqR^iX%涅;vk]\-Sc7 oݢK .QHTg{pNY+ˉyLb8ɧd/SGIFfGIF89aO1f3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3wUD"wUD"wUD"ݻwwwUUUDDD""",OH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊEٳhӞeŖ>Vꍝkڻڽ{D|ga-=6)%SnJ,:w^tГ?/LYD})3M{!ɮ ~[)j~%JONp`Jb~ȳ ,`uŌ~:"kiGnOXAo|ad?ӛDxAwf ?tOhOxYt Oq}$]Zr[k#!xQ%!M7sfQW=|Yuؙ?-$^]Oq!Ic`xЕjb`UfZ fe yHY f:cT.eYa_9Иw'Z!j)= V!BeϓVϜfʼnP]jPg?m`QZCފ}u)yMJY~ Vlرqj)>3d(z $]>ݷ AHm Vc ;iJ/_ᢗ&VpY"hJZ2?d'E"[wZԪu2e-s6@+A8hН@Y 6'D3qM`;?jMXW$90]X~mzݙjZբ~3 OsDκef~Wh1q dw @ 9Z=,.Ƽq hv`z>mnZK;Y;/>VfyͽOlgVz#/_ܫX 'F>9Q~;fuYOA蝖lWU!8%0ey7`wyd}hAEiҪ%ͅт@V9T߻(:t-/#t@!2{SXƄfx5)k:Z.H x$dT #nBw8:p2q(;{L/G<[ )'>8aOu8uu% %mzd`ŐH|AbiIU+l^!5ʂ,QaFn|QM,?`P d4 }Ȅ32ͻT-#d7rebl2cZ˝%C+,E )yh:~SDhA#>͞|q>rF!D||Dm50Q4%QKԉh E6Ҧ&|LIN"#05(D5$v P ҩM"cE>UGFGUjVLBnM:ViL|'J3l*ZWLNz})-Vm2ĕ;ta}I8 YBR 2Rg7ZLP(C$h;/7 l] 4d m*bT m!ЀJEON1Dբ{46[Lу::vQRUbw1j]jU1|!ʗ+ KKϩ1d_00c"\-s,n>)\c2LN.gIkPay-D&mNjF,^C7z[{OZhzҔNSE7Hآ (<+x%U9R+2',Yp1fb=6c{!_a,Ƽ&SlO#WncX-Y`=ŏBxd:޷k 6GnWGyY)OfgM \PvY_NrЂYhA ~f.|ASLZLCDϙ []v|xыhc $Eq׼""Ok *±/-gZVjg znpy g*v@L0N&n-}~q\va3[ž5ۮO;9׫}WDG]!]ɺ rGMuS VKyw{C% #$.>yy3w-N? i~)&E -_ф# 5*(4As 3}Ə a|3x2ys.[sMD)}0>7JIvz\L7ӷٕ=^wXÇ%JrZ?#Nwtx A@w6nԀzH6dP6BWH!n,#>Vgy'gwPG%ч[1Xy4Xq1Lo 5LV?)0wq.ńiF{%i]S5)]\qZ|Txp֡Gk}~Itc6I|&t& f} jo0RQ7IKkJ }lc:Q+6cf1zKF1w>Ȃxe omHVzcA ܆vFgx@B9DYFyHJLٔNPR9TYVyX ;SaJPEGJFIFHHC   #,%!*!&4'*./121%6:60:,010C  0  00000000000000000000000000000000000000000000000000" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?SL)jO+ʷ֐ d(9 #Npĝ8g@!BrB@dC1I!<8k2kfgwlH$5s3Ql9׊s&_M7; Ywџyo)2{-WȺA4$L?OAY {+>S-I ?p޴O&qΫmr~I!98ΝFflz=RHHARoZm٠xqGI>Q~-VK& C',Kx-yg q$;]8ֺSeymcus 70.r|du':A}S۱fa2ps}k֠`isrmq* Hx緾x]gwG&8 W'*F];pt{?=`Y%d@z} EEEc-Ӯ_?/NWxnO2g :.dyޟ;OWG׹YivBû{Z5]ő?Q[U[anbgCn]2DvlH>ap1Ww{5ܢ|a$O8u7r5?B1y#u@lqf0nȮIZ:CW[g|wmqzZ>ϛ;icӰ%լB"c}z_]n!cɭܓv&\Ԣ)QEQEQEQEQEQEQEQEQET_קu#sES4"II?Ez:D.zϴo?tb7/+X ?P|;ay|eΣom5X!Y&̼10 u_^V+:p~TٵEm(-W71,.' V\wkx~7i)p ^TgoDw3nF! $i4 jF;g2;A` _P)ߧѥNH[ Ȋٱ8~>V4^q[[MvT$mRkn.prsZ̽ p.fI!x#ߓta1i3xrI-˷E#oIFCr>XZ5Hxh@=ڛG _d߄/|I?ǎpyZR5RVf};Ͳ|9[ "wKF7CHU-C-.Yđ͒FPۢg<Ʋ?ԣK};TKvC4'V<"61#(޸*'Όȁqκ] Gّp8s{ttzx$'89. ͕ḓwhFQAKÚ貏|O#GoZI& G {bZMzY _-.Nmn~LC~y]ݮm>ƢDhrC[QEW|>' Ɖr~+С/VeC3I򞅸w :mȓZl<ɺ2{϶k|mo'Rm21Ps=+^<!G}'].t#능ncA%oB̄?خGFҠ1/YH?!..OBֵz|?#(.cQ|~'V/|iQO}>P乌4ҴɪT?kC I`xuyBбd ~0~UM22GrfkN?tw՗56! .%0wNF3)5aKJr# n|&}=Xƃ:;Ek'E8osհxQ\i:o dr[A k".qֺ2Z2o6r閆haD f1ӂ)Y;k|I2pn`f+<B3돓dZEdv3Gg34 zmNյ*Ps\ )#,jw3yG _.`%}^jZly'˲@IHFp`2q?SY"ӄDZrҼ*k/ܹ^\\1BF,_fQ g%ӧJ>ȳiK C{{X e2_۞CGРcn 'tjl`9Ǐ0kSN_qiYi6[#Jc+ gǧ?y'3q (&_#(ҺK]an˥4̛D|^xmo@ 7ͷCrׯ5RSt}Qû6qLyZΛk,qX:-? 8r=$ O?:;ZƩ[YD(?3\^ M~L$ftv(6vnc6b\RO]~mZwb8|C7?EMncl. p p:!l쮚d[5c)*qR~dH5 \Y Ԗw!cߞwk/5Ji$;z& V>lG+G,l%gk > mVnVA;t֒PFcM%sjK[;)<]$㎜bmdBc\~=k5Օi..#}H9swJeCdfEN6:q&ڹ>wk$nj*?\^;4OnzWG%ci|d^Gu{Y"$kuܑʧdt#p;IMGטֺեyOĞ/uSt㷺%>@:p:^fITo}w.tMoZ[ɠxF@47Lޡ1{kˍܞ@UzZD'*8Fo܍mbәmHS $=jO֯hswEb#Mz$nsOQNdiy lB= (~9p:Ɍ~iik28pOWѮ5x"#0f`q9^>BVλYž[x gqYx[Hae3F =y'Ρ}q2ipDF$rIGgӴG0n)>ָRnVgDbk"L4fΖsCx_ks[cIu pyRx;]:7Jg>^}u+h;s<@c>38c`)]6aiU{9؎sN%A>Pztҫ^je2s *#}I-nc2RխSwgacqw>0yi O7N?8מd\=iG9r_oRm&$5'VI&\9rJqAN6sfpvddێ=ޒo$pˌyqܙŇȈNdD@ pNk N=Y[}9o9)sG_֯]r+URm\\D```>^ICFs Hj A9=z|3e kCiGٟ9bZJ-$ZE󴛩>đ&v@8]jwvgͶ3|"/өA]q&W qәx }k+hm.'6$f9 "K|Q%j)u)6F-ZZ3` utֲZK*ǺK,@'1[MC_$c vws^sNbK))uԮH/LAcN3g$QP 0F8 HJ>Fѣ6[䧛o$c#~YŻ8+`(N8²`9u>#4;NGִ{}n^0;=Oz$swOA$?xI 'ݸ/ԯ-gH|3`zzWyqivw]PSu'TZx{eU~ol$vZ7ik~'g*!IϘ_JݢO102NۖՃjs[mPC6Iq:]FMCP)H|`8ȪuNW9xIҮ4ay^r] ]hzy)u 2M#<9= k𮁧sq)&FNz q֭Iu{{oZ5݄ntڻ+Jn-rn_O!Ds$3gJ׼>aS5MS9늫GΛ̲HB hz{ xL+'+5ĮUmh݌ӏU43r_?pzs+~4]89Xڎ=vSO"=\޶|)-td9Y#||o=8R~re]53kW2^[Kl'Ұ*졊$"P} dPsy ?~5?U.4ECyp~^P}x^%`|5x7n&^[@99=p09oW_ ZRz~qW:ĨWO615dw0K0 VZ^ ?pg0¸|a\uWR%hQ qmYགྷS}Gw2ƛ0'#8=6gkO jZqbᣆY8ɇ˺w4|vZGęvI9ߞǽfx-4]zجM$>~CNsyg}wh)`mOy<}=X)&{?"zKK8%MǨHDl2Hq3`b^Ӯ;i#~J]ޏ_ZEoȏg9dnzs MG]|CAOWǞ? HY4dBJNBv7Vڏ i.\FcG9O^--/R`wL~k޿>|"#{|YVG w[ yQ'XC*w-I.,>[!?Mq0y]X֫,ڳb"n kUlģsvLZ͕Osb, ~IcNJCzQK]:M2i%6~'C6vvQuiwrdL-I]=ߊ VOAs-+K-n-<|0ydcB[u^i5>8sּl?Z|| M]A ۱mIk$a]o؅cC/~O\Z*ASۻ#BCuwZ~E1H@؛Qk_K X: 6 :֭hi\)&i3Ds('5(P2 |?Cޔ ičr;"d޾\)у'ޑ6`K:zT)$t5 DxÍ;{a}|~v:W|.Zbx;?N1FHO?ҧKi #KvZ 2MZs 78z>BxdYݰִDL&"|=dCΟnF;g3קnsUEoqF)y$7|~@x<]Ē^MFN͑r8y8pO4WcY8,(䵊Vcz q~Df7z)&'ƛcp~w 0=kn㱛nOSN+Ʉ/kGYl|14kC:Ba$t9w5k jI1#GE<Fz~8jbI=OiI$EhI n'/ h:]}8&X麚JmCprrO_ZD6vٖLǀzd?ZI>'謬!V;*\r0==3V#1qJF1܎^+ϵbDKeX'L`&}Eus|s%yA鎞,5Ig Sw3c;]keլ}7fH>`}3[K7{?iVѼc1"όgӌUk lHqh4=)cw[w6`>mB8-&$.ew13=kѼOmoZѩ3fiQ1;dW1${$EBq}yBmҴ(OqDg?p̎zSnK.O{OG@}sZԖs/!7=_r0N{Q -6 ND/reԀ~J.k10!=Ñ]2n6IjsZޟ=rMu1(yxZDz&;ģ###vV@gq3#Oso]y$ˡ?};g=kDԖmksOQx%O$ f\/dL ?힘;Tf.)w蘎Hzt+]"/3˒GP>rdx6ɝg.K$cҞbd(qۏ5y]'%M;SbN&I{u5_ݦ$G#9}%Bn;VH-G;9d*lWHwj_ s`FI#H^}f6w:{)⻞Q64Q "Z]V> ֱܷMpO>aZxDi=9| gӶh;G4[ yg>t澇 Sy/g{~y%S)/gaWkt_-m8ɚ˧EJvoHX ս/Z%$4p$2B>t\[\d՟^-NMslm V\P;O8 :6x KF$yd:F srO8]ϊ-/Nf]ooPGQY,Z~KM'PK# P3>FӍ[t!JޥK}X}6Ɗr<{g ]=O8<~w1^h֦iP{)"ax,N ;Gen&@h'`qڼ](8e~5ɦFv ObM(O2C}t !ߌ ~sddJugu<5C3;@yP:VB)i# z|GmL3ǩ?>GOPV2ǠCq}+Y7QIǶk+Bx)dH9XFRL8Ұ{J® mE?tg6&e) G#19sb_tK;K ?8]~qk'ndM;$R"AÖs2z"8',?.RS玙sK亸 ' tOA|\"'Iֻ 8HI vc39I$^RNCN79$;H :flulǚcI >q`g3C3w/dLfL.zGN=kw!Rʹ6ǧ9/ .\\8 |r^|=ZG+w{yO8,rNI=k0ACkiv`T?p?ϐG_ޫA$\.RƓT®Cf&[t&HLc&,m CCLJkR="g7㞸č ;;VlDoB~PpE{"1L6Oޠ RԽOj\b0i ֗h8zP1q2>vaeL~9 O ޢTx~F0Jғ$lޘqM;8>ԥ8?BGJgr#|`Mtڇ4}KS]2 d$DZ(HB qy>^Zuj_+ijys$LΛ0B1׎5GDQ*M) ;#GUMP/&2J8'φ wy$ȑGOA8ҷ,CxrDQ(򏱠2CNoPmVxq . I,7 tP^=gFRqюOIOé"ioDqL~x??>3\ɝIp;o튇ZFyfn|h94 5n~t$dc's\0'Nm3fy]لd *}\ʹ~\W)sԂzs5(Il/-nr^2Fp(9j1 H0H1pNkMsOKMݚ6>G>-tHt~y5 it봒AjQ?Br7t6Mkaip29|OBF©w٧5=6{i-Ȍ ȏv]RNNhD+7b +G/{'ʒ`L@+R_jvd*Lj6g~8?_TEoH#PlI9=qJ=2lIlshJ-ҊF )' Y*m! #7?NkzMLf"H,㶝԰ ό^4>x=Oml\Iq7p{ܥOQPE8DXIlnx'W7G?Pw;5[{i}m2Yc(6>o_ҹ^,8,0dI1#>^>.JEII wuWdA,2WA:V7-hbG #zsZ!G$B\L*dD/S#=*!G]:)^9 cn$9CG{h4xO֪O6&Kh[Hb ;tL5}-spa=:J:qNE=f;&$X\|KAr<*GH,9Y0yP;$1$+l*ɦomf[(NF?*|7swki%D# x̊!1:mMAFv?mR$Iҭ1i, 21噡,PD ޷祳(Ik9صaiAI3[B(|1LŤh8 f0|}xxW4$& gg^5Ӧ[߄F:q׿R9Nqz~!,Kcv>M2KHGmK8=3W<9q̚>to t@+ԢY|lP"$ 'rW"gftJE]~#S/by.-0ߗ&qo4eEvV~wo;+z;0#  91kwNI޼ A׹3/ uo?l I5+q!.~@HO}k+Mðeq̘i|-#Uܪ̑H嶙& c:=b]>c)p Su5d+q=Zuu;FjKi3DsZov6Xnkّ JpLy 8ϓM{Y wZZwe\Ab r[<4ay*:/ЗNĐ͜t'5iaʹlq7 ?\`Q+OQt7DIq}N98^ԗ2 ǒaNG-ch(?voa-0#Sc<O)0^%9~hw|ݾX F=s\`vZkk4AٜqX?fIoM);WDs_t+"$5䔐88\ڤxd܄FOoiz]LP`$q1fNJwZBɞiSά 'g~_ m'&ٱI9?p^_\%Ҳт|@OWJokAsv`o$8G>Y|Sq3J$Ȫ3^[85]Rq1*3Lskc|isA!O7H2@L /סZT}W$Dy=r[Aڲjt8n*F*@^2MohI%؂ (!9ïZ"ӬMwmiڃ˾dd{o̟g>@?J'p?Z ҵ z ]II: HK4Q̔}Hyp{tR=AK Q&|ӎS=ހ M#>TG$PTF PБd1B[@= H XL>)9⷇ #`'VMMβoM  ;=jyx Pa~R~80cn_Y62wd s}kc.̏yv{zaim9#B:q5"s$@wԞ*!8 t\M,n$I?g j:#Gt}y Fijz.kS[Y$? (=5kNԼAir-&7NqjhvvsyG-Η I#$C?QӁ]YEjRg?h %\Fp I$t^ ٫iqNwh0[#H @zcWI; :+uhi #ށ00n?NxByoa{$Hf#FjXLۺ8MWP6+|@rW@KK[Ƿs΃0zjiV#.6Gn s Z˨Z٘ϛ$@ !z}p>N^"4ZNY>bH6N ie"IvK;ƨ6Zԏgmso'$r98UV5]/QVe שz޵_iKeg^;{Vi[#qo1Zz6iPwO8ɀo;Z-|=\YLm[P8 x}7Nu'CS;kNufdjx;Q}&@:aXϠ gh)a;[qczz=5]rĚ:kk[qGOR~O?4.OCA}uڶN* !0;ϐ g1p;z֐5>Y1FwULd;`UX&y]<2$>Ug8QE(((((((((RBF@3\X弳:eC1+sI sfv 5-#?pkH;he%viu Es>>Htݦi!@;l_o~b3&Ȯ3[Q[ na9J6a'icŴ~Pw!ɜZӇWD&Ԥ_*Y3c ɞm e-?:www[ky#F/Sװ嗴R~iOV++ ({-Gwn/5X-dN"I86@x)U-woxpxuJkibx7 ^aS-(Z\Z/HR8Hn$ԣxK70 ӎ߭jF]Mq#Xt HmtۻNtcg Bu.~8M>zs6Wsmzy`y>ʍ1Uq,ɡ5 Gz}1YT'S.0Hs֒%X9]:m_ɬ[L[i?$  sXV{ۍ:(dĒ$C .aNj[J7= 'ԏ?VV:u̩oks%͸3" !y>ޝ{xj;UbކWAgKX'l BPsZoYX%'{9`pfypz}EihqOZ" O>=@9F28I%ս,rR?0tXzR4kad.jECK067rp=A?j e)ˢ&HOqDvz:8x#<秦3T߼0nf95˽rh2Bp?D#58I 2yy'޶oY`bvUR<0AI䃷pbіWKt trbaxLt랤εM٭1g?nJUG$¤9xǞiα%[Ťx z[|?; 4뷶 ='$#Б^_ xn$$w #Gל)U+f.n :3{9|q5ixó=nWq>;kȒ;ۄwb<j..RA䤫ir[xxk0tOSv'n;p>U}'Eh{@aF\s#QPӣ`0yǽz{|Y˶%vu:k)Q֚Z4}x:{3f ٽ̄w$c${ɧYhC!h8'k׭uM\[D.Ip{f.u%O\Q~'$Fu_}G";pv<}6Ad.⾚ @D;CU yǗq!1׎x5L!Llo=1$'~=}qSpɤ][pI9 MkZկlfY&3d^} ӟ嵙Q3GLN:~4 YF]w赟jRN]jG JNI'ķGqI9kquG 'D`&; ci6A"98iF%exGXF"`G&] ?,^XGKnC/[8#8ǰ톟_*hc8'qҽRh+k. ( 1e{V\5ݯkws*g(Aljfg(s@"[l ȹJy%rOIlH&鷪eCT`˞4T=c.cJWi.'XU&hв!ƒzҹiߢcg)1%ea%oGl6܁_z%Oe7wX¥o<;]rdy2r<NE__;y۠sGҲ|#.Z$Fܾ "F]9=?ݯ_𽥓Zfk޻Gмlʎq]q-<1d0 g?AM\EpRt)M _C+7%tԲ;np #~Y@ǥch:sYOw~+H+9Oumס.$i$y"'8^{osռgMn:))i,:z`s;o 1ǧn5 eZIus y-Ę/0+ѵ ]gD;w@v{?|2!'^Ru~մ0t멛x?V5HZ@$Cr;w>%1#Ot;WV13t&2+:HldX _ξ NV㭙ӱz5͕w6΀82F-JT]bo3H|=zaOslnȷG'-LQ2dp- c^:WbtQm.ŭo6:';6yӚ ~,g]F>Xi q%{[im'rCiMօߌl:=Q) C~׺_\Tv92FBu5~H):go<7@'8rKO5 tvLc5mb$?py8pKZCO{B@{u]ٵHKp70ǀoW]rn\"y n D7\oyV.wVP@I)GzRql9lѮ PB6>13Ӿ*"^w1Ɛ: ֣}F/6( |: \]}gC*GぎN8)bőQ)BԚim¾)9#>&}_Y5Mh2Z`>rppj=;im䵅Rd<g<\i ۠8>N[ފY4-"kf~|9dW_j0ߥ#ɹ;S]t.O%Z nCS-yǩv! {NJuk[O<G&pzg:5u]`GHcSXMݍń^e2^xqZFUrȚIOzC3EXne<@\sژYjhG;^iz~l ۩7/"ax^}k_TW{h^ߛz \[YDк;[DO8a]V2ZL%̷s'Ai=u{WktpZ_lI|18Xv8tWKc\HvGǯ#RJ>&g9I]lQq*և{Ʈʖ Y'cg $$~Fj 艻hF.?⣟=R󤺍 $~9ZwB |H\g8kNLZ\ϧ@FAcYZsn7wki6U٭'{ ~YMhֹ !-hVցiÄ%`o=G'E,ƕl(`DS:Tvt=R e2 fM4-NZ\š"#j2@h|IG(%09nʨZ"&pdQu88^{^ Q)1}zW#RGƚ\wo#Ki<׷NxWTN^oq$`^i^O2y%FH BLg嚥#FסJQM} qw:I ŚI30[Gy995}n<[\9G~Ժ Inxv`qb(0O:=M2ʄ o`zUyxBɴ=Ԗ\\IOp1p1߿٭ ަ;ΞSx!rrtk};ñ폪K"|O `,|;HceM GqxٝW \pRjz鮚!m';d2td>ʿ5 nC?g :F?;2~|ޒ0`(|1S{c5d}73qߤ`>݀WNtס+-:QX}YQ@-4= 2|y ļ{t{(#WkNVHѵA$?"]Z2B?':ֽu"0D6|'^m+oe.u \yA%#5{ºcQg}9 `)IoiZg^E+mp&t7d{Vaͥۻ'^Ao$Q{tlx֠w҅\H|qkkYnnd?jMϸ+exlTex\Ŏr [K2Wq4]~8#Au[\?ՏN9@Gq{kᛍ^kF2eqvvW$-.2qui`ک ZswУXQCwa$dG0}ן|[U^6VA(dH$IFגZl|Wt8Wz>CXLyQ]+MFKt̮x Ils[=뙣KS/!~?ˡ X$bHti$ 2 xաyVj o#HnS؃ cKFKY#A.2IϘ@=1N-{OW; A7 'ێl-K]g!;/Ĉ?w{L?ܵ%88')8xHm!`ڀa ԑH7TA9ptbɏ0ݱ =]rB&Ƈuy-66q˰8/m4IHy˵Y54.q>q?\5}i٣&ahK )i)<݈Om%ƣD@ 1wF+:{.D&rpzAc jxC]F,3ZCy:yI.Vb5R(q^3HQ.[H \F #dʵ`g=0H%pFG$gZu} VorXܹ7|>vÌzc˻,x1e8<_$r}+NP#'w1ߍy>mx}sVM?K&Hz*-MC{!3S#3]ThI=WTSUϘcBDyuv-$QCȗ#Wgek2ȖxJJt'zTUqZ_nGnQubi-ʺR]Y[yo8랝d~'@?ƩNB&H8 aI\G">zVnھ:{ AH.<"+ZEyѱ;Xq\œ%&"~l U#ƬdH7IQeʙrVw5Pp'δ`)`̛P?QUSN(G\ҕIg^EsF naiSZ QZ(5lmL+\ư]Ӹo,l%Ϸj:fq,Iszcec~0TDg DbprZ"CҵYD]C\ui7ҏ.'󞝫XMиq*`\QEhEPEPEP#|m4#1cɬ /mjVR8qzך?i:ob/\F$msWMA 4!LC{Xզ8{׺_)SRson.8؇_»}IY+ 1CeF9'q>M궤e{tq.p'ug.2\]?Ɗ<66vf}jimVAmF:9F:g9!1] |ïa]tK{$[t#{`cbxfYy%S!<`ޕujSl4;;x>YsNiOQa'>~WH3zS|UYè&;,I!ުn-N 󣶖po?vj* m-[-mB)MF͖8m+spIJH.5!}%!2w-MI *;-<6RV7ZI~c9z]NKõF{3`lpՇ $̎y$G!n.^UL^ lI0g$#sӶ?E4ks:S9I}iͲi&.#$`>u"|COe;ȑ('>oĚwe~88\;3rk*Wo`IR!qh~H8sZP8U$z~F=DZyt<֛zZVQ&=s\R[}qA;MM]N_6AOx{0}OQԧ-MC }ɤ.5 wHJ 00;`uϗeOt p~:7%qD;$Q9#'=zF+fwoQsMGc $"B<RЇ+;Chn.nd)wcu̓$yh\={V~_8C0pO.,DQo R6I \H