okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
10e0f66
main
1// The folder picker in every state a person sees, for the shot gallery. A 2// plain test run draws each state and writes nothing. 3package tui 4 5import ( 6"errors" 7 8"albedo/cli/internal/daemon" 9 10 tea"charm.land/bubbletea/v2" 11) 12 13const shotHere = "/Users/dawn/proj/albedo" 14 15func init () { 16session := daemon.Session {ID :"a" ,Workspace :shotHere } 17right := tea.KeyPressMsg {Code :tea .KeyRight } 18registerShots ("folders" , 19shotState {"browse" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"" ,nil )}, 20shotState {"move-session" ,folderShot (func ()FolderPicker {return NewFolderPicker (remoteFolders ("ready" ,"" ),session ,nil ) },"" ,nil )}, 21shotState {"retry-missing" ,folderShot (func ()FolderPicker { 22return NewFolderPicker (remoteFolders ("ready" ,"" ),session ,& WorkspaceRetry {Missing :"/Users/dawn/proj/gone" ,Prompt :"fix the bug" }) 23 },"" ,nil )}, 24shotState {"listing-host" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"chernobog:" ,nil )}, 25shotState {"hosts" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"@" ,nil )}, 26shotState {"listing-failed" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"/nowhere/" ,nil )}, 27shotState {"host-warming" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("warming" ,"" ),shotHere ,"" ) },"cher" ,nil )}, 28shotState {"host-needs-sign-in" ,folderShot (func ()FolderPicker { 29return NewFolderBrowser (remoteFolders ("needs_auth" ,"Permission denied (publickey)" ),shotHere ,"" ) 30 },"cher" ,nil )}, 31shotState {"host-unreachable" ,folderShot (func ()FolderPicker { 32return NewFolderBrowser (remoteFolders ("unreachable" ,"no route to host" ),shotHere ,"" ) 33 },"cher" ,nil )}, 34shotState {"sessions-stepped" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"" ,func (m * FolderPicker ) { 35* m ,_ = m .Update (right ) 36 })}, 37shotState {"sessions-failed" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"" ,func (m * FolderPicker ) { 38m .sessionsError = "daemon did not answer" 39 })}, 40shotState {"notice" ,folderShot (func ()FolderPicker {return NewFolderBrowser (remoteFolders ("ready" ,"" ),shotHere ,"" ) },"" ,func (m * FolderPicker ) { 41m .Refused (errors .New ("chernobog: connection refused" )) 42 })}, 43shotState {"moving" ,folderShot (func ()FolderPicker {return NewFolderPicker (remoteFolders ("ready" ,"" ),session ,nil ) },"" ,func (m * FolderPicker ) { 44m .moving = true 45 })}, 46 ) 47} 48 49// folderShot draws the picker built by build, after the first listing has 50// settled, then typed query, then setup. 51func folderShot (build func ()FolderPicker ,query string ,setup func (* FolderPicker ))func (width ,height int )string { 52return func (width ,height int )string { 53m := build () 54m .SetSize (width ,height ) 55m = drainPicker (m ,m .Init ()) 56m = typeText (m ,query ) 57if setup != nil { 58setup (& m ) 59 } 60return m .View () 61 } 62}