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.