Example #1
0
        public async Task <DropboxFile> GetFile(ApplicationUser currUser, int fileId)
        {
            var dbfile = db.PhotographerFiles.SingleOrDefault(c => c.PhotographerFileId == fileId);

            if (dbfile == null)
            {
                return(null);
            }

            string linkToFile = string.Empty;

            if (currUser.PhotographerInfo != null && currUser.PhotographerInfo.DropboxAccessToken != null)
            {
                using (var dbx = new DropboxClient(currUser.PhotographerInfo.DropboxAccessToken))
                {
                    var linkMetadata = await dbx.Files.GetTemporaryLinkAsync(dbfile.Path);

                    linkToFile = linkMetadata.Link;
                }
            }

            DropboxFile file = new DropboxFile
            {
                Name       = dbfile.Name,
                Path       = dbfile.Path,
                Size       = dbfile.Size,
                Depth      = dbfile.Depth,
                LinkToFile = linkToFile
            };

            return(file);
        }
        //All units used here has been unit tested seperately
        protected override List <string> PerformExecution(Dictionary <string, string> evaluatedValues)
        {
            string localToPath;

            evaluatedValues.TryGetValue("ToPath", out localToPath);
            string localFromPath;

            evaluatedValues.TryGetValue("FromPath", out localFromPath);
            IDropboxSingleExecutor <IDropboxResult> dropBoxDownLoad = new DropBoxDownLoad(localToPath);
            var dropboxSingleExecutor = GetDropboxSingleExecutor(dropBoxDownLoad);

            _dropboxClientWrapper = _dropboxClientWrapper ?? new DropboxClientWrapper(GetClient());
            var dropboxExecutionResult = dropboxSingleExecutor.ExecuteTask(_dropboxClientWrapper);
            var dropboxSuccessResult   = dropboxExecutionResult as DropboxDownloadSuccessResult;

            if (dropboxSuccessResult != null)
            {
                Response = dropboxSuccessResult.GetDownloadResponse();
                var bytes = Response.GetContentAsByteArrayAsync().Result;
                if (Response.Response.IsFile)
                {
                    LocalPathManager = new LocalPathManager(localFromPath);
                    var validFolder = LocalPathManager.GetFullFileName();
                    var fileExist   = LocalPathManager.FileExist();
                    if (fileExist && !OverwriteFile)
                    {
                        throw new Exception(ErrorResource.DropBoxDestinationFileAlreadyExist);
                    }
                    DropboxFile.WriteAllBytes(validFolder, bytes);
                }
                return(new List <string> {
                    GlobalConstants.DropBoxSuccess
                });
            }
            var dropboxFailureResult = dropboxExecutionResult as DropboxFailureResult;

            if (dropboxFailureResult != null)
            {
                Exception = dropboxFailureResult.GetException();
            }
            var executionError = Exception.InnerException?.Message ?? Exception.Message;

            if (executionError.Contains("not_file"))
            {
                executionError = ErrorResource.DropBoxFilePathMissing;
            }
            throw new Exception(executionError);
        }
