Mercurial > projects > dwt-linux
diff dwt/browser/AppFileLocProvider.d @ 286:44258e0b6687
More fixes for xpcom
author | John Reimer<terminal.node@gmail.com> |
---|---|
date | Tue, 05 Aug 2008 10:11:58 -0700 |
parents | 93409d9838c5 |
children | b0bd1789106b |
line wrap: on
line diff
--- a/dwt/browser/AppFileLocProvider.d Thu Jul 31 21:56:03 2008 -0700 +++ b/dwt/browser/AppFileLocProvider.d Tue Aug 05 10:11:58 2008 -0700 @@ -7,103 +7,91 @@ * * Contributors: * IBM Corporation - initial API and implementation - * Port to the D programming language: - * John Reimer <terminal.node@gmail.com> + * Port to the D programming language: + * John Reimer <terminal.node@gmail.com> *******************************************************************************/ +module dwt.browser.AppFileLocProvider; -module dwt.browser.AppFileLocProvider; +import tango.sys.Environment; +import tango.text.Util; import dwt.dwthelper.utils; import dwt.internal.Compatibility; - +import dwt.internal.mozilla.XPCOM; +import dwt.internal.mozilla.XPCOMObject; import dwt.internal.mozilla.nsEmbedString; import dwt.internal.mozilla.nsID; -import dwt.internal.mozilla.nsIDirectoryService; +import dwt.internal.mozilla.nsIDirectoryServiceProvider; +import dwt.internal.mozilla.nsIDirectoryServiceProvider2; import dwt.internal.mozilla.nsIFile; import dwt.internal.mozilla.nsILocalFile; import dwt.internal.mozilla.nsISupports; -class AppFileLocProvider : nsISupports, nsIDirectoryServiceProvider2 -{ - // XPCOMObject supports; - // XPCOMObject directoryServiceProvider; - // XPCOMObject directoryServiceProvider2; - nsrefcnt _refCount = 0; - String mozillaPath, profilePath; +class AppFileLocProvider : directoryServiceProvider2 { + int refCount = 0; + String mozillaPath, profilePath; String[] pluginDirs; - bool isXULRunner; + bool isXULRunner; - static String SEPARATOR_OS = System.getProperty ("file.separator"); //$NON-NLS-1$ - static String CHROME_DIR = "chrome"; //$NON-NLS-1$ - static String COMPONENTS_DIR = "components"; //$NON-NLS-1$ - static String HISTORY_FILE = "history.dat"; //$NON-NLS-1$ - static String LOCALSTORE_FILE = "localstore.rdf"; //$NON-NLS-1$ - static String MIMETYPES_FILE = "mimeTypes.rdf"; //$NON-NLS-1$ - static String PLUGINS_DIR = "plugins"; //$NON-NLS-1$ - static String USER_PLUGINS_DIR = ".mozilla" + SEPARATOR_OS + "plugins"; //$NON-NLS-1$ //$NON-NLS-2$ - static String PREFERENCES_FILE = "prefs.js"; //$NON-NLS-1$ + static final String SEPARATOR_OS = System.getProperty ("file.separator"); //$NON-NLS-1$ + static final String CHROME_DIR = "chrome"; //$NON-NLS-1$ + static final String COMPONENTS_DIR = "components"; //$NON-NLS-1$ + static final String HISTORY_FILE = "history.dat"; //$NON-NLS-1$ + static final String LOCALSTORE_FILE = "localstore.rdf"; //$NON-NLS-1$ + static final String MIMETYPES_FILE = "mimeTypes.rdf"; //$NON-NLS-1$ + static final String PLUGINS_DIR = "plugins"; //$NON-NLS-1$ + static final String USER_PLUGINS_DIR = ".mozilla" ~ SEPARATOR_OS ~ "plugins"; //$NON-NLS-1$ //$NON-NLS-2$ + static final String PREFERENCES_FILE = "prefs.js"; //$NON-NLS-1$ -AppFileLocProvider (String path) { - mozillaPath = path + SEPARATOR_OS; - createCOMInterfaces (); +this (String path) { + mozillaPath = path ~ SEPARATOR_OS;f +} + +int AddRef () { + refCount++; + return refCount; } - int AddRef () - { - refCount++; - return refCount; - } - - nsresult QueryInterface ( nsIID* riid, void** ppvObject) - { - if (riid is null || ppvObject is null) - return NS_ERROR_NO_INTERFACE; - - if (riid == nsISupports.IID) - { - *ppvObject =cast(void*)cast(nsISupports)this; - AddRef (); - return NS_OK; - } +int QueryInterface (nsID* riid, int void** ppvObject) { + if (riid is null || ppvObject is null) return XPCOM.NS_ERROR_NO_INTERFACE; - if (riid == nsIDirectoryServiceProvider.IID) - { - *ppvObject = cast(void*)cast(nsIDirectoryServiceProvider)this; - AddRef (); - return NS_OK; - } + if (*riid == nsISupports.IID)) { + *ppvObject = cast(void*)cast(nsISupports)this; + AddRef (); + return XPCOM.NS_OK; + } + if (*riid == nsIDirectoryServiceProvider.IID) { + *ppvObject = cast(void*)cast(nsIDirectoryServiceProvider)this; + AddRef (); + return XPCOM.NS_OK; + } + if (*riid == nsIDirectoryServiceProvider2.IID) { + *ppvObject = cast(void*)cast(nsIDirectoryServiceProvider2)this; + AddRef (); + return XPCOM.NS_OK; + } + + *ppvObject = null; + return XPCOM.NS_ERROR_NO_INTERFACE; +} - if (riid == nsDirectoryServiceProvider2.IID) { - *ppvObject = cast(void*)cast(nsIDirectoryServiceProvider2)this; - AddRef (); - return NS_OK; - } - - *ppvObject = null; - return NS_ERROR_NO_INTERFACE; - } - - nsrefcnt Release () - { - _refCount--; - if (_refCount is 0) - return 0; - return _refCount; - } +int Release () { + refCount--; + if (refCount is 0) return 0; + return refCount; +} void setProfilePath (String path) { profilePath = path; if (!Compatibility.fileExists (path, "")) { //$NON-NLS-1$ - int /*long*/[] result = new int /*long*/[1]; - nsEmbedString pathString = new nsEmbedString (path); - int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result); + nsILocalFile result; + scope auto nsEmbedString pathString = new nsEmbedString (path); + int rc = XPCOM.NS_NewLocalFile (cast(nsAString*)pathString, 1, &result); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); - if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); - pathString.dispose (); + if (result is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); - nsILocalFile file = new nsILocalFile (result [0]); - rc = file.Create (nsILocalFile.DIRECTORY_TYPE, 0700); + rc = result.Create (nsILocalFile.DIRECTORY_TYPE, 0700); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); file.Release (); } @@ -111,43 +99,20 @@ /* nsIDirectoryServiceProvider2 */ -int getFiles (int /*long*/ prop, int /*long*/ _retval) { - int size = XPCOM.strlen (prop); - byte[] bytes = new byte[size]; - XPCOM.memmove (bytes, prop, size); - String propertyName = new String (MozillaDelegate.mbcsToWcs (null, bytes)); +nsresult GetFiles (char* prop, nsISimpleEnumerator* _retval) { + String propertyName = tango.stdc.stringz.fromStringz( prop ); String[] propertyValues = null; - if (propertyName.equals (XPCOM.NS_APP_PLUGINS_DIR_LIST)) { + if (propertyName == XPCOM.NS_APP_PLUGINS_DIR_LIST) { if (pluginDirs is null) { int index = 0; /* set the first value(s) to the MOZ_PLUGIN_PATH environment variable value if it's defined */ - int /*long*/ ptr = C.getenv (MozillaDelegate.wcsToMbcs (null, XPCOM.MOZILLA_PLUGIN_PATH, true)); - if (ptr !is 0) { - int length = C.strlen (ptr); - byte[] buffer = new byte[length]; - C.memmove (buffer, ptr, length); - String value = new String (MozillaDelegate.mbcsToWcs (null, buffer)); - if (value.length () > 0) { + String value = Environment.get (XPCOM.MOZILLA_PLUGIN_PATH); + if (ptr !is null) { + if (value.length > 0) { String separator = System.getProperty ("path.separator"); // $NON-NLS-1$ - Vector segments = new Vector (); - int start, end = -1; - do { - start = end + 1; - end = value.indexOf (separator, start); - String segment; - if (end is -1) { - segment = value.substring (start); - } else { - segment = value.substring (start, end); - } - if (segment.length () > 0) segments.addElement (segment); - } while (end !is -1); - int segmentsSize = segments.size (); - pluginDirs = new String [segmentsSize + 2]; - for (index = 0; index < segmentsSize; index++) { - pluginDirs[index] = (String)segments.elementAt (index); - } + foreach (segment; delimiter(value, separator)) + pluginDirs ~= segment; } } if (pluginDirs is null) { @@ -155,39 +120,36 @@ } /* set the next value to the GRE path + "plugins" */ - pluginDirs[index++] = mozillaPath + PLUGINS_DIR; + pluginDirs ~= mozillaPath ~ PLUGINS_DIR; /* set the next value to the home directory + "/.mozilla/plugins" */ - pluginDirs[index++] = System.getProperty("user.home") + SEPARATOR_OS + USER_PLUGINS_DIR; + pluginDirs ~= System.getProperty("user.home") ~ SEPARATOR_OS ~ USER_PLUGINS_DIR; } propertyValues = pluginDirs; } - XPCOM.memmove(_retval, new int /*long*/[] {0}, C.PTR_SIZEOF); + *_retval = null; + //XPCOM.memmove(_retval, new int /*long*/[] {0}, C.PTR_SIZEOF); if (propertyValues !is null) { - int /*long*/[] result = new int /*long*/[1]; + nsILocalFile localFile; + nsIFile file; nsISupports[] files = new nsISupports [propertyValues.length]; int index = 0; for (int i = 0; i < propertyValues.length; i++) { - nsEmbedString pathString = new nsEmbedString (propertyValues[i]); - int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result); + scope auto pathString = new nsEmbedString (propertyValues[i]); + int rc = XPCOM.NS_NewLocalFile (cast(nsAString*)pathString, 1, &(cast(void*)localFile)); if (rc !is XPCOM.NS_ERROR_FILE_UNRECOGNIZED_PATH) { /* value appears to be a valid pathname */ if (rc !is XPCOM.NS_OK) Mozilla.error (rc); - if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); + if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); - nsILocalFile localFile = new nsILocalFile (result[0]); - result[0] = 0; - rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, result); + rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, &(cast(void*)file)); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); - if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE); + if (file is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE); localFile.Release (); - nsIFile file = new nsIFile (result[0]); - files[index++] = file; + files[index++] = cast(nsISupports)file; } - pathString.dispose (); - result[0] = 0; } if (index < propertyValues.length) { @@ -197,9 +159,9 @@ files = temp; } - SimpleEnumerator enumerator = new SimpleEnumerator (files); + auto enumerator = new SimpleEnumerator (files); enumerator.AddRef (); - XPCOM.memmove (_retval, new int /*long*/[] {enumerator.getAddress ()}, C.PTR_SIZEOF); + *_retval = cast(nsISimpleEnumerator)enumerator; return XPCOM.NS_OK; } @@ -208,46 +170,43 @@ /* nsIDirectoryServiceProvider implementation */ -int getFile(int /*long*/ prop, int /*long*/ persistent, int /*long*/ _retval) { - int size = XPCOM.strlen (prop); - byte[] bytes = new byte[size]; - XPCOM.memmove (bytes, prop, size); - String propertyName = new String (MozillaDelegate.mbcsToWcs (null, bytes)); +nsresult GetFile(char* prop, PRBool* persistent, nsIFile* _retval) { + String propertyName = tango.stdc.stringz.fromStringz( prop ); String propertyValue = null; - if (propertyName.equals (XPCOM.NS_APP_HISTORY_50_FILE)) { - propertyValue = profilePath + HISTORY_FILE; - } else if (propertyName.equals (XPCOM.NS_APP_USER_MIMETYPES_50_FILE)) { - propertyValue = profilePath + MIMETYPES_FILE; - } else if (propertyName.equals (XPCOM.NS_APP_PREFS_50_FILE)) { - propertyValue = profilePath + PREFERENCES_FILE; - } else if (propertyName.equals (XPCOM.NS_APP_PREFS_50_DIR)) { + if (propertyName == (XPCOM.NS_APP_HISTORY_50_FILE)) { + propertyValue = profilePath ~ HISTORY_FILE; + } else if (propertyName == (XPCOM.NS_APP_USER_MIMETYPES_50_FILE)) { + propertyValue = profilePath ~ MIMETYPES_FILE; + } else if (propertyName == (XPCOM.NS_APP_PREFS_50_FILE)) { + propertyValue = profilePath ~ PREFERENCES_FILE; + } else if (propertyName == (XPCOM.NS_APP_PREFS_50_DIR)) { propertyValue = profilePath; - } else if (propertyName.equals (XPCOM.NS_APP_USER_CHROME_DIR)) { - propertyValue = profilePath + CHROME_DIR; - } else if (propertyName.equals (XPCOM.NS_APP_USER_PROFILE_50_DIR)) { + } else if (propertyName == (XPCOM.NS_APP_USER_CHROME_DIR)) { + propertyValue = profilePath ~ CHROME_DIR; + } else if (propertyName == (XPCOM.NS_APP_USER_PROFILE_50_DIR)) { propertyValue = profilePath; - } else if (propertyName.equals (XPCOM.NS_APP_LOCALSTORE_50_FILE)) { - propertyValue = profilePath + LOCALSTORE_FILE; - } else if (propertyName.equals (XPCOM.NS_APP_CACHE_PARENT_DIR)) { + } else if (propertyName == (XPCOM.NS_APP_LOCALSTORE_50_FILE)) { + propertyValue = profilePath ~ LOCALSTORE_FILE; + } else if (propertyName == (XPCOM.NS_APP_CACHE_PARENT_DIR)) { propertyValue = profilePath; - } else if (propertyName.equals (XPCOM.NS_OS_HOME_DIR)) { + } else if (propertyName == (XPCOM.NS_OS_HOME_DIR)) { propertyValue = System.getProperty("user.home"); //$NON-NLS-1$ - } else if (propertyName.equals (XPCOM.NS_OS_TEMP_DIR)) { + } else if (propertyName == (XPCOM.NS_OS_TEMP_DIR)) { propertyValue = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ - } else if (propertyName.equals (XPCOM.NS_GRE_DIR)) { + } else if (propertyName == (XPCOM.NS_GRE_DIR)) { propertyValue = mozillaPath; - } else if (propertyName.equals (XPCOM.NS_GRE_COMPONENT_DIR)) { - propertyValue = mozillaPath + COMPONENTS_DIR; - } else if (propertyName.equals (XPCOM.NS_XPCOM_INIT_CURRENT_PROCESS_DIR)) { + } else if (propertyName == (XPCOM.NS_GRE_COMPONENT_DIR)) { + propertyValue = mozillaPath ~ COMPONENTS_DIR; + } else if (propertyName == (XPCOM.NS_XPCOM_INIT_CURRENT_PROCESS_DIR)) { propertyValue = mozillaPath; - } else if (propertyName.equals (XPCOM.NS_OS_CURRENT_PROCESS_DIR)) { + } else if (propertyName == (XPCOM.NS_OS_CURRENT_PROCESS_DIR)) { propertyValue = mozillaPath; - } else if (propertyName.equals (XPCOM.NS_XPCOM_COMPONENT_DIR)) { - propertyValue = mozillaPath + COMPONENTS_DIR; - } else if (propertyName.equals (XPCOM.NS_XPCOM_CURRENT_PROCESS_DIR)) { + } else if (propertyName == (XPCOM.NS_XPCOM_COMPONENT_DIR)) { + propertyValue = mozillaPath ~ COMPONENTS_DIR; + } else if (propertyName == (XPCOM.NS_XPCOM_CURRENT_PROCESS_DIR)) { propertyValue = mozillaPath; - } else if (propertyName.equals (XPCOM.NS_APP_PREF_DEFAULTS_50_DIR)) { + } else if (propertyName == (XPCOM.NS_APP_PREF_DEFAULTS_50_DIR)) { /* * Answering a value for this property causes problems in Mozilla versions * < 1.7. Unfortunately this property is queried early enough in the @@ -261,23 +220,21 @@ if (isXULRunner) propertyValue = profilePath; } - XPCOM.memmove (persistent, new int[] {1}, 4); /* PRBool */ - XPCOM.memmove (_retval, new int /*long*/[] {0}, C.PTR_SIZEOF); - if (propertyValue !is null && propertyValue.length () > 0) { - int /*long*/[] result = new int /*long*/[1]; - nsEmbedString pathString = new nsEmbedString (propertyValue); - int rc = XPCOM.NS_NewLocalFile (pathString.getAddress (), 1, result); + *persistent = true; /* PRBool */ + *_retval = null; + if (propertyValue !is null && propertyValue.length > 0) { + nsILocalFile localFile; + scope auto pathString = new nsEmbedString (propertyValue); + int rc = XPCOM.NS_NewLocalFile (cast(nsAString*)pathString, 1, &(cast(void*)localFile)); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); - if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); - pathString.dispose (); + if (localFile is null) Mozilla.error (XPCOM.NS_ERROR_NULL_POINTER); - nsILocalFile localFile = new nsILocalFile (result [0]); - result[0] = 0; - rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, result); + nsIFile file; + rc = localFile.QueryInterface (nsIFile.NS_IFILE_IID, &(cast(void*)file)); if (rc !is XPCOM.NS_OK) Mozilla.error (rc); - if (result[0] is 0) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE); + if (file is null) Mozilla.error (XPCOM.NS_ERROR_NO_INTERFACE); - XPCOM.memmove (_retval, new int /*long*/[] {result[0]}, C.PTR_SIZEOF); + *_retval = file; localFile.Release (); return XPCOM.NS_OK; }