From 43c59a82367497f2e51c6bf07fb07650ab753303 Mon Sep 17 00:00:00 2001 From: Jaex Date: Thu, 25 Dec 2014 22:01:22 +0200 Subject: [PATCH] fixed #91: Added OneDrive support --- ShareX.UploadersLib/Enums.cs | 8 ++-- ShareX.UploadersLib/FileUploaders/OneDrive.cs | 39 ++++++++++++++++--- .../Forms/UploadersConfigForm.cs | 4 +- ShareX/UploadTask.cs | 16 ++++---- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/ShareX.UploadersLib/Enums.cs b/ShareX.UploadersLib/Enums.cs index 2862ebdbc..1666a1847 100644 --- a/ShareX.UploadersLib/Enums.cs +++ b/ShareX.UploadersLib/Enums.cs @@ -82,12 +82,12 @@ public enum FileDestination Dropbox, [Description("FTP")] FTP, - //[Description("OneDrive")] - //OneDrive, - [Description("Copy")] - Copy, + [Description("OneDrive")] + OneDrive, [Description("Google Drive")] GoogleDrive, + [Description("Copy")] + Copy, [Description("Box")] Box, [Description("MEGA")] diff --git a/ShareX.UploadersLib/FileUploaders/OneDrive.cs b/ShareX.UploadersLib/FileUploaders/OneDrive.cs index 8f6ec20a4..999345eeb 100644 --- a/ShareX.UploadersLib/FileUploaders/OneDrive.cs +++ b/ShareX.UploadersLib/FileUploaders/OneDrive.cs @@ -26,11 +26,9 @@ using Newtonsoft.Json; using ShareX.HelpersLib; using ShareX.UploadersLib.HelperClasses; -using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; -using System.Linq; -using System.Text; namespace ShareX.UploadersLib.FileUploaders { @@ -48,7 +46,7 @@ public string GetAuthorizationURL() { Dictionary args = new Dictionary(); args.Add("client_id", AuthInfo.Client_ID); - args.Add("scope", "wl.offline_access wl.basic wl.skydrive_update"); + args.Add("scope", "wl.offline_access wl.basic wl.skydrive"); args.Add("response_type", "code"); args.Add("redirect_uri", Links.URL_CALLBACK); @@ -131,9 +129,40 @@ public bool CheckAuthorization() return true; } + private NameValueCollection GetAuthHeaders() + { + NameValueCollection headers = new NameValueCollection(); + headers.Add("Authorization", "Bearer " + AuthInfo.Token.access_token); + return headers; + } + public override UploadResult Upload(Stream stream, string fileName) { - throw new NotImplementedException(); + if (!CheckAuthorization()) return null; + + Dictionary args = new Dictionary(); + args.Add("access_token", AuthInfo.Token.access_token); + args.Add("overwrite", "true"); + args.Add("downsize_photo_uploads", "false"); + + string url = CreateQuery("https://apis.live.net/v5.0/me/skydrive/files", args); + + UploadResult result = UploadData(stream, url, fileName); + + if (result.IsSuccess) + { + OneDriveUploadInfo uploadInfo = JsonConvert.DeserializeObject(result.Response); + result.URL = uploadInfo.source; + } + + return result; + } + + private class OneDriveUploadInfo + { + public string id { get; set; } + public string name { get; set; } + public string source { get; set; } } } } \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs index 93ed1a0cf..c6e2ea89e 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs @@ -49,13 +49,11 @@ public UploadersConfigForm(UploadersConfig uploadersConfig) Config = uploadersConfig; InitializeComponent(); - // TODO: Add OneDrive support - //tcFileUploaders.TabPages.Remove(tpOneDrive); - if (!string.IsNullOrEmpty(Config.FilePath)) { Text += " - " + Config.FilePath; } + Icon = ShareXResources.Icon; } diff --git a/ShareX/UploadTask.cs b/ShareX/UploadTask.cs index 847830e07..43594e934 100644 --- a/ShareX/UploadTask.cs +++ b/ShareX/UploadTask.cs @@ -829,15 +829,8 @@ public UploadResult UploadFile(Stream stream, string fileName) ShareURLType = Program.UploadersConfig.DropboxURLType }; break; - /*case FileDestination.OneDrive: + case FileDestination.OneDrive: fileUploader = new OneDrive(Program.UploadersConfig.OneDriveOAuth2Info); - break;*/ - case FileDestination.Copy: - fileUploader = new Copy(Program.UploadersConfig.CopyOAuthInfo, Program.UploadersConfig.CopyAccountInfo) - { - UploadPath = NameParser.Parse(NameParserType.URL, Copy.TidyUploadPath(Program.UploadersConfig.CopyUploadPath)), - URLType = Program.UploadersConfig.CopyURLType - }; break; case FileDestination.GoogleDrive: fileUploader = new GoogleDrive(Program.UploadersConfig.GoogleDriveOAuth2Info) @@ -846,6 +839,13 @@ public UploadResult UploadFile(Stream stream, string fileName) FolderID = Program.UploadersConfig.GoogleDriveUseFolder ? Program.UploadersConfig.GoogleDriveFolderID : null }; break; + case FileDestination.Copy: + fileUploader = new Copy(Program.UploadersConfig.CopyOAuthInfo, Program.UploadersConfig.CopyAccountInfo) + { + UploadPath = NameParser.Parse(NameParserType.URL, Copy.TidyUploadPath(Program.UploadersConfig.CopyUploadPath)), + URLType = Program.UploadersConfig.CopyURLType + }; + break; case FileDestination.RapidShare: fileUploader = new RapidShare(Program.UploadersConfig.RapidShareUsername, Program.UploadersConfig.RapidSharePassword, Program.UploadersConfig.RapidShareFolderID); break;