| """Utility routines depending on the finder, | |
| a combination of code by Jack Jansen and erik@letterror.com. | |
| Most events have been captured from | |
| Lasso Capture AE and than translated to python code. | |
| IMPORTANT | |
| Note that the processes() function returns different values | |
| depending on the OS version it is running on. On MacOS 9 | |
| the Finder returns the process *names* which can then be | |
| used to find out more about them. On MacOS 8.6 and earlier | |
| the Finder returns a code which does not seem to work. | |
| So bottom line: the processes() stuff does not work on < MacOS9 | |
| Mostly written by erik@letterror.com | |
| """ | |
| from warnings import warnpy3k | |
| warnpy3k("In 3.x, the findertools module is removed.", stacklevel=2) | |
| import Finder | |
| from Carbon import AppleEvents | |
| import aetools | |
| import MacOS | |
| import sys | |
| import Carbon.File | |
| import Carbon.Folder | |
| import aetypes | |
| from types import * | |
| __version__ = '1.1' | |
| Error = 'findertools.Error' | |
| _finder_talker = None | |
| def _getfinder(): | |
| """returns basic (recyclable) Finder AE interface object""" | |
| global _finder_talker | |
| if not _finder_talker: | |
| _finder_talker = Finder.Finder() | |
| _finder_talker.send_flags = ( _finder_talker.send_flags | | |
| AppleEvents.kAECanInteract | AppleEvents.kAECanSwitchLayer) | |
| return _finder_talker | |
| def launch(file): | |
| """Open a file thru the finder. Specify file by name or fsspec""" | |
| finder = _getfinder() | |
| fss = Carbon.File.FSSpec(file) | |
| return finder.open(fss) | |
| def Print(file): | |
| """Print a file thru the finder. Specify file by name or fsspec""" | |
| finder = _getfinder() | |
| fss = Carbon.File.FSSpec(file) | |
| return finder._print(fss) | |
| def copy(src, dstdir): | |
| """Copy a file to a folder""" | |
| finder = _getfinder() | |
| if type(src) == type([]): | |
| src_fss = [] | |
| for s in src: | |
| src_fss.append(Carbon.File.FSSpec(s)) | |
| else: | |
| src_fss = Carbon.File.FSSpec(src) | |
| dst_fss = Carbon.File.FSSpec(dstdir) | |
| return finder.duplicate(src_fss, to=dst_fss) | |
| def move(src, dstdir): | |
| """Move a file to a folder""" | |
| finder = _getfinder() | |
| if type(src) == type([]): | |
| src_fss = [] | |
| for s in src: | |
| src_fss.append(Carbon.File.FSSpec(s)) | |
| else: | |
| src_fss = Carbon.File.FSSpec(src) | |
| dst_fss = Carbon.File.FSSpec(dstdir) | |
| return finder.move(src_fss, to=dst_fss) | |
| def sleep(): | |
| """Put the mac to sleep""" | |
| finder = _getfinder() | |
| finder.sleep() | |
| def shutdown(): | |
| """Shut the mac down""" | |
| finder = _getfinder() | |
| finder.shut_down() | |
| def restart(): | |
| """Restart the mac""" | |
| finder = _getfinder() | |
| finder.restart() | |
| #--------------------------------------------------- | |
| # Additional findertools | |
| # | |
| def reveal(file): | |
| """Reveal a file in the finder. Specify file by name, fsref or fsspec.""" | |
| finder = _getfinder() | |
| fsr = Carbon.File.FSRef(file) | |
| file_alias = fsr.FSNewAliasMinimal() | |
| return finder.reveal(file_alias) | |
| def select(file): | |
| """select a file in the finder. Specify file by name, fsref or fsspec.""" | |
| finder = _getfinder() | |
| fsr = Carbon.File.FSRef(file) | |
| file_alias = fsr.FSNewAliasMinimal() | |
| return finder.select(file_alias) | |
| def update(file): | |
| """Update the display of the specified object(s) to match | |
| their on-disk representation. Specify file by name, fsref or fsspec.""" | |
| finder = _getfinder() | |
| fsr = Carbon.File.FSRef(file) | |
| file_alias = fsr.FSNewAliasMinimal() | |
| return finder.update(file_alias) | |
| #--------------------------------------------------- | |
| # More findertools | |
| # | |
| def comment(object, comment=None): | |
| """comment: get or set the Finder-comment of the item, displayed in the 'Get Info' window.""" | |
| object = Carbon.File.FSRef(object) | |
| object_alias = object.FSNewAliasMinimal() | |
| if comment is None: | |
| return _getcomment(object_alias) | |
| else: | |
| return _setcomment(object_alias, comment) | |
| def _setcomment(object_alias, comment): | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| args["data"] = comment | |
| _reply, args, attrs = finder.send("core", "setd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def _getcomment(object_alias): | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('comt'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| #--------------------------------------------------- | |
| # Get information about current processes in the Finder. | |
| def processes(): | |
| """processes returns a list of all active processes running on this computer and their creators.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| processnames = [] | |
| processnumbers = [] | |
| creators = [] | |
| partitions = [] | |
| used = [] | |
| ## get the processnames or else the processnumbers | |
| args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None) | |
| _reply, args, attrs = finder.send('core', 'getd', args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| p = [] | |
| if '----' in args: | |
| p = args['----'] | |
| for proc in p: | |
| if hasattr(proc, 'seld'): | |
| # it has a real name | |
| processnames.append(proc.seld) | |
| elif hasattr(proc, 'type'): | |
| if proc.type == "psn ": | |
| # it has a process number | |
| processnumbers.append(proc.data) | |
| ## get the creators | |
| args = {} | |
| attrs = {} | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="indx", seld=aetypes.Unknown('abso', "all "), fr=None) | |
| args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fcrt'), fr=aeobj_0) | |
| _reply, args, attrs = finder.send('core', 'getd', args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(_arg) | |
| if '----' in args: | |
| p = args['----'] | |
| creators = p[:] | |
| ## concatenate in one dict | |
| result = [] | |
| if len(processnames) > len(processnumbers): | |
| data = processnames | |
| else: | |
| data = processnumbers | |
| for i in range(len(creators)): | |
| result.append((data[i], creators[i])) | |
| return result | |
| class _process: | |
| pass | |
| def isactiveprocess(processname): | |
| """Check of processname is active. MacOS9""" | |
| all = processes() | |
| ok = 0 | |
| for n, c in all: | |
| if n == processname: | |
| return 1 | |
| return 0 | |
| def processinfo(processname): | |
| """Return an object with all process properties as attributes for processname. MacOS9""" | |
| p = _process() | |
| if processname == "Finder": | |
| p.partition = None | |
| p.used = None | |
| else: | |
| p.partition = _processproperty(processname, 'appt') | |
| p.used = _processproperty(processname, 'pusd') | |
| p.visible = _processproperty(processname, 'pvis') #Is the process' layer visible? | |
| p.frontmost = _processproperty(processname, 'pisf') #Is the process the frontmost process? | |
| p.file = _processproperty(processname, 'file') #the file from which the process was launched | |
| p.filetype = _processproperty(processname, 'asty') #the OSType of the file type of the process | |
| p.creatortype = _processproperty(processname, 'fcrt') #the OSType of the creator of the process (the signature) | |
| p.accepthighlevel = _processproperty(processname, 'revt') #Is the process high-level event aware (accepts open application, open document, print document, and quit)? | |
| p.hasscripting = _processproperty(processname, 'hscr') #Does the process have a scripting terminology, i.e., can it be scripted? | |
| return p | |
| def _processproperty(processname, property): | |
| """return the partition size and memory used for processname""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prcs'), form="name", seld=processname, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type(property), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| #--------------------------------------------------- | |
| # Mess around with Finder windows. | |
| def openwindow(object): | |
| """Open a Finder window for object, Specify object by name or fsspec.""" | |
| finder = _getfinder() | |
| object = Carbon.File.FSRef(object) | |
| object_alias = object.FSNewAliasMinimal() | |
| args = {} | |
| attrs = {} | |
| _code = 'aevt' | |
| _subcode = 'odoc' | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None) | |
| args['----'] = aeobj_0 | |
| _reply, args, attrs = finder.send(_code, _subcode, args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| def closewindow(object): | |
| """Close a Finder window for folder, Specify by path.""" | |
| finder = _getfinder() | |
| object = Carbon.File.FSRef(object) | |
| object_alias = object.FSNewAliasMinimal() | |
| args = {} | |
| attrs = {} | |
| _code = 'core' | |
| _subcode = 'clos' | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None) | |
| args['----'] = aeobj_0 | |
| _reply, args, attrs = finder.send(_code, _subcode, args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| def location(object, pos=None): | |
| """Set the position of a Finder window for folder to pos=(w, h). Specify file by name or fsspec. | |
| If pos=None, location will return the current position of the object.""" | |
| object = Carbon.File.FSRef(object) | |
| object_alias = object.FSNewAliasMinimal() | |
| if not pos: | |
| return _getlocation(object_alias) | |
| return _setlocation(object_alias, pos) | |
| def _setlocation(object_alias, (x, y)): | |
| """_setlocation: Set the location of the icon for the object.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| args["data"] = [x, y] | |
| _reply, args, attrs = finder.send("core", "setd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| return (x,y) | |
| def _getlocation(object_alias): | |
| """_getlocation: get the location of the icon for the object.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('posn'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| pos = args['----'] | |
| return pos.h, pos.v | |
| def label(object, index=None): | |
| """label: set or get the label of the item. Specify file by name or fsspec.""" | |
| object = Carbon.File.FSRef(object) | |
| object_alias = object.FSNewAliasMinimal() | |
| if index is None: | |
| return _getlabel(object_alias) | |
| if index < 0 or index > 7: | |
| index = 0 | |
| return _setlabel(object_alias, index) | |
| def _getlabel(object_alias): | |
| """label: Get the label for the object.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('labi'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def _setlabel(object_alias, index): | |
| """label: Set the label for the object.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| _code = 'core' | |
| _subcode = 'setd' | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="alis", seld=object_alias, fr=None) | |
| aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('labi'), fr=aeobj_0) | |
| args['----'] = aeobj_1 | |
| args["data"] = index | |
| _reply, args, attrs = finder.send(_code, _subcode, args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| return index | |
| def windowview(folder, view=None): | |
| """windowview: Set the view of the window for the folder. Specify file by name or fsspec. | |
| 0 = by icon (default) | |
| 1 = by name | |
| 2 = by button | |
| """ | |
| fsr = Carbon.File.FSRef(folder) | |
| folder_alias = fsr.FSNewAliasMinimal() | |
| if view is None: | |
| return _getwindowview(folder_alias) | |
| return _setwindowview(folder_alias, view) | |
| def _setwindowview(folder_alias, view=0): | |
| """set the windowview""" | |
| attrs = {} | |
| args = {} | |
| if view == 1: | |
| _v = aetypes.Type('pnam') | |
| elif view == 2: | |
| _v = aetypes.Type('lgbu') | |
| else: | |
| _v = aetypes.Type('iimg') | |
| finder = _getfinder() | |
| aeobj_0 = aetypes.ObjectSpecifier(want = aetypes.Type('cfol'), | |
| form = 'alis', seld = folder_alias, fr=None) | |
| aeobj_1 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), | |
| form = 'prop', seld = aetypes.Type('cwnd'), fr=aeobj_0) | |
| aeobj_2 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), | |
| form = 'prop', seld = aetypes.Type('pvew'), fr=aeobj_1) | |
| aeobj_3 = aetypes.ObjectSpecifier(want = aetypes.Type('prop'), | |
| form = 'prop', seld = _v, fr=None) | |
| _code = 'core' | |
| _subcode = 'setd' | |
| args['----'] = aeobj_2 | |
| args['data'] = aeobj_3 | |
| _reply, args, attrs = finder.send(_code, _subcode, args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def _getwindowview(folder_alias): | |
| """get the windowview""" | |
| attrs = {} | |
| args = {} | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), form="alis", seld=folder_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_00) | |
| aeobj_02 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('pvew'), fr=aeobj_01) | |
| args['----'] = aeobj_02 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| views = {'iimg':0, 'pnam':1, 'lgbu':2} | |
| if '----' in args: | |
| return views[args['----'].enum] | |
| def windowsize(folder, size=None): | |
| """Set the size of a Finder window for folder to size=(w, h), Specify by path. | |
| If size=None, windowsize will return the current size of the window. | |
| Specify file by name or fsspec. | |
| """ | |
| fsr = Carbon.File.FSRef(folder) | |
| folder_alias = fsr.FSNewAliasMinimal() | |
| openwindow(fsr) | |
| if not size: | |
| return _getwindowsize(folder_alias) | |
| return _setwindowsize(folder_alias, size) | |
| def _setwindowsize(folder_alias, (w, h)): | |
| """Set the size of a Finder window for folder to (w, h)""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| _code = 'core' | |
| _subcode = 'setd' | |
| aevar00 = [w, h] | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), | |
| form="alis", seld=folder_alias, fr=None) | |
| aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0) | |
| aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1) | |
| args['----'] = aeobj_2 | |
| args["data"] = aevar00 | |
| _reply, args, attrs = finder.send(_code, _subcode, args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| return (w, h) | |
| def _getwindowsize(folder_alias): | |
| """Set the size of a Finder window for folder to (w, h)""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), | |
| form="alis", seld=folder_alias, fr=None) | |
| aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0) | |
| aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('posn'), fr=aeobj_1) | |
| args['----'] = aeobj_2 | |
| _reply, args, attrs = finder.send('core', 'getd', args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def windowposition(folder, pos=None): | |
| """Set the position of a Finder window for folder to pos=(w, h).""" | |
| fsr = Carbon.File.FSRef(folder) | |
| folder_alias = fsr.FSNewAliasMinimal() | |
| openwindow(fsr) | |
| if not pos: | |
| return _getwindowposition(folder_alias) | |
| if type(pos) == InstanceType: | |
| # pos might be a QDPoint object as returned by _getwindowposition | |
| pos = (pos.h, pos.v) | |
| return _setwindowposition(folder_alias, pos) | |
| def _setwindowposition(folder_alias, (x, y)): | |
| """Set the size of a Finder window for folder to (w, h).""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), | |
| form="alis", seld=folder_alias, fr=None) | |
| aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0) | |
| aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('posn'), fr=aeobj_1) | |
| args['----'] = aeobj_2 | |
| args["data"] = [x, y] | |
| _reply, args, attrs = finder.send('core', 'setd', args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def _getwindowposition(folder_alias): | |
| """Get the size of a Finder window for folder, Specify by path.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_0 = aetypes.ObjectSpecifier(want=aetypes.Type('cfol'), | |
| form="alis", seld=folder_alias, fr=None) | |
| aeobj_1 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('cwnd'), fr=aeobj_0) | |
| aeobj_2 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('ptsz'), fr=aeobj_1) | |
| args['----'] = aeobj_2 | |
| _reply, args, attrs = finder.send('core', 'getd', args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def icon(object, icondata=None): | |
| """icon sets the icon of object, if no icondata is given, | |
| icon will return an AE object with binary data for the current icon. | |
| If left untouched, this data can be used to paste the icon on another file. | |
| Development opportunity: get and set the data as PICT.""" | |
| fsr = Carbon.File.FSRef(object) | |
| object_alias = fsr.FSNewAliasMinimal() | |
| if icondata is None: | |
| return _geticon(object_alias) | |
| return _seticon(object_alias, icondata) | |
| def _geticon(object_alias): | |
| """get the icondata for object. Binary data of some sort.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), | |
| form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def _seticon(object_alias, icondata): | |
| """set the icondata for object, formatted as produced by _geticon()""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('cobj'), | |
| form="alis", seld=object_alias, fr=None) | |
| aeobj_01 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), | |
| form="prop", seld=aetypes.Type('iimg'), fr=aeobj_00) | |
| args['----'] = aeobj_01 | |
| args["data"] = icondata | |
| _reply, args, attrs = finder.send("core", "setd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'].data | |
| #--------------------------------------------------- | |
| # Volumes and servers. | |
| def mountvolume(volume, server=None, username=None, password=None): | |
| """mount a volume, local or on a server on AppleTalk. | |
| Note: mounting an ASIP server requires a different operation. | |
| server is the name of the server where the volume belongs | |
| username, password belong to a registered user of the volume.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| if password: | |
| args["PASS"] = password | |
| if username: | |
| args["USER"] = username | |
| if server: | |
| args["SRVR"] = server | |
| args['----'] = volume | |
| _reply, args, attrs = finder.send("aevt", "mvol", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def unmountvolume(volume): | |
| """unmount a volume that's on the desktop""" | |
| putaway(volume) | |
| def putaway(object): | |
| """puth the object away, whereever it came from.""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('cdis'), form="name", seld=object, fr=None) | |
| _reply, args, attrs = talker.send("fndr", "ptwy", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| #--------------------------------------------------- | |
| # Miscellaneous functions | |
| # | |
| def volumelevel(level): | |
| """set the audio output level, parameter between 0 (silent) and 7 (full blast)""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| if level < 0: | |
| level = 0 | |
| elif level > 7: | |
| level = 7 | |
| args['----'] = level | |
| _reply, args, attrs = finder.send("aevt", "stvl", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def OSversion(): | |
| """return the version of the system software""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| aeobj_00 = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('ver2'), fr=None) | |
| args['----'] = aeobj_00 | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| return args['----'] | |
| def filesharing(): | |
| """return the current status of filesharing and whether it is starting up or not: | |
| -1 file sharing is off and not starting up | |
| 0 file sharing is off and starting up | |
| 1 file sharing is on""" | |
| status = -1 | |
| finder = _getfinder() | |
| # see if it is on | |
| args = {} | |
| attrs = {} | |
| args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fshr'), fr=None) | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| if args['----'] == 0: | |
| status = -1 | |
| else: | |
| status = 1 | |
| # is it starting up perchance? | |
| args = {} | |
| attrs = {} | |
| args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('fsup'), fr=None) | |
| _reply, args, attrs = finder.send("core", "getd", args, attrs) | |
| if 'errn' in args: | |
| raise Error, aetools.decodeerror(args) | |
| if '----' in args: | |
| if args['----'] == 1: | |
| status = 0 | |
| return status | |
| def movetotrash(path): | |
| """move the object to the trash""" | |
| fss = Carbon.File.FSSpec(path) | |
| trashfolder = Carbon.Folder.FSFindFolder(fss.as_tuple()[0], 'trsh', 0) | |
| move(path, trashfolder) | |
| def emptytrash(): | |
| """empty the trash""" | |
| finder = _getfinder() | |
| args = {} | |
| attrs = {} | |
| args['----'] = aetypes.ObjectSpecifier(want=aetypes.Type('prop'), form="prop", seld=aetypes.Type('trsh'), fr=None) | |
| _reply, args, attrs = finder.send("fndr", "empt", args, attrs) | |
| if 'errn' in args: | |
| raise aetools.Error, aetools.decodeerror(args) | |
| def _test(): | |
| import EasyDialogs | |
| print 'Original findertools functionality test...' | |
| print 'Testing launch...' | |
| pathname = EasyDialogs.AskFileForOpen('File to launch:') | |
| if pathname: | |
| result = launch(pathname) | |
| if result: | |
| print 'Result: ', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| print 'Testing print...' | |
| pathname = EasyDialogs.AskFileForOpen('File to print:') | |
| if pathname: | |
| result = Print(pathname) | |
| if result: | |
| print 'Result: ', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| print 'Testing copy...' | |
| pathname = EasyDialogs.AskFileForOpen('File to copy:') | |
| if pathname: | |
| destdir = EasyDialogs.AskFolder('Destination:') | |
| if destdir: | |
| result = copy(pathname, destdir) | |
| if result: | |
| print 'Result:', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| print 'Testing move...' | |
| pathname = EasyDialogs.AskFileForOpen('File to move:') | |
| if pathname: | |
| destdir = EasyDialogs.AskFolder('Destination:') | |
| if destdir: | |
| result = move(pathname, destdir) | |
| if result: | |
| print 'Result:', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| print 'Testing sleep...' | |
| if EasyDialogs.AskYesNoCancel('Sleep?') > 0: | |
| result = sleep() | |
| if result: | |
| print 'Result:', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| print 'Testing shutdown...' | |
| if EasyDialogs.AskYesNoCancel('Shut down?') > 0: | |
| result = shutdown() | |
| if result: | |
| print 'Result:', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| print 'Testing restart...' | |
| if EasyDialogs.AskYesNoCancel('Restart?') > 0: | |
| result = restart() | |
| if result: | |
| print 'Result:', result | |
| print 'Press return-', | |
| sys.stdin.readline() | |
| def _test2(): | |
| print '\nmorefindertools version %s\nTests coming up...' %__version__ | |
| import os | |
| import random | |
| # miscellaneous | |
| print '\tfilesharing on?', filesharing() # is file sharing on, off, starting up? | |
| print '\tOS version', OSversion() # the version of the system software | |
| # set the soundvolume in a simple way | |
| print '\tSystem beep volume' | |
| for i in range(0, 7): | |
| volumelevel(i) | |
| MacOS.SysBeep() | |
| # Finder's windows, file location, file attributes | |
| open("@findertoolstest", "w") | |
| f = "@findertoolstest" | |
| reveal(f) # reveal this file in a Finder window | |
| select(f) # select this file | |
| base, file = os.path.split(f) | |
| closewindow(base) # close the window this file is in (opened by reveal) | |
| openwindow(base) # open it again | |
| windowview(base, 1) # set the view by list | |
| label(f, 2) # set the label of this file to something orange | |
| print '\tlabel', label(f) # get the label of this file | |
| # the file location only works in a window with icon view! | |
| print 'Random locations for an icon' | |
| windowview(base, 0) # set the view by icon | |
| windowsize(base, (600, 600)) | |
| for i in range(50): | |
| location(f, (random.randint(10, 590), random.randint(10, 590))) | |
| windowsize(base, (200, 400)) | |
| windowview(base, 1) # set the view by icon | |
| orgpos = windowposition(base) | |
| print 'Animated window location' | |
| for i in range(10): | |
| pos = (100+i*10, 100+i*10) | |
| windowposition(base, pos) | |
| print '\twindow position', pos | |
| windowposition(base, orgpos) # park it where it was before | |
| print 'Put a comment in file', f, ':' | |
| print '\t', comment(f) # print the Finder comment this file has | |
| s = 'This is a comment no one reads!' | |
| comment(f, s) # set the Finder comment | |
| def _test3(): | |
| print 'MacOS9 or better specific functions' | |
| # processes | |
| pr = processes() # return a list of tuples with (active_processname, creatorcode) | |
| print 'Return a list of current active processes:' | |
| for p in pr: | |
| print '\t', p | |
| # get attributes of the first process in the list | |
| print 'Attributes of the first process in the list:' | |
| pinfo = processinfo(pr[0][0]) | |
| print '\t', pr[0][0] | |
| print '\t\tmemory partition', pinfo.partition # the memory allocated to this process | |
| print '\t\tmemory used', pinfo.used # the memory actuall used by this process | |
| print '\t\tis visible', pinfo.visible # is the process visible to the user | |
| print '\t\tis frontmost', pinfo.frontmost # is the process the front most one? | |
| print '\t\thas scripting', pinfo.hasscripting # is the process scriptable? | |
| print '\t\taccepts high level events', pinfo.accepthighlevel # does the process accept high level appleevents? | |
| if __name__ == '__main__': | |
| _test() | |
| _test2() | |
| _test3() |