public byte[] GetFileData(int id, BlobFactory.Container blobContainer)
        {
            var res  = GetFile(id);
            var blob = BlobFactory.GetBlobStorage(res.ResourceId, blobContainer);

            return(blob.Content);
        }
        public ResourceFile GetFile(int id, BlobFactory.Container blobContainer = BlobFactory.Container.Resources)
        {
            var res = Ctx.Resources.OfType <ResourceFile>().FirstOrDefault(r => r.Id == id);

            if (res != null)
            {
                var blob = BlobFactory.GetBlobStorage(res.ResourceId, blobContainer);
                res.Metadata = blob.MetaData;
            }
            return(res);
        }
 /// <summary>
 /// deletes the record specifed based on id and resource id
 /// </summary>
 /// <param name="guid">Resource ID</param>
 /// <param name="resId">record ID</param>
 /// <param name="removeEmptyFolder"></param>
 /// <param name="resourcesDir"></param>
 /// <returns>Deletes the selected record</returns>
 public bool Delete(Guid guid, int resId, bool removeEmptyFolder, BlobFactory.Container resourcesDir = BlobFactory.Container.Resources)
 {
     try {
         var res = Ctx.Resources.FirstOrDefault(e => e.ResourceId == guid && e.Id == resId);
         if (res == null)
         {
             return(false);
         }
         // do not remove any deployed files
         if (Ctx.Published.Any(p => p.ResourceFiles.Any(r => r.ResourceId == guid && r.Id == resId)))
         {
             return(false);
         }
         if (res.HasChildren())
         {
             // TODO: delete children in recursive order
         }
         else
         {
             // keep ref to current parent
             var parent = res.Parent;
             var blob   = BlobFactory.GetBlobStorage(res.ResourceId, resourcesDir);
             // if already in trash, remove
             if (res.TypesOfResource == TypeOfResource.Trash)
             {
                 Ctx.Resources.Remove(res);
                 blob.Remove();
             }
             else
             {
                 // Move to trash, de-parent because trash is flat
                 var p = Ctx.Projects.Find(res.Project.Id);
                 res.TypesOfResource = TypeOfResource.Trash;
                 res.Deleted         = true;
                 res.Parent          = Ctx.Resources.OfType <ResourceFolder>().FirstOrDefault(r => r.Parent == null && r.TypesOfResource == TypeOfResource.Trash && r.Project.Id == p.Id);
                 res.Project         = p;
             }
             SaveChanges();
             // remove folder if there is no file in it (this is due to the relatively flat structure in file explorer)
             if (removeEmptyFolder && !parent.Children.Any())
             {
                 Ctx.Resources.Remove(parent);
                 SaveChanges();
             }
         }
         return(true);
     } catch (Exception ex) {
         Debug.WriteLine(ex.Message);
         return(false);
     }
 }
 public bool Delete(Guid guid, bool removeEmptyFolder = false, BlobFactory.Container resourcesDir = BlobFactory.Container.Resources)
 {
     try {
         var res = Ctx.Resources.FirstOrDefault(e => e.ResourceId == guid);
         if (res == null)
         {
             return(false);
         }
         // do not remove any deployed files
         if (Ctx.Published.Any(p => p.ResourceFiles.Any(r => r.ResourceId == guid)))
         {
             return(false);
         }
         if (res.HasChildren())
         {
             // delete children in recursive order
         }
         else
         {
             var blob = BlobFactory.GetBlobStorage(res.ResourceId, resourcesDir);
             // if already in trash, remove
             if (res.TypesOfResource == TypeOfResource.Trash)
             {
                 Ctx.Resources.Remove(res);
                 blob.Remove();
             }
             else
             {
                 // Move to trash, de-parent because trash is flat
                 var p = Ctx.Projects.Find(res.Project.Id);
                 res.TypesOfResource = TypeOfResource.Trash;
                 res.Deleted         = true;
                 res.Parent          = Ctx.Resources.OfType <ResourceFolder>().FirstOrDefault(r => r.Parent == null && r.TypesOfResource == TypeOfResource.Trash && r.Project.Id == p.Id);
                 res.Project         = p;
             }
         }
         SaveChanges();
         return(true);
     } catch (Exception ex) {
         Debug.WriteLine(ex.Message);
         return(false);
     }
 }