webdav portal fixes

This commit is contained in:
vfedosevich 2015-03-09 03:16:45 -07:00
parent a4cb95e2db
commit 0a64381dac
10 changed files with 161 additions and 5 deletions

View file

@ -342,7 +342,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage
} }
} }
file.Summary = reader[6] as string; file.Summary = SanitizeXmlString(reader[6] as string);
result.Add(file); result.Add(file);
} }
@ -354,6 +354,36 @@ namespace WebsitePanel.Providers.EnterpriseStorage
} }
public string SanitizeXmlString(string xml)
{
if (xml == null)
{
return null;
}
var buffer = new StringBuilder(xml.Length);
foreach (char c in xml.Where(c => IsLegalXmlChar(c)))
{
buffer.Append(c);
}
return buffer.ToString();
}
public bool IsLegalXmlChar(int character)
{
return
(
character == 0x9 /* == '\t' == 9 */ ||
character == 0xA /* == '\n' == 10 */ ||
character == 0xD /* == '\r' == 13 */ ||
(character >= 0x20 && character <= 0xD7FF) ||
(character >= 0xE000 && character <= 0xFFFD) ||
(character >= 0x10000 && character <= 0x10FFFF)
);
}
#region HostingServiceProvider methods #region HostingServiceProvider methods
public override string[] Install() public override string[] Install()

View file

@ -9,5 +9,13 @@ namespace WebsitePanel.WebDav.Core.Extensions
{ {
return new Uri(paths.Aggregate(uri.AbsoluteUri, (current, path) => string.Format("{0}/{1}", current.TrimEnd('/'), path.TrimStart('/')))); return new Uri(paths.Aggregate(uri.AbsoluteUri, (current, path) => string.Format("{0}/{1}", current.TrimEnd('/'), path.TrimStart('/'))));
} }
public static string ToStringPath(this Uri uri)
{
var hostStart = uri.ToString().IndexOf(uri.Host, System.StringComparison.Ordinal);
var hostLength = uri.Host.Length;
return uri.ToString().Substring(hostStart + hostLength, uri.ToString().Length - hostStart - hostLength);
}
} }
} }

View file

@ -483,7 +483,7 @@ namespace WebsitePanel.WebDav.Core
{ {
_href = href; _href = href;
var baseUrl = href.AbsoluteUri.Remove(href.AbsoluteUri.Length - href.Segments.Last().Length); var baseUrl = href.ToString().Remove(href.ToString().Length - href.ToString().Trim('/').Split('/').Last().Length);
_baseUri = new Uri(baseUrl); _baseUri = new Uri(baseUrl);
} }

View file

@ -52,7 +52,7 @@ namespace WebsitePanel.WebDav.Core.Managers
Href = new Uri(x.Url), Href = new Uri(x.Url),
ItemType = ItemType.Folder, ItemType = ItemType.Folder,
ContentLength = x.Size * 1024 * 1024, ContentLength = x.Size * 1024 * 1024,
AllocatedSpace = x.FRSMQuotaMB * 1024 * 1024, AllocatedSpace = (long)x.FRSMQuotaMB * 1024 * 1024,
IsRootItem = true IsRootItem = true
}).ToArray(); }).ToArray();
} }

View file

