85 lines
3.4 KiB
AppleScript
85 lines
3.4 KiB
AppleScript
-- This script grabs the current article in NetNewsWire and copies relevant information about it
|
|
-- to a new outgoing message in Mail
|
|
-- the intended use is that the user wants to send email about the current article, and
|
|
-- would fill in the recipient and then send the message
|
|
|
|
-- sometimes, an article has contents, and sometimes it has html contents
|
|
-- this function getContentsOrHtml() gets the contents as text, despite the representation
|
|
-- first it checks to see if there are plain text contents
|
|
-- if not, it looks for html contents, and converts those to plain text using a shell script that invokes textutil
|
|
-- if it can't find either plain text or html, it returns "couldn't find article text"
|
|
to getContentsOrHtml()
|
|
tell application "NetNewsWire"
|
|
set textContents to the contents of the current article
|
|
if textContents is not "" then
|
|
return textContents
|
|
else
|
|
set htmlContents to html of the current article
|
|
if htmlContents is not "" then
|
|
set shellScript to " echo '" & htmlContents & "' | /usr/bin/textutil -stdin -stdout -format html -convert txt"
|
|
set pureText to do shell script shellScript
|
|
return pureText
|
|
end if
|
|
end if
|
|
end tell
|
|
return "couldn't find article text"
|
|
end getContentsOrHtml
|
|
|
|
|
|
-- given a list of author names, generate a happily formatted list like "Jean MacDonald and James Dempsey"
|
|
-- if the list is more than two names, use Oxford comma structure: "Brent Simmons, Jean MacDonald, and James Dempsey"
|
|
|
|
to formatListOfNames(listOfNames)
|
|
set c to count listOfNames
|
|
if c is 1 then
|
|
set formattedList to item 1 of listOfNames
|
|
else if c is 2 then
|
|
set formattedList to item 1 of listOfNames & " and " & item 2 of listOfNames
|
|
else
|
|
set frontOfList to items 1 thru (c - 1) of listOfNames
|
|
set lastName to item c of listOfNames
|
|
set tid to AppleScript's text item delimiters
|
|
set AppleScript's text item delimiters to ", "
|
|
set t1 to frontOfList as text
|
|
set formattedList to t1 & ", and " & lastName
|
|
set AppleScript's text item delimiters to tid
|
|
end if
|
|
return formattedList
|
|
end formatListOfNames
|
|
|
|
|
|
-- sometimes, an article has an author, sometimes it has more than one, sometimes there's no author
|
|
-- this function getAuthorStub() returns a string like " from Jean MacDonald " that can be used in crafting a message
|
|
-- about the current article. If there are no authors, it just returns a single space.
|
|
to getAuthorStub(authorNames)
|
|
try
|
|
if ((count authorNames) is greater than 0) then
|
|
return " from " & formatListOfNames(authorNames) & " "
|
|
end if
|
|
end try
|
|
return " "
|
|
end getAuthorStub
|
|
|
|
|
|
|
|
-- Here's where the script starts
|
|
|
|
-- first, get some relevant info out for NetNewsWire
|
|
tell application "NetNewsWire"
|
|
set articleUrl to the url of the current article
|
|
set articleTitle to the title of the current article
|
|
set authorNames to name of authors of the current article
|
|
end tell
|
|
|
|
|
|
-- then, prepare the message subject and message contents
|
|
set messageSubject to "From NetNewsWire to you: " & articleTitle
|
|
set myIntro to "Here's something" & getAuthorStub(authorNames) & "that I was reading on NetNewsWire: "
|
|
set messageContents to myIntro & return & return & articleUrl & return & return & getContentsOrHtml()
|
|
|
|
|
|
-- lastly, make a new outgoing message in Mail with the given subject and contents
|
|
tell application "Mail"
|
|
set m1 to make new outgoing message with properties {subject:messageSubject}
|
|
set content of m1 to messageContents
|
|
end tell |