forked from Elara6331/infinitime
		
	Only allow OnChange() to be called once
This commit is contained in:
		@@ -2,6 +2,7 @@ package player
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/godbus/dbus/v5"
 | 
						"github.com/godbus/dbus/v5"
 | 
				
			||||||
	"go.arsenm.dev/infinitime/internal/utils"
 | 
						"go.arsenm.dev/infinitime/internal/utils"
 | 
				
			||||||
@@ -10,6 +11,7 @@ import (
 | 
				
			|||||||
var (
 | 
					var (
 | 
				
			||||||
	method, monitor *dbus.Conn
 | 
						method, monitor *dbus.Conn
 | 
				
			||||||
	monitorCh       chan *dbus.Message
 | 
						monitorCh       chan *dbus.Message
 | 
				
			||||||
 | 
						onChangeOnce    sync.Once
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Init makes required connections to DBis and
 | 
					// Init makes required connections to DBis and
 | 
				
			||||||
@@ -130,7 +132,7 @@ func (ct ChangeType) String() string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// OnChange runs cb when a value changes
 | 
					// OnChange runs cb when a value changes
 | 
				
			||||||
func OnChange(cb func(ChangeType, string)) {
 | 
					func OnChange(cb func(ChangeType, string)) {
 | 
				
			||||||
	go func() {
 | 
						go onChangeOnce.Do(func() {
 | 
				
			||||||
		// For every message on channel
 | 
							// For every message on channel
 | 
				
			||||||
		for msg := range monitorCh {
 | 
							for msg := range monitorCh {
 | 
				
			||||||
			// Parse PropertiesChanged
 | 
								// Parse PropertiesChanged
 | 
				
			||||||
@@ -175,7 +177,7 @@ func OnChange(cb func(ChangeType, string)) {
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// getPlayerNames gets all DBus MPRIS player bus names
 | 
					// getPlayerNames gets all DBus MPRIS player bus names
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user