@ -352,7 +352,8 @@ namespace WebsitePanel.WebDavPortal.Controllers
foreach (var item in items) foreach (var item in items)
{ {
var opener = _openerManager[Path.GetExtension(item.DisplayName)]; var opener = _openerManager[Path.GetExtension(item.DisplayName)];
var pathPart = item.Href.AbsolutePath.Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/'); //var pathPart = item.Href.ToString().Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/');
var pathPart = item.Href.ToStringPath().Replace("/" + WspContext.User.OrganizationId, "").TrimStart('/');
switch (opener) switch (opener)
{ {

View file

@ -0,0 +1,31 @@
using System;
namespace WebsitePanel.WebDavPortal.Helpers
{
public class ViewDataHelper
{
public static string BytesToSize(long bytes)
{
if (bytes == 0)
{
return string.Format("0 {0}", Resources.UI.Byte);
}
var k = 1024;
var sizes = new[]
{
Resources.UI.Bytes,
Resources.UI.KilobyteShort,
Resources.UI.MegabyteShort,
Resources.UI.GigabyteShort,
Resources.UI.TerabyteShort,
Resources.UI.PetabyteShort,
Resources.UI.ExabyteShort
};
var i = (int) Math.Floor(Math.Log(bytes)/Math.Log(k));
return string.Format("{0} {1}", Math.Round(bytes/Math.Pow(k, i), 3), sizes[i]);
}
}
}

View file

@ -69,6 +69,24 @@ namespace WebsitePanel.WebDavPortal.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Byte.
/// </summary>
public static string Byte {
get {
return ResourceManager.GetString("Byte", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Bytes.
/// </summary>
public static string Bytes {
get {
return ResourceManager.GetString("Bytes", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Cancel. /// Looks up a localized string similar to Cancel.
/// </summary> /// </summary>
@ -150,6 +168,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to EB.
/// </summary>
public static string ExabyteShort {
get {
return ResourceManager.GetString("ExabyteShort", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to File. /// Looks up a localized string similar to File.
/// </summary> /// </summary>
@ -195,6 +222,24 @@ namespace WebsitePanel.WebDavPortal.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to KB.
/// </summary>
public static string KilobyteShort {
get {
return ResourceManager.GetString("KilobyteShort", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to MB.
/// </summary>
public static string MegabyteShort {
get {
return ResourceManager.GetString("MegabyteShort", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Modified. /// Looks up a localized string similar to Modified.
/// </summary> /// </summary>
@ -240,6 +285,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to PB.
/// </summary>
public static string PetabyteShort {
get {
return ResourceManager.GetString("PetabyteShort", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Please wait.... /// Looks up a localized string similar to Please wait....
/// </summary> /// </summary>
@ -321,6 +375,15 @@ namespace WebsitePanel.WebDavPortal.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to TB.
/// </summary>
public static string TerabyteShort {
get {
return ResourceManager.GetString("TerabyteShort", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Type. /// Looks up a localized string similar to Type.
/// </summary> /// </summary>

View file

@ -120,6 +120,12 @@
<data name="Actions" xml:space="preserve"> <data name="Actions" xml:space="preserve">
<value>Actions</value> <value>Actions</value>
</data> </data>
<data name="Byte" xml:space="preserve">
<value>Byte</value>
</data>
<data name="Bytes" xml:space="preserve">
<value>Bytes</value>
</data>
<data name="Cancel" xml:space="preserve"> <data name="Cancel" xml:space="preserve">
<value>Cancel</value> <value>Cancel</value>
</data> </data>
@ -147,6 +153,9 @@
<data name="Error" xml:space="preserve"> <data name="Error" xml:space="preserve">
<value>Error</value> <value>Error</value>
</data> </data>
<data name="ExabyteShort" xml:space="preserve">
<value>EB</value>
</data>
<data name="File" xml:space="preserve"> <data name="File" xml:space="preserve">
<value>File</value> <value>File</value>
</data> </data>
@ -162,6 +171,12 @@
<data name="ItemsWasRemovedFormat" xml:space="preserve"> <data name="ItemsWasRemovedFormat" xml:space="preserve">
<value>{0} items was removed.</value> <value>{0} items was removed.</value>
</data> </data>
<data name="KilobyteShort" xml:space="preserve">
<value>KB</value>
</data>
<data name="MegabyteShort" xml:space="preserve">
<value>MB</value>
</data>
<data name="Modified" xml:space="preserve"> <data name="Modified" xml:space="preserve">
<value>Modified</value> <value>Modified</value>
</data> </data>
@ -177,6 +192,9 @@
<data name="OrDragAndDropFilesHere" xml:space="preserve"> <data name="OrDragAndDropFilesHere" xml:space="preserve">
<value>or drag and drop files here.</value> <value>or drag and drop files here.</value>
</data> </data>
<data name="PetabyteShort" xml:space="preserve">
<value>PB</value>
</data>
<data name="PleaseWaitWithDots" xml:space="preserve"> <data name="PleaseWaitWithDots" xml:space="preserve">
<value>Please wait...</value> <value>Please wait...</value>
</data> </data>
@ -204,6 +222,9 @@
<data name="Table" xml:space="preserve"> <data name="Table" xml:space="preserve">
<value>Table</value> <value>Table</value>
</data> </data>
<data name="TerabyteShort" xml:space="preserve">
<value>TB</value>
</data>
<data name="Type" xml:space="preserve"> <data name="Type" xml:space="preserve">
<value>Type</value> <value>Type</value>
</data> </data>

View file

@ -4,6 +4,7 @@
@using WebsitePanel.WebDav.Core.Config @using WebsitePanel.WebDav.Core.Config
@using WebsitePanel.WebDavPortal.FileOperations @using WebsitePanel.WebDavPortal.FileOperations
@using Ninject; @using Ninject;
@using WebsitePanel.WebDavPortal.Helpers
@using WebsitePanel.WebDavPortal.Resources @using WebsitePanel.WebDavPortal.Resources
@using WebsitePanel.WebDavPortal.UI @using WebsitePanel.WebDavPortal.UI
@using WebsitePanel.WebDavPortal.UI.Routes @using WebsitePanel.WebDavPortal.UI.Routes
@ -63,7 +64,7 @@
<p class="progress-text">@percent%</p> <p class="progress-text">@percent%</p>
</div> </div>
</div> </div>
<p>@Math.Round(Convert.ToDecimal(resource.ContentLength) / 1024, 2) / @Math.Round(Convert.ToDecimal(resource.AllocatedSpace) / 1024, 2) @UI.GigabyteShort</p> <p>@ViewDataHelper.BytesToSize(resource.ContentLength) / @ViewDataHelper.BytesToSize(resource.AllocatedSpace)</p>
} }
<div class="selected-element-overlay"> <div class="selected-element-overlay">

View file

@ -183,6 +183,7 @@
<DependentUpon>Global.asax</DependentUpon> <DependentUpon>Global.asax</DependentUpon>
</Compile> </Compile>
<Compile Include="Helpers\DataTableHelper.cs" /> <Compile Include="Helpers\DataTableHelper.cs" />
<Compile Include="Helpers\ViewDataHelper.cs" />
<Compile Include="HttpHandlers\AccessTokenHandler.cs" /> <Compile Include="HttpHandlers\AccessTokenHandler.cs" />
<Compile Include="HttpHandlers\FileTransferRequestHandler.cs" /> <Compile Include="HttpHandlers\FileTransferRequestHandler.cs" />
<Compile Include="Mapping\AutoMapperPortalConfiguration.cs" /> <Compile Include="Mapping\AutoMapperPortalConfiguration.cs" />