Compress-Deflate7
view release on metacpan or search on metacpan
7zip/CPP/7zip/UI/FileManager/NetFolder.cpp view on Meta::CPAN
// NetFolder.cpp
#include "StdAfx.h"
#include "Windows/PropVariant.h"
#include "../../PropID.h"
#include "FSFolder.h"
#include "NetFolder.h"
#include "SysIconUtils.h"
using namespace NWindows;
using namespace NNet;
static const STATPROPSTG kProps[] =
{
{ NULL, kpidName, VT_BSTR},
{ NULL, kpidLocalName, VT_BSTR},
{ NULL, kpidComment, VT_BSTR},
{ NULL, kpidProvider, VT_BSTR}
};
void CNetFolder::Init(const UString &path)
{
/*
if (path.Length() > 2)
{
if (path[0] == L'\\' && path[1] == L'\\')
{
CResource netResource;
netResource.RemoteName = GetSystemString(path.Left(path.Length() - 1));
netResource.Scope = RESOURCE_GLOBALNET;
netResource.Type = RESOURCETYPE_DISK;
netResource.DisplayType = RESOURCEDISPLAYTYPE_SERVER;
netResource.Usage = RESOURCEUSAGE_CONTAINER;
Init(&netResource, 0, path);
return;
}
}
Init(0, 0 , L"");
*/
CResourceW resource;
resource.RemoteNameIsDefined = true;
resource.RemoteName = path.Left(path.Length() - 1);
resource.ProviderIsDefined = false;
resource.LocalNameIsDefined = false;
resource.CommentIsDefined = false;
resource.Type = RESOURCETYPE_DISK;
resource.Scope = RESOURCE_GLOBALNET;
resource.Usage = 0;
resource.DisplayType = 0;
CResourceW destResource;
UString systemPathPart;
DWORD result = GetResourceInformation(resource, destResource, systemPathPart);
if (result == NO_ERROR)
Init(&destResource, 0, path);
else
Init(0, 0 , L"");
return;
}
void CNetFolder::Init(const NWindows::NNet::CResourceW *netResource,
IFolderFolder *parentFolder, const UString &path)
{
_path = path;
if (netResource == 0)
_netResourcePointer = 0;
else
{
_netResource = *netResource;
_netResourcePointer = &_netResource;
// if (_netResource.DisplayType == RESOURCEDISPLAYTYPE_SERVER)
_path = _netResource.RemoteName + WCHAR_PATH_SEPARATOR;
}
_parentFolder = parentFolder;
}
STDMETHODIMP CNetFolder::LoadItems()
{
_items.Clear();
CEnum enumerator;
for (;;)
{
DWORD result = enumerator.Open(
RESOURCE_GLOBALNET,
RESOURCETYPE_DISK,
0, // enumerate all resources
_netResourcePointer
);
if (result == NO_ERROR)
break;
if (result != ERROR_ACCESS_DENIED)
return result;
if (_netResourcePointer != 0)
result = AddConnection2(_netResource,
0, 0, CONNECT_INTERACTIVE);
if (result != NO_ERROR)
return result;
}
for (;;)
{
CResourceEx resource;
DWORD result = enumerator.Next(resource);
if (result == NO_ERROR)
{
if (!resource.RemoteNameIsDefined) // For Win 98, I don't know what's wrong
resource.RemoteName = resource.Comment;
resource.Name = resource.RemoteName;
int pos = resource.Name.ReverseFind(WCHAR_PATH_SEPARATOR);
if (pos >= 0)
{
// _path = resource.Name.Left(pos + 1);
resource.Name = resource.Name.Mid(pos + 1);
}
_items.Add(resource);
}
else if (result == ERROR_NO_MORE_ITEMS)
break;
else
return result;
}
/*
It's too slow for some systems.
if (_netResourcePointer && _netResource.DisplayType == RESOURCEDISPLAYTYPE_SERVER)
{
for (char c = 'a'; c <= 'z'; c++)
{
CResourceEx resource;
resource.Name = UString(wchar_t(c)) + L'$';
resource.RemoteNameIsDefined = true;
resource.RemoteName = _path + resource.Name;
NFile::NFind::CFindFile findFile;
NFile::NFind::CFileInfoW fileInfo;
if (!findFile.FindFirst(resource.RemoteName + UString(WCHAR_PATH_SEPARATOR) + UString(L"*"), fileInfo))
continue;
resource.Usage = RESOURCEUSAGE_CONNECTABLE;
resource.LocalNameIsDefined = false;
resource.CommentIsDefined = false;
resource.ProviderIsDefined = false;
_items.Add(resource);
}
}
*/
( run in 0.499 second using v1.01-cache-2.11-cpan-39bf76dae61 )