webdav portal root folder speed fix
This commit is contained in:
parent
c5b6c0d9f6
commit
7d075f6142
4 changed files with 147 additions and 22 deletions
|
@ -47,6 +47,8 @@ namespace WebsitePanel.EnterpriseServer {
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback GetEnterpriseFoldersOperationCompleted;
|
private System.Threading.SendOrPostCallback GetEnterpriseFoldersOperationCompleted;
|
||||||
|
|
||||||
|
private System.Threading.SendOrPostCallback GetUserRootFoldersOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback GetEnterpriseFolderOperationCompleted;
|
private System.Threading.SendOrPostCallback GetEnterpriseFolderOperationCompleted;
|
||||||
|
|
||||||
private System.Threading.SendOrPostCallback CreateEnterpriseFolderOperationCompleted;
|
private System.Threading.SendOrPostCallback CreateEnterpriseFolderOperationCompleted;
|
||||||
|
@ -128,6 +130,9 @@ namespace WebsitePanel.EnterpriseServer {
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event GetEnterpriseFoldersCompletedEventHandler GetEnterpriseFoldersCompleted;
|
public event GetEnterpriseFoldersCompletedEventHandler GetEnterpriseFoldersCompleted;
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public event GetUserRootFoldersCompletedEventHandler GetUserRootFoldersCompleted;
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
public event GetEnterpriseFolderCompletedEventHandler GetEnterpriseFolderCompleted;
|
public event GetEnterpriseFolderCompletedEventHandler GetEnterpriseFolderCompleted;
|
||||||
|
|
||||||
|
@ -456,6 +461,56 @@ namespace WebsitePanel.EnterpriseServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetUserRootFolders", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
|
public SystemFile[] GetUserRootFolders(int itemId, int accountId, string userName, string displayName) {
|
||||||
|
object[] results = this.Invoke("GetUserRootFolders", new object[] {
|
||||||
|
itemId,
|
||||||
|
accountId,
|
||||||
|
userName,
|
||||||
|
displayName});
|
||||||
|
return ((SystemFile[])(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public System.IAsyncResult BeginGetUserRootFolders(int itemId, int accountId, string userName, string displayName, System.AsyncCallback callback, object asyncState) {
|
||||||
|
return this.BeginInvoke("GetUserRootFolders", new object[] {
|
||||||
|
itemId,
|
||||||
|
accountId,
|
||||||
|
userName,
|
||||||
|
displayName}, callback, asyncState);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public SystemFile[] EndGetUserRootFolders(System.IAsyncResult asyncResult) {
|
||||||
|
object[] results = this.EndInvoke(asyncResult);
|
||||||
|
return ((SystemFile[])(results[0]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void GetUserRootFoldersAsync(int itemId, int accountId, string userName, string displayName) {
|
||||||
|
this.GetUserRootFoldersAsync(itemId, accountId, userName, displayName, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public void GetUserRootFoldersAsync(int itemId, int accountId, string userName, string displayName, object userState) {
|
||||||
|
if ((this.GetUserRootFoldersOperationCompleted == null)) {
|
||||||
|
this.GetUserRootFoldersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUserRootFoldersOperationCompleted);
|
||||||
|
}
|
||||||
|
this.InvokeAsync("GetUserRootFolders", new object[] {
|
||||||
|
itemId,
|
||||||
|
accountId,
|
||||||
|
userName,
|
||||||
|
displayName}, this.GetUserRootFoldersOperationCompleted, userState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetUserRootFoldersOperationCompleted(object arg) {
|
||||||
|
if ((this.GetUserRootFoldersCompleted != null)) {
|
||||||
|
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
|
||||||
|
this.GetUserRootFoldersCompleted(this, new GetUserRootFoldersCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetEnterpriseFolder", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetEnterpriseFolder", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
|
||||||
public SystemFile GetEnterpriseFolder(int itemId, string folderName) {
|
public SystemFile GetEnterpriseFolder(int itemId, string folderName) {
|
||||||
|
@ -1933,6 +1988,32 @@ namespace WebsitePanel.EnterpriseServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
public delegate void GetUserRootFoldersCompletedEventHandler(object sender, GetUserRootFoldersCompletedEventArgs e);
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
|
[System.Diagnostics.DebuggerStepThroughAttribute()]
|
||||||
|
[System.ComponentModel.DesignerCategoryAttribute("code")]
|
||||||
|
public partial class GetUserRootFoldersCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
|
||||||
|
|
||||||
|
private object[] results;
|
||||||
|
|
||||||
|
internal GetUserRootFoldersCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
|
||||||
|
base(exception, cancelled, userState) {
|
||||||
|
this.results = results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <remarks/>
|
||||||
|
public SystemFile[] Result {
|
||||||
|
get {
|
||||||
|
this.RaiseExceptionIfNecessary();
|
||||||
|
return ((SystemFile[])(this.results[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <remarks/>
|
/// <remarks/>
|
||||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
|
||||||
public delegate void GetEnterpriseFolderCompletedEventHandler(object sender, GetEnterpriseFolderCompletedEventArgs e);
|
public delegate void GetEnterpriseFolderCompletedEventHandler(object sender, GetEnterpriseFolderCompletedEventArgs e);
|
||||||
|
|
|
@ -76,6 +76,11 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return GetFoldersInternal(itemId);
|
return GetFoldersInternal(itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SystemFile[] GetUserRootFolders(int itemId, int accountId, string userName, string displayName)
|
||||||
|
{
|
||||||
|
return GetUserRootFoldersInternal(itemId, accountId, userName, displayName);
|
||||||
|
}
|
||||||
|
|
||||||
public static SystemFile GetFolder(int itemId, string folderName)
|
public static SystemFile GetFolder(int itemId, string folderName)
|
||||||
{
|
{
|
||||||
return GetFolderInternal(itemId, folderName);
|
return GetFolderInternal(itemId, folderName);
|
||||||
|
@ -554,6 +559,57 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static SystemFile[] GetUserRootFoldersInternal(int itemId, int accountId, string userName, string displayName)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var rootFolders = new List<SystemFile>();
|
||||||
|
|
||||||
|
// load organization
|
||||||
|
Organization org = OrganizationController.GetOrganization(itemId);
|
||||||
|
if (org == null)
|
||||||
|
{
|
||||||
|
return new SystemFile[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int serviceId = GetEnterpriseStorageServiceID(org.PackageId);
|
||||||
|
|
||||||
|
if (serviceId == 0)
|
||||||
|
{
|
||||||
|
return new SystemFile[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
EnterpriseStorage es = GetEnterpriseStorage(serviceId);
|
||||||
|
|
||||||
|
var webDavSettings = ObjectUtils.CreateListFromDataReader<WebDavSetting>(
|
||||||
|
DataProvider.GetEnterpriseFolders(itemId)).ToArray();
|
||||||
|
|
||||||
|
var userGroups = OrganizationController.GetSecurityGroupsByMember(itemId, accountId);
|
||||||
|
|
||||||
|
foreach (var folder in es.GetFolders(org.OrganizationId, webDavSettings))
|
||||||
|
{
|
||||||
|
var permissions = ConvertToESPermission(itemId,folder.Rules);
|
||||||
|
|
||||||
|
foreach (var permission in permissions)
|
||||||
|
{
|
||||||
|
if ((!permission.IsGroup
|
||||||
|
&& (permission.DisplayName == userName || permission.DisplayName == displayName))
|
||||||
|
|| (permission.IsGroup && userGroups.Any(x => x.DisplayName == permission.DisplayName)))
|
||||||
|
{
|
||||||
|
rootFolders.Add(folder);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rootFolders.ToArray();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected static SystemFile GetFolderInternal(int itemId, string folderName)
|
protected static SystemFile GetFolderInternal(int itemId, string folderName)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -92,6 +92,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
return EnterpriseStorageController.GetFolders(itemId);
|
return EnterpriseStorageController.GetFolders(itemId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[WebMethod]
|
||||||
|
public SystemFile[] GetUserRootFolders(int itemId, int accountId, string userName, string displayName)
|
||||||
|
{
|
||||||
|
return EnterpriseStorageController.GetUserRootFolders(itemId, accountId, userName, displayName);
|
||||||
|
}
|
||||||
|
|
||||||
[WebMethod]
|
[WebMethod]
|
||||||
public SystemFile GetEnterpriseFolder(int itemId, string folderName)
|
public SystemFile GetEnterpriseFolder(int itemId, string folderName)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(pathPart))
|
if (string.IsNullOrWhiteSpace(pathPart))
|
||||||
{
|
{
|
||||||
children = ConnectToWebDavServer().Select(x => new WebDavResource
|
children = GetWebDavRootItems().Select(x => new WebDavResource
|
||||||
{
|
{
|
||||||
Href = new Uri(x.Url),
|
Href = new Uri(x.Url),
|
||||||
ItemType = ItemType.Folder,
|
ItemType = ItemType.Folder,
|
||||||
|
@ -82,10 +82,9 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
|
|
||||||
SystemFile[] items;
|
SystemFile[] items;
|
||||||
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(pathPart))
|
if (string.IsNullOrWhiteSpace(pathPart))
|
||||||
{
|
{
|
||||||
var rootItems = ConnectToWebDavServer().Select(x => x.Name).ToList();
|
var rootItems = GetWebDavRootItems().Select(x => x.Name).ToList();
|
||||||
rootItems.Insert(0, string.Empty);
|
rootItems.Insert(0, string.Empty);
|
||||||
|
|
||||||
items = WspContext.Services.EnterpriseStorage.SearchFiles(itemId, rootItems.ToArray(), searchValue, uesrPrincipalName, recursive);
|
items = WspContext.Services.EnterpriseStorage.SearchFiles(itemId, rootItems.ToArray(), searchValue, uesrPrincipalName, recursive);
|
||||||
|
@ -285,28 +284,11 @@ namespace WebsitePanel.WebDav.Core.Managers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private IList<SystemFile> ConnectToWebDavServer()
|
private IList<SystemFile> GetWebDavRootItems()
|
||||||
{
|
{
|
||||||
var rootFolders = new List<SystemFile>();
|
|
||||||
var user = WspContext.User;
|
var user = WspContext.User;
|
||||||
|
|
||||||
var userGroups = WSP.Services.Organizations.GetSecurityGroupsByMember(user.ItemId, user.AccountId);
|
var rootFolders = WspContext.Services.EnterpriseStorage.GetUserRootFolders(user.ItemId, user.AccountId,user.UserName, user.DisplayName);
|
||||||
|
|
||||||
foreach (var folder in WSP.Services.EnterpriseStorage.GetEnterpriseFolders(WspContext.User.ItemId))
|
|
||||||
{
|
|
||||||
var permissions = WSP.Services.EnterpriseStorage.GetEnterpriseFolderPermissions(WspContext.User.ItemId, folder.Name);
|
|
||||||
|
|
||||||
foreach (var permission in permissions)
|
|
||||||
{
|
|
||||||
if ((!permission.IsGroup
|
|
||||||
&& (permission.DisplayName == user.UserName || permission.DisplayName == user.DisplayName))
|
|
||||||
|| (permission.IsGroup && userGroups.Any(x => x.DisplayName == permission.DisplayName)))
|
|
||||||
{
|
|
||||||
rootFolders.Add(folder);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rootFolders;
|
return rootFolders;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue