Tuesday, August 18, 2009 at 7:35 PM.
photoFanSuite.backupFlickrPics
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 <a href=\"" + openfolderurl + "\">" + adr^.title + "</a> (" + 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 ()}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.