mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
join GetScreenSizeChangeChannel.
This commit is contained in:
parent
6e62b796fc
commit
f3080713ce
@ -55,41 +55,37 @@ func (manager *CaptureManagerCtx) Start() {
|
|||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
_, ok := <-manager.desktop.GetBeforeScreenSizeChangeChannel()
|
before, ok := <-manager.desktop.GetScreenSizeChangeChannel()
|
||||||
if !ok {
|
if !ok {
|
||||||
manager.logger.Info().Msg("before screen size change channel was closed")
|
manager.logger.Info().Msg("screen size change channel was closed")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if manager.video.Started() {
|
if before {
|
||||||
manager.video.destroyPipeline()
|
// before screen size change, we need to destroy all pipelines
|
||||||
}
|
|
||||||
|
|
||||||
if manager.broadcast.Started() {
|
if manager.video.Started() {
|
||||||
manager.broadcast.destroyPipeline()
|
manager.video.destroyPipeline()
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
_, ok := <-manager.desktop.GetAfterScreenSizeChangeChannel()
|
|
||||||
if !ok {
|
|
||||||
manager.logger.Info().Msg("after screen size change channel was closed")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if manager.video.Started() {
|
|
||||||
err := manager.video.createPipeline()
|
|
||||||
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
|
|
||||||
manager.logger.Panic().Err(err).Msg("unable to recreate video pipeline")
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if manager.broadcast.Started() {
|
if manager.broadcast.Started() {
|
||||||
err := manager.broadcast.createPipeline()
|
manager.broadcast.destroyPipeline()
|
||||||
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
|
}
|
||||||
manager.logger.Panic().Err(err).Msg("unable to recreate broadcast pipeline")
|
} else {
|
||||||
|
// after screen size change, we need to recreate all pipelines
|
||||||
|
|
||||||
|
if manager.video.Started() {
|
||||||
|
err := manager.video.createPipeline()
|
||||||
|
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
|
||||||
|
manager.logger.Panic().Err(err).Msg("unable to recreate video pipeline")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if manager.broadcast.Started() {
|
||||||
|
err := manager.broadcast.createPipeline()
|
||||||
|
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
|
||||||
|
manager.logger.Panic().Err(err).Msg("unable to recreate broadcast pipeline")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,21 +16,21 @@ import (
|
|||||||
var mu = sync.Mutex{}
|
var mu = sync.Mutex{}
|
||||||
|
|
||||||
type DesktopManagerCtx struct {
|
type DesktopManagerCtx struct {
|
||||||
logger zerolog.Logger
|
logger zerolog.Logger
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
shutdown chan struct{}
|
shutdown chan struct{}
|
||||||
beforeScreenSizeChangeChannel chan bool
|
config *config.Desktop
|
||||||
afterScreenSizeChangeChannel chan int16
|
|
||||||
config *config.Desktop
|
screenSizeChangeChannel chan bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(config *config.Desktop) *DesktopManagerCtx {
|
func New(config *config.Desktop) *DesktopManagerCtx {
|
||||||
return &DesktopManagerCtx{
|
return &DesktopManagerCtx{
|
||||||
logger: log.With().Str("module", "desktop").Logger(),
|
logger: log.With().Str("module", "desktop").Logger(),
|
||||||
shutdown: make(chan struct{}),
|
shutdown: make(chan struct{}),
|
||||||
beforeScreenSizeChangeChannel: make(chan bool),
|
config: config,
|
||||||
afterScreenSizeChangeChannel: make(chan int16),
|
|
||||||
config: config,
|
screenSizeChangeChannel: make(chan bool),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,18 +84,15 @@ func (manager *DesktopManagerCtx) Start() {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *DesktopManagerCtx) GetBeforeScreenSizeChangeChannel() chan bool {
|
func (manager *DesktopManagerCtx) GetScreenSizeChangeChannel() chan bool {
|
||||||
return manager.beforeScreenSizeChangeChannel
|
return manager.screenSizeChangeChannel
|
||||||
}
|
|
||||||
|
|
||||||
func (manager *DesktopManagerCtx) GetAfterScreenSizeChangeChannel() chan int16 {
|
|
||||||
return manager.afterScreenSizeChangeChannel
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *DesktopManagerCtx) Shutdown() error {
|
func (manager *DesktopManagerCtx) Shutdown() error {
|
||||||
manager.logger.Info().Msgf("desktop shutting down")
|
manager.logger.Info().Msgf("desktop shutting down")
|
||||||
|
|
||||||
close(manager.shutdown)
|
close(manager.shutdown)
|
||||||
|
close(manager.screenSizeChangeChannel)
|
||||||
manager.wg.Wait()
|
manager.wg.Wait()
|
||||||
|
|
||||||
xorg.DisplayClose()
|
xorg.DisplayClose()
|
||||||
|
@ -72,10 +72,10 @@ func (manager *DesktopManagerCtx) ScreenConfigurations() map[int]types.ScreenCon
|
|||||||
|
|
||||||
func (manager *DesktopManagerCtx) SetScreenSize(size types.ScreenSize) error {
|
func (manager *DesktopManagerCtx) SetScreenSize(size types.ScreenSize) error {
|
||||||
mu.Lock()
|
mu.Lock()
|
||||||
manager.GetBeforeScreenSizeChangeChannel() <- true
|
manager.GetScreenSizeChangeChannel() <- true
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
manager.GetAfterScreenSizeChangeChannel() <- size.Rate
|
manager.GetScreenSizeChangeChannel() <- false
|
||||||
mu.Unlock()
|
mu.Unlock()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -43,8 +43,7 @@ type DesktopErrorMessage struct {
|
|||||||
type DesktopManager interface {
|
type DesktopManager interface {
|
||||||
Start()
|
Start()
|
||||||
Shutdown() error
|
Shutdown() error
|
||||||
GetBeforeScreenSizeChangeChannel() chan bool
|
GetScreenSizeChangeChannel() (before chan bool) // true - before, false - after
|
||||||
GetAfterScreenSizeChangeChannel() chan int16
|
|
||||||
|
|
||||||
// clipboard
|
// clipboard
|
||||||
ReadClipboard() string
|
ReadClipboard() string
|
||||||
@ -73,8 +72,6 @@ type DesktopManager interface {
|
|||||||
|
|
||||||
// xevent
|
// xevent
|
||||||
GetCursorChangedChannel() chan uint64
|
GetCursorChangedChannel() chan uint64
|
||||||
GetClipboardUpdatedChannel() chan bool
|
GetClipboardUpdatedChannel() chan struct{}
|
||||||
GetFileChooserDialogOpenedChannel() chan bool
|
|
||||||
GetFileChooserDialogClosedChannel() chan bool
|
|
||||||
GetEventErrorChannel() chan DesktopErrorMessage
|
GetEventErrorChannel() chan DesktopErrorMessage
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user