Example #3
0
        /// <summary>
        /// Abstract template method that reads the actualy object. Invoked from <see cref="M:Read"/>.
        /// </summary>
        /// <typeparam name="T">The type of object to return.</typeparam>
        /// <param name="message">The HTTP message to read from.</param>
        /// <returns>The converted object.</returns>
        /// <exception cref="HttpMessageNotReadableException">In case of conversion errors</exception>
        protected override T ReadInternal <T>(IHttpInputMessage message)
        {
            DropboxFile file = new DropboxFile();

            // Read file's content as an array of bytes
            file.Content = base.ReadInternal <byte[]>(message);

            // Read metadata content from 'x-dropbox-metadata' header
            string metadataHeaderContent = message.Headers["x-dropbox-metadata"];

            if (metadataHeaderContent != null)
            {
                JsonValue metadataJsonValue;
                if (JsonValue.TryParse(metadataHeaderContent, out metadataJsonValue))
                {
                    file.Metadata = this.jsonMapper.Deserialize <Entry>(metadataJsonValue);
                }
            }

            return(file as T);
        }
        public void DownloadPartialFile()
        {
            responseHeaders["x-dropbox-metadata"] = "{ \"size\": \"225.4KB\", \"rev\": \"35e97029684fe\", \"thumb_exists\": false, \"bytes\": 230783, \"modified\": \"Tue, 19 Jul 2011 21:55:38 +0000\", \"path\": \"/Getting_Started.pdf\", \"is_dir\": false, \"icon\": \"page_white_acrobat\", \"root\": \"dropbox\", \"mime_type\": \"application/pdf\", \"revision\": 220823 }";
            responseHeaders.ContentType           = MediaType.TEXT_PLAIN;
            mockServer.ExpectNewRequest()
            .AndExpectUri("https://api-content.dropbox.com/1/files/dropbox/Dir/File.txt?rev=a123z")
            .AndExpectMethod(HttpMethod.GET)
            .AndExpectHeader("Range", "bytes=0-1023")
            .AndRespondWith(EmbeddedResource("File.txt"), responseHeaders);

#if NET_4_0 || SILVERLIGHT_5
            DropboxFile file = dropbox.DownloadPartialFileAsync("Dir/File.txt", 0, 1024, "a123z", CancellationToken.None).Result;
#else
            DropboxFile file = dropbox.DownloadPartialFile("Dir/File.txt", 0, 1024, "a123z");
#endif
            Assert.IsNotNull(file);

            // Content
            Assert.IsNotNull(file.Content);
            Assert.IsNotEmpty(file.Content);

            // Metadata
            Assert.AreEqual(230783, file.Metadata.Bytes);
            Assert.IsNull(file.Metadata.Hash);
            Assert.AreEqual("page_white_acrobat", file.Metadata.Icon);
            Assert.AreEqual(false, file.Metadata.IsDeleted);
            Assert.AreEqual(false, file.Metadata.IsDirectory);
            Assert.AreEqual("application/pdf", file.Metadata.MimeType);
            Assert.IsNotNull(file.Metadata.ModifiedDate);
            Assert.AreEqual("19/07/2011 21:55:38", file.Metadata.ModifiedDate.Value.ToUniversalTime().ToString("dd'/'MM'/'yyyy HH:mm:ss"));
            Assert.AreEqual("/Getting_Started.pdf", file.Metadata.Path);
            Assert.AreEqual("35e97029684fe", file.Metadata.Revision);
            Assert.AreEqual("dropbox", file.Metadata.Root);
            Assert.AreEqual("225.4KB", file.Metadata.Size);
            Assert.IsFalse(file.Metadata.ThumbExists);
            Assert.IsNull(file.Metadata.Contents);
        }
        public void DownloadThumbnail()
        {
            responseHeaders["x-dropbox-metadata"] = "{ \"size\": \"225.4KB\", \"rev\": \"35e97029684fe\", \"thumb_exists\": false, \"bytes\": 230783, \"modified\": \"Tue, 19 Jul 2011 21:55:38 +0000\", \"path\": \"/Getting_Started.pdf\", \"is_dir\": false, \"icon\": \"page_white_acrobat\", \"root\": \"dropbox\", \"mime_type\": \"application/pdf\", \"revision\": 220823 }";
            responseHeaders.ContentType           = MediaType.IMAGE_PNG;
            mockServer.ExpectNewRequest()
            .AndExpectUri("https://api-content.dropbox.com/1/thumbnails/dropbox/Dir/Image.jpg?format=PNG&size=xl")
            .AndExpectMethod(HttpMethod.GET)
            .AndRespondWith(EmbeddedResource("Image.png"), responseHeaders);

#if NET_4_0 || SILVERLIGHT_5
            DropboxFile thumbnail = dropbox.DownloadThumbnailAsync("Dir/Image.jpg", ThumbnailFormat.Png, ThumbnailSize.ExtraLarge).Result;
#else
            DropboxFile thumbnail = dropbox.DownloadThumbnail("Dir/Image.jpg", ThumbnailFormat.Png, ThumbnailSize.ExtraLarge);
#endif
            Assert.IsNotNull(thumbnail);

            // Content
            Assert.IsNotNull(thumbnail);
            Assert.IsNotEmpty(thumbnail.Content);

            // Metadata
            Assert.AreEqual(230783, thumbnail.Metadata.Bytes);
            Assert.IsNull(thumbnail.Metadata.Hash);
            Assert.AreEqual("page_white_acrobat", thumbnail.Metadata.Icon);
            Assert.AreEqual(false, thumbnail.Metadata.IsDeleted);
            Assert.AreEqual(false, thumbnail.Metadata.IsDirectory);
            Assert.AreEqual("application/pdf", thumbnail.Metadata.MimeType);
            Assert.IsNotNull(thumbnail.Metadata.ModifiedDate);
            Assert.AreEqual("19/07/2011 21:55:38", thumbnail.Metadata.ModifiedDate.Value.ToUniversalTime().ToString("dd'/'MM'/'yyyy HH:mm:ss"));
            Assert.AreEqual("/Getting_Started.pdf", thumbnail.Metadata.Path);
            Assert.AreEqual("35e97029684fe", thumbnail.Metadata.Revision);
            Assert.AreEqual("dropbox", thumbnail.Metadata.Root);
            Assert.AreEqual("225.4KB", thumbnail.Metadata.Size);
            Assert.IsFalse(thumbnail.Metadata.ThumbExists);
            Assert.IsNull(thumbnail.Metadata.Contents);
        }
