• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Scripting Bridge question
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Scripting Bridge question


  • Subject: Re: Scripting Bridge question
  • From: has <email@hidden>
  • Date: Thu, 15 Nov 2007 20:46:31 +0000

email@hidden wrote:

What bugs me is that
both the NSAppleScript and the ScriptingBridge approach are supposed
to return the exact same results, yet

Not true: -[NSAppleScript executeAndReturnError:] always returns an NSAppleEventDescriptor which you are responsible for unpacking yourself. The type of value returned by Scripting Bridge depends on various factors which I can't be bothered listing, but in this case it should return an NSImage instance as SB knows how to map between AEDescs of typePict, typeTIFF, etc. and the Cocoa equivalent.


As an aside: don't assume that operations that work in AppleScript are always guaranteed to work in Scripting Bridge, or at least not without kludgy workarounds. It's a long, long story which I hope to go into when I've a bit more time on my hands, but short version is that SB has its own rather strong opinions about how Apple event IPC _should_ work which are not necessarily related to how it actually _does_ work in the real world. That isn't the issue here, but if you Google for "Scripting Bridge" hits made in the last month, you'll find several discussions of compatibility problems, including some relating to other aspects of iTunes scripting.


[[[[NSAppleScript alloc] initWithSource:@"tell application \"iTunes\"
to return data of artwork 1 of current track"]
executeAndReturnError:nil] data]

works, but [artwork data] doesn't... Oh well, I'll keep trying.

Note that these two -data methods are not the same.

The first, -[NSAppleEventDescriptor data], returns an NSData instance containing a copy of the AEDesc's raw data; your original NSAppleScript example then shoves this data into an NSImage object that you can use in the rest of your code.

The second, -[itunesArtwork data], returns an NSImage instance which you should be able to use as-is.

e.g. The following works here for a track that I dropped a .gif file on just to test it:

#!/usr/bin/python

from ScriptingBridge import *

itunes = SBApplication.alloc().initWithBundleIdentifier_('com.apple.itunes')

print itunes.currentTrack().artworks()[0].data()

Result:

NSImage 0x2135b70 Size={324, 325} Reps=(
NSPICTImageRep 0x2135e70 Size={324, 325} ColorSpace=NSCalibratedRGBColorSpace BPS=0 Pixels=324x325 Alpha=NO
)


If no track is active, or if the active track doesn't have any artwork attached, you'll get an object not found error (-1728). If that's not the cause of your problem, I suppose it's also possible that there could be a bug in the AE-Cocoa picture type mappings. You'd need to provide more info on the reported error (and, if it's an SB bug, a copy of the problem image) in order to say for sure.


has -- http://appscript.sourceforge.net http://rb-appscript.rubyforge.org

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Scripting Bridge question
      • From: email@hidden
  • Prev by Date: Re: Weird problem with writeToUrl:ofType:error
  • Next by Date: Re: Scripting Bridge question
  • Previous by thread: Re: Scripting Bridge question
  • Next by thread: Re: Scripting Bridge question
  • Index(es):
    • Date
    • Thread