Example #1
0
 public FolderBuilder(DeserializedItem item)
 {
     Id         = item.Id;
     Name       = item.Name;
     Type       = StorageItemTypeEnum.Directory;
     PublicUrl  = item.WebUrl;
     CreateDate = DateTime.Parse(item.CreatedDateTime);
     Path       = item.ParentReference.Path;
 }
Example #2
0
        public async Task <FileStorages.IFileStorageFolder> CreateFolder(string name)
        {
            var httpClient = new System.Net.Http.HttpClient();

            string fullPath;

            if (String.IsNullOrEmpty(Name))
            {
                fullPath = "/drive/root";
            }
            else
            {
                fullPath  = AddBackslash(Path);
                fullPath += Name + ":";
            }

            string url     = "https://graph.microsoft.com/v1.0/me" + fullPath + "/children";
            var    request = new System.Net.Http.HttpRequestMessage(HttpMethod.Post, url);

            request.Version = Version.Parse("1.0");
            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", Account.Token);
            string content = "{\r\n  \"name\": \"" + name + "\",\r\n  \"folder\": { }\r\n}";

            request.Content = new StringContent(content);
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            System.Net.Http.HttpResponseMessage response = await httpClient.SendAsync(request);

            if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
            {
                throw new InvalidOperationException("Item did not create");
            }
            DeserializedItem deserializedItem = new DeserializedItem();

            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedItem.GetType());
                deserializedItem = ser.ReadObject(stream) as DeserializedItem;
            }
            if (deserializedItem == null)
            {
                throw new NullReferenceException("Couldn't deserialized the data");
            }

            return(new FileStorageFolder(new FolderBuilder(deserializedItem)
            {
                PreviewImage = PreviewImage, Account = Account
            }));
        }
Example #3
0
        public FileBuilder(DeserializedItem item)
        {
            Id   = item.Id;
            Name = item.Name;
            if (item.File != null)
            {
                Type = FileStorages.Convertor.ToStorageItemType(item.File.MimeType);
            }
            else
            {
                Type = FileStorages.Convertor.ToStorageItemType(item.Package.Type);
            }

            Size        = item.Size;
            PublicUrl   = item.WebUrl;
            CreateDate  = DateTime.Parse(item.CreatedDateTime);
            DownloadUrl = item.DownloadUrl;
            Path        = item.ParentReference.Path;
        }
Example #4
0
        private async Task Run()
        {
            _cancellationToken = new CancellationTokenSource();
            var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, _uploadUrl);

            request.Headers.Authorization =
                new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", _storageFolder.Account.Token);

            var httpClient = new System.Net.Http.HttpClient();

            var response = await httpClient.SendAsync(request);

            if (response.StatusCode != HttpStatusCode.Created && response.StatusCode != HttpStatusCode.OK)
            {
                throw new InvalidOperationException("Session of upload did not create");
            }
            DeserializedUploadSession deserializedUploadSession = new DeserializedUploadSession();

            using (System.IO.Stream stream = await response.Content.ReadAsStreamAsync())
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUploadSession.GetType());
                deserializedUploadSession = ser.ReadObject(stream) as DeserializedUploadSession;

                if (deserializedUploadSession?.NextExpectedRanges == null)
                {
                    throw new NullReferenceException("Couldn't deserialized the data");
                }
            }

            var fileStream = await _loсalFile.OpenReadAsync();

            uint bytesCount = 13 * 320 * 1024;

            Byte[] bytes  = new byte[bytesCount];
            Regex  regex  = new Regex("[0-9]*");
            var    result = regex.Match(deserializedUploadSession.NextExpectedRanges[0]);

            _previewUploadBytes = UInt32.Parse(result.Value);
            fileStream.Seek(_previewUploadBytes);
            ulong  offset = _previewUploadBytes;
            string token  = _storageFolder.Account.Token;

            do
            {
                request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Put, _uploadUrl);
                request.Headers.Authorization =
                    new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

                var reader = await fileStream.ReadAsync(bytes.AsBuffer(), bytesCount, InputStreamOptions.None);

                request.Content = new ByteArrayContent(reader.ToArray());
                request.Content.Headers.ContentRange = new ContentRangeHeaderValue((long)offset, (long)offset + reader.Length - 1,
                                                                                   (long)TotalBytesToTransfer);
                response = await httpClient.SendAsync(request);

                offset += reader.Length;
            } while (offset != TotalBytesToTransfer && !_cancellationToken.IsCancellationRequested);

            if (_cancellationToken.IsCancellationRequested)
            {
                StorageApplicationPermissions.FutureAccessList.Remove(_localFileToken);
                return;
            }
            DeserializedItem deserializedItem = new DeserializedItem();

            using (System.IO.Stream stream = await response.Content.ReadAsStreamAsync())
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedItem.GetType());
                deserializedItem = ser.ReadObject(stream) as DeserializedItem;

                if (deserializedItem?.File == null)
                {
                    throw new NullReferenceException("Couldn't deserialized the data");
                }
            }
            RemoteFile = new FileStorageFile(new FileBuilder(deserializedItem))
            {
                Account = _storageFolder.Account
            };

            StorageApplicationPermissions.FutureAccessList.Remove(_localFileToken);
        }