jhzX o&,( 40o&o& prefsX4!Vo&)  !9 Ep | ) author Dave Winer authorEmaildave.winer@gmail.com description'Picture catcher and caster for the Mac. homePageUrlhttp://flickrfan.org/name FlickrFan releaseDateversion0.50! 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`9 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 GMTx 2Genevao'â%fBLANDmac 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 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 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:07:02 GMTWdatatablPGLL createdTue, 30 Oct 2007 16:07:02 GMTx} 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_ GenevaLMk+p LANDmac on archiver () Changes 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") 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]) file.surefilepath (fdest) file.move (fsource, file.folderfrompath (fdest)) 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 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 GMTWdatatablPGx"x" createdSun, 02 Dec 2007 16:52:32 GMTWdatatablGLoLo createdTue, 30 Oct 2007 18:56:31 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 GMTiKGeneva_{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 1_3Genevao&%.|Y6LANDmac Changes 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. photoFanSuite.init () 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) bundle //do maintenence checks 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.flMoveApFeed) //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.flMoveApFeed = clock.now () if not defined (user.photoFan.prefs.flags.flMoveAfpFeed) //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.flMoveAfpFeed = 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 WdatatablG$$ 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 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 GMTWdatatablGÞÞ createdMon, 31 Dec 2007 12:25:44 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 GMT1_ 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 everyHourpTu everyMinutep` everyNightp{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&  ' ,fileMenup7radiopcuserpnm8J Genevaû̢L2LANDmac FlickrFan Change Notes 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:$̘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 GMTmdY GenevaUC`D@0;LANDmac on checkfeed (adrfeed) Changes 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 = tcp.httpreadurl (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 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 GMTd tGeneva.@o*gzGLANDmac on checkFeeds () Changes 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 () user.photoFan.stats.ctChecks++ user.photoFan.stats.whenLastCheck = clock.now () filemenu.save () local (adrfeed) for adrfeed in @user.photoFan.feeds try photoFanSuite.checkFeed (adrfeed) flickrRivrSuite.deleteSmallPics () bundle //test code checkFeeds () WdatatablGf\f\ createdMon, 19 Nov 2007 05:18:12 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 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 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 -?GenevaqÙa6"`LANDmac <%linkproductname%> is a new kind of RSS reader for the Macintosh. 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 Mac 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ûq  $0 CO Ye r~ feedsPageb imageHtmlPagehpicViewerShareFormm8 setupPageo| setupPageOld}l sharePicForm(tagSubscribePageupdateWhenPage0VGeneva 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   folderimgxmlimgVGeneva 2@85#"GenevaJtéHxtLANDmac 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)}; ""%> 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.")%>
If your default browser is not Safari or Firefox, on startup, <%productName%> will launch one of those browsers to display the home page of the desktop website. You may not want it to do this...
<%radio.prefs.checkboxPref ("Check this box to disable the feature, and open the home page in your default browser.", @user.photoFan.prefs.flMacDefaultBrower)%> 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(+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æ[æ[ createdSun, 06 Jan 2008 18:20:21 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 GMT50uƆûo 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  colorspaformsphtmlplinkProductName-FlickrFanlogNamephotoFanoutlinesY 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!wg:oLANDmac 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,