예제 #1
0
        public Stream GetFileStream(Files.Core.File file, long offset)
        {
            //NOTE: id here is not converted!
            var fileToDownload = GetFileById(file.ID);

            //Check length of the file
            if (fileToDownload == null)
            {
                throw new ArgumentNullException("file", Web.Files.Resources.FilesCommonResource.ErrorMassage_FileNotFound);
            }

            //if (fileToDownload.Length > SetupInfo.AvailableFileSize)
            //{
            //    throw FileSizeComment.FileSizeException;
            //}

            var fileStream = fileToDownload.GetDataTransferAccessor().GetDownloadStream();

            if (fileStream.CanSeek)
            {
                file.ContentLength = fileStream.Length; // hack for google drive
            }
            if (offset > 0)
            {
                fileStream.Seek(offset, SeekOrigin.Begin);
            }

            return(fileStream);
        }
예제 #2
0
        public Files.Core.File SaveFile(Files.Core.File file, Stream fileStream)
        {
            if (fileStream == null)
            {
                throw new ArgumentNullException("fileStream");
            }
            ICloudFileSystemEntry entry = null;

            if (file.ID != null)
            {
                entry = SharpBoxProviderInfo.Storage.GetFile(MakePath(file.ID), null);
            }
            else if (file.FolderID != null)
            {
                var folder = GetFolderById(file.FolderID);

                file.Title = GetAvailableTitle(file.Title, folder, IsExist);

                entry = SharpBoxProviderInfo.Storage.CreateFile(folder, file.Title);
            }
            if (entry != null)
            {
                entry.GetDataTransferAccessor().Transfer(fileStream, nTransferDirection.nUpload);
                return(ToFile(entry));
            }
            return(null);
        }
예제 #3
0
        public bool IsExistOnStorage(Files.Core.File file)
        {
            var fileId   = file.ID;
            var selector = GetSelector(fileId);

            file.ID = selector.ConvertId(fileId);
            var exist = selector.GetFileDao(fileId).IsExistOnStorage(file);

            file.ID = fileId; //Restore
            return(exist);
        }
예제 #4
0
        private IFileDao GetFileDao(Files.Core.File file)
        {
            if (file.ID != null)
            {
                return(GetSelector(file.ID).GetFileDao(file.ID));
            }

            if (file.FolderID != null)
            {
                return(GetSelector(file.FolderID).GetFileDao(file.FolderID));
            }

            throw new ArgumentException("Can't create instance of dao for given file.", "file");
        }
예제 #5
0
        private Files.Core.File MakeId(Files.Core.File file)
        {
            if (file.ID != null)
            {
                file.ID = PathPrefix + "-" + file.ID;
            }

            if (file.FolderID != null)
            {
                file.FolderID = PathPrefix + "-" + file.FolderID;
            }

            return(file);
        }
예제 #6
0
        /// <summary>
        /// Get stream of file
        /// </summary>
        /// <param name="file"></param>
        /// <param name="offset"></param>
        /// <returns>Stream</returns>
        public Stream GetFileStream(Files.Core.File file, long offset)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }
            var fileId   = file.ID;
            var selector = GetSelector(fileId);

            file.ID = selector.ConvertId(fileId);
            var stream = selector.GetFileDao(fileId).GetFileStream(file, offset);

            file.ID = fileId; //Restore id

            return(stream);
        }
예제 #7
0
        public Uri GetPreSignedUri(Files.Core.File file, TimeSpan expires)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }
            var fileId   = file.ID;
            var selector = GetSelector(fileId);

            file.ID = selector.ConvertId(fileId);
            var streamUri = selector.GetFileDao(fileId).GetPreSignedUri(file, expires);

            file.ID = fileId; //Restore id

            return(streamUri);
        }
예제 #8
0
        public bool IsSupportedPreSignedUri(Files.Core.File file)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }
            var fileId   = file.ID;
            var selector = GetSelector(fileId);

            file.ID = selector.ConvertId(fileId);
            var isSupported = selector.GetFileDao(fileId).IsSupportedPreSignedUri(file);

            file.ID = fileId; //Restore id

            return(isSupported);
        }
예제 #9
0
        public ChunkedUploadSession CreateUploadSession(Files.Core.File file, long contentLength)
        {
            if (SetupInfo.ChunkUploadSize > contentLength)
            {
                return new ChunkedUploadSession(MakeId(file), contentLength)
                       {
                           UseChunks = false
                       }
            }
            ;

            var uploadSession = new ChunkedUploadSession(file, contentLength);

            ICloudFileSystemEntry sharpboxFile;

            if (file.ID != null)
            {
                sharpboxFile = GetFileById(file.ID);
            }
            else
            {
                var folder = GetFolderById(file.FolderID);
                sharpboxFile = SharpBoxProviderInfo.Storage.CreateFile(folder, GetAvailableTitle(file.Title, folder, IsExist));
            }

            var sharpboxSession = sharpboxFile.GetDataTransferAccessor().CreateResumableSession(contentLength);

            if (sharpboxSession != null)
            {
                uploadSession.Items["SharpboxSession"] = sharpboxSession;
            }
            else
            {
                uploadSession.Items["TempPath"] = Path.GetTempFileName();
            }

            uploadSession.File = MakeId(uploadSession.File);
            return(uploadSession);
        }
예제 #10
0
        public Files.Core.File SaveFile(Files.Core.File file, Stream fileStream)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            var fileId   = file.ID;
            var folderId = file.FolderID;

            IDaoSelector selector;

            Files.Core.File fileSaved = null;
            //Convert
            if (fileId != null)
            {
                selector = GetSelector(fileId);
                file.ID  = selector.ConvertId(fileId);
                if (folderId != null)
                {
                    file.FolderID = selector.ConvertId(folderId);
                }
                fileSaved = selector.GetFileDao(fileId).SaveFile(file, fileStream);
            }
            else if (folderId != null)
            {
                selector      = GetSelector(folderId);
                file.FolderID = selector.ConvertId(folderId);
                fileSaved     = selector.GetFileDao(folderId).SaveFile(file, fileStream);
            }

            if (fileSaved != null)
            {
                return(fileSaved);
            }
            throw new ArgumentException("No file id or folder id toFolderId determine provider");
        }
예제 #11
0
 public Uri GetPreSignedUri(Files.Core.File file, TimeSpan expires)
 {
     throw new NotSupportedException();
 }
예제 #12
0
 private Files.Core.File ConvertId(Files.Core.File file)
 {
     file.ID       = ConvertId(file.ID);
     file.FolderID = ConvertId(file.FolderID);
     return(file);
 }
예제 #13
0
 public bool UseTrashForRemove(Files.Core.File file)
 {
     return(false);
 }
예제 #14
0
 public ChunkedUploadSession CreateUploadSession(Files.Core.File file, long contentLength)
 {
     return(GetFileDao(file).CreateUploadSession(ConvertId(file), contentLength));
 }
예제 #15
0
        public bool UseTrashForRemove(Files.Core.File file)
        {
            var selector = GetSelector(file.ID);

            return(selector.GetFileDao(file.ID).UseTrashForRemove(file));
        }
예제 #16
0
 public bool IsSupportedPreSignedUri(Files.Core.File file)
 {
     return(false);
 }
예제 #17
0
 public Stream GetFileStream(Files.Core.File file)
 {
     return(GetFileStream(file, 0));
 }
예제 #18
0
 public bool IsExistOnStorage(Files.Core.File file)
 {
     return(true);
 }