mirror of
https://github.com/anotherhadi/proton-vpn-tui.git
synced 2026-10-05 19:28:28 +02:00
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
zone "github.com/lrstanley/bubblezone/v2"
|
|
)
|
|
|
|
const (
|
|
zoneBadgeFastest = "badge-fastest"
|
|
zoneBadgeRandom = "badge-random"
|
|
zoneBadgeSecureCore = "badge-securecore"
|
|
zoneBadgeTor = "badge-tor"
|
|
zoneBadgeP2P = "badge-p2p"
|
|
zoneBadgeFree = "badge-free"
|
|
)
|
|
|
|
func rowZoneID(index int) string {
|
|
return fmt.Sprintf("row-%d", index)
|
|
}
|
|
|
|
func (m Model) updateMouseClick(msg tea.MouseClickMsg) (Model, tea.Cmd) {
|
|
if msg.Button != tea.MouseLeft {
|
|
return m, nil
|
|
}
|
|
|
|
switch {
|
|
case zone.Get(zoneBadgeFastest).InBounds(msg):
|
|
m.prefer = "fastest"
|
|
return m, nil
|
|
|
|
case zone.Get(zoneBadgeRandom).InBounds(msg):
|
|
m.prefer = "random"
|
|
return m, nil
|
|
|
|
case zone.Get(zoneBadgeSecureCore).InBounds(msg):
|
|
m.filters.SecureCore = !m.filters.SecureCore
|
|
m.tree = buildTree(m.servers, m.filters)
|
|
return m, m.refreshList()
|
|
|
|
case zone.Get(zoneBadgeTor).InBounds(msg):
|
|
m.filters.Tor = !m.filters.Tor
|
|
m.tree = buildTree(m.servers, m.filters)
|
|
return m, m.refreshList()
|
|
|
|
case zone.Get(zoneBadgeP2P).InBounds(msg):
|
|
m.filters.P2P = !m.filters.P2P
|
|
m.tree = buildTree(m.servers, m.filters)
|
|
return m, m.refreshList()
|
|
|
|
case zone.Get(zoneBadgeFree).InBounds(msg):
|
|
m.filters.Free = !m.filters.Free
|
|
m.tree = buildTree(m.servers, m.filters)
|
|
return m, m.refreshList()
|
|
}
|
|
|
|
return m.clickRow(msg)
|
|
}
|
|
|
|
func (m Model) clickRow(msg tea.MouseClickMsg) (Model, tea.Cmd) {
|
|
items := m.list.Items()
|
|
for i := range items {
|
|
if !zone.Get(rowZoneID(i)).InBounds(msg) {
|
|
continue
|
|
}
|
|
if i != m.list.Index() {
|
|
m.list.Select(i)
|
|
return m, nil
|
|
}
|
|
return m.activateSelected()
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
func (m Model) activateSelected() (Model, tea.Cmd) {
|
|
r, ok := m.selectedRow()
|
|
if !ok {
|
|
return m, nil
|
|
}
|
|
if r.kind == rowServer {
|
|
return m.connectSelected()
|
|
}
|
|
if r.expanded {
|
|
return m.collapseSelected()
|
|
}
|
|
return m.expandSelected()
|
|
}
|