mirror of
https://github.com/anotherhadi/proton-vpn-tui.git
synced 2026-10-05 19:28:28 +02:00
init
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user