// // GrowlPathUtilities.h // Growl // // Created by Ingmar Stein on 17.04.05. // Copyright 2005-2006 The Growl Project. All rights reserved. // // This file is under the BSD License, refer to License.txt for details /*we can't typedef the enum, because then NSSearchPathDirectory constants * cannot be used in GrowlSearchPathDirectory arguments/variables without a * compiler warning (because NSSearchPathDirectory and GrowlSearchPathDirectory * would then be different types). */ typedef int GrowlSearchPathDirectory; enum { //Library/Application\ Support/Growl GrowlSupportDirectory = 0x10000, //all other directory constants refer to subdirectories of Growl Support. GrowlScreenshotsDirectory, GrowlTicketsDirectory, GrowlPluginsDirectory, }; typedef NSSearchPathDomainMask GrowlSearchPathDomainMask; //consistency @interface GrowlPathUtilities : NSObject { } #pragma mark Bundles /*! @method growlPrefPaneBundle * @abstract Returns the Growl preference pane bundle. * @discussion First, attempts to retrieve the bundle for a running * GrowlHelperApp process using runningHelperAppBundle, and if * that was successful, returns the .prefpane bundle that contains it (if any). * Then, if that failed, searches all installed preference panes for the Growl * preference pane. * @result The NSBundle for the Growl preference pane if it is * installed; nil otherwise. */ + (NSBundle *) growlPrefPaneBundle; /*! @method helperAppBundle * @abstract Returns the GrowlHelperApp bundle. * @discussion First, attempts to retrieve the bundle for a running * GrowlHelperApp process using runningHelperAppBundle, and * returns that if it was successful. * Then, if it wasn't, searches for a Growl preference pane, and, if one is * installed, returns the GrowlHelperApp bundle inside it. * @result The NSBundle for GrowlHelperApp if it is present; * nil otherwise. */ + (NSBundle *) helperAppBundle; /*! @method runningHelperAppBundle * @abstract Returns the bundle for the running GrowlHelperApp process. * @discussion If GrowlHelperApp is running, returns an NSBundle for the .app * bundle it was loaded from. * If GrowlHelperApp is not running, returns nil. * @result The NSBundle for GrowlHelperApp if it is running; * nil otherwise. */ + (NSBundle *) runningHelperAppBundle; #pragma mark Directories /*! @method searchPathForDirectory:inDomains:mustBeWritable: * @abstract Returns an array of absolute paths to a given directory. * @discussion This method returns an array of all the directories of a given * type that exist (and, if flag is YES, are * writable). If no directories match this criteria, a valid (but empty) * array is returned. * * Unlike the NSSearchPathForDirectoriesInDomains function in * Foundation, this method does not allow you to specify whether tildes are * expanded: they will always be expanded. * @result An array of zero or more absolute paths. */ + (NSArray *) searchPathForDirectory:(GrowlSearchPathDirectory) directory inDomains:(GrowlSearchPathDomainMask) domainMask mustBeWritable:(BOOL)flag; /*! @method searchPathForDirectory:inDomains: * @abstract Returns an array of absolute paths to a given directory. * @discussion This method returns an array of all the directories of a given * type that exist. They need not be writable. * * Unlike the NSSearchPathForDirectoriesInDomains function in * Foundation, this method does not allow you to specify whether tildes are * expanded: they will always be expanded. * @result An array of zero or more absolute paths. */ + (NSArray *) searchPathForDirectory:(GrowlSearchPathDirectory) directory inDomains:(GrowlSearchPathDomainMask) domainMask; /*! @method growlSupportDirectory * @abstract Returns the path for Growl's folder inside Application Support. * @discussion This method creates the folder if it does not already exist. * @result The path to Growl's support directory. */ + (NSString *) growlSupportDirectory; /*! @method screenshotsDirectory * @abstract Returns the directory where screenshots are to be stored. * @discussion The default location of this directory is * $HOME/Library/Application\ Support/Growl/Screenshots. This method creates * the folder if it does not already exist. * @result The absolute path to the screenshot directory. */ + (NSString *) screenshotsDirectory; /*! @method ticketsDirectory * @abstract Returns the directory where tickets are to be saved. * @discussion The default location of this directory is * $HOME/Library/Application\ Support/Growl/Tickets. This method creates * the folder if it does not already exist. * @result The absolute path to the ticket directory. */ + (NSString *) ticketsDirectory; #pragma mark Screenshot names /*! @method nextScreenshotName * @abstract Returns the name you should use for the next screenshot. * @discussion Names returned by this method are currently in the format * 'Screenshot N', where N starts at 1 and continues indefinitely. Note the * lack of a filename extension: you append it yourself. * * The name returned by this method is guaranteed to not exist with any * filename extension. This is intentional: it would be confusing for the * user if the fifth screenshot were assigned the name 'Screenshot 1' simply * because the previous four screenshots had a different filename extension. * * Calling this method is the same as calling * nextScreenshotNameInDirectory: with a directory of * nil. * @result A valid, non-existing, serial filename for a screenshot. */ + (NSString *) nextScreenshotName; /*! @method nextScreenshotNameInDirectory: * @abstract Returns the name you should use for the next screenshot in a directory. * @discussion Names returned by this method are currently in the format * 'Screenshot N', where N starts at 1 and continues indefinitely. Note the * lack of a filename extension: you append it yourself. Note also that the * directory is not included as a prefix on the result. * * The name returned by this method is guaranteed to not exist in the given * directory with any filename extension. This is intentional: it would be * confusing for the user if the fifth screenshot were assigned the name * 'Screenshot 1' simply because the previous four screenshots had a * different filename extension. * @result A valid, non-existing, serial filename for a screenshot. */ + (NSString *) nextScreenshotNameInDirectory:(NSString *) dirName; #pragma mark Tickets /*! @method defaultSavePathForTicketWithApplicationName: * @abstract Returns an absolute path that can be used for saving a ticket. * @discussion When called with an application name, ".ticket" is appended to * it, and the result is appended to the absolute path to the ticket * directory. When called with nil, the ticket directory itself * is returned. * * For the purpose of this method, 'the ticket directory' refers to the first * writable directory returned by * +searchPathForDirectory:inDomains:. If there is no writable * directory, this method returns nil. * @param The application name for the ticket, or nil. * @result The absolute path to a ticket file, or the ticket directory where a * ticket file can be saved. */ + (NSString *) defaultSavePathForTicketWithApplicationName:(NSString *) appName; @end