Example #6
0
        private void PluginForm_Shown(object sender, EventArgs e)
        {
            Refresh();
            _oAuth2token = GetSavedToken();
            var api = new DropboxApi(SeAppKey, SeAppsecret, _oAuth2token);

            if (_oAuth2token == null)
            {
                try
                {
                    Process.Start(api.GetPromptForCodeUrl());
                    using (var form = new GetDropBoxCode())
                    {
                        var result = form.ShowDialog(this);
                        if (result == DialogResult.OK && form.Code.Length > 10)
                        {
                            _oAuth2token = api.GetAccessToken(form.Code);
                        }
                        else
                        {
                            MessageBox.Show("Code skipped - no Dropbox :(");
                            return;
                        }
                    }
                    labelInfo.Text = string.Empty;
                    SaveToken(_oAuth2token);
                }
                catch (Exception exception)
                {
                    labelInfo.Text        = string.Empty;
                    labelDescription.Text = string.Empty;
                    _connectTries++;
                    if (_connectTries < 2)
                    {
                        PluginForm_Shown(sender, e);
                        return;
                    }
                    MessageBox.Show(exception.Message);
                    buttonOK.Enabled = false;
                    return;
                }
            }
            labelDescription.Text = string.Empty;
            labelInfo.Text        = "Getting file list...";
            Cursor = Cursors.WaitCursor;
            Refresh();
            try
            {
                _fileList = api.GetFiles("");
                Cursor    = Cursors.Default;
            }
            catch (Exception exception)
            {
                Cursor = Cursors.Default;
                _connectTries++;
                _connectTries++;
                if (_connectTries < 2)
                {
                    PluginForm_Shown(sender, e);
                    return;
                }
                MessageBox.Show(exception.Message);
                buttonOK.Enabled = false;
                return;
            }
            labelInfo.Text = string.Empty;
            FillListView();
        }
