From 26774d8473c4c5eb1e53f65650363ec362b712aa Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 31 Aug 2023 16:40:16 -0400 Subject: [PATCH 1/2] added first draft of delete --- handlers/file_io_handler/txs.go | 122 ++++++++++++++++++++++++++++++ handlers/storage_handler/query.go | 13 ++++ 2 files changed, 135 insertions(+) diff --git a/handlers/file_io_handler/txs.go b/handlers/file_io_handler/txs.go index 4443900..b62ce8b 100644 --- a/handlers/file_io_handler/txs.go +++ b/handlers/file_io_handler/txs.go @@ -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" @@ -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 +} diff --git a/handlers/storage_handler/query.go b/handlers/storage_handler/query.go index 1b05798..6f4ebe2 100644 --- a/handlers/storage_handler/query.go +++ b/handlers/storage_handler/query.go @@ -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 { From a47dce62efc213372a52b322d718d05147ceb49c Mon Sep 17 00:00:00 2001 From: marston Date: Thu, 31 Aug 2023 17:09:41 -0400 Subject: [PATCH 2/2] updated test suite --- tests/file_upload_test.go | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tests/file_upload_test.go b/tests/file_upload_test.go index fc02df5..21290c5 100644 --- a/tests/file_upload_test.go +++ b/tests/file_upload_test.go @@ -2,6 +2,7 @@ package tests import ( "fmt" + "github.com/JackalLabs/jackalgo/handlers/storage_handler" "os" "testing" @@ -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) @@ -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()) }