mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Fixed Copy empty size problem, Moved URL related functions to URLHelpers
This commit is contained in:
parent
fe80e21d2f
commit
5505212127
18 changed files with 191 additions and 189 deletions
|
@ -212,44 +212,6 @@ public static string GetXMLValue(string input, string tag)
|
||||||
return Regex.Match(input, String.Format("(?<={0}>).+?(?=</{0})", tag)).Value;
|
return Regex.Match(input, String.Format("(?<={0}>).+?(?=</{0})", tag)).Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string CombineURL(string url1, string url2)
|
|
||||||
{
|
|
||||||
bool url1Empty = string.IsNullOrEmpty(url1);
|
|
||||||
bool url2Empty = string.IsNullOrEmpty(url2);
|
|
||||||
|
|
||||||
if (url1Empty && url2Empty)
|
|
||||||
{
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url1Empty)
|
|
||||||
{
|
|
||||||
return url2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url2Empty)
|
|
||||||
{
|
|
||||||
return url1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url1.EndsWith("/"))
|
|
||||||
{
|
|
||||||
url1 = url1.Substring(0, url1.Length - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url2.StartsWith("/"))
|
|
||||||
{
|
|
||||||
url2 = url2.Remove(0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return url1 + "/" + url2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string CombineURL(params string[] urls)
|
|
||||||
{
|
|
||||||
return urls.Aggregate(CombineURL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetMimeType(string fileName)
|
public static string GetMimeType(string fileName)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(fileName))
|
if (!string.IsNullOrEmpty(fileName))
|
||||||
|
@ -351,43 +313,6 @@ public static string GetProperExtension(string filePath)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Encode(string text, string unreservedCharacters)
|
|
||||||
{
|
|
||||||
StringBuilder result = new StringBuilder();
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(text))
|
|
||||||
{
|
|
||||||
foreach (char c in text)
|
|
||||||
{
|
|
||||||
if (unreservedCharacters.Contains(c))
|
|
||||||
{
|
|
||||||
result.Append(c);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
byte[] bytes = Encoding.UTF8.GetBytes(c.ToString());
|
|
||||||
|
|
||||||
foreach (byte b in bytes)
|
|
||||||
{
|
|
||||||
result.AppendFormat(CultureInfo.InvariantCulture, "%{0:X2}", b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string URLEncode(string text)
|
|
||||||
{
|
|
||||||
return Encode(text, URLCharacters);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string URLPathEncode(string text)
|
|
||||||
{
|
|
||||||
return Encode(text, URLPathCharacters);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void OpenFolder(string folderPath)
|
public static void OpenFolder(string folderPath)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(folderPath))
|
if (!string.IsNullOrEmpty(folderPath))
|
||||||
|
@ -485,61 +410,6 @@ public static void OpenURL(string url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsValidURL(string url)
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(url))
|
|
||||||
{
|
|
||||||
url = url.Trim();
|
|
||||||
return !url.StartsWith("file://") && Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsValidURLRegex(string url)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(url)) return false;
|
|
||||||
|
|
||||||
// https://gist.github.com/729294
|
|
||||||
string pattern =
|
|
||||||
"^" +
|
|
||||||
// protocol identifier
|
|
||||||
"(?:(?:https?|ftp)://)" +
|
|
||||||
// user:pass authentication
|
|
||||||
"(?:\\S+(?::\\S*)?@)?" +
|
|
||||||
"(?:" +
|
|
||||||
// IP address exclusion
|
|
||||||
// private & local networks
|
|
||||||
"(?!10(?:\\.\\d{1,3}){3})" +
|
|
||||||
"(?!127(?:\\.\\d{1,3}){3})" +
|
|
||||||
"(?!169\\.254(?:\\.\\d{1,3}){2})" +
|
|
||||||
"(?!192\\.168(?:\\.\\d{1,3}){2})" +
|
|
||||||
"(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})" +
|
|
||||||
// IP address dotted notation octets
|
|
||||||
// excludes loopback network 0.0.0.0
|
|
||||||
// excludes reserved space >= 224.0.0.0
|
|
||||||
// excludes network & broacast addresses
|
|
||||||
// (first & last IP address of each class)
|
|
||||||
"(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
|
|
||||||
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
|
|
||||||
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" +
|
|
||||||
"|" +
|
|
||||||
// host name
|
|
||||||
"(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)" +
|
|
||||||
// domain name
|
|
||||||
"(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*" +
|
|
||||||
// TLD identifier
|
|
||||||
"(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" +
|
|
||||||
")" +
|
|
||||||
// port number
|
|
||||||
"(?::\\d{2,5})?" +
|
|
||||||
// resource path
|
|
||||||
"(?:/[^\\s]*)?" +
|
|
||||||
"$";
|
|
||||||
|
|
||||||
return Regex.IsMatch(url.Trim(), pattern, RegexOptions.IgnoreCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsValidIPAddress(string ip)
|
public static bool IsValidIPAddress(string ip)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(ip)) return false;
|
if (string.IsNullOrEmpty(ip)) return false;
|
||||||
|
|
|
@ -26,14 +26,146 @@ You should have received a copy of the GNU General Public License
|
||||||
using HelpersLib;
|
using HelpersLib;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace HelpersLib
|
namespace HelpersLib
|
||||||
{
|
{
|
||||||
public static class URLHelpers
|
public static class URLHelpers
|
||||||
{
|
{
|
||||||
|
private static string Encode(string text, string unreservedCharacters)
|
||||||
|
{
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(text))
|
||||||
|
{
|
||||||
|
foreach (char c in text)
|
||||||
|
{
|
||||||
|
if (unreservedCharacters.Contains(c))
|
||||||
|
{
|
||||||
|
result.Append(c);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
byte[] bytes = Encoding.UTF8.GetBytes(c.ToString());
|
||||||
|
|
||||||
|
foreach (byte b in bytes)
|
||||||
|
{
|
||||||
|
result.AppendFormat(CultureInfo.InvariantCulture, "%{0:X2}", b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string URLEncode(string text)
|
||||||
|
{
|
||||||
|
return Encode(text, Helpers.URLCharacters);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string URLPathEncode(string text)
|
||||||
|
{
|
||||||
|
return Encode(text, Helpers.URLPathCharacters);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string CombineURL(string url1, string url2)
|
||||||
|
{
|
||||||
|
bool url1Empty = string.IsNullOrEmpty(url1);
|
||||||
|
bool url2Empty = string.IsNullOrEmpty(url2);
|
||||||
|
|
||||||
|
if (url1Empty && url2Empty)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url1Empty)
|
||||||
|
{
|
||||||
|
return url2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url2Empty)
|
||||||
|
{
|
||||||
|
return url1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url1.EndsWith("/"))
|
||||||
|
{
|
||||||
|
url1 = url1.Substring(0, url1.Length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url2.StartsWith("/"))
|
||||||
|
{
|
||||||
|
url2 = url2.Remove(0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return url1 + "/" + url2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string CombineURL(params string[] urls)
|
||||||
|
{
|
||||||
|
return urls.Aggregate(CombineURL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsValidURL(string url)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(url))
|
||||||
|
{
|
||||||
|
url = url.Trim();
|
||||||
|
return !url.StartsWith("file://") && Uri.IsWellFormedUriString(url, UriKind.RelativeOrAbsolute);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsValidURLRegex(string url)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(url)) return false;
|
||||||
|
|
||||||
|
// https://gist.github.com/729294
|
||||||
|
string pattern =
|
||||||
|
"^" +
|
||||||
|
// protocol identifier
|
||||||
|
"(?:(?:https?|ftp)://)" +
|
||||||
|
// user:pass authentication
|
||||||
|
"(?:\\S+(?::\\S*)?@)?" +
|
||||||
|
"(?:" +
|
||||||
|
// IP address exclusion
|
||||||
|
// private & local networks
|
||||||
|
"(?!10(?:\\.\\d{1,3}){3})" +
|
||||||
|
"(?!127(?:\\.\\d{1,3}){3})" +
|
||||||
|
"(?!169\\.254(?:\\.\\d{1,3}){2})" +
|
||||||
|
"(?!192\\.168(?:\\.\\d{1,3}){2})" +
|
||||||
|
"(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})" +
|
||||||
|
// IP address dotted notation octets
|
||||||
|
// excludes loopback network 0.0.0.0
|
||||||
|
// excludes reserved space >= 224.0.0.0
|
||||||
|
// excludes network & broacast addresses
|
||||||
|
// (first & last IP address of each class)
|
||||||
|
"(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
|
||||||
|
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
|
||||||
|
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" +
|
||||||
|
"|" +
|
||||||
|
// host name
|
||||||
|
"(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)" +
|
||||||
|
// domain name
|
||||||
|
"(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*" +
|
||||||
|
// TLD identifier
|
||||||
|
"(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" +
|
||||||
|
")" +
|
||||||
|
// port number
|
||||||
|
"(?::\\d{2,5})?" +
|
||||||
|
// resource path
|
||||||
|
"(?:/[^\\s]*)?" +
|
||||||
|
"$";
|
||||||
|
|
||||||
|
return Regex.IsMatch(url.Trim(), pattern, RegexOptions.IgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
public static string AddSlash(string url, SlashType slashType)
|
public static string AddSlash(string url, SlashType slashType)
|
||||||
{
|
{
|
||||||
return AddSlash(url, slashType, 1);
|
return AddSlash(url, slashType, 1);
|
||||||
|
|
|
@ -174,7 +174,7 @@ public static void ClipboardUpload(TaskSettings taskSettings = null)
|
||||||
{
|
{
|
||||||
string url = text.Trim();
|
string url = text.Trim();
|
||||||
|
|
||||||
if (Helpers.IsValidURLRegex(url))
|
if (URLHelpers.IsValidURLRegex(url))
|
||||||
{
|
{
|
||||||
if (taskSettings.UploadSettings.ClipboardUploadURLContents)
|
if (taskSettings.UploadSettings.ClipboardUploadURLContents)
|
||||||
{
|
{
|
||||||
|
|
|
@ -298,7 +298,7 @@ private void FTPCreateDirectory()
|
||||||
BringToFront();
|
BringToFront();
|
||||||
if (ib.DialogResult == DialogResult.OK)
|
if (ib.DialogResult == DialogResult.OK)
|
||||||
{
|
{
|
||||||
Client.CreateDirectory(Helpers.CombineURL(currentDirectory, ib.InputText));
|
Client.CreateDirectory(URLHelpers.CombineURL(currentDirectory, ib.InputText));
|
||||||
RefreshDirectory();
|
RefreshDirectory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -435,7 +435,7 @@ private void lvFTPList_DragDrop(object sender, DragEventArgs e)
|
||||||
{
|
{
|
||||||
if (file.Name != filename)
|
if (file.Name != filename)
|
||||||
{
|
{
|
||||||
string path = Helpers.CombineURL(currentDirectory, filename);
|
string path = URLHelpers.CombineURL(currentDirectory, filename);
|
||||||
string movePath = string.Empty;
|
string movePath = string.Empty;
|
||||||
if (file.Type == FtpFileSystemObjectType.Link)
|
if (file.Type == FtpFileSystemObjectType.Link)
|
||||||
{
|
{
|
||||||
|
@ -450,7 +450,7 @@ private void lvFTPList_DragDrop(object sender, DragEventArgs e)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
movePath = Helpers.CombineURL(file.FullName, filename);
|
movePath = URLHelpers.CombineURL(file.FullName, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(movePath))
|
if (!string.IsNullOrEmpty(movePath))
|
||||||
|
@ -489,7 +489,7 @@ private void lvFTPList_SubItemEndEditing(object sender, SubItemEndEditingEventAr
|
||||||
FtpListItem file = (FtpListItem)lvFTPList.SelectedItems[0].Tag;
|
FtpListItem file = (FtpListItem)lvFTPList.SelectedItems[0].Tag;
|
||||||
if (file.Name != e.DisplayText)
|
if (file.Name != e.DisplayText)
|
||||||
{
|
{
|
||||||
Client.Rename(file.FullName, Helpers.CombineURL(currentDirectory, e.DisplayText));
|
Client.Rename(file.FullName, URLHelpers.CombineURL(currentDirectory, e.DisplayText));
|
||||||
RefreshDirectory();
|
RefreshDirectory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,13 +100,13 @@ private string CreateSignature(string secretKey, byte[] policyBytes)
|
||||||
private string GetObjectKey(string fileName)
|
private string GetObjectKey(string fileName)
|
||||||
{
|
{
|
||||||
string objectPrefix = NameParser.Parse(NameParserType.FolderPath, S3Settings.ObjectPrefix.Trim('/'));
|
string objectPrefix = NameParser.Parse(NameParserType.FolderPath, S3Settings.ObjectPrefix.Trim('/'));
|
||||||
return Helpers.CombineURL(objectPrefix, fileName);
|
return URLHelpers.CombineURL(objectPrefix, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetObjectURL(string objectName)
|
private string GetObjectURL(string objectName)
|
||||||
{
|
{
|
||||||
objectName = objectName.Trim('/');
|
objectName = objectName.Trim('/');
|
||||||
objectName = Helpers.URLPathEncode(objectName);
|
objectName = URLHelpers.URLPathEncode(objectName);
|
||||||
|
|
||||||
string url = string.Empty;
|
string url = string.Empty;
|
||||||
|
|
||||||
|
@ -114,16 +114,16 @@ private string GetObjectURL(string objectName)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(S3Settings.CustomDomain))
|
if (!string.IsNullOrEmpty(S3Settings.CustomDomain))
|
||||||
{
|
{
|
||||||
url = Helpers.CombineURL(S3Settings.CustomDomain, objectName);
|
url = URLHelpers.CombineURL(S3Settings.CustomDomain, objectName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
url = Helpers.CombineURL(S3Settings.Bucket, objectName);
|
url = URLHelpers.CombineURL(S3Settings.Bucket, objectName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
url = Helpers.CombineURL(GetEndpoint(), objectName);
|
url = URLHelpers.CombineURL(GetEndpoint(), objectName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!URLHelpers.HasPrefix(url))
|
if (!URLHelpers.HasPrefix(url))
|
||||||
|
|
|
@ -119,7 +119,7 @@ public bool DownloadFile(string path, Stream downloadStream)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(path) && OAuthInfo.CheckOAuth(AuthInfo))
|
if (!string.IsNullOrEmpty(path) && OAuthInfo.CheckOAuth(AuthInfo))
|
||||||
{
|
{
|
||||||
string url = Helpers.CombineURL(URLFiles, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLPathEncode(path));
|
||||||
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.GET, AuthInfo);
|
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.GET, AuthInfo);
|
||||||
return SendRequest(HttpMethod.GET, downloadStream, query);
|
return SendRequest(HttpMethod.GET, downloadStream, query);
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ public UploadResult UploadFile(Stream stream, string path, string fileName)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
string url = Helpers.CombineURL(URLFiles, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLPathEncode(path));
|
||||||
|
|
||||||
Dictionary<string, string> args = new Dictionary<string, string>();
|
Dictionary<string, string> args = new Dictionary<string, string>();
|
||||||
args.Add("overwrite", "true");
|
args.Add("overwrite", "true");
|
||||||
|
@ -151,7 +151,7 @@ public UploadResult UploadFile(Stream stream, string path, string fileName)
|
||||||
{
|
{
|
||||||
CopyUploadInfo content = JsonConvert.DeserializeObject<CopyUploadInfo>(result.Response);
|
CopyUploadInfo content = JsonConvert.DeserializeObject<CopyUploadInfo>(result.Response);
|
||||||
|
|
||||||
if (content != null)
|
if (content != null && content.objects != null && content.objects.Length > 0)
|
||||||
{
|
{
|
||||||
AllowReportProgress = false;
|
AllowReportProgress = false;
|
||||||
result.URL = CreatePublicURL(content.objects[0].path, URLType);
|
result.URL = CreatePublicURL(content.objects[0].path, URLType);
|
||||||
|
@ -169,7 +169,7 @@ public CopyContentInfo GetMetadata(string path)
|
||||||
|
|
||||||
if (OAuthInfo.CheckOAuth(AuthInfo))
|
if (OAuthInfo.CheckOAuth(AuthInfo))
|
||||||
{
|
{
|
||||||
string url = Helpers.CombineURL(URLMetaData, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLMetaData, URLHelpers.URLPathEncode(path));
|
||||||
|
|
||||||
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.GET, AuthInfo);
|
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.GET, AuthInfo);
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ public override UploadResult Upload(Stream stream, string fileName)
|
||||||
|
|
||||||
public string GetLinkURL(CopyLinksInfo link, string path, CopyURLType urlType = CopyURLType.Default)
|
public string GetLinkURL(CopyLinksInfo link, string path, CopyURLType urlType = CopyURLType.Default)
|
||||||
{
|
{
|
||||||
string filename = URLHelpers.GetFileName(path);
|
string filename = URLHelpers.URLEncode(URLHelpers.GetFileName(path));
|
||||||
|
|
||||||
switch (urlType)
|
switch (urlType)
|
||||||
{
|
{
|
||||||
|
@ -211,7 +211,7 @@ public string CreatePublicURL(string path, CopyURLType urlType = CopyURLType.Def
|
||||||
{
|
{
|
||||||
path = path.Trim('/');
|
path = path.Trim('/');
|
||||||
|
|
||||||
string url = Helpers.CombineURL(URLLinks, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLLinks, URLHelpers.URLPathEncode(path));
|
||||||
|
|
||||||
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.POST, AuthInfo);
|
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.POST, AuthInfo);
|
||||||
|
|
||||||
|
@ -310,11 +310,11 @@ public class CopyLinksInfo
|
||||||
public class CopyContentInfo // https://api.copy.com/rest/meta also works on 'rest/files'
|
public class CopyContentInfo // https://api.copy.com/rest/meta also works on 'rest/files'
|
||||||
{
|
{
|
||||||
public string id { get; set; } // Internal copy name
|
public string id { get; set; } // Internal copy name
|
||||||
public string path { get; set; } // hmm?
|
public string path { get; set; } // file path
|
||||||
public string name { get; set; } // Human readable (Filesystem) folder name
|
public string name { get; set; } // Human readable (Filesystem) folder name
|
||||||
public string type { get; set; } // "inbox", "root", "copy", "dir", "file"?
|
public string type { get; set; } // "inbox", "root", "copy", "dir", "file"?
|
||||||
public bool stub { get; set; } // 'The stub attribute you see on all of the nodes represents if the specified node is incomplete, that is, if the children have not all been delivered to you. Basically, they will always be a stub, unless you are looking at that item directly.'
|
public bool stub { get; set; } // 'The stub attribute you see on all of the nodes represents if the specified node is incomplete, that is, if the children have not all been delivered to you. Basically, they will always be a stub, unless you are looking at that item directly.'
|
||||||
public long size { get; set; } // size of the folder/file
|
public long? size { get; set; } // Filesizes (size attributes) are measured in bytes. If an item displayed in the filesystem is a directory or an otherwise special location which doesn't represent a file, the size attribute will be null.
|
||||||
public long date_last_synced { get; set; }
|
public long date_last_synced { get; set; }
|
||||||
public bool @public { get; set; } // is available to public; isnt everything private but shared in copy???
|
public bool @public { get; set; } // is available to public; isnt everything private but shared in copy???
|
||||||
public string url { get; set; } // web access url (private)
|
public string url { get; set; } // web access url (private)
|
||||||
|
|
|
@ -163,7 +163,7 @@ public bool DownloadFile(string path, Stream downloadStream)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(path) && OAuth2Info.CheckOAuth(AuthInfo))
|
if (!string.IsNullOrEmpty(path) && OAuth2Info.CheckOAuth(AuthInfo))
|
||||||
{
|
{
|
||||||
string url = Helpers.CombineURL(URLFiles, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLPathEncode(path));
|
||||||
return SendRequest(HttpMethod.GET, downloadStream, url, headers: GetAuthHeaders());
|
return SendRequest(HttpMethod.GET, downloadStream, url, headers: GetAuthHeaders());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ public UploadResult UploadFile(Stream stream, string path, string fileName, bool
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
string url = Helpers.CombineURL(URLFiles, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLPathEncode(path));
|
||||||
|
|
||||||
// There's a 150MB limit to all uploads through the API.
|
// There's a 150MB limit to all uploads through the API.
|
||||||
UploadResult result = UploadData(stream, url, fileName, headers: GetAuthHeaders());
|
UploadResult result = UploadData(stream, url, fileName, headers: GetAuthHeaders());
|
||||||
|
@ -211,7 +211,7 @@ public DropboxContentInfo GetMetadata(string path, bool list)
|
||||||
|
|
||||||
if (OAuth2Info.CheckOAuth(AuthInfo))
|
if (OAuth2Info.CheckOAuth(AuthInfo))
|
||||||
{
|
{
|
||||||
string url = Helpers.CombineURL(URLMetaData, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLMetaData, URLHelpers.URLPathEncode(path));
|
||||||
|
|
||||||
Dictionary<string, string> args = new Dictionary<string, string>();
|
Dictionary<string, string> args = new Dictionary<string, string>();
|
||||||
args.Add("list", list ? "true" : "false");
|
args.Add("list", list ? "true" : "false");
|
||||||
|
@ -238,7 +238,7 @@ public string CreateShareableLink(string path, DropboxURLType urlType)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(path) && OAuth2Info.CheckOAuth(AuthInfo))
|
if (!string.IsNullOrEmpty(path) && OAuth2Info.CheckOAuth(AuthInfo))
|
||||||
{
|
{
|
||||||
string url = Helpers.CombineURL(URLShares, Helpers.URLPathEncode(path));
|
string url = URLHelpers.CombineURL(URLShares, URLHelpers.URLPathEncode(path));
|
||||||
|
|
||||||
Dictionary<string, string> args = new Dictionary<string, string>();
|
Dictionary<string, string> args = new Dictionary<string, string>();
|
||||||
args.Add("short_url", urlType == DropboxURLType.Shortened ? "true" : "false");
|
args.Add("short_url", urlType == DropboxURLType.Shortened ? "true" : "false");
|
||||||
|
@ -257,7 +257,7 @@ public string CreateShareableLink(string path, DropboxURLType urlType)
|
||||||
string urlPath = match.Groups["path"].Value;
|
string urlPath = match.Groups["path"].Value;
|
||||||
if (!string.IsNullOrEmpty(urlPath))
|
if (!string.IsNullOrEmpty(urlPath))
|
||||||
{
|
{
|
||||||
return Helpers.CombineURL(URLShareDirect, urlPath);
|
return URLHelpers.CombineURL(URLShareDirect, urlPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -385,8 +385,8 @@ public static string GetPublicURL(long userID, string path)
|
||||||
|
|
||||||
if (path.StartsWith("Public/", StringComparison.InvariantCultureIgnoreCase))
|
if (path.StartsWith("Public/", StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
path = Helpers.URLPathEncode((path.Substring(7)));
|
path = URLHelpers.URLPathEncode((path.Substring(7)));
|
||||||
return Helpers.CombineURL(URLPublicDirect, userID.ToString(), path);
|
return URLHelpers.CombineURL(URLPublicDirect, userID.ToString(), path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -229,14 +229,14 @@ public void UploadFiles(string[] localPaths, string remotePath)
|
||||||
|
|
||||||
if (File.Exists(file))
|
if (File.Exists(file))
|
||||||
{
|
{
|
||||||
UploadFile(file, Helpers.CombineURL(remotePath, filename));
|
UploadFile(file, URLHelpers.CombineURL(remotePath, filename));
|
||||||
}
|
}
|
||||||
else if (Directory.Exists(file))
|
else if (Directory.Exists(file))
|
||||||
{
|
{
|
||||||
List<string> filesList = new List<string>();
|
List<string> filesList = new List<string>();
|
||||||
filesList.AddRange(Directory.GetFiles(file));
|
filesList.AddRange(Directory.GetFiles(file));
|
||||||
filesList.AddRange(Directory.GetDirectories(file));
|
filesList.AddRange(Directory.GetDirectories(file));
|
||||||
string path = Helpers.CombineURL(remotePath, filename);
|
string path = URLHelpers.CombineURL(remotePath, filename);
|
||||||
CreateDirectory(path);
|
CreateDirectory(path);
|
||||||
UploadFiles(filesList.ToArray(), path);
|
UploadFiles(filesList.ToArray(), path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,7 @@ public FTPAccount()
|
||||||
public string GetSubFolderPath(string filename = null)
|
public string GetSubFolderPath(string filename = null)
|
||||||
{
|
{
|
||||||
string path = NameParser.Parse(NameParserType.URL, SubFolderPath.Replace("%host", Host));
|
string path = NameParser.Parse(NameParserType.URL, SubFolderPath.Replace("%host", Host));
|
||||||
return Helpers.CombineURL(path, filename);
|
return URLHelpers.CombineURL(path, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetHttpHomePath()
|
public string GetHttpHomePath()
|
||||||
|
@ -170,13 +170,13 @@ public string GetUriPath(string filename)
|
||||||
filename = Path.GetFileNameWithoutExtension(filename);
|
filename = Path.GetFileNameWithoutExtension(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = Helpers.URLEncode(filename);
|
filename = URLHelpers.URLEncode(filename);
|
||||||
|
|
||||||
string subFolderPath = GetSubFolderPath();
|
string subFolderPath = GetSubFolderPath();
|
||||||
subFolderPath = Helpers.URLPathEncode(subFolderPath);
|
subFolderPath = URLHelpers.URLPathEncode(subFolderPath);
|
||||||
|
|
||||||
string httpHomePath = GetHttpHomePath();
|
string httpHomePath = GetHttpHomePath();
|
||||||
httpHomePath = Helpers.URLPathEncode(httpHomePath);
|
httpHomePath = URLHelpers.URLPathEncode(httpHomePath);
|
||||||
|
|
||||||
string path;
|
string path;
|
||||||
|
|
||||||
|
@ -189,13 +189,13 @@ public string GetUriPath(string filename)
|
||||||
host = host.Substring(4);
|
host = host.Substring(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
path = Helpers.CombineURL(host, subFolderPath, filename);
|
path = URLHelpers.CombineURL(host, subFolderPath, filename);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (HttpHomePathAutoAddSubFolderPath)
|
if (HttpHomePathAutoAddSubFolderPath)
|
||||||
{
|
{
|
||||||
path = Helpers.CombineURL(httpHomePath, subFolderPath);
|
path = URLHelpers.CombineURL(httpHomePath, subFolderPath);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -208,7 +208,7 @@ public string GetUriPath(string filename)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
path = Helpers.CombineURL(path, filename);
|
path = URLHelpers.CombineURL(path, filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ public string GetFtpPath(string filemame)
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Helpers.CombineURL(FTPAddress, GetSubFolderPath(filemame));
|
return URLHelpers.CombineURL(FTPAddress, GetSubFolderPath(filemame));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
|
|
@ -269,11 +269,11 @@ public void RemoveDirectory(string url)
|
||||||
{
|
{
|
||||||
if (file.IsDirectory)
|
if (file.IsDirectory)
|
||||||
{
|
{
|
||||||
RemoveDirectory(Helpers.CombineURL(url, file.Name));
|
RemoveDirectory(URLHelpers.CombineURL(url, file.Name));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DeleteFile(Helpers.CombineURL(url, file.Name));
|
DeleteFile(URLHelpers.CombineURL(url, file.Name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,8 +401,8 @@ public void MakeMultiDirectory(string dirName)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(dir))
|
if (!string.IsNullOrEmpty(dir))
|
||||||
{
|
{
|
||||||
path = Helpers.CombineURL(path, dir);
|
path = URLHelpers.CombineURL(path, dir);
|
||||||
MakeDirectory(Helpers.CombineURL(Options.Account.FTPAddress, path));
|
MakeDirectory(URLHelpers.CombineURL(Options.Account.FTPAddress, path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ public GoogleDrive(OAuth2Info oauth)
|
||||||
public string GetAuthorizationURL()
|
public string GetAuthorizationURL()
|
||||||
{
|
{
|
||||||
return string.Format("https://accounts.google.com/o/oauth2/auth?response_type={0}&client_id={1}&redirect_uri={2}&scope={3}",
|
return string.Format("https://accounts.google.com/o/oauth2/auth?response_type={0}&client_id={1}&redirect_uri={2}&scope={3}",
|
||||||
"code", AuthInfo.Client_ID, "urn:ietf:wg:oauth:2.0:oob", Helpers.URLEncode("https://www.googleapis.com/auth/drive"));
|
"code", AuthInfo.Client_ID, "urn:ietf:wg:oauth:2.0:oob", URLHelpers.URLEncode("https://www.googleapis.com/auth/drive"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetAccessToken(string code)
|
public bool GetAccessToken(string code)
|
||||||
|
|
|
@ -141,10 +141,10 @@ public string GetUriPath(string filename)
|
||||||
filename = Path.GetFileNameWithoutExtension(filename);
|
filename = Path.GetFileNameWithoutExtension(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = Helpers.URLEncode(filename);
|
filename = URLHelpers.URLEncode(filename);
|
||||||
|
|
||||||
string subFolderPath = GetSubFolderPath();
|
string subFolderPath = GetSubFolderPath();
|
||||||
subFolderPath = Helpers.URLPathEncode(subFolderPath);
|
subFolderPath = URLHelpers.URLPathEncode(subFolderPath);
|
||||||
|
|
||||||
string httpHomePath = GetHttpHomePath();
|
string httpHomePath = GetHttpHomePath();
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ public string GetUriPath(string filename)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
path = Helpers.URLPathEncode(httpHomePath);
|
path = URLHelpers.URLPathEncode(httpHomePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Port != 80)
|
if (Port != 80)
|
||||||
|
@ -167,10 +167,10 @@ public string GetUriPath(string filename)
|
||||||
|
|
||||||
if (HttpHomePathAutoAddSubFolderPath)
|
if (HttpHomePathAutoAddSubFolderPath)
|
||||||
{
|
{
|
||||||
path = Helpers.CombineURL(path, subFolderPath);
|
path = URLHelpers.CombineURL(path, subFolderPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
path = Helpers.CombineURL(path, filename);
|
path = URLHelpers.CombineURL(path, filename);
|
||||||
|
|
||||||
string remoteProtocol = RemoteProtocol.GetDescription();
|
string remoteProtocol = RemoteProtocol.GetDescription();
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ public string GetLocalhostUri(string fileName)
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Helpers.CombineURL(localhostAddress, GetSubFolderPath(), fileName);
|
return URLHelpers.CombineURL(localhostAddress, GetSubFolderPath(), fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
|
|
@ -178,7 +178,7 @@ public override UploadResult Upload(Stream stream, string fileName)
|
||||||
{
|
{
|
||||||
fileName = Helpers.GetValidURL(fileName);
|
fileName = Helpers.GetValidURL(fileName);
|
||||||
string folderPath = Account.GetSubFolderPath();
|
string folderPath = Account.GetSubFolderPath();
|
||||||
string filePath = Helpers.CombineURL(folderPath, fileName);
|
string filePath = URLHelpers.CombineURL(folderPath, fileName);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -214,7 +214,7 @@ private void tsmiCreateDirectory_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (ib.ShowDialog() == DialogResult.OK)
|
if (ib.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
string path = Helpers.CombineURL(CurrentFolderPath, ib.InputText);
|
string path = URLHelpers.CombineURL(CurrentFolderPath, ib.InputText);
|
||||||
dropbox.CreateFolder(path);
|
dropbox.CreateFolder(path);
|
||||||
RefreshDirectory();
|
RefreshDirectory();
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,7 +122,7 @@ public static string GenerateQuery(string url, Dictionary<string, string> args,
|
||||||
throw new NotImplementedException("Unsupported signature method");
|
throw new NotImplementedException("Unsupported signature method");
|
||||||
}
|
}
|
||||||
|
|
||||||
string signature = Helpers.URLEncode(Convert.ToBase64String(signatureData));
|
string signature = URLHelpers.URLEncode(Convert.ToBase64String(signatureData));
|
||||||
return string.Format("{0}?{1}&{2}={3}", normalizedUrl, normalizedParameters, ParameterSignature, signature);
|
return string.Format("{0}?{1}&{2}={3}", normalizedUrl, normalizedParameters, ParameterSignature, signature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ public static string GetAuthorizationURL(string requestTokenResponse, OAuthInfo
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(callback))
|
if (!string.IsNullOrEmpty(callback))
|
||||||
{
|
{
|
||||||
url += string.Format("&{0}={1}", ParameterCallback, Helpers.URLEncode(callback));
|
url += string.Format("&{0}={1}", ParameterCallback, URLHelpers.URLEncode(callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[ParameterTokenSecret] != null)
|
if (args[ParameterTokenSecret] != null)
|
||||||
|
@ -174,8 +174,8 @@ private static string GenerateSignatureBase(HttpMethod httpMethod, string normal
|
||||||
{
|
{
|
||||||
StringBuilder signatureBase = new StringBuilder();
|
StringBuilder signatureBase = new StringBuilder();
|
||||||
signatureBase.AppendFormat("{0}&", httpMethod.ToString());
|
signatureBase.AppendFormat("{0}&", httpMethod.ToString());
|
||||||
signatureBase.AppendFormat("{0}&", Helpers.URLEncode(normalizedUrl));
|
signatureBase.AppendFormat("{0}&", URLHelpers.URLEncode(normalizedUrl));
|
||||||
signatureBase.AppendFormat("{0}", Helpers.URLEncode(normalizedParameters));
|
signatureBase.AppendFormat("{0}", URLHelpers.URLEncode(normalizedParameters));
|
||||||
return signatureBase.ToString();
|
return signatureBase.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ private static string NormalizeUrl(string url)
|
||||||
|
|
||||||
private static string NormalizeParameters(Dictionary<string, string> parameters)
|
private static string NormalizeParameters(Dictionary<string, string> parameters)
|
||||||
{
|
{
|
||||||
return string.Join("&", parameters.OrderBy(x => x.Key).ThenBy(x => x.Value).Select(x => x.Key + "=" + Helpers.URLEncode(x.Value)).ToArray());
|
return string.Join("&", parameters.OrderBy(x => x.Key).ThenBy(x => x.Value).Select(x => x.Key + "=" + URLHelpers.URLEncode(x.Value)).ToArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -177,7 +177,7 @@ public string GetAuthLink(FlickrPermission perm)
|
||||||
|
|
||||||
public string GetPhotosLink(string userID)
|
public string GetPhotosLink(string userID)
|
||||||
{
|
{
|
||||||
return Helpers.CombineURL("http://www.flickr.com/photos", userID);
|
return URLHelpers.CombineURL("http://www.flickr.com/photos", userID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetPhotosLink()
|
public string GetPhotosLink()
|
||||||
|
@ -250,8 +250,8 @@ public override UploadResult Upload(Stream stream, string fileName)
|
||||||
if (null != xele)
|
if (null != xele)
|
||||||
{
|
{
|
||||||
string photoid = xele.Value;
|
string photoid = xele.Value;
|
||||||
string url = Helpers.CombineURL(GetPhotosLink(), photoid);
|
string url = URLHelpers.CombineURL(GetPhotosLink(), photoid);
|
||||||
result.URL = Helpers.CombineURL(url, "sizes/o");
|
result.URL = URLHelpers.CombineURL(url, "sizes/o");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ public Picasa(OAuth2Info oauth)
|
||||||
public string GetAuthorizationURL()
|
public string GetAuthorizationURL()
|
||||||
{
|
{
|
||||||
return string.Format("https://accounts.google.com/o/oauth2/auth?response_type={0}&client_id={1}&redirect_uri={2}&scope={3}",
|
return string.Format("https://accounts.google.com/o/oauth2/auth?response_type={0}&client_id={1}&redirect_uri={2}&scope={3}",
|
||||||
"code", AuthInfo.Client_ID, "urn:ietf:wg:oauth:2.0:oob", Helpers.URLEncode("https://picasaweb.google.com/data"));
|
"code", AuthInfo.Client_ID, "urn:ietf:wg:oauth:2.0:oob", URLHelpers.URLEncode("https://picasaweb.google.com/data"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetAccessToken(string code)
|
public bool GetAccessToken(string code)
|
||||||
|
@ -178,7 +178,7 @@ public override UploadResult Upload(Stream stream, string fileName)
|
||||||
string contentType = Helpers.GetMimeType(fileName);
|
string contentType = Helpers.GetMimeType(fileName);
|
||||||
|
|
||||||
NameValueCollection headers = GetAuthHeaders();
|
NameValueCollection headers = GetAuthHeaders();
|
||||||
headers.Add("Slug", Helpers.URLEncode(fileName));
|
headers.Add("Slug", URLHelpers.URLEncode(fileName));
|
||||||
|
|
||||||
ur.Response = SendPostRequestStream(url, stream, contentType, headers: headers);
|
ur.Response = SendPostRequestStream(url, stream, contentType, headers: headers);
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ public GoogleURLShortener(OAuth2Info oauth)
|
||||||
public string GetAuthorizationURL()
|
public string GetAuthorizationURL()
|
||||||
{
|
{
|
||||||
return string.Format("https://accounts.google.com/o/oauth2/auth?response_type={0}&client_id={1}&redirect_uri={2}&scope={3}",
|
return string.Format("https://accounts.google.com/o/oauth2/auth?response_type={0}&client_id={1}&redirect_uri={2}&scope={3}",
|
||||||
"code", AuthInfo.Client_ID, "urn:ietf:wg:oauth:2.0:oob", Helpers.URLEncode("https://www.googleapis.com/auth/urlshortener"));
|
"code", AuthInfo.Client_ID, "urn:ietf:wg:oauth:2.0:oob", URLHelpers.URLEncode("https://www.googleapis.com/auth/urlshortener"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetAccessToken(string code)
|
public bool GetAccessToken(string code)
|
||||||
|
|
Loading…
Reference in a new issue