Example #7
0
        private void buttonOK_Click(object sender, EventArgs e)
        {
            if (listViewFiles.SelectedItems.Count < 1)
            {
                return;
            }

            string fileName = listViewFiles.SelectedItems[0].Text;

            Refresh();
            try
            {
                Cursor = Cursors.WaitCursor;
                var f = listViewFiles.SelectedItems[0].Tag as DropboxFile;
                if (f != null)
                {
                    var api = new DropboxApi(SeAppKey, SeAppsecret, _oAuth2token);
                    if (f.IsDirectory)
                    {
                        labelInfo.Text        = "Getting file list...";
                        labelDescription.Text = f.Path;
                        Refresh();
                        _fileList = api.GetFiles(f.Path);
                        if (f.Description == "..")
                        {
                            if (_folder.Count > 0)
                            {
                                var path = _folder.Pop();
                                var list = _fileList.Contents.ToList();
                                if (path != string.Empty)
                                {
                                    list.Insert(0, new DropboxFile {
                                        Path = GetWithoutPart(path), IsDirectory = true, Description = ".."
                                    });
                                }
                                _fileList.Contents = list;
                            }
                        }
                        else
                        {
                            string s = GetWithoutPart(f.Path);
                            _folder.Push(s);
                            var list = _fileList.Contents.ToList();
                            list.Insert(0, new DropboxFile {
                                Path = s, IsDirectory = true, Description = ".."
                            });
                            _fileList.Contents = list;
                        }

                        FillListView();
                    }
                    else
                    {
                        labelInfo.Text = "Downloading...";
                        Refresh();
                        var fileDown = api.DownloadFile(listViewFiles.SelectedItems[0].Tag as DropboxFile);
                        LoadedSubtitle = Encoding.UTF8.GetString(fileDown.Data);
                        DialogResult   = DialogResult.OK;
                    }
                    Cursor = Cursors.Default;
                }
                labelInfo.Text = string.Empty;
                Refresh();
            }
            catch (Exception exception)
            {
                Cursor = Cursors.Default;
                MessageBox.Show(exception.Message);
            }
        }
Example #8
0
        private void PluginForm_Shown(object sender, EventArgs e)
        {
            this.Refresh();
            OAuthToken accessToken = GetSavedToken();

            if (accessToken == null)
            {
                try
                {
                    // Step 1/3: Get request token
                    OAuthToken oauthToken = GetRequestToken();

                    // Step 2/3: Authorize application
                    var queryString  = String.Format("oauth_token={0}", oauthToken.Token);
                    var authorizeUrl = "https://www.dropbox.com/1/oauth/authorize?" + queryString;
                    Process.Start(authorizeUrl);
                    MessageBox.Show("Accept App request from Subtitle Edit - and press OK");
                    labelInfo.Text = string.Empty;

                    accessToken = GetAccessToken(oauthToken);
                    SaveToken(accessToken.Token, accessToken.Secret);
                }
                catch (Exception exception)
                {
                    labelInfo.Text        = string.Empty;
                    labelDescription.Text = string.Empty;
                    _connectTries++;
                    if (_connectTries < 2)
                    {
                        PluginForm_Shown(sender, e);
                        return;
                    }
                    MessageBox.Show(exception.Message);
                    buttonOK.Enabled = false;
                    return;
                }
            }
            labelDescription.Text = string.Empty;
            labelInfo.Text        = "Getting file list...";
            Cursor = Cursors.WaitCursor;
            this.Refresh();
            var api = new DropboxApi(SeConsumerKey, SeConsumerSecret, accessToken);

            try
            {
                _fileList = api.GetFiles("sandbox", string.Empty);
                Cursor    = Cursors.Default;
            }
            catch (Exception exception)
            {
                Cursor = Cursors.Default;
                _connectTries++;
                _connectTries++;
                if (_connectTries < 2)
                {
                    PluginForm_Shown(sender, e);
                    return;
                }
                MessageBox.Show(exception.Message);
                buttonOK.Enabled = false;
                return;
            }
            labelInfo.Text = string.Empty;

            foreach (DropboxFile f in _fileList.Contents)
            {
                ListViewItem item = new ListViewItem(f.Path);
                item.SubItems.Add(f.Modified.ToShortDateString() + f.Modified.ToShortTimeString());
                item.SubItems.Add(f.Size);
                listViewFiles.Items.Add(item);
            }
            if (listViewFiles.Items.Count > 0)
            {
                listViewFiles.Items[0].Selected = true;
            }
        }
