I using Apple script to get the required details from Microsoft outlook. Its totally working fine on the Mountian Lion OsX(10.8.3) but when i use the same script its failing and throwing me the error ""Expected “,” but found property".
Below is the Apple Script which i am using.
on encodeXML(s)
set AppleScript's text item delimiters to "&"
set components to every text item of s
set AppleScript's text item delimiters to "&"
set s to components as string
set AppleScript's text item delimiters to ""
set AppleScript's text item delimiters to "<"
set components to every text item of s
set AppleScript's text item delimiters to "<"
set s to components as string
set AppleScript's text item delimiters to ">"
set components to every text item of s
set AppleScript's text item delimiters to ">"
set s to components as string
set AppleScript's text item delimiters to "\""
set components to every text item of s
set AppleScript's text item delimiters to """
set s to components as string
set AppleScript's text item delimiters to "'"
set components to every text item of s
set AppleScript's text item delimiters to "'"
set s to components as string
set AppleScript's text item delimiters to ""
return s
end encodeXML
on meetingNumber(s)
set AppleScript's text item delimiters to "Meeting Number:"
set components to every text item of s
if (count of components) is less than 2 then
return ""
end if
set s to second text item of components
set AppleScript's text item delimiters to "To join"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to "<"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to "&"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to "----"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to " "
set components to every text item of s
set AppleScript's text item delimiters to ""
return components as string
end meetingNumber
on trimContents(s)
set AppleScript's text item delimiters to "Meeting Number:"
set components to every text item of s
if (count of components) is less than 2 then
return ""
end if
set s to second text item of components
set AppleScript's text item delimiters to "To join"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to "<"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to "&"
set components to every text item of s
set s to first text item of components
set AppleScript's text item delimiters to "----"
set components to every text item of s
set AppleScript's text item delimiters to ""
return "Meeting Number: " & first text item of components
end trimContents
on getEventKeys(theEvent)
set r to ""
tell application "Microsoft Outlook"
set r to r & " <wxp:meeting>
"
set r to (r & " <wxp:appID>" & id of theEvent as string) & "</wxp:appID>
"
set t to (content of theEvent as string)
set t to my trimContents(t)
set r to (r & " <wxp:content>" & my encodeXML(t)) & "</wxp:content>
"
set r to r & " </wxp:meeting>
"
end tell
return r
end getEventKeys
on getEvent(theEvent)
set retVal to ""
tell application "Microsoft Outlook"
set retVal to retVal & "<wxp:meeting>"
set retVal to (retVal & "<wxp:subject>" & my encodeXML(subject of theEvent as string)) & "</wxp:subject>"
set retVal to (retVal & "<wxp:organizer>" & organizer of theEvent as string) & "</wxp:organizer>"
set retVal to (retVal & "<wxp:startDate>" & start time of theEvent as string) & "</wxp:startDate>"
set retVal to (retVal & "<wxp:endDate>" & end time of theEvent as string) & "</wxp:endDate>"
set retVal to (retVal & "<wxp:appID>" & ID of theEvent as string) & "</wxp:appID> "
set outType to ""
if (is recurring of theEvent) then
set recur to recurrence of theEvent
set recurType to recurrence type of recur as string
if recurType is "daily" then
set outType to "DAILY"
else if recurType is "weekly" then
set outType to "WEEKLY"
else if recurType is "absolute monthly" or recurType is "relative monthly" then
set outType to "MONTHLY"
else if recurType is "absolute yearly" or recurType is "relative yearly" then
set outType to "YEARLY"
end if
set retVal to retVal & "<wxp:repeatType>" & outType & "</wxp:repeatType>
"
set retVal to retVal & "<wxp:interval>" & occurrence interval of recur & "</wxp:interval>
"
if end type of end date of recur as string is "end numbered type" then
set retVal to retVal & "<wxp:afterMeetingNumber>" & data of end date of recur & "</wxp:afterMeetingNumber>
"
else if end type of end date of recur as string is "end date type" then
set retVal to (retVal & "<wxp:expirationDate>" & data of end date of recur as string) & "</wxp:expirationDate>
"
end if
if recurType is "relative monthly" then
set retVal to retVal & "<wxp:weekInMonth>" & ordinal of recur & "</wxp:weekInMonth>"
end if
if recurType is "weekly" or recurType is "relative monthly" then
set bitmap to 0
if sunday of days of week of recur then
set bitmap to bitmap + 1
end if
if monday of days of week of recur then
set bitmap to bitmap + 2
end if
if tuesday of days of week of recur then
set bitmap to bitmap + 4
end if
if wednesday of days of week of recur then
set bitmap to bitmap + 8
end if
if thursday of days of week of recur then
set bitmap to bitmap + 16
end if
if friday of days of week of recur then
set bitmap to bitmap + 32
end if
if saturday of days of week of recur then
set bitmap to bitmap + 64
end if
set retVal to retVal & "<wxp:dayInWeek>" & bitmap & "</wxp:dayInWeek>
"
end if
else
set retVal to retVal & "<wxp:repeatType></wxp:repeatType>
"
end if
if (has reminder of theEvent) then
set retVal to (retVal & " <wxp:reminder>" & reminder time of theEvent as string) & "</wxp:reminder>
"
end if
--set attendees to attendee of theEvent
set retVal to retVal & " <wxp:attendees>
"
repeat with theAttendee in required attendee of theEvent
set retVal to retVal & my writeAttendee(theAttendee, "REQUIRED")
end repeat
repeat with theAttendee in optional attendee of theEvent
set retVal to retVal & my writeAttendee(theAttendee, "OPTIONAL")
end repeat
repeat with theAttendee in resource attendee of theEvent
set retVal to retVal & my writeAttendee(theAttendee, "RESOURCE")
end repeat
set retVal to retVal & " </wxp:attendees>
"
set retVal to (retVal & " <wxp:content>" & my encodeXML(content of theEvent as string)) & "</wxp:content>
"
set retVal to retVal & " </wxp:meeting>
"
end tell
return retVal
end getEvent
on writeAttendee(theAttendee, theType)
tell application "Microsoft Outlook"
set retVal to ""
if (status of theAttendee as string) is not "declined" then
set em to email address of theAttendee
set retVal to retVal & " <wxp:attendee>
"
try
set retVal to (retVal & " <wxp:name>" & my encodeXML(name of em as string)) & "</wxp:name>
"
end try
set retVal to (retVal & " <wxp:ID>" & address of em as string) & "</wxp:ID>
"
set retVal to retVal & " <wxp:type>" & theType & "</wxp:type>
"
set retVal to retVal & " </wxp:attendee>
"
end if
return retVal
end tell
end writeAttendee
Can some on please look into it and let me know what i am doing wrong here.
Thanks In Advance.
Ravi Kishore.
The line set em to email address of theAttendee lies outside the tell application "Microsoft Outlook" block and so AppleScript does not understand the term email address. Move this statement inside a tell application "Microsoft Outlook" block and you should be okay.
Related
I'm new to AppleScript and having trouble understanding something. Why doesn't the function valid_hex return true for these items? Clearly the data items are being obtained correctly from the tsv by reading paragraphs and text item 1 and 2 because the output string looks fine.
Is there a type mismatch that doesn't let valid_hex() do its job?
set inputStr to "8-1 Black\t232323\r\n8-2 Brown\tB5674D\r\n8-3 Orange\tFF7538\r\n8-4 Yellow\tFCE883\r\n8-5 Green\t1CAC78\r\n8-6 Blue\t1F75FE\r\n8-7 Violet (Purple)\t926EAE\r\n8-8 Red\tEE204D"
set accepted to {}
set rejected to {}
set acceptedCount to 0
set rejectedCount to 0
set atids to AppleScript's text item delimiters
set AppleScript's text item delimiters to tab
repeat with p in (paragraphs of inputStr)
set aLine to text of (p as string)
repeat 1 times
set colorName to text item 1 of aLine
set hexColor to text item 2 of aLine
log hexColor & " named " & colorName & " is valid: " & valid_hex(hexColor)
end repeat
end repeat
on valid_hex(s)
set validhex to {"#", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "a", "b", "c", "d", "e", "f"}
if not (length of s = 6 or (length of s = 7 and s begins with "#")) then return false
repeat with c in (text items of s)
if validhex contains c then
set status to true
else
set status to false
exit repeat
end if
end repeat
return status
end valid_hex
UPDATE: Based on the accepted answer the original problem has been resolved. This is the full script. It takes a delimited list of hex colors with names and creates an Xcode .colorset folder for each one that can be dragged directly into an Xcode Assets catalog to be used as a named color.
It works pretty well, but if an error file is created, it doesn't go into the same working_folder.
use AppleScript version "2.5"
use framework "Foundation"
use scripting additions
try
set src to (choose file with prompt "choose input file")
set o to (open for access src)
set inputStr to (read o)
close access o
end try
tell application "Finder"
set working_path to container of (src) as string
end tell
set accepted to {}
set rejected to {}
set acceptedCount to 0
set rejectedCount to 0
repeat with aLine in (get paragraphs of inputStr)
set old_delimits to AppleScript's text item delimiters -- Save the original delimiters
set AppleScript's text item delimiters to tab
set {colorName, hexColor} to text items of aLine
set AppleScript's text item delimiters to old_delimits -- Restore the original delimiters
repeat 1 times
if not valid_hex_color(hexColor) then
set rejectedCount to rejectedCount + 1
copy "Rejected " & "\"" & colorName & "\"" & " with hex value: " & hexColor & "\n" to the end of rejected
exit repeat
else
set acceptedCount to acceptedCount + 1
set redComponent to text 1 thru 2 of hexColor
set greenComponent to text 3 thru 4 of hexColor
set blueComponent to text 5 thru 6 of hexColor
set jsonString to "{\n\t\"info\": {\n\t\t\"version\": 1,\n\t\t\"author\": \"xcode\"\n\t},\n\t\"colors\": [\n\t\t{\n\t\t\t\"idiom\": \"universal\",\n\t\t\t\"color\": {\n\t\t\t\t\"color-space\": \"srgb\",\n\t\t\t\t\"components\": {\n\t\t\t\t\t\"red\": \"0x" & redComponent & "\",\n\t\t\t\t\t\"green\": \"0x" & greenComponent & "\",\n\t\t\t\t\t\"blue\": \"0x" & blueComponent & "\",\n\t\t\t\t\t\"alpha\": \"1.000\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n}"
tell application "Finder"
set folderName to colorName & ".colorset"
set fldr to (make new folder at working_path with properties {name:folderName})
end tell
set resultFilePath to (working_path as string) & folderName & ":Contents.json"
set outFile to (open for access resultFilePath with write permission)
write jsonString to outFile starting at 0
close access outFile
copy colorName & "\n" to the end of accepted
end if
end repeat
end repeat
if rejectedCount > 0 then
set summary to "\nrejected " & rejectedCount & ":\n--------------------\n" & rejected & "\naccepted " & acceptedCount & ":\n--------------------\n" & accepted
set errorFilePath to (working_path as string) & ":RejectedItems.txt"
log working_path & errorFilePath
set errorFile to (open for access errorFilePath with write permission)
write summary to errorFile starting at 0
close access errorFile
display dialog ("Rejected " & rejectedCount & " items, see " & errorFilePath & ".")
end if
on valid_hex_color(s)
set validhex to "0123456789ABCDEF"
if s begins with "#" then set s to text 2 thru -1 of s
if the length of s ≠ 6 then return false
repeat with c in characters of s
if validhex does not contain c then return false
end repeat
true
end valid_hex_color
The problem is in the line
repeat with c in (text items of s)
At this moment text item delimiters is set to tab so there is only one text item which is always the entire string.
To get each character replace it with
repeat with c in (get characters of s)
The get keyword is important to retrieve the list only once.
The first repeat loop is a bit cumbersome, this is sufficient
repeat with aLine in (get paragraphs of inputStr)
set {colorName, hexColor} to text items of aLine
log hexColor & " named " & colorName & " is valid: " & valid_hex(hexColor)
end repeat
And don't forget to reset text item delimiters
set AppleScript's text item delimiters to atids
A more sophisticated way to check the string is with AppleScriptObjC and Regular Expression (put the use lines at the beginning of the script)
use AppleScript version "2.5"
use framework "Foundation"
on valid_hex(s)
set regex to current application's NSRegularExpression's regularExpressionWithPattern:"^#?[0-9A-Fa-f]{6}$" options:0 |error|:(missing value)
return (regex's numberOfMatchesInString:s options:0 range:{location:0, |length|:(count s)}) as integer is 1
end valid_hex
i need help with my applescript program
set UnixPath to POSIX path of ((path to me as text) & "::")
set term to get id of application "Terminal"
on notify(t)
display notification t
end notify
notify("starting " & term)
to replaceText(someText, oldItem, newItem)
(*
replace all occurances of oldItem with newItem
parameters - someText [text]: the text containing the item(s) to change
oldItem [text, list of text]: the item to be replaced
newItem [text]: the item to replace with
returns [text]: the text with the item(s) replaced
*)
set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, oldItem}
try
set {itemList, AppleScript's text item delimiters} to {text items of someText, newItem}
set {someText, AppleScript's text item delimiters} to {itemList as text, tempTID}
on error errorMessage number errorNumber -- oops
set AppleScript's text item delimiters to tempTID
error errorMessage number errorNumber -- pass it on
end try
return someText
end replaceText
on getMyName()
set myPath to path to me as text
if myPath ends with ":" then
set n to -2
else
set n to -1
end if
set AppleScript's text item delimiters to ":"
set myName to text item n of myPath
if (myName contains ".") then
set AppleScript's text item delimiters to "."
set myName to text 1 thru text item -2 of myName
end if
set AppleScript's text item delimiters to ""
return myName
end getMyName
set nameToFix to getMyName()
set bufferedName to replaceText(nameToFix, " ", "\\ ")
set lua to UnixPath & bufferdName & ".app/Contents/Resources/" & "lua"
set programSet to UnixPath & bufferdName & ".app/Contents/Resources/Scripts/lua_program.lua"
set mainComand to "program_app_temp/lua_program.lua"
set do to "dofile(" & quoted form of mainComand & ")"
tell application "Terminal"
activate
tell application "System Events"
keystroke "mkdir ~/ai_app_temp"
keystroke return
keystroke "cp " & ai & " ~/ai_app_temp/"
keystroke return
keystroke lua
keystroke return
keystroke do
delay 1
keystroke return
end tell
end tell
when i run my program it hits an error and says
error "The variable bufferdName is not defined." number -2753 from "bufferdName" . how do i fix that? i am new to applescript
It looks like a simple spelling mistake. Look carefully at the spelling in these lines of code
set bufferedName to replaceText(nameToFix, " ", "\\ ")
set lua to UnixPath & bufferdName & ".app/Contents/Resources/" & "lua"
set programSet to UnixPath & bufferdName & ".app/Contents/Resources/Scripts/lua_program.lua"
bufferedName is the variable you set, but you are using bufferdName <-- spelled differently
I know virtually nothing about AppleScript and could do with some help.
While running, my broadcast playout system (MegaSeg) writes details of the track currently playing to a textfile called "NowPlaying" which contains solely the following contents, each on its own line and without square brackets:
Title: [title]
Artist: [artist]
Album: [album]
Time: [time in some format or other]
I want to pass this to my broadcast streamer LadioCast, which can be addressed via AppleScript, so that it sends info on what is playing to the streaming server.
MegaSeg doesn't support Applescript calls like 'tell application "MegaSeg"... set trackName to name of current track' so I can't do it that way. I have no idea about how to do this.
If we imagine that I was able to grab that info, this is what I would do with it:
set lastName to ""
set lastArtist to ""
set lastAlbum to ""
repeat
** insert missing file reading section here
** in the following, "title", "artist" and "album" are from the text file **
set trackName to title
set trackArtist to artist
set trackAlbum to album
** end of missing section
if trackName is not lastName and trackArtist is not lastArtist and trackAlbum is not lastAlbum then
set lastName to trackName
set lastArtist to trackArtist
set lastAlbum to trackAlbum
tell application "LadioCast"
set metadata song to trackName & " – " & trackArtist & " – " & trackAlbum
end tell
end if
delay 15
end repeat
Thanks in advance.
--Richard E
===
I tried the suggestions from #DigiMonk and they were very helpful, but not all of them worked. First, the file is in a specific location and not on the desktop; second, I could not get 'trim_line' to work at all - I got "script does not understand trim_line message". However the text in the file seems to be already trimmed.
The script below nearly works; when run from the Applescript Editor it does seem to get the Title, Artist and Album into the variables. However when I try running it from LadioCast I get an EOF -39 error. More importantly, as soon as I run this, MegaSeg stops updating the file, forever. I am presumably locking the file to read from it and stopping MegaSeg writing to it. How do I avoid this?
set lastName to ""
set lastArtist to ""
set lastAlbum to ""
set lastTime to ""
set trackName to ""
set trackArtist to ""
set trackAlbum to ""
set sourcePath to ""
repeat
set sourcePath to open for access file "Library:MegaSeg User Data:Logs:Logs for MegaSeg System (4):NowPlaying"
set thisText to read sourcePath as text
close access file "Library:MegaSeg User Data:Logs:Logs for MegaSeg System (4):NowPlaying"
set the paragraphList to every paragraph of thisText
repeat with i from 1 to number of items in paragraphList
set thisItem to item i of paragraphList
if thisItem starts with "Title:" then
set x to the offset of "Title:" in thisItem
set trackName to (text (x + 6) thru -1 of thisItem)
else if thisItem starts with "Artist:" then
set x to the offset of "Artist:" in thisItem
set trackArtist to (text (x + 7) thru -1 of thisItem)
else if thisItem starts with "Album:" then
set x to the offset of "Album:" in thisItem
set trackAlbum to (text (x + 6) thru -1 of thisItem)
end if
end repeat
if trackName is not lastName and trackArtist is not lastArtist and trackAlbum is not lastAlbum then
set lastName to trackName
set lastArtist to trackArtist
set lastAlbum to trackAlbum
tell application "LadioCast"
set metadata song to trackName & " – " & trackArtist & " – " & trackAlbum
end tell
end if
delay 15
end repeat
May be this helps: (feed sourcePath with the path to your NowPlaying.txt file)
set sourcePath to (path to desktop) & "NowPlaying.txt" as text
set thisText to my readFile(sourcePath)
set the paragraphList to every paragraph of thisText
set lastName to ""
set lastArtist to ""
set lastAlbum to ""
set lastTime to ""
repeat with i from 1 to number of items in paragraphList
set thisItem to item i of paragraphList
--log thisItem
if thisItem starts with "Title:" then
set x to the offset of "Title:" in thisItem
set y to (text (x + 6) thru -1 of thisItem)
set lastName to my trim_line(y, " ", 2)
else if thisItem starts with "Artist:" then
set x to the offset of "Artist:" in thisItem
set y to (text (x + 7) thru -1 of thisItem)
set lastArtist to my trim_line(y, " ", 2)
else if thisItem starts with "Album:" then
set x to the offset of "Album:" in thisItem
set y to (text (x + 6) thru -1 of thisItem)
set lastAlbum to my trim_line(y, " ", 2)
else if thisItem starts with "Time:" then
set x to the offset of "Time:" in thisItem
set y to (text (x + 5) thru -1 of thisItem)
set lastTime to my trim_line(y, " ", 2)
end if
end repeat
log "lastName = '" & lastName & "'"
log "lastArtist = '" & lastArtist & "'"
log "lastAlbum = '" & lastAlbum & "'"
on readFile(thisFile)
set thisFile to thisFile as text
if thisFile is "" then return ""
try
set fi to open for access file the thisFile
set myData to read fi as text
close access file the thisFile
return myData
on error
try
close access file the thisFile
return ""
end try
end try
end readFile
on trim_line(this_text, trim_chars, trim_indicator)
-- 0 = beginning, 1 = end, 2 = both
set x to the length of the trim_chars
-- TRIM BEGINNING
if the trim_indicator is in {0, 2} then
repeat while this_text begins with the trim_chars
try
set this_text to characters (x + 1) thru -1 of this_text as string
on error
-- the text contains nothing but the trim characters
return ""
end try
end repeat
end if
-- TRIM ENDING
if the trim_indicator is in {1, 2} then
repeat while this_text ends with the trim_chars
try
set this_text to characters 1 thru -(x + 1) of this_text as string
on error
-- the text contains nothing but the trim characters
return ""
end try
end repeat
end if
return this_text
end trim_line
I am working on finishing up an script droplet to pull all used swatches out of multiple indesign documents that I drop on the script and list them. I am adapting this from a script I wrote to put all used swatches from a single file.
I have the basics down but have run into two problems and cant find an answer.
Problem 1: I need to add the line to "repeat until swatchCount < 2" but this would ad a repeat inside a repeat. Doesn't work.
Problem 2: (the biggest problem) The "colorList" needs to add the colors from each of the documents together into a single list. Since I have it on repeat it is only listing the colors from the last processed file. How do I have the list save each files color and then list them all?
I would appreciate any help I have hit a wall.
on open these_items
repeat with i from 1 to the count of these_items
set this_item to item i of these_items
set the item_info to info for this_item
set this_item to POSIX path of this_item
tell application "Adobe InDesign CC"
open this_item
tell active document
delete unused swatches
set allSwatches to every swatch
end tell
set swatchCount to count of allSwatches
set colorList to ""
-- repeat until swatchCount < 2
set thisSwatch to item swatchCount of allSwatches
try
set swatchProps to type of thisSwatch
set swatchProps to "Gradient"
on error
set swatchProps to "Color"
end try
if swatchProps = "Color" then
set swatchName to name of thisSwatch as string
set swatchType to model of thisSwatch as string
set swatchSpace to space of thisSwatch as string
set swatchColor to color value of thisSwatch
if swatchType contains "spot" then
set swatchType to "Spot"
else
if swatchType contains "prss" then
set swatchType to "Process"
end if
end if
if swatchSpace contains "RGB" then
set rrr to ((item 1 of swatchColor) as integer)
set ggg to ((item 2 of swatchColor) as integer)
set bbb to ((item 3 of swatchColor) as integer)
set swatchMix to (" value: R-" & rrr & " G-" & ggg & " B-" & bbb) as string
if swatchName does not contain "registration" then
set swatchItem to "Name: " & swatchName & swatchMix & " space: RGB" & " type: " & swatchType & return
else
set swatchItem to ""
end if
else
if swatchSpace contains "CMYK" then
set ccc to ((item 1 of swatchColor) as integer)
set mmm to ((item 2 of swatchColor) as integer)
set yyy to ((item 3 of swatchColor) as integer)
set kkk to ((item 4 of swatchColor) as integer)
set swatchMix to (" value: C-" & ccc & " M-" & mmm & " Y-" & yyy & " K-" & kkk) as string
if swatchName does not contain "registration" then
set swatchItem to "Name: " & swatchName & swatchMix & " space:CMYK" & " type: " & swatchType & return
else
set swatchItem to ""
end if
else
if swatchSpace contains "LAB" then
set lll to ((item 1 of swatchColor) as integer)
set aaa to ((item 2 of swatchColor) as integer)
set bbb to ((item 3 of swatchColor) as integer)
set swatchMix to (" value: L-" & lll & " A-" & aaa & " B-" & bbb) as string
if swatchName does not contain "registration" then
set swatchItem to "Name: " & swatchName & swatchMix & " space: LAB" & " type: " & swatchType & return
else
set swatchItem to ""
end if
end if
end if
end if
set colorList to colorList & swatchItem
end if
tell active document to close saving no
set swatchCount to swatchCount - 1
--end repeat
end tell
end repeat
set dragged_items to these_items as string
set old_delimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {":"}
set theClientName to text item 2 of dragged_items
set theFileName to text item 5 of dragged_items
set AppleScript's text item delimiters to old_delimiters
set theOrderNumber to text 1 through 5 of theFileName
set headerInfo to "Client: " & theClientName & " Order # " & theOrderNumber & " File: " & theFileName
tell application "Adobe InDesign CC"
tell view preferences
set horizontal measurement units to inches
set vertical measurement units to inches
end tell
make new document with properties {document preferences:{page width:8.5, page height:11}}
tell view preferences
set horizontal measurement units to inches
set vertical measurement units to inches
end tell
tell active document
set zero point to {0, 0}
set properties of guide preferences to {guides shown:false}
set properties of text preferences to {show invisibles:false}
set properties of view preferences to {ruler origin:page origin, horizontal measurement units:inches, show frame edges:false, show rulers:true, vertical measurement units:inches}
tell layout window 1
zoom given fit page
set properties to {view display setting:typical, transform reference point:top left anchor}
end tell
make new text frame with properties {geometric bounds:{0.5, 0.5, 0.75, 8.0}, contents:headerInfo, color:"None"}
set paragraphCount to count of paragraphs of colorList
repeat until paragraphCount > 19
set colorList to colorList & "name: _________________________" & " value: ____________________" & " space: ______" & " type: _________" & return
set paragraphCount to count of paragraphs of colorList
end repeat
make new text frame with properties {geometric bounds:{4.5, 0.5, 20.0, 8.0}, contents:colorList, color:"None"}
tell text frame 1
tell every text to set point size to 10
tell every paragraph
make tab stop with properties {alignment:left align, position:2.875}
make tab stop with properties {alignment:left align, position:5.125}
make tab stop with properties {alignment:left align, position:6.375}
end tell
set geometric bounds to {1.0, 0.5, 11, 8.0}
end tell
end tell
end tell
end open
on run
-- Handle the case where the script is launched without any dropped files
open (choose file with multiple selections allowed)
end run
I have added the changes that you suggested "Darrick Herwehe" but am getting an error now on a different part.
Can’t get name of color id 344 of document id 30
--name of color id 344 of document id 29 of application "Adobe InDesign CC"--
getting this in reference to: set swatchName to name of thisSwatch
on open these_items
set colorList to ""
set swatchItem to ""
repeat with i from 1 to the count of these_items
--Get swatches from document start
set this_item to item i of these_items
set the item_info to info for this_item
set this_item to POSIX path of this_item
tell application "Adobe InDesign CC"
open this_item
tell active document
delete unused swatches
set allSwatches to every swatch
end tell
set swatchCount to count of allSwatches
repeat until swatchCount < 2
repeat with j from 1 to (count allSwatches)
set thisSwatch to item swatchCount of allSwatches
try
set swatchProps to type of thisSwatch
set swatchProps to "Gradient"
on error
set swatchProps to "Color"
end try
if swatchProps = "Color" then
set swatchName to name of thisSwatch
set swatchType to model of thisSwatch
set swatchSpace to space of thisSwatch
set swatchColor to color value of thisSwatch
if swatchType contains "spot" then
set swatchType to "Spot"
else
if swatchType contains "prss" then
set swatchType to "Process"
end if
end if
if swatchSpace contains "RGB" then
set rrr to ((item 1 of swatchColor) as integer)
set ggg to ((item 2 of swatchColor) as integer)
set bbb to ((item 3 of swatchColor) as integer)
set swatchMix to (" value: R-" & rrr & " G-" & ggg & " B-" & bbb) as string
if swatchName does not contain "registration" then
set swatchItem to "Name: " & swatchName & swatchMix & " space: RGB" & " type: " & swatchType & return
else
set swatchItem to ""
end if
else
if swatchSpace contains "CMYK" then
set ccc to ((item 1 of swatchColor) as integer)
set mmm to ((item 2 of swatchColor) as integer)
set yyy to ((item 3 of swatchColor) as integer)
set kkk to ((item 4 of swatchColor) as integer)
set swatchMix to (" value: C-" & ccc & " M-" & mmm & " Y-" & yyy & " K-" & kkk) as string
if swatchName does not contain "registration" then
set swatchItem to "Name: " & swatchName & swatchMix & " space:CMYK" & " type: " & swatchType & return
else
set swatchItem to ""
end if
else
if swatchSpace contains "LAB" then
set lll to ((item 1 of swatchColor) as integer)
set aaa to ((item 2 of swatchColor) as integer)
set bbb to ((item 3 of swatchColor) as integer)
set swatchMix to (" value: L-" & lll & " A-" & aaa & " B-" & bbb) as string
if swatchName does not contain "registration" then
set swatchItem to "Name: " & swatchName & swatchMix & " space: LAB" & " type: " & swatchType & return
else
set swatchItem to ""
end if
end if
end if
end if
tell active document to close saving no
set colorList to colorList & swatchItem
end if
set swatchCount to swatchCount - 1
end repeat
end repeat
end tell
end repeat
set dragged_items to these_items as string
set old_delimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {":"}
set theClientName to text item 2 of dragged_items
set theFileName to text item 5 of dragged_items
set AppleScript's text item delimiters to old_delimiters
set theOrderNumber to text 1 through 5 of theFileName
set headerInfo to "Client: " & theClientName & " Order # " & theOrderNumber & " File: " & theFileName
tell application "Adobe InDesign CC"
tell view preferences
set horizontal measurement units to inches
set vertical measurement units to inches
end tell
make new document with properties {document preferences:{page width:8.5, page height:11}}
tell view preferences
set horizontal measurement units to inches
set vertical measurement units to inches
end tell
tell active document
set zero point to {0, 0}
set properties of guide preferences to {guides shown:false}
set properties of text preferences to {show invisibles:false}
set properties of view preferences to {ruler origin:page origin, horizontal measurement units:inches, show frame edges:false, show rulers:true, vertical measurement units:inches}
tell layout window 1
zoom given fit page
set properties to {view display setting:typical, transform reference point:top left anchor}
end tell
make new text frame with properties {geometric bounds:{0.5, 0.5, 0.75, 8.0}, contents:headerInfo, color:"None"}
set paragraphCount to count of paragraphs of colorList
repeat until paragraphCount > 19
set colorList to colorList & "name: _________________________" & " value: ____________________" & " space: ______" & " type: _________" & return
set paragraphCount to count of paragraphs of colorList
end repeat
make new text frame with properties {geometric bounds:{4.5, 0.5, 20.0, 8.0}, contents:colorList, color:"None"}
tell text frame 1
tell every text to set point size to 10
tell every paragraph
make tab stop with properties {alignment:left align, position:2.875}
make tab stop with properties {alignment:left align, position:5.125}
make tab stop with properties {alignment:left align, position:6.375}
end tell
set geometric bounds to {1.0, 0.5, 11, 8.0}
end tell
end tell
end tell
end open
on run
-- Handle the case where the script is launched without any dropped files
open (choose file with multiple selections allowed)
end run
If you have any insight I would much appriciate it.
Thanks again
Matt
You can nest repeat loops. It's not a problem, it's done all the time. You just have to define a different iteration variable from your first repeat loop. In your case, I would use j.
As for getting all of the colors into one list, you neeed to define colorList outside your first repeat loop. That way it doesn't get overwritten during each iteration.
An outline for that would be:
on open these_items
set colorList to ""
repeat with i from 1 to the count of these_items
-- [ Get swatches from the document ]
repeat with j from 1 to (count allSwatches)
-- [ Process your swatches ]
set colorList to colorList & swatchItem
end repeat
end repeat
end open
I am trying to write an AppleScript which will start the Skype and call who are online and add incoming calls automatically after the conference is started. I am stuck at the last part of this implementation (starred in the code below). The code that is in the repeat loop.
Can you please help me implement a way to add the incoming calls to the existing conference call without putting the call on hold?
Thanks in advance!
My system is Mac OS X Lion (10.7.5)
PS. I have got a lot of help from other people's works so far. That's how I could do this much.
tell application "System Events"
set powerCheck to ((application processes whose (name is equal to "Skype")) count)
if powerCheck = 0 then
my launch_skype()
else if powerCheck = 1 then
return
end if
end tell
## FUNCTIONS ##
on dismiss_skype_api_security()
tell application "System Events" to tell process "Skype"
set window_name to "Skype API Security"
set ok_text to "OK"
set radio_text to "Allow this application to use Skype"
tell application "System Events" to tell process "Skype"
if window window_name exists then
click radio button radio_text of radio group 1 of window window_name
delay 2
click button ok_text of window window_name
end if
end tell
delay 1
end tell
end dismiss_skype_api_security
on launch_skype()
tell application "Skype"
set statusList to {"RINGING", "ROUTING", "UNPLACED"}
delay 2
try
set status to "COMMAND_PENDING"
repeat until status is not equal to "COMMAND_PENDING"
set status to send command "GET USERSTATUS" script name "auto call"
if status is equal to "COMMAND_PENDING" then
my dismiss_skype_api_security()
end if
end repeat
#### CALL ONLINE CONTACTS + AUTO ACCEPT ####
activate
delay 1
set OnlineContacts to my get_online_contacts()
delay 1
send command "CALL " & OnlineContacts script name "auto call"
delay 2
-- Set first call ID as master
set firstCall to send command "SEARCH ACTIVECALLS" script name "auto call"
set firstCallID to last word of firstCall -- What if the last guy leaves the call ?!?!?
set firstStatus to send command "GET CALL " & firstCallID & " STATUS" script name "auto call"
if statusList contains the last word of firstStatus then -- First Call
set MasterCallID to firstCallID
end if
**set callID to ""
repeat until callID is "CALLS"
delay 3
set status to send command "GET CALL " & firstCallID & " STATUS" script name "auto call"
if the last word of status is "RINGING" then --Someone is calling to join the call
set calls to send command "SEARCH ACTIVECALLS" script name "auto call"
set callID to last word of calls
--send command "ALTER CALL " & callID & " JOIN_CONFERENCE " & mainCallID script name --"auto call"
end if
end repeat**
on error number -2753
quit
end try
end tell
end launch_skype
### GET ONLINE CONTACTS ###
on get_online_contacts()
global OnlineFriends
set OnlineFriends to {}
tell application "Skype"
set SkypeStatus to send command "GET CONNSTATUS" script name "auto call"
if SkypeStatus is "CONNSTATUS ONLINE" then
set AppleScript's text item delimiters to " "
set Friends to send command "SEARCH FRIENDS" script name "auto call"
set Friends to my ReplaceString(Friends, " ", ",")
set Friends to my ReplaceString(Friends, ",,", ",")
set FriendsList to my SplitList(Friends, ",")
set NumFriends to number of items in FriendsList
repeat with i in FriendsList
if (i begins with "DISABLEDxmpp:") or (i begins with "USERS") or (i begins with "ugur") or (i is "echo123") or (i begins with "esr") or (i begins with "ayt") or (i begins with "Zaf") then
else
set FriendStatus to send command "GET USER " & i & " ONLINESTATUS" script name "auto call"
if text item 4 of FriendStatus is "ONLINE" then
set aUser to i
set aUser to my JoinList(aUser, " ")
set end of OnlineFriends to aUser
end if
end if
end repeat
if (count OnlineFriends) > 0 then
set OnlineFriends to my JoinList(OnlineFriends, ", ")
else
set beginning of OnlineFriends to "No Skype Friends online at this time."
end if
else
set beginning of OnlineFriends to "Skype is offline."
end if
end tell
return OnlineFriends
end get_online_contacts
on JoinList(l, del)
set RetVal to ""
set OldDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to del
set RetVal to l as string
set AppleScript's text item delimiters to OldDel
return RetVal
end JoinList
on SplitList(t, del)
set RetVal to {}
set OldDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to del
set RetVal to every text item of t
set AppleScript's text item delimiters to OldDel
return RetVal
end SplitList
on ReplaceString(theText, oldString, newString)
set OldDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to oldString
set tempList to every text item of theText
set AppleScript's text item delimiters to newString
set theText to the tempList as string
set AppleScript's text item delimiters to OldDel
return theText
end ReplaceString