Skip to content

Commit

Permalink
Merge pull request #3 from JackalLabs/adding-delete
Browse files Browse the repository at this point in the history
Feat: Adding Delete Function
  • Loading branch information
karnthis authored Aug 31, 2023
2 parents af58178 + a47dce6 commit 0fcd736
Show file tree
Hide file tree
Showing 3 changed files with 157 additions and 2 deletions.
122 changes: 122 additions & 0 deletions handlers/file_io_handler/txs.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"encoding/hex"
"encoding/json"
"fmt"
"github.com/JackalLabs/jackalgo/handlers/storage_handler"
"github.com/JackalLabs/jackalgo/utils"
"time"

"github.com/JackalLabs/jackalgo/handlers/file_upload_handler"
Expand Down Expand Up @@ -282,3 +284,123 @@ func (f *FileIoHandler) signAndPostFiletree(handlers []*file_upload_handler.File

return toBroadcast, nil
}

func (f *FileIoHandler) DeleteTargets(targets []string, parent *folder_handler.FolderHandler) error {
msgs, err := f.deleteTargets(targets, parent)
if err != nil {
return err
}

_, err = f.walletHandler.SendTx(msgs...)
if err != nil {
return err
}

return nil
}

func (f *FileIoHandler) makeDelete(creator string, target string) ([]sdk.Msg, error) {
s := storage_handler.NewStorageHandler(f.walletHandler)

msgs := make([]sdk.Msg, 0)

treeData, err := utils.GetFileTreeData(target, creator, f.walletHandler)
if err != nil {
return nil, err
}

fids := Fids{}

err = json.Unmarshal([]byte(treeData.Files.Contents), &fids)
if err != nil {
return nil, err
}

cidRes, err := s.QueryFidCid(fids.Fids[0])
if err != nil {
return nil, err
}

var cids []string
err = json.Unmarshal([]byte(cidRes.FidCid.Cids), &cids)
if err != nil {
return nil, err
}

for _, cid := range cids {
msg := &storagetypes.MsgCancelContract{
Creator: creator,
Cid: cid,
}

msgs = append(msgs, msg)
}

msg := &filetreetypes.MsgDeleteFile{
Creator: creator,
HashPath: crypt.MerkleMeBro(target),
Account: crypt.HashAndHex(creator),
}
msgs = append(msgs, msg)

return msgs, nil
}

func (f *FileIoHandler) deleteTargets(targets []string, parent *folder_handler.FolderHandler) ([]sdk.Msg, error) {
childFiles := parent.GetChildFiles()
childFolders := parent.GetChildDirs()

msgs := make([]sdk.Msg, 0)
location := fmt.Sprintf("%s/%s", parent.GetWhereAmI(), parent.GetWhoAmI())

for _, childFile := range childFiles {
for _, target := range targets {
rawPath := fmt.Sprintf("%s/%s", location, target)
if target == childFile.Name {
deletionMessages, err := f.makeDelete(f.walletHandler.GetAddress(), rawPath)
if err != nil {
return nil, err
}

msg, err := parent.RemoveChildFileReferences([]string{target})
if err != nil {
return nil, err
}
msgs = append(msgs, msg)

msgs = append(msgs, deletionMessages...)
}
}
}
for _, childFolder := range childFolders {
for _, target := range targets {
rawPath := fmt.Sprintf("%s/%s", location, target)
if target == childFolder {
innerFolder, err := f.DownloadFolder(rawPath)
if err != nil {
return nil, err
}

msg, err := parent.RemoveChildDirReferences([]string{target})
if err != nil {
return nil, err
}
msgs = append(msgs, msg)

dirs := innerFolder.GetChildDirs()
for _, file := range innerFolder.GetChildFiles() {
dirs = append(dirs, file.Name)
}

deletionMessages, err := f.deleteTargets(dirs, innerFolder)
if err != nil {
return nil, err
}

msgs = append(msgs, deletionMessages...)
}
}
}

return msgs, nil
}
13 changes: 13 additions & 0 deletions handlers/storage_handler/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,19 @@ func (s *StorageHandler) QueryGetPayData(address string) (*storagetypes.QueryPay
return res, err
}

func (s *StorageHandler) QueryFidCid(fid string) (*storagetypes.QueryFidCidResponse, error) {

req := storagetypes.QueryFidCidRequest{
Fid: fid,
}

queryClient := storagetypes.NewQueryClient(s.walletHandler.GetClientCtx())

res, err := queryClient.FidCid(context.Background(), &req)

return res, err
}

func (s *StorageHandler) QueryJackalPrice(bytes int64, duration int64) (*storagetypes.QueryPriceCheckResponse, error) {
tbs := utils.NumTo3xTB(bytes)
if duration <= 0 {
Expand Down
24 changes: 22 additions & 2 deletions tests/file_upload_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package tests

import (
"fmt"
"github.com/JackalLabs/jackalgo/handlers/storage_handler"
"os"
"testing"

Expand All @@ -20,15 +21,22 @@ func TestFileUpload(t *testing.T) {
"lupulella-2")
r.NoError(err)

wallet = wallet.WithGas("500000")

s := storage_handler.NewStorageHandler(wallet)
res, err := s.BuyStorage(wallet.GetAddress(), 720, 1)
r.NoError(err)
fmt.Println(res.RawLog)

fmt.Println(wallet.GetAddress())

fileIO, err := file_io_handler.NewFileIoHandler(wallet.WithGas("500000"))
fileIO, err := file_io_handler.NewFileIoHandler(wallet)
r.NoError(err)

fileData, err := os.Open("test_data.txt")
r.NoError(err)

res, err := fileIO.GenerateInitialDirs([]string{"jackalgo"})
res, err = fileIO.GenerateInitialDirs([]string{"jackalgo"})
r.NoError(err)

r.Equal(uint32(0), res.Code)
Expand Down Expand Up @@ -61,4 +69,16 @@ func TestFileUpload(t *testing.T) {
fmt.Println(f.File.Details)

fmt.Println(f.GetFile().Buffer().String())

err = fileIO.DeleteTargets([]string{"test_data.txt"}, folder)
r.NoError(err)

_, err = fileIO.DownloadFile("s/jackalgo/test_data.txt")
r.Error(err)

folder, err = fileIO.DownloadFolder("s/jackalgo")
r.NoError(err)

fmt.Println(folder.GetChildFiles())
fmt.Println(folder.GetChildDirs())
}

0 comments on commit 0fcd736

Please sign in to comment.