Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
hashhavoccat committed May 18, 2024
1 parent cf5301f commit ed4ad44
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 209 deletions.
2 changes: 1 addition & 1 deletion internal/commands/token/ft/compare/compare.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func CreateFungibleTokenHoldersCompareCommand(props *props.AppProps) *cli.Comman
vpTop.SetContent(fmt.Sprintf("Total: %s", fmt.Sprint(len(dataRows))))

vpBottom := viewport.New(75, 1)
vpBottom.SetContent("Press 'a' to export all addresses")
vpBottom.SetContent("Press 's' to export all addresses, 'enter' to open address in explorer, 1-9 to sort by column")

m := tableModel{
table: t,
Expand Down
144 changes: 41 additions & 103 deletions internal/commands/token/ft/compare/table.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package compare

import (
"fmt"
"os"
"sort"
"strconv"
"strings"

"github.com/phuslu/log"

Expand Down Expand Up @@ -58,117 +55,58 @@ func (m tableModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.viewportTop.Width = msg.Width
return m, nil
case tea.KeyMsg:
switch {
case m.holdersView:
switch msg.String() {
case "q":
m.holdersView = false
m.viewportTop.SetContent(fmt.Sprintf("Total: %s", fmt.Sprint(len(m.table.Rows()))))
m.viewportBottom.SetContent("Press 'a' to export all addresses, 'h' to view holders")
return m, nil
case "a":
filename := fmt.Sprintf("%s-holders.csv", m.selected[4])
err := common.WriteRowsToCSV(m.holdersTable.Rows(), filename)
if err != nil {
m.logger.Error().Err(err).Msg("Failed to write rows to CSV file")
return m, nil
}
m.viewportBottom.SetContent(fmt.Sprintf("Table dumped to %s", filename))
switch msg.String() {
case "esc":
if m.table.Focused() {
m.table.Blur()
} else {
m.table.Focus()
}

m.holdersTable, cmd = m.holdersTable.Update(msg)
m.viewportTop, tcmd = m.viewportTop.Update(msg)
m.viewportBottom, bcmd = m.viewportBottom.Update(msg)
return m, tea.Batch(cmd, bcmd, tcmd)
default:
switch msg.String() {
case "esc":
if m.table.Focused() {
m.table.Blur()
case "q", "ctrl+c":
return m, tea.Quit
case "1", "2", "3", "4", "5", "6", "7", "8", "9":
columnIndex := int(msg.Runes[0] - '1')
currentRows := m.table.Rows()
columnCount := len(currentRows[0])

if columnIndex < columnCount {
if m.lastSortedColumn == columnIndex {
m.sortAscending = !m.sortAscending
} else {
m.table.Focus()
m.sortAscending = true
m.lastSortedColumn = columnIndex
}
case "q", "ctrl+c":
return m, tea.Quit
case "1", "2", "3", "4", "5", "6", "7", "8", "9":
columnIndex := int(msg.Runes[0] - '1')
currentRows := m.table.Rows()
columnCount := len(currentRows[0])

if columnIndex < columnCount {
if m.lastSortedColumn == columnIndex {
m.sortAscending = !m.sortAscending
} else {
m.sortAscending = true
m.lastSortedColumn = columnIndex
}

sort.SliceStable(currentRows, func(i, j int) bool {
valI, errI := strconv.ParseFloat(currentRows[i][columnIndex], 64)
valJ, errJ := strconv.ParseFloat(currentRows[j][columnIndex], 64)

if errI == nil && errJ == nil {
if m.sortAscending {
return valI < valJ
} else {
return valI > valJ
}
}
sort.SliceStable(currentRows, func(i, j int) bool {
valI, errI := strconv.ParseFloat(currentRows[i][columnIndex], 64)
valJ, errJ := strconv.ParseFloat(currentRows[j][columnIndex], 64)

if errI == nil && errJ == nil {
if m.sortAscending {
return currentRows[i][columnIndex] < currentRows[j][columnIndex]
return valI < valJ
} else {
return currentRows[i][columnIndex] > currentRows[j][columnIndex]
return valI > valJ
}
})

m.table.SetRows(currentRows)
}
case "enter":
selectedRow := m.table.SelectedRow()
contract, err := m.client.GetContractDetails(selectedRow[4])
if err != nil {
m.logger.Error().Err(err).Msg("Failed to get contract details")
return m, nil
}
utils.OpenBrowser("https://explorer.hiro.so/txid/" + contract.TxID)
case "a":
err := common.WriteRowsToCSV(m.table.Rows(), "tokens.csv")
if err != nil {
return m, nil
}
m.logger.Info().Msg("Table dumped to tokens.csv")
case "s":
selectedRow := m.table.SelectedRow()
contract, err := m.client.GetContractSource(selectedRow[4])
if err != nil {
m.logger.Error().Err(err).Msg("Failed to get contract source")
return m, nil
}

var builder strings.Builder
builder.WriteString(selectedRow[0])
builder.WriteString("-")
builder.WriteString(selectedRow[1])
builder.WriteString("-")
builder.WriteString(selectedRow[4])
builder.WriteString(".clar")
filename := builder.String()
}

file, err := os.Create(filename)
if err != nil {
m.logger.Error().Err(err).Msg("Failed to create file")
return m, nil
}
defer file.Close()
if m.sortAscending {
return currentRows[i][columnIndex] < currentRows[j][columnIndex]
} else {
return currentRows[i][columnIndex] > currentRows[j][columnIndex]
}
})

_, err = file.WriteString(contract)
if err != nil {
m.logger.Error().Err(err).Msg("Failed to write to file")
return m, nil
}
m.viewportBottom.SetContent(fmt.Sprintf("Contract source saved to %s", filename))
m.table.SetRows(currentRows)
}
case "enter":
selectedRow := m.table.SelectedRow()
utils.OpenBrowser("https://explorer.hiro.so/address/" + selectedRow[0])
case "s":
err := common.WriteRowsToCSV(m.table.Rows(), "tokens.csv")
if err != nil {
return m, nil
}
m.logger.Info().Msg("Table dumped to tokens.csv")
}
}
m.table, cmd = m.table.Update(msg)
Expand Down
2 changes: 1 addition & 1 deletion internal/commands/token/ft/holders/holders.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func CreateFungibleTokenHoldersCommand(props *props.AppProps) *cli.Command {
vpTop.SetContent(fmt.Sprintf("Total: %s", fmt.Sprint(len(dataRows))))

vpBottom := viewport.New(75, 1)
vpBottom.SetContent("Press 'a' to export all addresses")
vpBottom.SetContent("Press 's' to export all addresses, 'enter' to open address in explorer, 1-9 to sort by column")

m := tableModel{
table: t,
Expand Down
145 changes: 41 additions & 104 deletions internal/commands/token/ft/holders/table.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package holders

import (
"fmt"
"os"
"sort"
"strconv"
"strings"

"github.com/phuslu/log"

Expand All @@ -23,7 +20,6 @@ type tableModel struct {
holdersTable table.Model
viewportBottom viewport.Model
viewportTop viewport.Model
selected table.Row

client *hiro.APIClient
logger log.Logger
Expand Down Expand Up @@ -58,117 +54,58 @@ func (m tableModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.viewportTop.Width = msg.Width
return m, nil
case tea.KeyMsg:
switch {
case m.holdersView:
switch msg.String() {
case "q":
m.holdersView = false
m.viewportTop.SetContent(fmt.Sprintf("Total: %s", fmt.Sprint(len(m.table.Rows()))))
m.viewportBottom.SetContent("Press 'a' to export all addresses, 'h' to view holders")
return m, nil
case "a":
filename := fmt.Sprintf("%s-holders.csv", m.selected[4])
err := common.WriteRowsToCSV(m.holdersTable.Rows(), filename)
if err != nil {
m.logger.Error().Err(err).Msg("Failed to write rows to CSV file")
return m, nil
}
m.viewportBottom.SetContent(fmt.Sprintf("Table dumped to %s", filename))
switch msg.String() {
case "esc":
if m.table.Focused() {
m.table.Blur()
} else {
m.table.Focus()
}

m.holdersTable, cmd = m.holdersTable.Update(msg)
m.viewportTop, tcmd = m.viewportTop.Update(msg)
m.viewportBottom, bcmd = m.viewportBottom.Update(msg)
return m, tea.Batch(cmd, bcmd, tcmd)
default:
switch msg.String() {
case "esc":
if m.table.Focused() {
m.table.Blur()
case "q", "ctrl+c":
return m, tea.Quit
case "1", "2", "3", "4", "5", "6", "7", "8", "9":
columnIndex := int(msg.Runes[0] - '1')
currentRows := m.table.Rows()
columnCount := len(currentRows[0])

if columnIndex < columnCount {
if m.lastSortedColumn == columnIndex {
m.sortAscending = !m.sortAscending
} else {
m.table.Focus()
m.sortAscending = true
m.lastSortedColumn = columnIndex
}
case "q", "ctrl+c":
return m, tea.Quit
case "1", "2", "3", "4", "5", "6", "7", "8", "9":
columnIndex := int(msg.Runes[0] - '1')
currentRows := m.table.Rows()
columnCount := len(currentRows[0])

if columnIndex < columnCount {
if m.lastSortedColumn == columnIndex {
m.sortAscending = !m.sortAscending
} else {
m.sortAscending = true
m.lastSortedColumn = columnIndex
}

sort.SliceStable(currentRows, func(i, j int) bool {
valI, errI := strconv.ParseFloat(currentRows[i][columnIndex], 64)
valJ, errJ := strconv.ParseFloat(currentRows[j][columnIndex], 64)

if errI == nil && errJ == nil {
if m.sortAscending {
return valI < valJ
} else {
return valI > valJ
}
}
sort.SliceStable(currentRows, func(i, j int) bool {
valI, errI := strconv.ParseFloat(currentRows[i][columnIndex], 64)
valJ, errJ := strconv.ParseFloat(currentRows[j][columnIndex], 64)

if errI == nil && errJ == nil {
if m.sortAscending {
return currentRows[i][columnIndex] < currentRows[j][columnIndex]
return valI < valJ
} else {
return currentRows[i][columnIndex] > currentRows[j][columnIndex]
return valI > valJ
}
})

m.table.SetRows(currentRows)
}
case "enter":
selectedRow := m.table.SelectedRow()
contract, err := m.client.GetContractDetails(selectedRow[4])
if err != nil {
m.logger.Error().Err(err).Msg("Failed to get contract details")
return m, nil
}
utils.OpenBrowser("https://explorer.hiro.so/txid/" + contract.TxID)
case "a":
err := common.WriteRowsToCSV(m.table.Rows(), "tokens.csv")
if err != nil {
return m, nil
}
m.logger.Info().Msg("Table dumped to tokens.csv")
case "s":
selectedRow := m.table.SelectedRow()
contract, err := m.client.GetContractSource(selectedRow[4])
if err != nil {
m.logger.Error().Err(err).Msg("Failed to get contract source")
return m, nil
}

var builder strings.Builder
builder.WriteString(selectedRow[0])
builder.WriteString("-")
builder.WriteString(selectedRow[1])
builder.WriteString("-")
builder.WriteString(selectedRow[4])
builder.WriteString(".clar")
filename := builder.String()
}

file, err := os.Create(filename)
if err != nil {
m.logger.Error().Err(err).Msg("Failed to create file")
return m, nil
}
defer file.Close()
if m.sortAscending {
return currentRows[i][columnIndex] < currentRows[j][columnIndex]
} else {
return currentRows[i][columnIndex] > currentRows[j][columnIndex]
}
})

_, err = file.WriteString(contract)
if err != nil {
m.logger.Error().Err(err).Msg("Failed to write to file")
return m, nil
}
m.viewportBottom.SetContent(fmt.Sprintf("Contract source saved to %s", filename))
m.table.SetRows(currentRows)
}
case "enter":
selectedRow := m.table.SelectedRow()
utils.OpenBrowser("https://explorer.hiro.so/address/" + selectedRow[0])
case "s":
err := common.WriteRowsToCSV(m.table.Rows(), "tokens.csv")
if err != nil {
return m, nil
}
m.logger.Info().Msg("Table dumped to tokens.csv")
}
}
m.table, cmd = m.table.Update(msg)
Expand Down

0 comments on commit ed4ad44

Please sign in to comment.