Example #9
0
        private void PluginForm_Shown(object sender, EventArgs e)
        {
            this.Refresh();
            OAuthToken accessToken = GetSavedToken();

            if (accessToken == null)
            {
                try
                {
                    // Step 1/3: Get request token
                    OAuthToken oauthToken = GetRequestToken();

                    // Step 2/3: Authorize application
                    var queryString  = String.Format("oauth_token={0}", oauthToken.Token);
                    var authorizeUrl = "https://www.dropbox.com/1/oauth/authorize?" + queryString;
                    Process.Start(authorizeUrl);
                    MessageBox.Show("Accept App request from Subtitle Edit - and press OK");
                    labelInfo.Text = string.Empty;
                    accessToken    = GetAccessToken(oauthToken);
                    SaveToken(accessToken.Token, accessToken.Secret);
                }
                catch (Exception exception)
                {
                    _connectTries++;
                    if (_connectTries < 2)
                    {
                        PluginForm_Shown(sender, e);
                        return;
                    }
                    MessageBox.Show(exception.Message);
                    buttonOK.Enabled = false;
                    return;
                }
            }
            labelInfo.Text = "Getting file list...";
            this.Refresh();
            var api = new DropboxApi(SeConsumerKey, SeConsumerSecret, accessToken);

            try
            {
                Cursor    = Cursors.WaitCursor;
                _fileList = api.GetFiles("sandbox", string.Empty);
                Cursor    = Cursors.Default;
            }
            catch (Exception exception)
            {
                Cursor = Cursors.Default;
                _connectTries++;
                PluginForm_Shown(sender, e);
                _connectTries++;
                if (_connectTries < 2)
                {
                    PluginForm_Shown(sender, e);
                    return;
                }
                MessageBox.Show(exception.Message);
                buttonOK.Enabled = false;
                return;
            }
            labelInfo.Text = string.Empty;

            MakeDescriptionPrompt();
        }
Example #10
0
        private async Task TraverseRecursive(DropboxClient dbx, string filepath, DropboxFolder folder, ApplicationUser currUser)
        {
            var list = await dbx.Files.ListFolderAsync(filepath);

            string dropboxFolderId;

            if (filepath == string.Empty)
            {
                dropboxFolderId = "";
            }
            else
            {
                var folderMetadata = await dbx.Files.GetMetadataAsync(filepath);

                dropboxFolderId = folderMetadata.AsFolder.Id;
            }

            // adding folder to table PhotographerFolders
            var photoFolder = new PhotographerFolder
            {
                Name              = folder.Name,
                Depth             = folder.Depth,
                Path              = folder.Path,
                DropboxCursor     = list.Cursor,
                DropboxFolderId   = dropboxFolderId,
                ApplicationUserId = currUser.Id,
                ApplicationUser   = currUser,
                PhotographerFiles = new List <PhotographerFile>()
            };

            db.PhotographerFolders.Add(photoFolder);
            db.SaveChanges();

            foreach (var item in list.Entries.Where(i => i.IsFile))
            {
                if (fileExtensionsHelper.IsAllowedFileExtension(item.PathLower))
                {
                    long fileSize = Convert.ToInt64(item.AsFile.Size);

                    var thumbnailResult = await dbx.Files.GetThumbnailAsync(item.PathLower);

                    var imageByteArr = await thumbnailResult.GetContentAsByteArrayAsync();

                    DropboxFile dropboxFile = new DropboxFile(item.PathLower, item.Name, fileSize, folder.Depth, imageByteArr);
                    folder.AddFile(dropboxFile);

                    // adding file to table PhotographerFiles
                    var photoFile = new PhotographerFile
                    {
                        Name                 = item.Name,
                        Size                 = fileSize,
                        Depth                = folder.Depth,
                        Path                 = item.PathLower,
                        ThumbnailImage       = imageByteArr,
                        DropboxFileId        = item.AsFile.Id,
                        PhotographerFolderId = photoFolder.PhotographerFolderId,
                        PhotographerFolder   = photoFolder
                    };
                    db.PhotographerFiles.Add(photoFile);
                    db.SaveChanges();
                    photoFolder.PhotographerFiles.Add(photoFile);
                }
            }
            db.SaveChanges();

            currUser.PhotographerFolders.Add(photoFolder);

            int newDepth = folder.Depth;

            newDepth++;
            foreach (var item in list.Entries.Where(i => i.IsFolder))
            {
                DropboxFolder dropboxFolder = new DropboxFolder(item.PathLower, item.Name, newDepth);
                folder.AddFolder(dropboxFolder);

                await TraverseRecursive(dbx, item.PathLower, dropboxFolder, currUser);
            }
        }