Bring back scripting automation

This fixes #126 and brings back basic automation support. The basic
currentEntry object will return an object that can enumerate the track
metadata or the file URL of the currently playing track. More automation
suggestions are welcome, including playlist manipulation, or playback
control.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
CQTexperiment
Christopher Snowhill 2022-02-20 01:53:25 -08:00
parent 81f5adfb5c
commit b995030aec
5 changed files with 246 additions and 222 deletions

View File

@ -1,114 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AppleEventCode</key>
<string>CoRo</string>
<key>Classes</key>
<dict>
<key>NSApplication</key>
<dict>
<key>AppleEventCode</key>
<string>capp</string>
<key>Attributes</key>
<dict>
<key>currentEntry</key>
<dict>
<key>AppleEventCode</key>
<string>CoCE</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>PlaylistEntry</string>
</dict>
</dict>
<key>Superclass</key>
<string>NSCoreSuite.NSApplication</string>
</dict>
<key>PlaylistEntry</key>
<dict>
<key>AppleEventCode</key>
<string>CoPE</string>
<key>Attributes</key>
<dict>
<key>album</key>
<dict>
<key>AppleEventCode</key>
<string>CoAl</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSString</string>
</dict>
<key>artist</key>
<dict>
<key>AppleEventCode</key>
<string>CoAr</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSString</string>
</dict>
<key>genre</key>
<dict>
<key>AppleEventCode</key>
<string>CoGe</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSString</string>
</dict>
<key>length</key>
<dict>
<key>AppleEventCode</key>
<string>CoLe</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSNumber&lt;Double&gt;</string>
</dict>
<key>bitrate</key>
<dict>
<key>AppleEventCode</key>
<string>CoBi</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSNumber&lt;Int&gt;</string>
</dict>
<key>title</key>
<dict>
<key>AppleEventCode</key>
<string>CoTi</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSString</string>
</dict>
<key>track</key>
<dict>
<key>AppleEventCode</key>
<string>CoTr</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSString</string>
</dict>
<key>year</key>
<dict>
<key>AppleEventCode</key>
<string>CoYe</string>
<key>ReadOnly</key>
<string>YES</string>
<key>Type</key>
<string>NSString</string>
</dict>
</dict>
<key>Superclass</key>
<string>NSCoreSuite.AbstractObject</string>
</dict>
</dict>
<key>Name</key>
<string>Cog</string>
</dict>
</plist>

View File

@ -1,100 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Classes</key>
<dict>
<key>NSApplication</key>
<dict>
<key>Attributes</key>
<dict>
<key>currentEntry</key>
<dict>
<key>Description</key>
<string>The currently playing entry.</string>
<key>Name</key>
<string>currententry</string>
</dict>
</dict>
<key>Description</key>
<string>Cog's top level scripting object.</string>
<key>Name</key>
<string>application</string>
<key>PluralName</key>
<string>applications</string>
</dict>
<key>PlaylistEntry</key>
<dict>
<key>Attributes</key>
<dict>
<key>album</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>album</string>
</dict>
<key>artist</key>
<dict>
<key>Description</key>
<string>The artist of the entry.</string>
<key>Name</key>
<string>artist</string>
</dict>
<key>genre</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>genre</string>
</dict>
<key>length</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>length</string>
</dict>
<key>bitrate</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>bitrate</string>
</dict>
<key>title</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>title</string>
</dict>
<key>track</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>track</string>
</dict>
<key>year</key>
<dict>
<key>Description</key>
<string>This is the... whatever.</string>
<key>Name</key>
<string>year</string>
</dict>
</dict>
<key>Description</key>
<string>A playlist entry.</string>
<key>Name</key>
<string>playlistentry</string>
<key>PluralName</key>
<string>playlistentries</string>
</dict>
</dict>
<key>Description</key>
<string>Cog's AppleScript interface</string>
<key>Name</key>
<string>Cog</string>
</dict>
</plist>

240
Cog.sdef Normal file
View File

