Tuesday, August 18, 2009 at 7:35 PM.

photoFanSuite.archiver

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 ()}



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.