Documentation
¶
Index ¶
- Constants
- Variables
- func AdvertiseService(hostname string, port int, realm string) (*zeroconf.Server, error)
- func AllZeros(b []byte) bool
- func Attach(username, password, desktopName string) error
- func CallFileOp(deviceSession *xconn.Session, procedure string, payload []byte) ([]byte, error)
- func CaptureScreenshot(conn *dbus.Conn) ([]byte, error)
- func CatFile(session *xconn.Session, remotePath string) error
- func CatFileViaProxy(localSession *xconn.Session, realm, remotePath string, p2p bool) error
- func CfgDirectory() (string, error)
- func ClientKeyExchangeKeys(privateKey, serverPublicKey []byte) (sendKey, receiveKey []byte, err error)
- func CloudURI() string
- func ConnectCloudRealm(cfgDirectory string) (*xconn.Session, error)
- func ConnectDeviceRealm(ctx context.Context, realm, cfgDirectory string, useP2P bool) (*xconn.Session, error)
- func ConnectWebrtc(ctx context.Context, session *xconn.Session, ...) (*xconn.Session, error)
- func CreateX25519KeyPair() (publicKey []byte, privateKey []byte, err error)
- func CredentialsFilePath() (string, error)
- func DecryptChaCha20Poly1305(ciphertext, nonce, key []byte) ([]byte, error)
- func DecryptPayload(data, key []byte) ([]byte, error)
- func DeriveKeyHKDF(sharedSecret, info []byte) ([]byte, error)
- func Detach(session *xconn.Session, authID string) error
- func DisablePrinting() error
- func DisableScreenshot(cfgDirectory string) error
- func EnablePrinterHosting() error
- func EnablePrinting() error
- func EnableScreenshot(cfgDirectory string) error
- func EncryptChaCha20Poly1305(plaintext, key []byte) ([]byte, []byte, error)
- func EncryptPayload(plaintext, key []byte) ([]byte, error)
- func FetchTURNServers(session *xconn.Session) ([]xconnwebrtc.ICEServer, int64, error)
- func ForwardLocalPort(ctx context.Context, session *xconn.Session, remotePort, localPort string) error
- func GetOrRefreshTURNServers(ctx context.Context, authid, privKey, cfgDirectory string) ([]xconnwebrtc.ICEServer, error)
- func Login(session *xconn.Session, username string) error
- func PerformKeyExchange(privateKey, peerPublicKey []byte) ([]byte, error)
- func ProxyCatHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
- func ProxyDeviceInfoHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
- func ProxyFileOpHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
- func ProxyLogsHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
- func ProxyPingHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
- func ProxyProgressiveInvocationHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions, ...) xconn.InvocationHandler
- func ProxyShellHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
- func PullFiles(session *xconn.Session, remotePath, localPath string, recursive bool) error
- func PushFiles(session *xconn.Session, localPath, remotePath string, recursive bool) error
- func ReadCredentials(cfgDirectory string) (string, string, error)
- func RemoveCredentialsFiles(cfgDirectory string) error
- func ReverseLocalPort(ctx context.Context, session *xconn.Session, remotePort, localPort string) error
- func RevokeScreenshotPermission(conn *dbus.Conn) error
- func ScreenshotEnabled(cfgDirectory string) (bool, error)
- func ServerKeyExchange(clientPublicKey []byte) (serverPublicKey, sendKey, receiveKey []byte, err error)
- func SetPrintMode(mode PrintMode) error
- func StartInteractiveCommand(session *xconn.Session, realm, procedureName string, args ...string) error
- func StreamLogs(session *xconn.Session, realm, source string, follow bool, tailN int64, ...) error
- func WritePrincipalsToFile(principals []*CryptosignPrincipal) error
- type Audio
- type Authenticator
- func (a *Authenticator) Authenticate(request auth.Request) (auth.Response, error)
- func (a *Authenticator) Methods() []auth.Method
- func (a *Authenticator) RetrievePrincipal(authid string) (*CryptosignPrincipal, bool)
- func (a *Authenticator) SetPrincipal(authid string, principal *CryptosignPrincipal)
- func (a *Authenticator) SetPrincipals(principals []*CryptosignPrincipal)
- func (a *Authenticator) SubscribeEvents(session *xconn.Session, machineID string) error
- type CPUTimes
- type ClientSessions
- func (c *ClientSessions) DeleteDeviceSession(realm string)
- func (c *ClientSessions) DeviceSessions() map[string]int64
- func (c *ClientSessions) Disconnect(realm string)
- func (c *ClientSessions) DisconnectAll()
- func (c *ClientSessions) EnsureDeviceSessionWithUpgrade(ctx context.Context, realm, cfgDirectory string) (*xconn.Session, <-chan *xconn.Session, error)
- func (c *ClientSessions) EnsureP2PDeviceSession(ctx context.Context, realm, cfgDirectory string) (*xconn.Session, error)
- func (c *ClientSessions) LoggedIn() bool
- func (c *ClientSessions) Login()
- func (c *ClientSessions) Logout()
- func (c *ClientSessions) SessionByRealm(authid string) (*xconn.Session, bool)
- func (c *ClientSessions) StoreDeviceSession(realm string, session *xconn.Session)
- type Config
- type Credentials
- type CryptosignPrincipal
- type Deskconn
- type Device
- type DeviceInfo
- type FileBrowseResult
- type FileBrowser
- func (f *FileBrowser) Browse(pathArg string) (*FileBrowseResult, error)
- func (f *FileBrowser) Copy(srcPath, dstPath string) error
- func (f *FileBrowser) Delete(path string) error
- func (f *FileBrowser) Rename(oldPath, newPath string) error
- func (f *FileBrowser) Search(pathArg, query string, showHidden bool, sendKey []byte, inv *xconn.Invocation) error
- type FileEntry
- type IndexEntry
- type IndexQueryResult
- type IndexService
- type MPRIS
- func (m *MPRIS) ListPlayers() (map[string]string, error)
- func (m *MPRIS) Next() error
- func (m *MPRIS) NextPlayer(name string) error
- func (m *MPRIS) Pause() error
- func (m *MPRIS) PausePlayer(name string) error
- func (m *MPRIS) Play() error
- func (m *MPRIS) PlayPause() error
- func (m *MPRIS) PlayPausePlayer(name string) error
- func (m *MPRIS) PlayPlayer(name string) error
- func (m *MPRIS) Previous() error
- func (m *MPRIS) PreviousPlayer(name string) error
- type NetworkInterface
- type Organization
- type PrintJobStatus
- type PrintMode
- type Printer
- type PrinterInfo
- type PrintingConfig
- type ProxyCall
- type ProxyCalls
- type Screen
- type ScreenshotConfig
- type TURNCredentials
- type Wallpaper
Constants ¶
const ( Realm = "io.xconn.deskconn" ProcedureDeskconnAttachDesktop = "io.xconn.deskconn.desktop.attach" ProcedureDeskconnDetachDesktop = "io.xconn.deskconn.desktop.detach" TopicDeskconnDesktopDetachFormat = "io.xconn.deskconn.desktop.%s.detach" MachineIDPath = "/etc/machine-id" )
const ( ProcedureListKeys = "io.xconn.deskconn.desktop.access.key.list" TopicKeyAddedFormat = "io.xconn.deskconn.desktop.%s.key.add" TopicKeyRemovedFormat = "io.xconn.deskconn.desktop.%s.key.remove" )
const ( ProcedureKeyExchange = "io.xconn.deskconn.deskconnd.key.exchange" ProcedureScreenBrightnessGet = "io.xconn.deskconn.deskconnd.screen.brightness.get" ProcedureScreenBrightnessSet = "io.xconn.deskconn.deskconnd.screen.brightness.set" ProcedureScreenLock = "io.xconn.deskconn.deskconnd.screen.lock" ProcedureScreenIsLocked = "io.xconn.deskconn.deskconnd.screen.islocked" ProcedureShell = "io.xconn.deskconn.deskconnd.shell" ProcedureExec = "io.xconn.deskconn.deskconnd.exec" ProcedureFileBrowse = "io.xconn.deskconn.deskconnd.file.browse" ProcedurePrinterList = "io.xconn.deskconn.deskconnd.printer.list" ProcedurePrinterPrint = "io.xconn.deskconn.deskconnd.printer.print" ProcedureFileRename = "io.xconn.deskconn.deskconnd.file.rename" ProcedureFileDelete = "io.xconn.deskconn.deskconnd.file.delete" ProcedureFileCopy = "io.xconn.deskconn.deskconnd.file.copy" ProcedureFileSearch = "io.xconn.deskconn.deskconnd.file.search" ProcedureDeviceInfo = "io.xconn.deskconn.deskconnd.device.info" ProcedureLogs = "io.xconn.deskconn.deskconnd.logs" ProcedurePing = "io.xconn.deskconn.deskconnd.ping" ProcedureIndexQuery = "io.xconn.deskconn.deskconnd.index.query" ProcedureWallpaperGet = "io.xconn.deskconn.deskconnd.wallpaper.get" ProcedureWallpaperChecksum = "io.xconn.deskconn.deskconnd.wallpaper.checksum" ProcedureMPRISPlayers = "io.xconn.deskconn.deskconnd.mpris.players" ProcedureMPRISPlayPause = "io.xconn.deskconn.deskconnd.mpris.playpause" ProcedureMPRISPlay = "io.xconn.deskconn.deskconnd.mpris.play" ProcedureMPRISPause = "io.xconn.deskconn.deskconnd.mpris.pause" ProcedureMPRISNext = "io.xconn.deskconn.deskconnd.mpris.next" ProcedureMPRISPrevious = "io.xconn.deskconn.deskconnd.mpris.previous" ProcedureAudioMute = "io.xconn.deskconn.deskconnd.audio.mute" ProcedureAudioUnmute = "io.xconn.deskconn.deskconnd.audio.unmute" ProcedureAudioToggleMute = "io.xconn.deskconn.deskconnd.audio.togglemute" ProcedureAudioIsMuted = "io.xconn.deskconn.deskconnd.audio.ismuted" ProcedureScreenshot = "io.xconn.deskconn.deskconnd.screenshot" ProcedureScreenshotPermission = "io.xconn.deskconn.deskconnd.screenshot.permission" ErrInvalidArgument = "wamp.error.invalid_argument" ErrOperationFailed = "wamp.error.operation_failed" ErrNotAuthorized = "wamp.error.not_authorized" MetaTopicSessionLeave = "wamp.session.on_leave" )
const ( CategoryImages = "images" CategoryVideos = "videos" CategoryPDFs = "pdfs" CategoryTexts = "texts" CategoryDocuments = "documents" )
const ( ProcedureWebRTCOffer = "io.xconn.webrtc.offer" TopicAnswererOnCandidate = "io.xconn.webrtc.answerer.on_candidate" TopicOffererOnCandidate = "io.xconn.webrtc.offerer.on_candidate" ProcedurePrincipalCreate = "io.xconn.deskconn.account.principal.create" ProcedurePrincipalDelete = "io.xconn.deskconn.account.principal.delete" ProcedureAccountGet = "io.xconn.deskconn.account.get" ProcedureProxyShell = "io.xconn.deskconn.deskconnd.proxy.shell" ProcedureProxyExec = "io.xconn.deskconn.deskconnd.proxy.exec" ProcedureProxyFileOp = "io.xconn.deskconn.deskconnd.proxy.file.op" ProcedureProxyDeviceInfo = "io.xconn.deskconn.deskconnd.proxy.device.info" ProcedureProxyLogs = "io.xconn.deskconn.deskconnd.proxy.logs" ProcedureProxyPing = "io.xconn.deskconn.deskconnd.proxy.ping" ProcedureProxyCat = "io.xconn.deskconn.deskconnd.proxy.file.cat" ProcedureLogin = "io.xconn.deskconn.login" ProcedureLogout = "io.xconn.deskconn.logout" ProcedureConnect = "io.xconn.deskconn.connect" ProcedureDisconnect = "io.xconn.deskconn.disconnect" ProcedureDisconnectAll = "io.xconn.deskconn.disconnect_all" ProcedureConnectedDevices = "io.xconn.deskconn.connected_devices" ProcedureListDesktop = "io.xconn.deskconn.desktop.list" ProcedureAppUpdateCheck = "io.xconn.deskconn.app.update.check" ProcedureCoturnCreate = "io.xconn.deskconn.coturn.credentials.create" LocalRealm = "io.xconn.deskconn.local" CloudRealm = "io.xconn.deskconn" ErrAuthenticationFailed = "wamp.error.authentication_failed" StunServerURL = "stun:stun.l.google.com:19302" )
const ProcedureFileCat = "io.xconn.deskconn.deskconnd.file.cat"
const (
ProcedureFileDownload = "io.xconn.deskconn.deskconnd.file.download"
)
const (
ProcedureFileUpload = "io.xconn.deskconn.deskconnd.file.upload"
)
const (
ProcedurePortForward = "io.xconn.deskconn.deskconnd.port.forward"
)
const ProcedurePortReverse = "io.xconn.deskconn.deskconnd.port.reverse"
Variables ¶
var BacklightBasePath = "/sys/class/backlight" //nolint: gochecknoglobals
var ErrKeyExpired = errors.New("authentication key expired, please login again")
Functions ¶
func AdvertiseService ¶
func CallFileOp ¶
func CaptureScreenshot ¶
CaptureScreenshot performs the actual portal call. It is intended to be invoked from the foreground helper process.
func CatFileViaProxy ¶
func CfgDirectory ¶
func ClientKeyExchangeKeys ¶
func ClientKeyExchangeKeys(privateKey, serverPublicKey []byte) (sendKey, receiveKey []byte, err error)
ClientKeyExchangeKeys derives sendKey ("frontendToBackend") and receiveKey ("backendToFrontend") from the client's private key and the server's public key.
func ConnectDeviceRealm ¶
func ConnectWebrtc ¶
func CreateX25519KeyPair ¶
func CredentialsFilePath ¶
func DecryptChaCha20Poly1305 ¶
func DecryptPayload ¶
DecryptPayload decrypts a payload produced by EncryptPayload (nonce+ciphertext).
func DeriveKeyHKDF ¶
func DisablePrinting ¶
func DisablePrinting() error
func DisableScreenshot ¶
func EnablePrinterHosting ¶
func EnablePrinterHosting() error
func EnablePrinting ¶
func EnablePrinting() error
func EnableScreenshot ¶
func EncryptChaCha20Poly1305 ¶
func EncryptPayload ¶
EncryptPayload encrypts plaintext and returns nonce+ciphertext concatenated.
func FetchTURNServers ¶
func ForwardLocalPort ¶
func GetOrRefreshTURNServers ¶
func PerformKeyExchange ¶
func ProxyCatHandler ¶
func ProxyCatHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
func ProxyDeviceInfoHandler ¶
func ProxyDeviceInfoHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
func ProxyFileOpHandler ¶
func ProxyFileOpHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
func ProxyLogsHandler ¶
func ProxyLogsHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
ProxyLogsHandler proxies ProcedureLogs using a cloud-first session with async WebRTC upgrade.
func ProxyPingHandler ¶
func ProxyPingHandler(clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
func ProxyProgressiveInvocationHandler ¶
func ProxyProgressiveInvocationHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions, cfgDirectory, procedure string) xconn.InvocationHandler
func ProxyShellHandler ¶
func ProxyShellHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions, cfgDirectory string) xconn.InvocationHandler
ProxyShellHandler proxies ProcedureShell with transparent PTY migration. On first connection it uses a cloud session for fast start, then upgrades to WebRTC in the background. When WebRTC is ready the daemon migrates the live PTY and stores the WebRTC session for future reuse. If a P2P session is already cached it is used directly with no migration needed.
func RemoveCredentialsFiles ¶
func ReverseLocalPort ¶
func ReverseLocalPort(ctx context.Context, session *xconn.Session, remotePort, localPort string) error
ReverseLocalPort calls ProcedurePortReverse on the remote device, which listens on remotePort. Incoming connections on the remote are forwarded to localhost:localPort.
func RevokeScreenshotPermission ¶
RevokeScreenshotPermission clears the screenshot entry from the portal permission store.
func ScreenshotEnabled ¶
func ServerKeyExchange ¶
func ServerKeyExchange(clientPublicKey []byte) (serverPublicKey, sendKey, receiveKey []byte, err error)
ServerKeyExchange generates an ephemeral key pair, performs X25519 with the client's public key, and derives sendKey ("backendToFrontend") and receiveKey ("frontendToBackend"). Returns the server's public key so the caller can forward it to the client.
func SetPrintMode ¶
func StartInteractiveCommand ¶
func StreamLogs ¶
func WritePrincipalsToFile ¶
func WritePrincipalsToFile(principals []*CryptosignPrincipal) error
Types ¶
type Audio ¶
type Audio struct {
// contains filtered or unexported fields
}
func (*Audio) ToggleMute ¶
type Authenticator ¶
func NewAuthenticator ¶
func NewAuthenticator(principals []*CryptosignPrincipal) *Authenticator
func (*Authenticator) Authenticate ¶
func (*Authenticator) Methods ¶
func (a *Authenticator) Methods() []auth.Method
func (*Authenticator) RetrievePrincipal ¶
func (a *Authenticator) RetrievePrincipal(authid string) (*CryptosignPrincipal, bool)
func (*Authenticator) SetPrincipal ¶
func (a *Authenticator) SetPrincipal(authid string, principal *CryptosignPrincipal)
func (*Authenticator) SetPrincipals ¶
func (a *Authenticator) SetPrincipals(principals []*CryptosignPrincipal)
func (*Authenticator) SubscribeEvents ¶
func (a *Authenticator) SubscribeEvents(session *xconn.Session, machineID string) error
type ClientSessions ¶
func NewClientSessions ¶
func NewClientSessions() *ClientSessions
func (*ClientSessions) DeleteDeviceSession ¶
func (c *ClientSessions) DeleteDeviceSession(realm string)
func (*ClientSessions) DeviceSessions ¶
func (c *ClientSessions) DeviceSessions() map[string]int64
func (*ClientSessions) Disconnect ¶
func (c *ClientSessions) Disconnect(realm string)
func (*ClientSessions) DisconnectAll ¶
func (c *ClientSessions) DisconnectAll()
func (*ClientSessions) EnsureDeviceSessionWithUpgrade ¶
func (c *ClientSessions) EnsureDeviceSessionWithUpgrade(ctx context.Context, realm, cfgDirectory string) (*xconn.Session, <-chan *xconn.Session, error)
EnsureDeviceSessionWithUpgrade is like EnsureDeviceSession but also returns a channel that receives the WebRTC session when the background upgrade completes. If a connected session is already cached the channel is closed immediately.
func (*ClientSessions) EnsureP2PDeviceSession ¶
func (c *ClientSessions) EnsureP2PDeviceSession(ctx context.Context, realm, cfgDirectory string) (*xconn.Session, error)
EnsureP2PDeviceSession returns the cached session if one exists. Otherwise it establishes a WebRTC connection synchronously — never falling back to cloud.
func (*ClientSessions) LoggedIn ¶
func (c *ClientSessions) LoggedIn() bool
func (*ClientSessions) Login ¶
func (c *ClientSessions) Login()
func (*ClientSessions) Logout ¶
func (c *ClientSessions) Logout()
func (*ClientSessions) SessionByRealm ¶
func (c *ClientSessions) SessionByRealm(authid string) (*xconn.Session, bool)
func (*ClientSessions) StoreDeviceSession ¶
func (c *ClientSessions) StoreDeviceSession(realm string, session *xconn.Session)
type Config ¶
type Config struct {
Devices []Device `yaml:"devices"`
Printing PrintingConfig `yaml:"printing,omitempty"`
Screenshot ScreenshotConfig `yaml:"screenshot,omitempty"`
}
type Credentials ¶
type Credentials struct {
Realm string `json:"realm"`
AuthID string `json:"authid"`
PublicKey string `json:"public_key"`
PrivateKey string `json:"private_key"` // #nosec
}
func EnsureCredentials ¶
func EnsureCredentials() (*Credentials, error)
type CryptosignPrincipal ¶
type CryptosignPrincipal struct {
AuthID string `json:"authid"`
AuthorizedKeys []string `json:"authorized_keys"`
AuthRole string `json:"authrole"`
}
func ReadPrincipalsFromFile ¶
func ReadPrincipalsFromFile() ([]*CryptosignPrincipal, error)
type Deskconn ¶
type Deskconn struct {
// contains filtered or unexported fields
}
func (*Deskconn) HandleFileStreamChannel ¶
func (d *Deskconn) HandleFileStreamChannel(_ string, channel *webrtc.DataChannel)
HandleFileStreamChannel must not block, so it defers the actual work to serveFileStreamChannel, which serves one byte-range read per channel.
func (*Deskconn) StartIndexer ¶
StartIndexer starts the background file indexer.
type Device ¶
type Device struct {
Authid string `json:"authid" yaml:"authid"`
ID string `json:"id" yaml:"id"`
Name string `json:"name" yaml:"name"`
Organization Organization `json:"organization" yaml:"organization"`
Realm string `json:"realm" yaml:"realm"`
Alias string `yaml:"alias"`
Connected bool `yaml:"-" json:"-"`
}
func DevicesFromCfg ¶
func FetchDevicesFromCloud ¶
type DeviceInfo ¶
type DeviceInfo struct {
CPUModel string `json:"cpu_model"`
CPUPhysical int `json:"cpu_physical"`
CPULogical int `json:"cpu_logical"`
CPUUsages []float64 `json:"cpu_usages"`
CPUTimes CPUTimes `json:"cpu_times"`
RAMTotal uint64 `json:"ram_total"`
RAMFree uint64 `json:"ram_free"`
RAMUsed uint64 `json:"ram_used"`
RAMBuffCache uint64 `json:"ram_buff_cache"`
RAMAvailable uint64 `json:"ram_available"`
SwapTotal uint64 `json:"swap_total"`
SwapFree uint64 `json:"swap_free"`
SwapUsed uint64 `json:"swap_used"`
DiskUsed uint64 `json:"disk_used"`
DiskFree uint64 `json:"disk_free"`
DiskTotal uint64 `json:"disk_total"`
NetworkInterfaces []NetworkInterface `json:"network_interfaces"`
}
type FileBrowseResult ¶
type FileBrowseResult struct {
Path string `json:"path"`
HomePath string `json:"home_path"`
ParentPath string `json:"parent_path,omitempty"`
Type string `json:"type"`
Mode string `json:"mode"`
Size int64 `json:"size"`
ModTime time.Time `json:"mod_time"`
IsDir bool `json:"is_dir"`
IsSymlink bool `json:"is_symlink"`
LinkTarget string `json:"link_target,omitempty"`
Entries []FileEntry `json:"entries,omitempty"`
}
type FileBrowser ¶
type FileBrowser struct{}
func NewFileBrowser ¶
func NewFileBrowser() *FileBrowser
func (*FileBrowser) Browse ¶
func (f *FileBrowser) Browse(pathArg string) (*FileBrowseResult, error)
func (*FileBrowser) Copy ¶
func (f *FileBrowser) Copy(srcPath, dstPath string) error
func (*FileBrowser) Delete ¶
func (f *FileBrowser) Delete(path string) error
func (*FileBrowser) Rename ¶
func (f *FileBrowser) Rename(oldPath, newPath string) error
func (*FileBrowser) Search ¶
func (f *FileBrowser) Search(pathArg, query string, showHidden bool, sendKey []byte, inv *xconn.Invocation) error
type FileEntry ¶
type FileEntry struct {
Name string `json:"name"`
Path string `json:"path"`
Type string `json:"type"`
Mode string `json:"mode"`
Size int64 `json:"size"`
Hidden bool `json:"hidden"`
ModTime time.Time `json:"mod_time"`
IsDir bool `json:"is_dir"`
IsSymlink bool `json:"is_symlink"`
LinkTarget string `json:"link_target,omitempty"`
ItemCount *int `json:"item_count,omitempty"`
Thumbnail string `json:"thumbnail,omitempty"`
}
type IndexEntry ¶
type IndexQueryResult ¶
type IndexQueryResult struct {
Status string `json:"status"`
Entries []IndexEntry `json:"entries,omitempty"`
NextCursor map[string]string `json:"next_cursor,omitempty"`
HasMore bool `json:"has_more"`
}
type IndexService ¶
type IndexService struct {
// contains filtered or unexported fields
}
func NewIndexService ¶
func NewIndexService(cfgDirectory string) (*IndexService, error)
NewIndexService opens (or creates) the bbolt database in cfgDirectory and restores the previous indexing state if one exists.
func (*IndexService) Close ¶
func (s *IndexService) Close()
Close releases the watcher and the bbolt database.
func (*IndexService) Query ¶
func (s *IndexService) Query(categories []string, cursor map[string]string, limit int) (*IndexQueryResult, error)
Query returns a page of indexed entries across the given categories, sorted by modification time (newest first). If categories is empty, all categories are queried. If indexing is still in progress it returns {status:"indexing"} with no entries.
cursor resumes iteration from a previous call's NextCursor. limit caps the number of entries returned; values <= 0 or > maxIndexLimit fall back to defaultIndexLimit.
func (*IndexService) Start ¶
func (s *IndexService) Start(ctx context.Context)
Start launches the background watcher and either the initial indexer (first run) or an incremental sync (subsequent restarts). Guarded by sync.Once.
type MPRIS ¶
type MPRIS struct {
// contains filtered or unexported fields
}
func (*MPRIS) NextPlayer ¶
func (*MPRIS) PausePlayer ¶
func (*MPRIS) PlayPausePlayer ¶
func (*MPRIS) PlayPlayer ¶
func (*MPRIS) PreviousPlayer ¶
type NetworkInterface ¶
type Organization ¶
type PrintJobStatus ¶
type Printer ¶
type Printer struct {
// contains filtered or unexported fields
}
func NewPrinter ¶
func NewPrinter() *Printer
type PrinterInfo ¶
type PrintingConfig ¶
type PrintingConfig struct {
Mode PrintMode `yaml:"mode,omitempty"`
}
type ProxyCalls ¶
func NewProxyCalls ¶
func NewProxyCalls() *ProxyCalls
func (*ProxyCalls) Delete ¶
func (p *ProxyCalls) Delete(id uint64)
func (*ProxyCalls) Store ¶
func (p *ProxyCalls) Store(id uint64, c *ProxyCall)
type Screen ¶
type Screen struct {
// contains filtered or unexported fields
}
func (*Screen) GetBrightness ¶
func (*Screen) Screenshot ¶
func (*Screen) SessionBus ¶
func (*Screen) SetBrightness ¶
type ScreenshotConfig ¶
type ScreenshotConfig struct {
Enabled bool `yaml:"enabled,omitempty"`
}
type TURNCredentials ¶
type Wallpaper ¶
type Wallpaper struct {
// contains filtered or unexported fields
}
func NewWallpaper ¶
func (*Wallpaper) HandleChecksum ¶
func (w *Wallpaper) HandleChecksum(_ context.Context, _ *xconn.Invocation) *xconn.InvocationResult
func (*Wallpaper) HandleGet ¶
func (w *Wallpaper) HandleGet(_ context.Context, _ *xconn.Invocation) *xconn.InvocationResult