Added URL attribute to nsIFile (why: because (a) needs to vary for different implementations, and (b) need to factor out of necko for installer). Not implemented yet.

This commit is contained in:
warren%netscape.com 2000-09-12 08:05:13 +00:00
parent 6d3d1f2150
commit 9fc7180eb9
6 changed files with 115 additions and 1 deletions

View File

@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file

View File

@ -295,6 +295,12 @@ interface nsIFile : nsISupports
* not specify a directory.
*/
readonly attribute nsISimpleEnumerator directoryEntries;
/**
* Accesses the file: url for the nsIFile. Setting this causes the path
* to be reset.
*/
attribute string URL;
};
%{C++

View File

@ -2091,6 +2091,16 @@ nsLocalFile::GetDirectoryEntries(nsISimpleEnumerator * *entries)
return NS_OK;
}
NS_IMETHODIMP nsLocalFile::GetURL(char * *aURL)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsLocalFile::SetURL(const char * aURL)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsLocalFile::GetPersistentDescriptor(char * *aPersistentDescriptor)
{

View File

@ -2088,6 +2088,45 @@ nsLocalFile::GetDirectoryEntries(nsISimpleEnumerator * *entries)
return NS_OK;
}
NS_IMETHODIMP nsLocalFile::GetURL(char * *aURL)
{
nsresult rv;
char* ePath = (char*) nsMemory::Clone(mWorkingPath, strlen(mWorkingPath)+1);
if (ePath == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
// Replace \ with / to convert to an url
char* s = ePath;
while (*s) {
if (*s == '\\')
*s = '/';
s++;
}
// Escape the path with the directory mask
nsCAutoString tmp = ePath;
tmp.ReplaceChar(":", '|');
nsCAutoString escPath = "file://";
escPath += tmp;
// rv = nsURLEscape(ePath,nsIIOService::url_Directory + nsIIOService::url_Forced, escPath);
// if (NS_SUCCEEDED(rv)) {
PRBool dir;
rv = IsDirectory(&dir);
if (NS_SUCCEEDED(rv) && dir && escPath[escPath.Length() - 1] != '/') {
// make sure we have a trailing slash
escPath += "/";
}
*aURL = escPath.ToNewCString();
if (*aURL == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
// }
return rv;
}
NS_IMETHODIMP nsLocalFile::SetURL(const char * aURL)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsLocalFile::GetPersistentDescriptor(char * *aPersistentDescriptor)
{

View File

@ -1321,6 +1321,16 @@ nsLocalFile::GetDirectoryEntries(nsISimpleEnumerator **entries)
(void **)entries);
}
NS_IMETHODIMP nsLocalFile::GetURL(char * *aURL)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsLocalFile::SetURL(const char * aURL)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsLocalFile::Load(PRLibrary **_retval)
{

View File

@ -1848,6 +1848,55 @@ nsLocalFile::GetDirectoryEntries(nsISimpleEnumerator * *entries)
return NS_OK;
}
NS_IMETHODIMP nsLocalFile::GetURL(char * *aURL)
{
nsresult rv;
char* ePath = (char*) nsMemory::Clone(mWorkingPath, strlen(mWorkingPath)+1);
if (ePath == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
#if defined (XP_PC)
// Replace \ with / to convert to an url
char* s = ePath;
while (*s)
{
// We need to call IsDBCSLeadByte because
// Japanese windows can have 0x5C in the sencond byte
// of a Japanese character, for example 0x8F 0x5C is
// one Japanese character
if(::IsDBCSLeadByte(*s) && *(s+1) != nsnull) {
s++;
} else
if (*s == '\\')
*s = '/';
s++;
}
#endif
// Escape the path with the directory mask
nsCAutoString tmp(ePath);
tmp.ReplaceChar(":", '|');
nsCAutoString escPath("file://");
escPath += tmp;
// rv = nsURLEscape(ePath,nsIIOService::url_Directory + nsIIOService::url_Forced, escPath);
// if (NS_SUCCEEDED(rv)) {
PRBool dir;
rv = IsDirectory(&dir);
if (NS_SUCCEEDED(rv) && dir && escPath[escPath.Length() - 1] != '/') {
// make sure we have a trailing slash
escPath += "/";
}
*aURL = escPath.ToNewCString();
if (*aURL == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
// }
return rv;
}
NS_IMETHODIMP nsLocalFile::SetURL(const char * aURL)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
nsLocalFile::GetPersistentDescriptor(char * *aPersistentDescriptor)
{