@ -0,0 +1,240 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
<dictionary title="Cog Terminology">
<suite name="Cog Suite" code="????" description="The standard suite for Cog.">
<cocoa name="NSCoreSuite"/>
<enumeration name="save options" code="savo">
<enumerator name="yes" code="yes " description="Save the file."/>
<enumerator name="no" code="no " description="Do not save the file."/>
<enumerator name="ask" code="ask " description="Ask the user whether or not to save the file."/>
</enumeration>
<class name="item" code="cobj" description="A scriptable object.">
<cocoa class="AbstractObject"/>
<property name="class" code="pcls" description="The class of the object." type="type" access="r">
<cocoa key="classCode"/>
</property>
<property name="properties" code="pALL" description="All of the object&apos;s properties." type="record">
<cocoa key="scriptingProperties"/>
</property>
<!--
The blank method declarations are needed to emulate the existing
NSCoreSuite.scriptSuite.framework. Ordinarily, you wouldn't do this.
-->
<responds-to command="count">
<cocoa method=""/>
</responds-to>
<responds-to command="delete">
<cocoa method=""/>
</responds-to>
<responds-to command="duplicate">
<cocoa method=""/>
</responds-to>
<responds-to command="exists">
<cocoa method=""/>
</responds-to>
<responds-to command="get">
<cocoa method=""/>
</responds-to>
<responds-to command="move">
<cocoa method=""/>
</responds-to>
<responds-to command="set">
<cocoa method=""/>
</responds-to>
</class>
<class name="application" code="capp" description="Cog&apos;s top level scripting object.">
<cocoa class="NSApplication"/>
<element type="window" access="r">
<cocoa key="orderedWindows"/>
</element>
<property name="name" code="pnam" description="The name of the application." type="text" access="r"/>
<property name="frontmost" code="pisf" description="Is this the frontmost (active) application?" type="boolean" access="r">
<cocoa key="isActive"/>
</property>
<property name="version" code="vers" description="The version of the application." type="text" access="r"/>
<property name="currentEntry" code="cure" description="The current entry playing." type="playlistentry" access="r">
<cocoa key="currentEntry"/>
</property>
<responds-to command="open">
<cocoa method="handleOpenScriptCommand:"/>
</responds-to>
<responds-to command="quit">
<cocoa method="handleQuitScriptCommand:"/>
</responds-to>
</class>
<class name="window" code="cwin" description="A window.">
<cocoa class="NSWindow"/>
<property name="name" code="pnam" description="The full title of the window." type="text">
<cocoa key="title"/>
</property>
<property name="id" code="ID " description="The unique identifier of the window." type="number" access="r">
<cocoa key="uniqueID"/>
</property>
<property name="bounds" code="pbnd" description="The bounding rectangle of the window." type="rectangle">
<cocoa key="boundsAsQDRect"/>
</property>
<property name="document" code="docu" description="The document whose contents are being displayed in the window." type="document" access="r"/>
<property name="closeable" code="hclb" description="Whether the window has a close box." type="boolean" access="r">
<cocoa key="hasCloseBox"/>
</property>
<property name="titled" code="ptit" description="Whether the window has a title bar." type="boolean" access="r">
<cocoa key="hasTitleBar"/>
</property>
<!-- the type is supposed to be "integer" -->
<property name="index" code="pidx" description="The index of the window in the back-to-front window ordering." type="number">
<cocoa key="orderedIndex"/>
</property>
<property name="floating" code="isfl" description="Whether the window floats." type="boolean" access="r">
<cocoa key="isFloatingPanel"/>
</property>
<property name="miniaturizable" code="ismn" description="Whether the window can be miniaturized." type="boolean" access="r">
<cocoa key="isMiniaturizable"/>
</property>
<property name="miniaturized" code="pmnd" description="Whether the window is currently miniaturized." type="boolean">
<cocoa key="isMiniaturized"/>
</property>
<property name="modal" code="pmod" description="Whether the window is the application&apos;s current modal window." type="boolean" access="r">
<cocoa key="isModalPanel"/>
</property>
<property name="resizable" code="prsz" description="Whether the window can be resized." type="boolean" access="r">
<cocoa key="isResizable"/>
</property>
<property name="visible" code="pvis" description="Whether the window is currently visible." type="boolean">
<cocoa key="isVisible"/>
</property>
<property name="zoomable" code="iszm" description="Whether the window can be zoomed." type="boolean" access="r">
<cocoa key="isZoomable"/>
</property>
<property name="zoomed" code="pzum" description="Whether the window is currently zoomed." type="boolean">
<cocoa key="isZoomed"/>
</property>
<responds-to command="close">
<cocoa method="handleCloseScriptCommand:"/>
</responds-to>
<responds-to command="print">
<cocoa method="handlePrintScriptCommand:"/>
</responds-to>
<responds-to command="save">
<cocoa method="handleSaveScriptCommand:"/>
</responds-to>
</class>
<class name="playlistentry" code="cPlE">
<cocoa class="PlaylistEntry" insert-at-beginning="yes"/>
<property name="url" code="pURL" description="The URL of the entry." type="file" access="r">
<cocoa key="URL" insert-at-beginning="yes"/>
</property>
<property name="album" code="pAlb" description="The album of the entry." type="text" access="r">
<cocoa key="album" insert-at-beginning="yes"/>
</property>
<property name="albumartist" code="pAlA" description="The album artist of the entry." type="text" access="r">
<cocoa key="albumartist" insert-at-beginning="yes"/>
</property>
<property name="artist" code="pArt" description="The artist of the entry" type="text">
<cocoa key="artist" insert-at-beginning="yes"/>
</property>
<property name="title" code="pTit" description="The title of the entry." type="text" access="r">
<cocoa key="title" insert-at-beginning="yes"/>
</property>
<property name="genre" code="pGen" description="The genre of the entry." type="text" access="r">
<cocoa key="genre" insert-at-beginning="yes"/>
</property>
<property name="length" code="pLen" description="The length of the entry, in seconds." type="real" access="r">
<cocoa key="length" insert-at-beginning="yes"/>
</property>
<property name="track" code="pTrk" description="The track number of the entry." type="integer" access="r">
<cocoa key="track" insert-at-beginning="yes"/>
</property>
<property name="disc" code="pDsc" description="The disc number of the entry." type="integer" access="r">
<cocoa key="disc" insert-at-beginning="yes"/>
</property>
<property name="year" code="pYer" description="The year of the entry." type="integer" access="r">
<cocoa key="year" insert-at-beginning="yes"/>
</property>
<property name="bitrate" code="pBit" description="The bitrate of the entry, in kilobits per second." type="integer" access="r">
<cocoa key="bitrate" insert-at-beginning="yes"/>
</property>
</class>
<!-- The old Standard Suite: run, reopen, open, print, and quit. -->
<command name="open" code="aevtodoc" description="Open an object."/>
<command name="quit" code="aevtquit" description="Quit an application.">
<cocoa class="NSQuitCommand"/>
<parameter name="saving" code="savo" description="Specifies whether changes should be saved before quitting." type="save options" optional="yes">
<cocoa key="SaveOptions"/>
</parameter>
</command>
<!-- The old Core Suite: the object model commands, plus a few more. -->
<command name="close" code="coreclos" description="Close an object.">
<cocoa class="NSCloseCommand"/>
<direct-parameter description="the object to close" type="specifier"/>
<parameter name="saving" code="savo" description="Specifies whether changes should be saved before closing." type="save options" optional="yes">
<cocoa key="SaveOptions"/>
</parameter>
<parameter name="saving in" code="kfil" description="The file in which to save the object." type="file" optional="yes">
<cocoa key="File"/>
</parameter>
</command>
<command name="count" code="corecnte" description="Return the number of elements of a particular class within an object.">
<cocoa class="NSCountCommand"/>
<direct-parameter description="the object whose elements are to be counted" type="specifier"/>
<parameter name="each" code="kocl" description="The class of objects to be counted." type="type" optional="yes">
<cocoa key="ObjectClass"/>
</parameter>
<result description="the number of elements" type="integer"/>
</command>
<command name="delete" code="coredelo" description="Delete an object.">
<cocoa class="NSDeleteCommand"/>
<direct-parameter description="the object to delete" type="specifier"/>
</command>
<command name="duplicate" code="coreclon" description="Copy object(s) and put the copies at a new location.">
<cocoa name="Copy" class="NSCloneCommand"/>
<direct-parameter description="the object(s) to duplicate" type="specifier"/>
<!-- "duplicate" is supposed to return the new objects.
<result type="object" description="to the duplicated object(s)"/>
-->
<!-- "to" is supposed to be optional. -->
<parameter name="to" code="insh" description="The location for the new object(s)." type="location specifier">
<cocoa key="ToLocation"/>
</parameter>
<parameter name="with properties" code="prdt" description="Properties to be set in the new duplicated object(s)." type="record" optional="yes">
<cocoa key="WithProperties"/>
</parameter>
</command>
<command name="exists" code="coredoex" description="Verify if an object exists.">
<cocoa class="NSExistsCommand"/>
<direct-parameter description="the object in question" type="specifier"/>
<result description="true if it exists, false if not" type="boolean"/>
</command>
<!-- "get" is supposed to be hidden. -->
<command name="get" code="coregetd" description="Get the data for an object.">
<cocoa class="NSGetCommand"/>
<direct-parameter type="specifier"/>
<result type="any"/>
</command>
<command name="make" code="corecrel" description="Make a new object.">
<cocoa name="Create" class="NSCreateCommand"/>
<parameter name="new" code="kocl" description="The class of the new object." type="type">
<cocoa key="ObjectClass"/>
</parameter>
<parameter name="at" code="insh" description="The location at which to insert the object." type="location specifier" optional="yes">
<cocoa key="Location"/>
</parameter>
<parameter name="with data" code="data" description="The initial data for the object." type="any" optional="yes">
<cocoa key="ObjectData"/>
</parameter>
<parameter name="with properties" code="prdt" description="The initial values for properties of the object." type="record" optional="yes">
<cocoa key="KeyDictionary"/>
</parameter>
<result description="to the new object" type="specifier"/>
</command>
<command name="move" code="coremove" description="Move object(s) to a new location.">
<cocoa class="NSMoveCommand"/>
<direct-parameter description="the object(s) to move" type="specifier"/>
<!-- "move" is supposed to return the relocated objects.
<result type="object" description="to the object(s) after they have been moved"/>
-->
<parameter name="to" code="insh" description="The new location for the object(s)." type="location specifier">
<cocoa key="ToLocation"/>
</parameter>
</command>
</suite>
</dictionary>

