The Omni Group
These forums are now read-only. Please visit our new forums to participate in discussion. A new account will be required to post in the new forums. For more info on the switch, see this post. Thank you!

Go Back   The Omni Group Forums > OmniFocus > OmniFocus Extras
FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
"Next Tasks" script, with sorting Thread Tools Search this Thread Display Modes
I'm a beginner AppleScripter, so I'm absolutely sure there are more efficient ways to implement this, but I hacked the following together. It's a modified "ListNext.scpt" script from this thread, with:
  • Bubble Sort by due date
  • intelligent sorting of items without a Due Date
  • merging of tasks by section
  • shell output (for GeekTool friendliness!)

Anyway, here it is - hopefully, someone might find it as useful as I have:
Code:
on run
	set strList to ""
	
	tell application "OmniFocus"
		set oDoc to default document
		
		set lstSections to every section of oDoc
		
		set strList to my ListSections(lstSections, strList)
	end tell
	
	-- split the list by line
	set arrayList to split(strList, return)
	
	-- sort the list
	BubbleSort(arrayList)
	
	set strCmd to ""
	repeat with strTask in arrayList
		try
			set strDate to item 1 of (split(strTask, "|"))
			set strName to item 2 of (split(strTask, "|"))
			if strDate is not "" then
				set strCmd to strCmd & strDate & ": " & strName & return
			else
				set strCmd to strCmd & strName & return
			end if
		end try
	end repeat
	
	set strCmd to ("echo " & strCmd)
	do shell script strCmd
	
end run


on ListSections(lstSections, strList)
	using terms from application "OmniFocus"
		repeat with oSectn in lstSections
			if class of oSectn is project then
				
				
				-- ANY TASKS OF PROJECT
				set lstTasks to every task of oSectn
				if lstTasks ≠ {} then
					set strList to my ListTasks(lstTasks, strList)
				end if
			else
				-- FOLDER
				
				--set strList to strList & name of oSectn & return
				
				-- ANY CONTENTS OF FOLDER			
				set lstSubSections to every section of oSectn
				if lstSubSections ≠ {} then
					set strList to my ListSections(lstSubSections, strList)
				end if
			end if
		end repeat
	end using terms from
	
	return strList
end ListSections

on ListTasks(lstTasks, strList)
	using terms from application "OmniFocus"
		repeat with oTask in lstTasks
			
			--TASK
			if next of oTask and not completed of oTask then
				
				tell oTask
					set dteDue to due date
					try
						dteDue
						set strList to strList & short date string of dteDue
					end try
					set strList to strList & "|[" & name of containing project & "] " & name & return
				end tell
			end if
			
			-- ANY SUB-TASKS
			set lstSubTasks to every task of oTask
			if lstSubTasks ≠ {} then
				set strList to my ListTasks(lstSubTasks, strList)
			end if
		end repeat
	end using terms from
	
	return strList
end ListTasks

to split(someText, delimiter)
	set AppleScript's text item delimiters to delimiter
	set someText to someText's text items
	set AppleScript's text item delimiters to {""} --> restore delimiters to default value
	return someText
end split

on BubbleSort(theList)
	set FAILED_COERCION to -1700
	
	if class of theList is list then
		set theSize to length of theList
		repeat with i from 1 to theSize
			repeat with j from 2 to (theSize - i + 1)
				try
					set strDate1 to item 1 of (split((item j of theList), "|"))
					set strDate2 to item 1 of (split((item (j - 1) of theList), "|"))
					try
						if (date strDate2 > date strDate1) then
							set temp to (item (j - 1) of theList)
							set (item (j - 1) of theList) to (item j of theList)
							set (item j of theList) to temp
						end if
					on error number FAILED_COERCION
						set temp to (last item of theList)
						set (last item of theList) to (item j of theList)
						set (item j of theList) to temp
					end try
				end try
			end repeat
		end repeat
		return theList
	else
		return false
	end if
end BubbleSort

on replaceText(theText, swapOut, swapIn)
	(* This bit comes from Apple's own "Replace Text in Item Names" script
with some of the variables changed to make it a call-able handler *)
	if the theText contains the swapOut then
		-- replace target string using delimiters
		set AppleScript's text item delimiters to the swapOut
		set the text_item_list to every text item of theText
		set AppleScript's text item delimiters to the swapIn
		set the theText to the text_item_list as string
		set AppleScript's text item delimiters to ""
	end if
	return theText
end replaceText
 
What is the name of the txt file it outputs? I'm not sure it's working, and I know nothing about reading scripts?
 
 


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Similar Threads
Thread Thread Starter Forum Replies Last Post
Script to add delegated tasks from entourage to "Waiting" context in OmniFocus tarun101 OmniFocus Extras 1 2010-05-21 08:09 AM
request - additional sorting option for view bar "project status" johnjj OmniFocus 1 for Mac 2 2008-11-22 12:03 PM
"Filter View" and Sorting Actions D-Mac OmniFocus 1 for Mac 3 2007-12-04 08:53 PM


All times are GMT -8. The time now is 03:50 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc.