UploadServices.cs

67 lines | 1.499 kB Blame History Raw Download
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using BLL.Base;

using Model.UnitsOfWork;
using Model.Entities.Files.FS_Entities;
using Model.Entities.Files.Repo;

namespace BLL.Services
{


    public class UploadServices : BaseServices
    {
        const int ChunkSize = 102400;
        protected readonly Repo_SFileUpload Repo_SFileUpload;

        public UploadServices(UOW UOW) : base(UOW)
        {
            Repo_SFileUpload = UOW.Repo_SFileUpload;
        }

        public SFileUpload StartUpload(SDirectory directory, string Name, long size)
        {
            var res = Repo_SFileUpload.Create(
                new SFileUpload(directory, Name, size, ChunkSize));                

            return res;
        }
        public bool UploadChunk(SFileUpload project, byte[] data)
        {
            project.CurrentChunk = data;

            Repo_SFileUpload.Update(project);


            if (project.UploadProgress == 100)
            {
                Done(project);
                return true;
            }

            return false;
        }

        public void Cansel(SFileUpload project)
        {
            Repo_SFileUpload.Delete(project);
        }

        private void Done(SFileUpload project)
        {
            var p = project.Parent;

            Repo_SFileUpload.DeleteInList(project);

            UOW.Repo_SFile.Create(
                new SFile(p, project.Name, (long)project.Size));            
        }

    }
}