View File

@ -41,8 +41,6 @@
17818A9B0C0B27AC001C4916 /* wv.icns in Resources */ = {isa = PBXBuildFile; fileRef = 17818A940C0B27AC001C4916 /* wv.icns */; };
1784560F0F631E24007E8021 /* FileTreeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1784560E0F631E24007E8021 /* FileTreeViewController.m */; };
178456120F631E31007E8021 /* SideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 178456110F631E31007E8021 /* SideViewController.m */; };
1791005E0CB44D6D0070BC5C /* Cog.scriptSuite in Resources */ = {isa = PBXBuildFile; fileRef = 1791005C0CB44D6D0070BC5C /* Cog.scriptSuite */; };
1791005F0CB44D6D0070BC5C /* Cog.scriptTerminology in Resources */ = {isa = PBXBuildFile; fileRef = 1791005D0CB44D6D0070BC5C /* Cog.scriptTerminology */; };
1791FF900CB43A2C0070BC5C /* MediaKeysApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 1791FF8E0CB43A2C0070BC5C /* MediaKeysApplication.m */; };
179790E10C087AB7001D6996 /* OpenURLPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 179790DF0C087AB7001D6996 /* OpenURLPanel.m */; };
179D031E0E0CB2500064A77A /* ContainedNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 179D03090E0CB2500064A77A /* ContainedNode.m */; };
@ -99,6 +97,7 @@
830C37A527B95EB300E02BB0 /* EqualizerWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 830C37A427B95EB300E02BB0 /* EqualizerWindowController.m */; };
830C37FC27B9956C00E02BB0 /* analyzer.c in Sources */ = {isa = PBXBuildFile; fileRef = 830C37F227B9956C00E02BB0 /* analyzer.c */; };
8314A46F27A28C29000EBE7E /* equalizerTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 8314A46527A28C28000EBE7E /* equalizerTemplate.pdf */; };
831B99BF27C23E88005A969B /* Cog.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 831B99BE27C23E88005A969B /* Cog.sdef */; };
832923AF279FAC400048201E /* Cog.q1.json in Resources */ = {isa = PBXBuildFile; fileRef = 832923AE279FAC400048201E /* Cog.q1.json */; };
83293070277886250010C07E /* OpenMPTOld.bundle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8329306D277885790010C07E /* OpenMPTOld.bundle */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
832C1253180BD1E2005507C1 /* Cog.help in Resources */ = {isa = PBXBuildFile; fileRef = 832C1252180BD1E2005507C1 /* Cog.help */; };
@ -784,8 +783,6 @@
1784560E0F631E24007E8021 /* FileTreeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileTreeViewController.m; path = FileTree/FileTreeViewController.m; sourceTree = "<group>"; };
178456100F631E31007E8021 /* SideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SideViewController.h; sourceTree = "<group>"; };
178456110F631E31007E8021 /* SideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SideViewController.m; sourceTree = "<group>"; };
1791005C0CB44D6D0070BC5C /* Cog.scriptSuite */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Cog.scriptSuite; sourceTree = "<group>"; };
1791005D0CB44D6D0070BC5C /* Cog.scriptTerminology */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Cog.scriptTerminology; sourceTree = "<group>"; };
1791FF8D0CB43A2C0070BC5C /* MediaKeysApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaKeysApplication.h; sourceTree = "<group>"; };
1791FF8E0CB43A2C0070BC5C /* MediaKeysApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MediaKeysApplication.m; sourceTree = "<group>"; };
179790DE0C087AB7001D6996 /* OpenURLPanel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = OpenURLPanel.h; sourceTree = "<group>"; };
@ -889,6 +886,7 @@
830C37F227B9956C00E02BB0 /* analyzer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = analyzer.c; sourceTree = "<group>"; };
8314A46527A28C28000EBE7E /* equalizerTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = equalizerTemplate.pdf; path = Images/equalizerTemplate.pdf; sourceTree = "<group>"; };
8314D63B1A354DFE00EEE8E6 /* sidplay.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = sidplay.xcodeproj; path = Plugins/sidplay/sidplay.xcodeproj; sourceTree = "<group>"; };
831B99BE27C23E88005A969B /* Cog.sdef */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Cog.sdef; sourceTree = "<group>"; };
832923AE279FAC400048201E /* Cog.q1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Cog.q1.json; sourceTree = "<group>"; };
83293065277885790010C07E /* OpenMPTOld.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OpenMPTOld.xcodeproj; path = Plugins/OpenMPT.old/OpenMPTOld.xcodeproj; sourceTree = "<group>"; };
832C1252180BD1E2005507C1 /* Cog.help */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Cog.help; sourceTree = "<group>"; };
@ -1485,9 +1483,8 @@
8D1107310486CEB800E47090 /* Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
8E7575D909F31E930080F1EE /* Localizable.strings */,
1791005C0CB44D6D0070BC5C /* Cog.scriptSuite */,
1791005D0CB44D6D0070BC5C /* Cog.scriptTerminology */,
832923AE279FAC400048201E /* Cog.q1.json */,
831B99BE27C23E88005A969B /* Cog.sdef */,
835EDD8027A000E8001EDCCE /* gsx.wv */,
830C379F27B95E3000E02BB0 /* Equalizer.xib */,
17D1B0D00F6320EA00694C57 /* InfoInspector.xib */,
@ -2426,8 +2423,6 @@
838F851C256B4AC400C3E614 /* icon_blank.icns in Resources */,
17818A9A0C0B27AC001C4916 /* wav.icns in Resources */,
17818A9B0C0B27AC001C4916 /* wv.icns in Resources */,
1791005E0CB44D6D0070BC5C /* Cog.scriptSuite in Resources */,
1791005F0CB44D6D0070BC5C /* Cog.scriptTerminology in Resources */,
8384916518083EAB00E7332D /* repeatModeOffTemplate.pdf in Resources */,
17D1B27D0CF8B2830028F5B5 /* cue.icns in Resources */,
8384915A18083EAB00E7332D /* missingArt@2x.png in Resources */,
@ -2439,6 +2434,7 @@
17D1B2800CF8B2830028F5B5 /* s3m.icns in Resources */,
8384916718083EAB00E7332D /* shuffleAlbumTemplate.pdf in Resources */,
17D1B2810CF8B2830028F5B5 /* song.icns in Resources */,
831B99BF27C23E88005A969B /* Cog.sdef in Resources */,
832923AF279FAC400048201E /* Cog.q1.json in Resources */,
17D1B2820CF8B2830028F5B5 /* vg.icns in Resources */,
17D1B2830CF8B2830028F5B5 /* xm.icns in Resources */,

View File

@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>OSAScriptingDefinition</key>
<string>Cog.sdef</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>