1453 lines
52 KiB
Go
1453 lines
52 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/TheCreeper/go-notify"
|
|
"github.com/delucks/go-subsonic"
|
|
"github.com/diamondburned/gotk4/pkg/gtk/v4"
|
|
"github.com/zalando/go-keyring"
|
|
|
|
// "github.com/diamondburned/gotk4/pkg/gdk/v4"
|
|
"github.com/diamondburned/gotk4/pkg/core/glib"
|
|
)
|
|
|
|
func SetUpGui() {
|
|
SettingsTabUserUsernameEntry = gtk.NewEntry()
|
|
SettingsTabUserServerEntry = gtk.NewEntry()
|
|
SettingsTabUserDeviceNameEntry = gtk.NewEntry()
|
|
SettingsTabUserPasswordEntry = gtk.NewEntry()
|
|
SettingsTabUserStatusLabel = gtk.NewLabel("- ")
|
|
SearchTabSearchEntry = gtk.NewSearchEntry()
|
|
SearchTabSongCheckButton = gtk.NewCheckButton()
|
|
SearchTabAlbumCheckButton = gtk.NewCheckButton()
|
|
SearchTabArtistCheckButton = gtk.NewCheckButton()
|
|
SearchListBoxResult = gtk.NewListBox()
|
|
MainSongTitleLabel = gtk.NewLabel(":")
|
|
MainArtistLabel = gtk.NewLabel(":")
|
|
MainAlbumLabel = gtk.NewLabel(":")
|
|
MainTimeDrawnLabel = gtk.NewLabel(":")
|
|
MainTimeLeft = gtk.NewLabel(":")
|
|
MainTotalTimeLabel = gtk.NewLabel(":")
|
|
SettingsTabAppDeleteSwitch = gtk.NewSwitch()
|
|
MainAdjustment = gtk.NewAdjustment(float64(0), float64(0), float64(1), float64(1), float64(10), float64(0))
|
|
SettingsTabAppCodecComboBoxTest = gtk.NewComboBoxText()
|
|
QueueListBox = gtk.NewListBox()
|
|
PlayListListBox = gtk.NewListBox()
|
|
MainAlbumCover = gtk.NewImage()
|
|
MainPlayPauseButton = gtk.NewButton() // gtk.NewLabel("▶")
|
|
MainSubtitlesTextView = gtk.NewTextView()
|
|
MainNotebook = gtk.NewNotebook()
|
|
LibraryNotebook = gtk.NewNotebook()
|
|
QueueListBoxLibrary = gtk.NewListBox()
|
|
SettingsTabAppCoverSizeEntry = gtk.NewEntry()
|
|
SettingsTabAppCoverSizeEntry = gtk.NewEntry()
|
|
SettingsTabAppBlurRadiusEntry = gtk.NewEntry()
|
|
SettingsTabAppBufferSizeEntry = gtk.NewEntry()
|
|
SettingsTabAppStreamingProxySwitch = gtk.NewSwitch()
|
|
SettingsTabAppStreamingProxyEntry = gtk.NewEntry()
|
|
SettingsTabAppAuthStreamingProxySwitch = gtk.NewSwitch()
|
|
SettingsTabAppStreamingProxyUsernameEntry = gtk.NewEntry()
|
|
SettingsTabAppStreamingProxyPassEntry = gtk.NewEntry()
|
|
SettingsTabAppMetadataProxySwitch = gtk.NewSwitch()
|
|
SettingsTabAppMetadataProxyEntry = gtk.NewEntry()
|
|
SettingsTabAppAuthMetadataProxySwitch = gtk.NewSwitch()
|
|
SettingsTabAppMetadataProxyUsernameEntry = gtk.NewEntry()
|
|
SettingsTabAppMetadataProxyPassEntry = gtk.NewEntry()
|
|
|
|
MainNotebook = gtk.NewNotebook()
|
|
LyricsNotebook = gtk.NewNotebook()
|
|
MainFlowbox = gtk.NewFlowBox()
|
|
|
|
LyricsScrolledWindow := gtk.NewScrolledWindow()
|
|
MainFlowBoxChild1 = gtk.NewFlowBoxChild()
|
|
MainFlowBoxChild2 = gtk.NewFlowBoxChild()
|
|
MainGridFlowBoxChild2 = gtk.NewGrid()
|
|
MainGridFlowBoxChild2Grid = gtk.NewGrid()
|
|
MainLeftSeparator = gtk.NewSeparator(gtk.OrientationHorizontal)
|
|
MainRightSeparator = gtk.NewSeparator(gtk.OrientationHorizontal)
|
|
MainFlowBoxChild3 = gtk.NewFlowBoxChild()
|
|
MainAdjustment.SetUpper(100)
|
|
MainAdjustment.SetStepIncrement(1)
|
|
MainAdjustment.SetPageIncrement(10)
|
|
MainScale = gtk.NewScale(gtk.OrientationHorizontal, MainAdjustment)
|
|
|
|
MainScaleGrid := gtk.NewGrid()
|
|
|
|
MainFlowBoxChild4 = gtk.NewFlowBoxChild()
|
|
MainGridFlowBoxChild4 = gtk.NewGrid()
|
|
MainPreviousButton = gtk.NewButton()
|
|
MainNextButton = gtk.NewButton()
|
|
MainRepeatButton = gtk.NewButton()
|
|
MainStarredButton = gtk.NewButton()
|
|
|
|
QueueMasterBox = gtk.NewBox(gtk.OrientationVertical, 2)
|
|
QueueSearchControlBox = gtk.NewGrid()
|
|
QueueScrolledWindow = gtk.NewScrolledWindow()
|
|
QueueSaveButton = gtk.NewButton() //
|
|
QueueClearButton = gtk.NewButton() //
|
|
QueueShuffleButton = gtk.NewButton() //
|
|
SearchControlBox = gtk.NewGrid()
|
|
QueueFlowBox := gtk.NewFlowBox()
|
|
QueueFlowBoxChild1 = gtk.NewFlowBoxChild()
|
|
|
|
LibraryFlowBox1 = gtk.NewFlowBox()
|
|
LibraryFlowBox2 = gtk.NewFlowBox()
|
|
LibraryFlowBox3 = gtk.NewFlowBox()
|
|
LibraryFlowBox4 = gtk.NewFlowBox()
|
|
LibraryPlaylistMainBox = gtk.NewBox(gtk.OrientationVertical, 0)
|
|
LibraryStarredMainBox = gtk.NewBox(gtk.OrientationVertical, 0)
|
|
LibraryLibraryMainBox = gtk.NewBox(gtk.OrientationVertical, 0)
|
|
LibraryPodcastMainBox = gtk.NewBox(gtk.OrientationVertical, 0)
|
|
LibraryFlowBox1Child1 = gtk.NewFlowBoxChild()
|
|
LibraryFlowBox2Child1 = gtk.NewFlowBoxChild()
|
|
LibraryFlowBox3Child1 = gtk.NewFlowBoxChild()
|
|
LibraryFlowBox4Child1 = gtk.NewFlowBoxChild()
|
|
LibraryPlaylistMainControlGrid = gtk.NewGrid()
|
|
LibraryStarredMainControlGrid = gtk.NewGrid()
|
|
LibraryLibraryMainControlGrid = gtk.NewGrid()
|
|
LibraryPodcastMainControlGrid = gtk.NewGrid()
|
|
LibraryPlaylistBackButton = gtk.NewButton()
|
|
LibraryPlaylistRefreshButton = gtk.NewButton()
|
|
LibraryStarredBackButton = gtk.NewButton()
|
|
LibraryStarredRefreshButton = gtk.NewButton()
|
|
LibraryLibraryBackButton = gtk.NewButton()
|
|
LibraryLibraryRefreshButton = gtk.NewButton()
|
|
LibraryPodcastBackButton = gtk.NewButton()
|
|
LibraryPodcastRefreshButton = gtk.NewButton()
|
|
LibraryStarredListBox = gtk.NewListBox()
|
|
LibraryPodcastListBox = gtk.NewListBox()
|
|
LibraryPlaylistMainScrolledWindow = gtk.NewScrolledWindow()
|
|
LibraryPodcastListBoxScrolledWindow = gtk.NewScrolledWindow()
|
|
LibraryStarredListBoxScrolledWindow = gtk.NewScrolledWindow()
|
|
QueueListBoxLibraryScrolledWindow = gtk.NewScrolledWindow()
|
|
|
|
SettingsAccountScrolledWindow = gtk.NewScrolledWindow()
|
|
SettingsAppScrolledWindow = gtk.NewScrolledWindow()
|
|
SettingsCreditsScrolledWindow = gtk.NewScrolledWindow()
|
|
|
|
SettingsAccountsFlowBox = gtk.NewFlowBox()
|
|
SettingsAppFlowBox = gtk.NewFlowBox()
|
|
SettingsCreditsFlowBox = gtk.NewFlowBox()
|
|
|
|
SettingsAccountFlowboxChild1 = gtk.NewFlowBoxChild()
|
|
SettingsAccountFlowboxChild2 = gtk.NewFlowBoxChild()
|
|
|
|
SettingsNotebook = gtk.NewNotebook()
|
|
SettingsAccountBox = gtk.NewBox(gtk.OrientationVertical, 3)
|
|
SettingsAccountLoginGrid = gtk.NewGrid()
|
|
SettingsAccountButtonsGrid = gtk.NewGrid()
|
|
SettingsAccountUserListbox = gtk.NewListBox()
|
|
|
|
SettingsAccountUsernameLabel = gtk.NewLabel("Username: ")
|
|
SettingsAccountPasswordLabel = gtk.NewLabel("Password: ")
|
|
SettingsAccountPLayerNameLabel = gtk.NewLabel("Player Name: ")
|
|
SettingsAccountServerLabel = gtk.NewLabel("Server: ")
|
|
SettingsAccountTestButton = gtk.NewButton()
|
|
SettingsAccountSaveButton = gtk.NewButton()
|
|
SettingsAccountLoadButton = gtk.NewButton()
|
|
|
|
SettingsAppScrolledWindow = gtk.NewScrolledWindow()
|
|
SettingsAppFlowBoxChild1 = gtk.NewFlowBoxChild()
|
|
SettingsAppFlowBoxChild2 = gtk.NewFlowBoxChild()
|
|
SettingsAppFlowBoxChild3 = gtk.NewFlowBoxChild()
|
|
SettingsAppFlowBoxChild4 = gtk.NewFlowBoxChild()
|
|
SettingsAppGrid1 = gtk.NewGrid()
|
|
SettingsAppGrid2 = gtk.NewGrid()
|
|
SettingsAppGrid3 = gtk.NewGrid()
|
|
SettingsAppGrid4 = gtk.NewGrid()
|
|
SettingsTabAppBitrateEntry = gtk.NewEntry()
|
|
|
|
SettingsAppLabelGrid1 = gtk.NewLabel("Local")
|
|
SettingsAppLabelGrid2 = gtk.NewLabel("Transcoding")
|
|
SettingsAppLabelGrid3 = gtk.NewLabel("Net")
|
|
|
|
SettingsAppLabelGrid1DeleteOnClose = gtk.NewLabel("Clear cache on close")
|
|
SettingsAppLabelGrid1CoverSideSize = gtk.NewLabel("Cover Side Size (px)")
|
|
SettingsAppLabelGrid1BackgroundBlurRadius = gtk.NewLabel("Cover blur radius")
|
|
SettingsTabAppHideHeaderBarSwitch = gtk.NewSwitch()
|
|
SettingsAppLabelHideHeaderBar = gtk.NewLabel("Hide Headerbar")
|
|
|
|
SettingsAppLabelGrid2Codec = gtk.NewLabel("Codec")
|
|
SettingsAppLabelGrid2Bitrate = gtk.NewLabel("Bitrate")
|
|
SettingsAppLabelGrid2DownloadBufferSize = gtk.NewLabel("Download Buffer Size")
|
|
|
|
SettingsAppLabelGrid3UseProxyForStreaming = gtk.NewLabel("Use proxy for streaming")
|
|
SettingsAppLabelGrid3AuthenticateStreamingProxy = gtk.NewLabel("Authenticate")
|
|
SettingsAppLabelGrid3UseProxyForMetadata = gtk.NewLabel("User proxy for Metadata")
|
|
SettingsAppLabelGrid3AuthenticateMetadataProxy = gtk.NewLabel("Authenticate")
|
|
|
|
SettingsAppLabelGrid4 = gtk.NewLabel("External Services")
|
|
SettingsAppLabelGrid4Metadata = gtk.NewLabel("Metadata")
|
|
SettingsTabAppMetadataComboBoxTest = gtk.NewComboBoxText()
|
|
|
|
SearchFlowBox := gtk.NewFlowBox()
|
|
SearchMasterBox = gtk.NewBox(gtk.OrientationVertical, 0)
|
|
SearchFlowBoxChild1 = gtk.NewFlowBoxChild()
|
|
SearchScrolledWindow = gtk.NewScrolledWindow()
|
|
|
|
// BELOW
|
|
|
|
// Main Notebook
|
|
|
|
MainNotebook.SetTabPos(gtk.PosBottom)
|
|
MainWindow.SetChild(MainNotebook)
|
|
|
|
// Home page
|
|
MainFlowbox.SetOrientation(gtk.OrientationVertical)
|
|
MainNotebook.AppendPage(LyricsNotebook, gtk.NewLabel("⌂"))
|
|
LyricsNotebook.AppendPage(MainFlowbox, gtk.NewLabel("⌂"))
|
|
LyricsNotebook.AppendPage(LyricsScrolledWindow, gtk.NewLabel("♪"))
|
|
MainFlowBoxChild1.SetChild(MainAlbumCover)
|
|
MainFlowBoxChild2.SetChild(MainGridFlowBoxChild2)
|
|
MainGridFlowBoxChild2.Attach(MainSongTitleLabel, 0, 0, 1, 1)
|
|
MainGridFlowBoxChild2.Attach(MainArtistLabel, 0, 1, 1, 1)
|
|
MainGridFlowBoxChild2.Attach(MainAlbumLabel, 0, 2, 1, 1)
|
|
MainGridFlowBoxChild2.Attach(MainGridFlowBoxChild2Grid, 0, 3, 1, 1)
|
|
// MainGridFlowBoxChild2Grid.Attach(MainTimeDrawnLabel, 0, 0, 1, 1)
|
|
MainGridFlowBoxChild2Grid.Attach(MainLeftSeparator, 1, 0, 1, 1)
|
|
// MainGridFlowBoxChild2Grid.Attach(MainTotalTimeLabel, 2, 0, 1, 1)
|
|
MainGridFlowBoxChild2Grid.Attach(MainRightSeparator, 3, 0, 1, 1)
|
|
// MainGridFlowBoxChild2Grid.Attach(MainTimeLeft, 4, 0, 1, 1)
|
|
MainFlowBoxChild3.SetChild(MainScaleGrid)
|
|
MainFlowBoxChild4.SetChild(MainGridFlowBoxChild4)
|
|
MainFlowbox.SetMaxChildrenPerLine(2)
|
|
MainFlowbox.SetMinChildrenPerLine(0)
|
|
MainPreviousButton.SetChild(gtk.NewLabel("◀◀"))
|
|
MainNextButton.SetChild(gtk.NewLabel("▶▶"))
|
|
MainRepeatButton.SetChild(gtk.NewLabel("⟳"))
|
|
MainStarredButton.SetChild(gtk.NewLabel("☆"))
|
|
MainGridFlowBoxChild4.Attach(MainPreviousButton, 1, 0, 1, 1)
|
|
MainGridFlowBoxChild4.Attach(MainPlayPauseButton, 2, 0, 1, 1)
|
|
MainGridFlowBoxChild4.Attach(MainNextButton, 3, 0, 1, 1)
|
|
MainGridFlowBoxChild4.Attach(MainRepeatButton, 0, 0, 1, 1)
|
|
MainGridFlowBoxChild4.Attach(MainStarredButton, 4, 0, 1, 1)
|
|
MainFlowbox.SetOrientation(gtk.OrientationHorizontal)
|
|
MainFlowbox.Insert(MainFlowBoxChild1, 0)
|
|
MainFlowbox.Insert(MainFlowBoxChild2, 1)
|
|
MainFlowbox.Insert(MainFlowBoxChild3, 2)
|
|
MainFlowbox.Insert(MainFlowBoxChild4, 3)
|
|
MainFlowbox.SetVAlign(gtk.AlignFill)
|
|
MainFlowbox.SetHAlign(gtk.AlignFill)
|
|
MainScale.SetHExpand(true)
|
|
MainScale.SetShowFillLevel(true)
|
|
MainScale.SetDrawValue(false)
|
|
MainScale.SetSizeRequest(294, 1)
|
|
// MainAdjustment.SetUpper(100)
|
|
// MainAdjustment.SetStepIncrement(float64(1.0))
|
|
// MainAdjustment.SetPageIncrement(float64(10.0))
|
|
MainAlbumCover.SetSizeRequest(300, 300)
|
|
MainAlbumCover.SetHAlign(gtk.AlignFill)
|
|
MainAlbumCover.SetVAlign(gtk.AlignFill)
|
|
MainGridFlowBoxChild2.SetHAlign(gtk.AlignCenter)
|
|
MainGridFlowBoxChild2.SetVAlign(gtk.AlignCenter)
|
|
MainGridFlowBoxChild2Grid.SetHAlign(gtk.AlignCenter)
|
|
MainGridFlowBoxChild2Grid.SetVAlign(gtk.AlignCenter)
|
|
MainLeftSeparator.SetHExpand(true)
|
|
MainRightSeparator.SetVExpand(true)
|
|
MainLeftSeparator.SetOpacity(0.0)
|
|
MainRightSeparator.SetOpacity(0.0)
|
|
MainLeftSeparator.SetSizeRequest(90, 0)
|
|
MainRightSeparator.SetSizeRequest(90, 0)
|
|
MainGridFlowBoxChild4.SetHAlign(gtk.AlignCenter)
|
|
MainGridFlowBoxChild4.SetVAlign(gtk.AlignCenter)
|
|
MainScale.SetShowFillLevel(true)
|
|
|
|
MainScaleGrid.Attach(MainScale, 0, 1, 3, 1)
|
|
MainScaleGrid.Attach(MainTimeDrawnLabel, 0, 0, 1, 1)
|
|
MainScaleGrid.Attach(MainTotalTimeLabel, 1, 0, 1, 1)
|
|
MainScaleGrid.Attach(MainTimeLeft, 2, 0, 1, 1)
|
|
|
|
MainFlowbox.SetSelectionMode(gtk.SelectionNone)
|
|
MainPlayPauseButton.SetLabel("▶")
|
|
// MainAdjustment
|
|
|
|
// Queue page
|
|
|
|
MainNotebook.AppendPage(QueueFlowBox, gtk.NewLabel("☰"))
|
|
QueueFlowBox.SetSelectionMode(gtk.SelectionNone)
|
|
QueueMasterBox.Append(QueueSearchControlBox)
|
|
QueueMasterBox.Append(QueueScrolledWindow)
|
|
QueueScrolledWindow.SetChild(QueueListBox)
|
|
QueueSearchControlBox.Attach(QueueSaveButton, 0, 0, 1, 1)
|
|
QueueSearchControlBox.Attach(QueueClearButton, 1, 0, 1, 1)
|
|
QueueSearchControlBox.Attach(QueueShuffleButton, 2, 0, 1, 1)
|
|
QueueSaveButton.SetChild(gtk.NewLabel("↧"))
|
|
QueueClearButton.SetChild(gtk.NewLabel("✘"))
|
|
QueueShuffleButton.SetChild(gtk.NewLabel("shuffle"))
|
|
|
|
QueueFlowBox.SetOrientation(gtk.OrientationVertical)
|
|
QueueFlowBox.Insert(QueueFlowBoxChild1, 0)
|
|
QueueFlowBoxChild1.SetChild(QueueMasterBox)
|
|
QueueSearchControlBox.SetHAlign(gtk.AlignEnd)
|
|
QueueSearchControlBox.SetVAlign(gtk.AlignFill)
|
|
QueueFlowBox.SetMaxChildrenPerLine(1)
|
|
QueueFlowBox.SetMinChildrenPerLine(0)
|
|
QueueListBox.SetSelectionMode(gtk.SelectionSingle)
|
|
QueueFlowBox.SetHAlign(gtk.AlignFill)
|
|
QueueFlowBox.SetVAlign(gtk.AlignFill)
|
|
QueueFlowBox.SetHExpand(true)
|
|
QueueFlowBox.SetVExpand(true)
|
|
QueueScrolledWindow.SetHExpand(true)
|
|
QueueScrolledWindow.SetVExpand(true)
|
|
QueueScrolledWindow.SetVAlign(gtk.AlignFill)
|
|
QueueScrolledWindow.SetHAlign(gtk.AlignFill)
|
|
|
|
// Search page
|
|
|
|
MainNotebook.AppendPage(SearchFlowBox, gtk.NewLabel("⌕"))
|
|
SearchFlowBox.SetSelectionMode(gtk.SelectionNone)
|
|
SearchMasterBox.Append(SearchControlBox)
|
|
SearchControlBox.Attach(SearchTabAlbumCheckButton, 1, 1, 1, 1)
|
|
SearchControlBox.Attach(SearchTabSongCheckButton, 0, 1, 1, 1)
|
|
SearchControlBox.Attach(SearchTabArtistCheckButton, 2, 1, 1, 1)
|
|
SearchControlBox.Attach(SearchTabSearchEntry, 0, 0, 2, 1)
|
|
SearchMasterBox.Append(SearchScrolledWindow)
|
|
SearchFlowBoxChild1.SetChild(SearchMasterBox)
|
|
SearchScrolledWindow.SetChild(SearchListBoxResult)
|
|
SearchFlowBox.Insert(SearchFlowBoxChild1, 0)
|
|
SearchFlowBox.SetOrientation(gtk.OrientationVertical)
|
|
SearchFlowBoxChild1.SetHAlign(gtk.AlignFill)
|
|
SearchFlowBoxChild1.SetVAlign(gtk.AlignFill)
|
|
SearchFlowBox.SetHAlign(gtk.AlignFill)
|
|
SearchFlowBox.SetVAlign(gtk.AlignFill)
|
|
SearchFlowBox.SetMaxChildrenPerLine(1)
|
|
SearchFlowBox.SetMinChildrenPerLine(0)
|
|
SearchListBoxResult.SetHExpand(true)
|
|
SearchListBoxResult.SetVExpand(true)
|
|
SearchListBoxResult.SetHAlign(gtk.AlignFill)
|
|
SearchListBoxResult.SetVAlign(gtk.AlignFill)
|
|
SearchFlowBoxChild1.SetHExpand(true)
|
|
SearchFlowBoxChild1.SetVExpand(true)
|
|
SearchFlowBox.SetHExpand(true)
|
|
SearchFlowBox.SetVExpand(true)
|
|
SearchFlowBox.SetVAlign(gtk.AlignFill)
|
|
SearchFlowBox.SetHAlign(gtk.AlignFill)
|
|
SearchControlBox.SetHAlign(gtk.AlignCenter)
|
|
SearchControlBox.SetVAlign(gtk.AlignCenter)
|
|
SearchTabSongCheckButton.SetActive(true)
|
|
SearchTabSongCheckButton.SetLabel("Songs")
|
|
SearchTabArtistCheckButton.SetLabel("Artists")
|
|
SearchTabAlbumCheckButton.SetLabel("Albums")
|
|
|
|
// Library page
|
|
|
|
MainNotebook.AppendPage(LibraryNotebook, gtk.NewLabel("||\\"))
|
|
LibraryNotebook.AppendPage(LibraryFlowBox1, gtk.NewLabel("playlists"))
|
|
LibraryNotebook.AppendPage(LibraryFlowBox2, gtk.NewLabel("☆"))
|
|
LibraryNotebook.AppendPage(LibraryFlowBox3, gtk.NewLabel("||\\"))
|
|
LibraryNotebook.AppendPage(LibraryFlowBox4, gtk.NewLabel("podcasts"))
|
|
LibraryFlowBox1.Insert(LibraryFlowBox1Child1, 0)
|
|
LibraryFlowBox2.Insert(LibraryFlowBox2Child1, 0)
|
|
LibraryFlowBox3.Insert(LibraryFlowBox3Child1, 0)
|
|
LibraryFlowBox4.Insert(LibraryFlowBox4Child1, 0)
|
|
LibraryFlowBox1.SetSelectionMode(gtk.SelectionNone)
|
|
LibraryFlowBox2.SetSelectionMode(gtk.SelectionNone)
|
|
LibraryFlowBox3.SetSelectionMode(gtk.SelectionNone)
|
|
LibraryFlowBox4.SetSelectionMode(gtk.SelectionNone)
|
|
LibraryFlowBox1Child1.SetChild(LibraryPlaylistMainBox)
|
|
LibraryFlowBox2Child1.SetChild(LibraryStarredMainBox)
|
|
LibraryFlowBox3Child1.SetChild(LibraryLibraryMainBox)
|
|
LibraryFlowBox4Child1.SetChild(LibraryPodcastMainBox)
|
|
LibraryPlaylistMainBox.Append(LibraryPlaylistMainControlGrid)
|
|
LibraryStarredMainBox.Append(LibraryStarredMainControlGrid)
|
|
LibraryLibraryMainBox.Append(LibraryLibraryMainControlGrid)
|
|
LibraryPodcastMainBox.Append(LibraryPodcastMainControlGrid)
|
|
LibraryPlaylistMainControlGrid.Attach(LibraryPlaylistBackButton, 0, 0, 1, 1)
|
|
LibraryPlaylistMainControlGrid.Attach(LibraryPlaylistRefreshButton, 1, 0, 1, 1)
|
|
LibraryPlaylistBackButton.SetLabel("↵")
|
|
LibraryPlaylistRefreshButton.SetLabel("⟳")
|
|
|
|
LibraryPlaylistMainScrolledWindow.SetHExpand(true)
|
|
LibraryPlaylistMainScrolledWindow.SetVExpand(true)
|
|
LibraryPlaylistMainScrolledWindow.SetVAlign(gtk.AlignFill)
|
|
LibraryPlaylistMainScrolledWindow.SetHAlign(gtk.AlignFill)
|
|
LibraryPlaylistMainScrolledWindow.SetChild(PlayListListBox)
|
|
LibraryPlaylistMainBox.Append(LibraryPlaylistMainScrolledWindow)
|
|
LibraryStarredMainControlGrid.Attach(LibraryStarredBackButton, 0, 0, 1, 1)
|
|
LibraryStarredMainControlGrid.Attach(LibraryStarredRefreshButton, 1, 0, 1, 1)
|
|
LibraryStarredBackButton.SetLabel("↵")
|
|
LibraryStarredRefreshButton.SetLabel("⟳")
|
|
|
|
LibraryStarredListBoxScrolledWindow.SetHExpand(true)
|
|
LibraryStarredListBoxScrolledWindow.SetVExpand(true)
|
|
LibraryStarredListBoxScrolledWindow.SetVAlign(gtk.AlignFill)
|
|
LibraryStarredListBoxScrolledWindow.SetHAlign(gtk.AlignFill)
|
|
|
|
LibraryStarredListBoxScrolledWindow.SetChild(LibraryStarredListBox)
|
|
LibraryStarredMainBox.Append(LibraryStarredListBoxScrolledWindow)
|
|
LibraryLibraryMainControlGrid.Attach(LibraryLibraryBackButton, 0, 0, 1, 1)
|
|
LibraryLibraryMainControlGrid.Attach(LibraryLibraryRefreshButton, 1, 0, 1, 1)
|
|
LibraryLibraryBackButton.SetLabel("↵")
|
|
LibraryLibraryRefreshButton.SetLabel("⟳")
|
|
|
|
QueueListBoxLibraryScrolledWindow.SetHExpand(true)
|
|
QueueListBoxLibraryScrolledWindow.SetVExpand(true)
|
|
QueueListBoxLibraryScrolledWindow.SetVAlign(gtk.AlignFill)
|
|
QueueListBoxLibraryScrolledWindow.SetHAlign(gtk.AlignFill)
|
|
QueueListBoxLibraryScrolledWindow.SetChild(QueueListBoxLibrary)
|
|
|
|
LibraryLibraryMainBox.Append(QueueListBoxLibraryScrolledWindow)
|
|
LibraryPodcastMainControlGrid.Attach(LibraryPodcastBackButton, 0, 0, 1, 1)
|
|
LibraryPodcastMainControlGrid.Attach(LibraryPodcastRefreshButton, 1, 0, 1, 1)
|
|
LibraryPodcastBackButton.SetLabel("↵")
|
|
LibraryPodcastRefreshButton.SetLabel("⟳")
|
|
|
|
LibraryPodcastListBoxScrolledWindow.SetHExpand(true)
|
|
LibraryPodcastListBoxScrolledWindow.SetVExpand(true)
|
|
LibraryPodcastListBoxScrolledWindow.SetVAlign(gtk.AlignFill)
|
|
LibraryPodcastListBoxScrolledWindow.SetHAlign(gtk.AlignFill)
|
|
LibraryPodcastListBoxScrolledWindow.SetChild(LibraryPodcastListBox)
|
|
LibraryPodcastMainBox.Append(LibraryPodcastListBoxScrolledWindow)
|
|
|
|
LibraryFlowBox1.SetHExpand(true)
|
|
LibraryFlowBox1.SetVExpand(true)
|
|
LibraryFlowBox2.SetHExpand(true)
|
|
LibraryFlowBox2.SetVExpand(true)
|
|
LibraryFlowBox3.SetHExpand(true)
|
|
LibraryFlowBox3.SetVExpand(true)
|
|
LibraryFlowBox4.SetHExpand(true)
|
|
LibraryFlowBox4.SetVExpand(true)
|
|
LibraryFlowBox1Child1.SetHAlign(gtk.AlignFill)
|
|
LibraryFlowBox1Child1.SetVAlign(gtk.AlignFill)
|
|
LibraryFlowBox2Child1.SetHAlign(gtk.AlignFill)
|
|
LibraryFlowBox2Child1.SetVAlign(gtk.AlignFill)
|
|
LibraryFlowBox3Child1.SetHAlign(gtk.AlignFill)
|
|
LibraryFlowBox3Child1.SetVAlign(gtk.AlignFill)
|
|
LibraryFlowBox4Child1.SetHAlign(gtk.AlignFill)
|
|
LibraryFlowBox4Child1.SetVAlign(gtk.AlignFill)
|
|
LibraryPlaylistMainBox.SetHExpand(true)
|
|
LibraryStarredMainBox.SetHExpand(true)
|
|
LibraryLibraryMainBox.SetHExpand(true)
|
|
LibraryPodcastMainBox.SetHExpand(true)
|
|
LibraryPlaylistMainBox.SetVExpand(true)
|
|
LibraryStarredMainBox.SetVExpand(true)
|
|
LibraryLibraryMainBox.SetVExpand(true)
|
|
LibraryPodcastMainBox.SetVExpand(true)
|
|
PlayListListBox.SetVAlign(gtk.AlignFill)
|
|
LibraryStarredListBox.SetVAlign(gtk.AlignFill)
|
|
QueueListBoxLibrary.SetVAlign(gtk.AlignFill)
|
|
LibraryPodcastListBox.SetVAlign(gtk.AlignFill)
|
|
PlayListListBox.SetHAlign(gtk.AlignFill)
|
|
LibraryStarredListBox.SetHAlign(gtk.AlignFill)
|
|
QueueListBoxLibrary.SetHAlign(gtk.AlignFill)
|
|
LibraryPodcastListBox.SetHAlign(gtk.AlignFill)
|
|
LibraryPlaylistMainControlGrid.SetHAlign(gtk.AlignEnd)
|
|
LibraryPlaylistMainControlGrid.SetVAlign(gtk.AlignFill)
|
|
LibraryStarredMainControlGrid.SetHAlign(gtk.AlignEnd)
|
|
LibraryStarredMainControlGrid.SetVAlign(gtk.AlignFill)
|
|
LibraryLibraryMainControlGrid.SetHAlign(gtk.AlignEnd)
|
|
LibraryLibraryMainControlGrid.SetVAlign(gtk.AlignFill)
|
|
LibraryPodcastMainControlGrid.SetHAlign(gtk.AlignEnd)
|
|
LibraryPodcastMainControlGrid.SetVAlign(gtk.AlignFill)
|
|
LibraryFlowBox1.SetMaxChildrenPerLine(1)
|
|
LibraryFlowBox1.SetMinChildrenPerLine(0)
|
|
LibraryFlowBox2.SetMaxChildrenPerLine(1)
|
|
LibraryFlowBox2.SetMinChildrenPerLine(0)
|
|
LibraryFlowBox3.SetMaxChildrenPerLine(1)
|
|
LibraryFlowBox3.SetMinChildrenPerLine(0)
|
|
LibraryFlowBox4.SetMaxChildrenPerLine(1)
|
|
LibraryFlowBox4.SetMinChildrenPerLine(0)
|
|
|
|
// Settings page
|
|
|
|
SettingsAccountFlowboxChild1.SetHExpand(true)
|
|
SettingsAccountFlowboxChild1.SetVExpand(true)
|
|
SettingsAccountFlowboxChild2.SetHExpand(true)
|
|
SettingsAccountFlowboxChild2.SetVExpand(true)
|
|
SettingsAccountUserListbox.SetHExpand(true)
|
|
SettingsAccountUserListbox.SetVExpand(true)
|
|
SettingsAccountLoginGrid.SetHExpand(true)
|
|
SettingsAccountLoginGrid.SetVExpand(true)
|
|
SettingsAccountUserListbox.SetHExpand(true)
|
|
SettingsAccountUserListbox.SetVExpand(true)
|
|
|
|
SettingsAccountScrolledWindow.SetChild(SettingsAccountsFlowBox)
|
|
SettingsAppScrolledWindow.SetChild(SettingsAppFlowBox)
|
|
SettingsCreditsScrolledWindow.SetChild(SettingsCreditsFlowBox)
|
|
|
|
MainNotebook.AppendPage(SettingsNotebook, gtk.NewLabel("⚙"))
|
|
SettingsNotebook.AppendPage(SettingsAccountScrolledWindow, gtk.NewLabel("Account"))
|
|
SettingsNotebook.AppendPage(SettingsAppScrolledWindow, gtk.NewLabel("App"))
|
|
SettingsNotebook.AppendPage(SettingsCreditsScrolledWindow, gtk.NewLabel("Credits"))
|
|
|
|
SettingsAccountsFlowBox.SetSelectionMode(gtk.SelectionNone)
|
|
SettingsAppFlowBox.SetSelectionMode(gtk.SelectionNone)
|
|
SettingsCreditsFlowBox.SetSelectionMode(gtk.SelectionNone)
|
|
|
|
SettingsAccountsFlowBox.SetMaxChildrenPerLine(1)
|
|
SettingsAccountsFlowBox.SetMinChildrenPerLine(0)
|
|
SettingsAccountsFlowBox.SetHAlign(gtk.AlignFill)
|
|
SettingsAccountsFlowBox.SetVAlign(gtk.AlignFill)
|
|
SettingsAccountFlowboxChild1.SetVAlign(gtk.AlignFill)
|
|
SettingsAccountFlowboxChild1.SetHAlign(gtk.AlignCenter)
|
|
SettingsAccountFlowboxChild2.SetHExpand(true)
|
|
|
|
SettingsAccountTestButton.SetLabel("Test")
|
|
SettingsAccountSaveButton.SetLabel("Save")
|
|
SettingsAccountLoadButton.SetLabel("Load")
|
|
|
|
SettingsAppFlowBox.SetMaxChildrenPerLine(1)
|
|
SettingsAppFlowBox.SetMinChildrenPerLine(0)
|
|
SettingsCreditsFlowBox.SetMaxChildrenPerLine(1)
|
|
SettingsCreditsFlowBox.SetMinChildrenPerLine(0)
|
|
SettingsAccountBox.Append(SettingsAccountLoginGrid)
|
|
SettingsAccountBox.Append(SettingsAccountButtonsGrid)
|
|
SettingsAccountFlowboxChild1.SetChild(SettingsAccountBox)
|
|
SettingsAccountFlowboxChild2.SetChild(SettingsAccountUserListbox)
|
|
SettingsAccountsFlowBox.Insert(SettingsAccountFlowboxChild1, 0)
|
|
SettingsAccountsFlowBox.Insert(SettingsAccountFlowboxChild2, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsTabUserUsernameEntry, 1, 0, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsTabUserPasswordEntry, 1, 1, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsTabUserDeviceNameEntry, 1, 2, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsTabUserServerEntry, 1, 3, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsAccountUsernameLabel, 0, 0, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsAccountPasswordLabel, 0, 1, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsAccountPLayerNameLabel, 0, 2, 1, 1)
|
|
SettingsAccountLoginGrid.Attach(SettingsAccountServerLabel, 0, 3, 1, 1)
|
|
SettingsAccountButtonsGrid.Attach(SettingsTabUserStatusLabel, 0, 0, 1, 1)
|
|
SettingsAccountButtonsGrid.Attach(SettingsAccountTestButton, 1, 0, 1, 1)
|
|
SettingsAccountButtonsGrid.Attach(SettingsAccountSaveButton, 2, 0, 1, 1)
|
|
SettingsAccountButtonsGrid.Attach(SettingsAccountLoadButton, 3, 0, 1, 1)
|
|
SettingsTabUserPasswordEntry.SetInputPurpose(gtk.InputPurposePassword)
|
|
SettingsTabUserPasswordEntry.SetInvisibleChar('●')
|
|
SettingsTabUserPasswordEntry.SetVisibility(false)
|
|
|
|
SettingsTabAppAuthMetadataProxySwitch.SetHAlign(gtk.AlignEnd)
|
|
SettingsTabAppAuthStreamingProxySwitch.SetHAlign(gtk.AlignEnd)
|
|
SettingsTabAppDeleteSwitch.SetHAlign(gtk.AlignEnd)
|
|
SettingsTabAppHideHeaderBarSwitch.SetHAlign(gtk.AlignEnd)
|
|
SettingsTabAppMetadataProxySwitch.SetHAlign(gtk.AlignEnd)
|
|
SettingsTabAppStreamingProxySwitch.SetHAlign(gtk.AlignEnd)
|
|
|
|
SettingsTabAppAuthMetadataProxySwitch.SetHExpand(false)
|
|
SettingsTabAppAuthStreamingProxySwitch.SetHExpand(false)
|
|
SettingsTabAppDeleteSwitch.SetHExpand(false)
|
|
SettingsTabAppHideHeaderBarSwitch.SetHExpand(false)
|
|
SettingsTabAppMetadataProxySwitch.SetHExpand(false)
|
|
SettingsTabAppStreamingProxySwitch.SetHExpand(false)
|
|
|
|
SettingsAppLabelGrid1DeleteOnClose.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid1CoverSideSize.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid1BackgroundBlurRadius.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelHideHeaderBar.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid2Codec.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid2Bitrate.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid2DownloadBufferSize.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid3UseProxyForStreaming.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid3UseProxyForMetadata.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid3AuthenticateMetadataProxy.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid3AuthenticateStreamingProxy.SetHAlign(gtk.AlignStart)
|
|
SettingsAppLabelGrid4Metadata.SetHAlign(gtk.AlignStart)
|
|
|
|
SettingsAppLabelGrid1DeleteOnClose.SetHExpand(true)
|
|
SettingsAppLabelGrid1CoverSideSize.SetHExpand(true)
|
|
SettingsAppLabelGrid1BackgroundBlurRadius.SetHExpand(true)
|
|
SettingsAppLabelHideHeaderBar.SetHExpand(true)
|
|
SettingsAppLabelGrid2Codec.SetHExpand(true)
|
|
SettingsAppLabelGrid2Bitrate.SetHExpand(true)
|
|
SettingsAppLabelGrid2DownloadBufferSize.SetHExpand(true)
|
|
SettingsAppLabelGrid3UseProxyForStreaming.SetHExpand(true)
|
|
SettingsAppLabelGrid3UseProxyForMetadata.SetHExpand(true)
|
|
SettingsAppLabelGrid3AuthenticateMetadataProxy.SetHExpand(true)
|
|
SettingsAppLabelGrid3AuthenticateStreamingProxy.SetHExpand(true)
|
|
SettingsAppLabelGrid4Metadata.SetHExpand(true)
|
|
|
|
SettingsAppFlowBox.Insert(SettingsAppFlowBoxChild1, 0)
|
|
SettingsAppFlowBox.Insert(SettingsAppFlowBoxChild2, 1)
|
|
SettingsAppFlowBox.Insert(SettingsAppFlowBoxChild4, 2)
|
|
SettingsAppFlowBox.Insert(SettingsAppFlowBoxChild3, 3)
|
|
|
|
SettingsAppFlowBoxChild1.SetChild(SettingsAppGrid1)
|
|
SettingsAppFlowBoxChild2.SetChild(SettingsAppGrid2)
|
|
SettingsAppFlowBoxChild3.SetChild(SettingsAppGrid3)
|
|
SettingsAppFlowBoxChild4.SetChild(SettingsAppGrid4)
|
|
|
|
SettingsAppGrid1.Attach(SettingsAppLabelGrid1, 0, 0, 2, 1)
|
|
SettingsAppGrid1.Attach(SettingsAppLabelGrid1DeleteOnClose, 0, 1, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsAppLabelGrid1CoverSideSize, 0, 2, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsAppLabelGrid1BackgroundBlurRadius, 0, 3, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsTabAppDeleteSwitch, 1, 1, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsTabAppCoverSizeEntry, 1, 2, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsTabAppBlurRadiusEntry, 1, 3, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsAppLabelHideHeaderBar, 0, 4, 1, 1)
|
|
SettingsAppGrid1.Attach(SettingsTabAppHideHeaderBarSwitch, 1, 4, 1, 1)
|
|
|
|
SettingsAppGrid2.Attach(SettingsAppLabelGrid2, 0, 0, 2, 1)
|
|
SettingsAppGrid2.Attach(SettingsAppLabelGrid2Codec, 0, 1, 1, 1)
|
|
SettingsAppGrid2.Attach(SettingsAppLabelGrid2Bitrate, 0, 2, 1, 1)
|
|
SettingsAppGrid2.Attach(SettingsAppLabelGrid2DownloadBufferSize, 0, 3, 1, 1)
|
|
SettingsAppGrid2.Attach(SettingsTabAppCodecComboBoxTest, 1, 1, 1, 1)
|
|
SettingsAppGrid2.Attach(SettingsTabAppBitrateEntry, 1, 2, 1, 1)
|
|
SettingsAppGrid2.Attach(SettingsTabAppBufferSizeEntry, 1, 3, 1, 1)
|
|
|
|
SettingsAppGrid3.Attach(SettingsAppLabelGrid3, 0, 0, 2, 1)
|
|
|
|
SettingsAppGrid3.Attach(SettingsTabAppStreamingProxySwitch, 1, 1, 1, 1)
|
|
SettingsAppGrid3.Attach(SettingsAppLabelGrid3UseProxyForStreaming, 0, 1, 1, 1)
|
|
SettingsAppGrid3.Attach(SettingsTabAppStreamingProxyEntry, 0, 2, 2, 1)
|
|
SettingsAppGrid3.Attach(SettingsAppLabelGrid3AuthenticateStreamingProxy, 0, 3, 1, 1)
|
|
SettingsAppGrid3.Attach(SettingsTabAppAuthStreamingProxySwitch, 1, 3, 1, 1)
|
|
SettingsAppGrid3.Attach(SettingsTabAppStreamingProxyUsernameEntry, 0, 4, 1, 1)
|
|
SettingsAppGrid3.Attach(SettingsTabAppStreamingProxyPassEntry, 1, 4, 1, 1)
|
|
|
|
SettingsTabAppMetadataComboBoxTest.InsertText(0, "None")
|
|
SettingsTabAppMetadataComboBoxTest.InsertText(1, "Server")
|
|
SettingsTabAppMetadataComboBoxTest.InsertText(2, "Sonically")
|
|
|
|
SettingsAppGrid4.Attach(SettingsAppLabelGrid4, 0, 0, 2, 1)
|
|
SettingsAppGrid4.Attach(SettingsAppLabelGrid4Metadata, 0, 1, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsTabAppMetadataComboBoxTest, 1, 1, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsAppLabelGrid3UseProxyForMetadata, 0, 2, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsTabAppMetadataProxySwitch, 1, 2, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsTabAppMetadataProxyEntry, 0, 3, 2, 1)
|
|
SettingsAppGrid4.Attach(SettingsAppLabelGrid3AuthenticateMetadataProxy, 0, 4, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsTabAppAuthMetadataProxySwitch, 1, 4, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsTabAppMetadataProxyUsernameEntry, 0, 5, 1, 1)
|
|
SettingsAppGrid4.Attach(SettingsTabAppMetadataProxyPassEntry, 1, 5, 1, 1)
|
|
|
|
SettingsCreditsFlowBoxChild1 = gtk.NewFlowBoxChild()
|
|
SettingsCreditsLabel1 = gtk.NewLabel("")
|
|
// "Website: https://git.itmodulo.eu/LinuxOnMobile/Sonically \nIssue Tracker: https://codeberg.org/LinuxOnMobile/Sonically/issues \nLicense: GPL3.0 \nAuthor: https://itmodulo.eu/"
|
|
|
|
SettingsCreditsFlowBox.Insert(SettingsCreditsFlowBoxChild1, 0)
|
|
SettingsCreditsFlowBoxChild1.SetChild(SettingsCreditsLabel1)
|
|
|
|
SettingsTabAppCodecComboBoxTest.InsertText(0, "opus")
|
|
SettingsTabAppCodecComboBoxTest.InsertText(1, "flac")
|
|
SettingsTabAppCodecComboBoxTest.InsertText(2, "ogg")
|
|
SettingsTabAppCodecComboBoxTest.InsertText(3, "mp3")
|
|
|
|
SettingsTabUserUsernameEntry.SetPlaceholderText("Sonic user")
|
|
SettingsTabUserServerEntry.SetPlaceholderText("https://my-sonic.server")
|
|
SettingsTabUserDeviceNameEntry.SetPlaceholderText("Sonically")
|
|
SettingsTabUserPasswordEntry.SetPlaceholderText("●●●●●●●●●●")
|
|
SettingsTabAppCoverSizeEntry.SetPlaceholderText("600")
|
|
SettingsTabAppBlurRadiusEntry.SetPlaceholderText("12")
|
|
SettingsTabAppBitrateEntry.SetPlaceholderText("128")
|
|
SettingsTabAppBufferSizeEntry.SetPlaceholderText("4096")
|
|
SettingsTabAppStreamingProxyEntry.SetPlaceholderText("https://my-proxy.server")
|
|
SettingsTabAppStreamingProxyUsernameEntry.SetPlaceholderText("Proxy username")
|
|
SettingsTabAppStreamingProxyPassEntry.SetPlaceholderText("●●●●●●●●●●")
|
|
SettingsTabAppMetadataProxyEntry.SetPlaceholderText("socks5://my-proxy.server")
|
|
SettingsTabAppMetadataProxyUsernameEntry.SetPlaceholderText("Proxy username")
|
|
SettingsTabAppMetadataProxyPassEntry.SetPlaceholderText("●●●●●●●●●●")
|
|
|
|
SettingsTabAppStreamingProxyPassEntry.SetInputPurpose(gtk.InputPurposePassword)
|
|
SettingsTabAppStreamingProxyPassEntry.SetInvisibleChar('●')
|
|
SettingsTabAppStreamingProxyPassEntry.SetVisibility(false)
|
|
|
|
SettingsTabAppMetadataProxyPassEntry.SetInputPurpose(gtk.InputPurposePassword)
|
|
SettingsTabAppMetadataProxyPassEntry.SetInvisibleChar('●')
|
|
SettingsTabAppMetadataProxyPassEntry.SetVisibility(false)
|
|
|
|
// SettingsTabAppCodecComboBoxTest.AddAttribute(gtk.CellRendererFocused)
|
|
|
|
// Signals
|
|
MainPlayPauseButton.ConnectClicked(MainPlayPauseButtonClicked)
|
|
MainPreviousButton.ConnectClicked(MainPreviousButtonClicked)
|
|
MainNextButton.ConnectClicked(MainNextButtonClicked)
|
|
|
|
QueueClearButton.ConnectClicked(ClearQueue)
|
|
QueueSaveButton.ConnectClicked(CacheAllQueue)
|
|
|
|
SettingsAccountTestButton.ConnectClicked(TestConnButtonClicked)
|
|
SettingsAccountSaveButton.ConnectClicked(SettingsTabUserSaveButtonClicked)
|
|
SearchTabSearchEntry.ConnectSearchChanged(SearchTabSearchButtonClicked)
|
|
|
|
LibraryLibraryBackButton.ConnectClicked(LibraryTabBackButtonClicked)
|
|
LibraryLibraryRefreshButton.ConnectClicked(LibraryTabRefreshButtonClicked)
|
|
|
|
LibraryPlaylistBackButton.ConnectClicked(LibraryTabLibraryBackButton)
|
|
LibraryPlaylistRefreshButton.ConnectClicked(LibraryTabLibraryRefreshButton)
|
|
// MainScale.ConnectValueChanged(ValueChanged)
|
|
|
|
}
|
|
|
|
func CreateImagelessSongListBoxRow(lBox *gtk.ListBox, title string, artist string, duration string, postition int, id string) {
|
|
MainListboxRow := gtk.NewListBoxRow()
|
|
MainGrid := gtk.NewGrid()
|
|
Frame := gtk.NewFrame("")
|
|
|
|
QueueButton := gtk.NewButton()
|
|
PLaybutton := gtk.NewButton()
|
|
TitleScrolledWindow := gtk.NewScrolledWindow()
|
|
ArtistScrolledWindow := gtk.NewScrolledWindow()
|
|
TitleLabel := gtk.NewLabel(title)
|
|
ArtistLabel := gtk.NewLabel(artist)
|
|
DurationLabel := gtk.NewLabel(duration)
|
|
|
|
PLaybutton.SetLabel("▶")
|
|
QueueButton.SetLabel("☰")
|
|
MainListboxRow.SetSizeRequest(150, 30)
|
|
MainGrid.Attach(DurationLabel, 0, 0, 1, 2)
|
|
MainGrid.Attach(TitleScrolledWindow, 1, 0, 1, 1)
|
|
MainGrid.Attach(ArtistScrolledWindow, 1, 1, 1, 1)
|
|
TitleScrolledWindow.SetChild(TitleLabel)
|
|
ArtistScrolledWindow.SetChild(ArtistLabel)
|
|
MainGrid.Attach(QueueButton, 2, 0, 1, 2)
|
|
MainGrid.Attach(PLaybutton, 3, 0, 1, 2)
|
|
|
|
QueueButton.SetSizeRequest(15, 30)
|
|
PLaybutton.SetSizeRequest(15, 30)
|
|
DurationLabel.SetSizeRequest(30, 30)
|
|
DurationLabel.SetHAlign(gtk.AlignCenter)
|
|
DurationLabel.SetVAlign(gtk.AlignCenter)
|
|
TitleLabel.SetHAlign(gtk.AlignStart)
|
|
ArtistLabel.SetHAlign(gtk.AlignStart)
|
|
TitleLabel.SetSizeRequest(150, 15)
|
|
ArtistLabel.SetSizeRequest(150, 15)
|
|
|
|
TitleScrolledWindow.SetHExpand(true)
|
|
ArtistScrolledWindow.SetHExpand(true)
|
|
// MainListboxRow.SetSizeRequest(300,50)
|
|
MainListboxRow.SetHAlign(gtk.AlignFill)
|
|
MainGrid.SetHAlign(gtk.AlignFill)
|
|
MainListboxRow.SetHExpand(true)
|
|
MainGrid.SetHExpand(true)
|
|
TitleScrolledWindow.SetSizeRequest(110, 15)
|
|
ArtistScrolledWindow.SetSizeRequest(110, 15)
|
|
QueueButton.SetHAlign(gtk.AlignEnd)
|
|
PLaybutton.SetHAlign(gtk.AlignEnd)
|
|
|
|
// TitleScrolledWindow.SetHAlign(gtk.AlignStart)
|
|
// ArtistScrolledWindow.SetHAlign(gtk.AlignStart)
|
|
|
|
// Signals
|
|
|
|
var PlayButtonClicked = func() {
|
|
var upstream = func() {
|
|
if !SliceContains(MainQueue, id) {
|
|
// fmt.Println(len(MainQueue))
|
|
// MainQueue.Add(id)
|
|
MainQueue = append(MainQueue, id)
|
|
// fmt.Println(MainQueue.Size())
|
|
// fmt.Println(MainQueue)
|
|
NowPlayingIndex = SliceIndexOf(MainQueue, id)
|
|
go StartCaching(id)
|
|
CreateImagelessQueueListBoxRow(QueueListBox, title, artist, duration, NowPlayingIndex, id)
|
|
// CreateQueueChild(ttl, "album", artst, durat, id)
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
go PlayPort()
|
|
select {
|
|
case AudioControlChan <- true:
|
|
}
|
|
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
var QueueButtonClicked = func() {
|
|
var upstream = func() {
|
|
if !SliceContains(MainQueue, id) {
|
|
MainQueue = append(MainQueue, id)
|
|
// NowPlayingIndex = MainQueue.IndexOf(id)
|
|
|
|
if SliceIndexOf(MainQueue, id)-1 == NowPlayingIndex || SliceIndexOf(MainQueue, id)-2 == NowPlayingIndex {
|
|
fmt.Println("Song is next or 2 next in queue, caching")
|
|
go StartCaching(id)
|
|
}
|
|
|
|
CreateImagelessQueueListBoxRow(QueueListBox, title, artist, duration, NowPlayingIndex, id)
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
PLaybutton.ConnectClicked(PlayButtonClicked)
|
|
QueueButton.ConnectClicked(QueueButtonClicked)
|
|
|
|
MainListboxRow.SetChild(Frame)
|
|
Frame.SetChild(MainGrid)
|
|
lBox.Append(MainListboxRow)
|
|
|
|
}
|
|
|
|
func CreateImagelessQueueListBoxRow(lBox *gtk.ListBox, title string, artist string, duration string, postition int, id string) {
|
|
MainListboxRow := gtk.NewListBoxRow()
|
|
MainGrid := gtk.NewGrid()
|
|
Frame := gtk.NewFrame("")
|
|
DelButton := gtk.NewButton()
|
|
PLaybutton := gtk.NewButton()
|
|
ArrUPButton := gtk.NewButton()
|
|
ArrDownButton := gtk.NewButton()
|
|
TitleScrolledWindow := gtk.NewScrolledWindow()
|
|
ArtistScrolledWindow := gtk.NewScrolledWindow()
|
|
TitleLabel := gtk.NewLabel(title)
|
|
ArtistLabel := gtk.NewLabel(artist)
|
|
DurationLabel := gtk.NewLabel(duration)
|
|
|
|
DelButton.SetLabel("✗")
|
|
PLaybutton.SetLabel("▶")
|
|
ArrUPButton.SetLabel("▲")
|
|
ArrDownButton.SetLabel("▼")
|
|
|
|
Frame.SetChild(MainGrid)
|
|
MainListboxRow.SetChild(Frame)
|
|
MainGrid.Attach(DurationLabel, 0, 0, 1, 2)
|
|
MainGrid.Attach(TitleScrolledWindow, 1, 0, 3, 1)
|
|
MainGrid.Attach(ArtistScrolledWindow, 1, 1, 1, 1)
|
|
MainGrid.Attach(DelButton, 2, 1, 1, 1)
|
|
MainGrid.Attach(PLaybutton, 3, 1, 1, 1)
|
|
MainGrid.Attach(ArrUPButton, 4, 0, 1, 1)
|
|
MainGrid.Attach(ArrDownButton, 4, 1, 1, 1)
|
|
TitleScrolledWindow.SetChild(TitleLabel)
|
|
ArtistScrolledWindow.SetChild(ArtistLabel)
|
|
|
|
TitleScrolledWindow.SetHExpand(true)
|
|
ArtistScrolledWindow.SetHExpand(true)
|
|
// MainListboxRow.SetSizeRequest(300,50)
|
|
MainListboxRow.SetHAlign(gtk.AlignFill)
|
|
MainGrid.SetHAlign(gtk.AlignFill)
|
|
MainListboxRow.SetHExpand(true)
|
|
MainGrid.SetHExpand(true)
|
|
TitleScrolledWindow.SetSizeRequest(110, 25)
|
|
ArtistScrolledWindow.SetSizeRequest(110, 25)
|
|
|
|
// Frame.SetChild(MainListboxRow)
|
|
|
|
var PlayButtonClicked = func() {
|
|
var upstream = func() {
|
|
MainQueue = append(MainQueue, id)
|
|
// MasterStramSlice[id]
|
|
// go StartCaching(id)
|
|
// MainQueue.Add(id)
|
|
// NowPlayingIndex = MainQueue.IndexOf(id)
|
|
NowPlayingIndex = SliceIndexOf(MainQueue, id)
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
go PlayPort()
|
|
select {
|
|
case AudioControlChan <- true:
|
|
}
|
|
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
var UpButtonClicked = func() {
|
|
var show = func() {
|
|
indx := SliceIndexOf(MainQueue, id)
|
|
rowId := MainListboxRow.Index()
|
|
if rowId > 0 {
|
|
SliceSwapAtIndexes(MainQueue, indx, (indx - 1))
|
|
QueueListBox.Remove(MainListboxRow)
|
|
QueueListBox.Insert(MainListboxRow, rowId-1)
|
|
if indx == NowPlayingIndex {
|
|
NowPlayingIndex--
|
|
}
|
|
}
|
|
}
|
|
go glib.IdleAdd(show)
|
|
|
|
}
|
|
|
|
var DownButtonClicked = func() {
|
|
|
|
var show = func() {
|
|
indx := SliceIndexOf(MainQueue, id)
|
|
rowId := MainListboxRow.Index()
|
|
if !(indx+1 > len(MainQueue)-1) {
|
|
if indx == NowPlayingIndex {
|
|
NowPlayingIndex++
|
|
}
|
|
SliceSwapAtIndexes(MainQueue, indx, (indx + 1))
|
|
QueueListBox.Remove(MainListboxRow)
|
|
QueueListBox.Insert(MainListboxRow, rowId+1)
|
|
}
|
|
}
|
|
go glib.IdleAdd(show)
|
|
|
|
}
|
|
|
|
var RemoveButtonClicked = func() {
|
|
var rm = func() {
|
|
if SliceIndexOf(MainQueue, id) == NowPlayingIndex {
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
}
|
|
// MainQueue.Remove(MainQueue.IndexOf(id))
|
|
SliceRemove(MainQueue, id)
|
|
QueueListBox.Remove(MainListboxRow)
|
|
}
|
|
go glib.IdleAdd(rm)
|
|
|
|
}
|
|
|
|
PLaybutton.ConnectClicked(PlayButtonClicked)
|
|
ArrUPButton.ConnectClicked(UpButtonClicked)
|
|
ArrDownButton.ConnectClicked(DownButtonClicked)
|
|
DelButton.ConnectClicked(RemoveButtonClicked)
|
|
|
|
lBox.Append(MainListboxRow)
|
|
}
|
|
|
|
// func ValueChanged(){
|
|
// PlayAudio = false
|
|
// if MainScale.Value() > TimeInPrecent {
|
|
// // CurrentStream.Stop()
|
|
// for (TimeInPrecent < MainScale.Value() && TimeInPrecent < float64(TotalTime)) {
|
|
// _, _ = OpusStr.Read(Out)
|
|
// DrawnTime += float64(1920 / rate / 2)
|
|
// TimeInPrecent = float64(DrawnTime / float64(TotalTime))
|
|
// }
|
|
// // CurrentStream.Start()
|
|
// CurrentStream.Write()
|
|
// glib.IdleAdd(UpdatePBar())
|
|
// PlayAudio = true
|
|
// } else {
|
|
// fmt.Println("Not yet implemented")
|
|
// MainScale.SetValue(TimeInPrecent)
|
|
// PlayAudio = true
|
|
// }
|
|
|
|
// }
|
|
|
|
func CreatelessListArtistBoxRow(lBox *gtk.ListBox, name string, postition int, albums []*subsonic.AlbumID3, itemid string) {
|
|
MainListboxRow := gtk.NewListBoxRow()
|
|
MainGrid := gtk.NewGrid()
|
|
Frame := gtk.NewFrame("")
|
|
|
|
InfoButton := gtk.NewButton()
|
|
NameScrolledWindow := gtk.NewScrolledWindow()
|
|
NameLabel := gtk.NewLabel(name)
|
|
|
|
MainGrid.Attach(NameScrolledWindow, 0, 0, 1, 1)
|
|
MainGrid.Attach(InfoButton, 1, 0, 1, 1)
|
|
NameScrolledWindow.SetChild(NameLabel)
|
|
Frame.SetChild(MainGrid)
|
|
MainListboxRow.SetChild(Frame)
|
|
|
|
InfoButton.SetLabel("i")
|
|
|
|
MainListboxRow.SetSizeRequest(150, 30)
|
|
InfoButton.SetSizeRequest(15, 30)
|
|
NameLabel.SetHAlign(gtk.AlignStart)
|
|
NameLabel.SetSizeRequest(150, 15)
|
|
|
|
NameScrolledWindow.SetHExpand(true)
|
|
// MainListboxRow.SetSizeRequest(300,50)
|
|
MainListboxRow.SetHAlign(gtk.AlignFill)
|
|
MainGrid.SetHAlign(gtk.AlignFill)
|
|
MainListboxRow.SetHExpand(true)
|
|
|
|
MainGrid.SetHExpand(true)
|
|
NameScrolledWindow.SetSizeRequest(110, 15)
|
|
InfoButton.SetHAlign(gtk.AlignEnd)
|
|
|
|
var InfoButtonClicked = func() {
|
|
|
|
TempArtist = ""
|
|
|
|
var upstream = func() {
|
|
for child := lBox.FirstChild(); child != nil; {
|
|
lBox.Remove(child)
|
|
child = lBox.FirstChild()
|
|
}
|
|
|
|
for i, album := range albums {
|
|
alb, _ := CurrentClient.GetAlbum(album.ID)
|
|
CreateImagelessAlbumListBoxRow(lBox, alb.Name, alb.Artist, DurationToReadable(alb.Duration), i, alb.Song)
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
InfoButton.ConnectClicked(InfoButtonClicked)
|
|
lBox.Append(MainListboxRow)
|
|
}
|
|
|
|
func CreateImagelessAlbumListBoxRow(lBox *gtk.ListBox, title string, artist string, duration string, postition int, songs []*subsonic.Child) {
|
|
MainListboxRow := gtk.NewListBoxRow()
|
|
MainGrid := gtk.NewGrid()
|
|
Frame := gtk.NewFrame("")
|
|
|
|
QueueButton := gtk.NewButton()
|
|
InfoButton := gtk.NewButton()
|
|
PLaybutton := gtk.NewButton()
|
|
TitleScrolledWindow := gtk.NewScrolledWindow()
|
|
ArtistScrolledWindow := gtk.NewScrolledWindow()
|
|
TitleLabel := gtk.NewLabel(title)
|
|
ArtistLabel := gtk.NewLabel(artist)
|
|
DurationLabel := gtk.NewLabel(duration)
|
|
|
|
InfoButton.SetLabel("i")
|
|
QueueButton.SetLabel("☰")
|
|
PLaybutton.SetLabel("▶")
|
|
|
|
MainGrid.Attach(DurationLabel, 0, 0, 1, 2)
|
|
MainGrid.Attach(TitleScrolledWindow, 1, 0, 1, 1)
|
|
MainGrid.Attach(ArtistScrolledWindow, 1, 1, 1, 1)
|
|
MainGrid.Attach(InfoButton, 2, 0, 1, 2)
|
|
MainGrid.Attach(QueueButton, 3, 0, 1, 2)
|
|
MainGrid.Attach(PLaybutton, 4, 0, 1, 2)
|
|
TitleScrolledWindow.SetChild(TitleLabel)
|
|
ArtistScrolledWindow.SetChild(ArtistLabel)
|
|
Frame.SetChild(MainGrid)
|
|
MainListboxRow.SetChild(Frame)
|
|
|
|
QueueButton.SetSizeRequest(15, 30)
|
|
PLaybutton.SetSizeRequest(15, 30)
|
|
DurationLabel.SetSizeRequest(30, 30)
|
|
DurationLabel.SetHAlign(gtk.AlignCenter)
|
|
DurationLabel.SetVAlign(gtk.AlignCenter)
|
|
TitleLabel.SetHAlign(gtk.AlignStart)
|
|
ArtistLabel.SetHAlign(gtk.AlignStart)
|
|
TitleLabel.SetSizeRequest(150, 15)
|
|
ArtistLabel.SetSizeRequest(150, 15)
|
|
|
|
TitleScrolledWindow.SetHExpand(true)
|
|
ArtistScrolledWindow.SetHExpand(true)
|
|
// MainListboxRow.SetSizeRequest(300,50)
|
|
MainListboxRow.SetHAlign(gtk.AlignFill)
|
|
MainGrid.SetHAlign(gtk.AlignFill)
|
|
MainListboxRow.SetHExpand(true)
|
|
MainGrid.SetHExpand(true)
|
|
TitleScrolledWindow.SetSizeRequest(110, 15)
|
|
ArtistScrolledWindow.SetSizeRequest(110, 15)
|
|
QueueButton.SetHAlign(gtk.AlignEnd)
|
|
PLaybutton.SetHAlign(gtk.AlignEnd)
|
|
|
|
InfoButton.SetSizeRequest(15, 30)
|
|
InfoButton.SetHAlign(gtk.AlignEnd)
|
|
|
|
var InfoButtonClicked = func() {
|
|
// TempArtist = itemid
|
|
|
|
var upstream = func() {
|
|
for child := lBox.FirstChild(); child != nil; {
|
|
lBox.Remove(child)
|
|
child = lBox.FirstChild()
|
|
|
|
}
|
|
for i, song := range songs {
|
|
chil, _ := CurrentClient.GetSong(song.ID)
|
|
CreateImagelessSongListBoxRow(lBox, chil.Title, chil.Artist, DurationToReadable(chil.Duration), i, chil.ID)
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
var PlayButtonClicked = func() {
|
|
var upstream = func() {
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
NowPlayingIndex = 0
|
|
// MainQueue.Clear() //!
|
|
MainQueue = SliceClear(MainQueue)
|
|
|
|
for child := QueueListBox.FirstChild(); child != nil; {
|
|
QueueListBox.Remove(child)
|
|
child = QueueListBox.FirstChild()
|
|
}
|
|
|
|
for i, song := range songs {
|
|
MainQueue = append(MainQueue, song.ID)
|
|
// MainQueue.Add(song.ID)
|
|
CreateImagelessQueueListBoxRow(QueueListBox, song.Title, song.Artist, DurationToReadable(song.Duration), i, song.ID)
|
|
}
|
|
// NowPlayingIndex = MainQueue.IndexOf(songs[0].ID)
|
|
NowPlayingIndex = SliceIndexOf(MainQueue, songs[0].ID)
|
|
go StartCaching(MainQueue[NowPlayingIndex])
|
|
if NowPlayingIndex+1 <= len(MainQueue)-1 {
|
|
// fmt.Println(songdata.Title, " +1 needs to be downloaded")
|
|
go CachingWaiter(MainQueue[NowPlayingIndex], MainQueue[NowPlayingIndex+1], 5)
|
|
}
|
|
if NowPlayingIndex+2 <= len(MainQueue)-1 {
|
|
// fmt.Println(songdata.Title, " +2 needs to be downloaded")
|
|
go CachingWaiter(MainQueue[NowPlayingIndex+1], MainQueue[NowPlayingIndex+2], 5)
|
|
}
|
|
go PlayPort()
|
|
select {
|
|
case AudioControlChan <- true:
|
|
}
|
|
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
var QueueButtonClicked = func() {
|
|
var upstream = func() {
|
|
var j = len(MainQueue)
|
|
j--
|
|
for _, song := range songs {
|
|
// MainQueue.Add(song.ID)
|
|
MainQueue = append(MainQueue, song.ID)
|
|
CreateImagelessQueueListBoxRow(QueueListBox, song.Title, song.Artist, DurationToReadable(song.Duration), j, song.ID)
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
InfoButton.ConnectClicked(InfoButtonClicked)
|
|
PLaybutton.ConnectClicked(PlayButtonClicked)
|
|
QueueButton.ConnectClicked(QueueButtonClicked)
|
|
|
|
lBox.Append(MainListboxRow)
|
|
}
|
|
|
|
func CreateImagelessPlaylistListBoxRow(lBox *gtk.ListBox, title string, duration string, postition int, songs []*subsonic.Child) {
|
|
MainListboxRow := gtk.NewListBoxRow()
|
|
MainGrid := gtk.NewGrid()
|
|
Frame := gtk.NewFrame("")
|
|
InfoButton := gtk.NewButton()
|
|
|
|
QueueButton := gtk.NewButton()
|
|
PLaybutton := gtk.NewButton()
|
|
TitleScrolledWindow := gtk.NewScrolledWindow()
|
|
TitleLabel := gtk.NewLabel(title)
|
|
DurationLabel := gtk.NewLabel(duration)
|
|
|
|
QueueButton.SetLabel("☰")
|
|
PLaybutton.SetLabel("▶")
|
|
InfoButton.SetLabel("i")
|
|
|
|
MainGrid.Attach(DurationLabel, 0, 0, 1, 2)
|
|
MainGrid.Attach(TitleScrolledWindow, 1, 0, 1, 2)
|
|
MainGrid.Attach(QueueButton, 3, 0, 1, 2)
|
|
MainGrid.Attach(PLaybutton, 4, 0, 1, 2)
|
|
MainGrid.Attach(InfoButton, 2, 0, 1, 2)
|
|
TitleScrolledWindow.SetChild(TitleLabel)
|
|
MainListboxRow.SetChild(Frame)
|
|
Frame.SetChild(MainGrid)
|
|
|
|
QueueButton.SetSizeRequest(15, 30)
|
|
PLaybutton.SetSizeRequest(15, 30)
|
|
DurationLabel.SetSizeRequest(30, 30)
|
|
DurationLabel.SetHAlign(gtk.AlignCenter)
|
|
DurationLabel.SetVAlign(gtk.AlignCenter)
|
|
TitleLabel.SetHAlign(gtk.AlignStart)
|
|
TitleLabel.SetSizeRequest(150, 15)
|
|
InfoButton.SetSizeRequest(15, 30)
|
|
InfoButton.SetHAlign(gtk.AlignEnd)
|
|
TitleScrolledWindow.SetHExpand(true)
|
|
// MainListboxRow.SetSizeRequest(300,50)
|
|
MainListboxRow.SetHAlign(gtk.AlignFill)
|
|
MainGrid.SetHAlign(gtk.AlignFill)
|
|
MainListboxRow.SetHExpand(true)
|
|
MainGrid.SetHExpand(true)
|
|
TitleScrolledWindow.SetSizeRequest(110, 15)
|
|
QueueButton.SetHAlign(gtk.AlignEnd)
|
|
PLaybutton.SetHAlign(gtk.AlignEnd)
|
|
|
|
var PlayButtonClicked = func() {
|
|
var upstream = func() {
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
NowPlayingIndex = 0
|
|
// MainQueue.Clear() //!
|
|
MainQueue = SliceClear(MainQueue)
|
|
|
|
for child := QueueListBox.FirstChild(); child != nil; {
|
|
QueueListBox.Remove(child)
|
|
child = QueueListBox.FirstChild()
|
|
}
|
|
|
|
for i, song := range songs {
|
|
// MainQueue.Add(song.ID)
|
|
MainQueue = append(MainQueue, song.ID)
|
|
CreateImagelessQueueListBoxRow(QueueListBox, song.Title, song.Artist, DurationToReadable(song.Duration), i, song.ID)
|
|
}
|
|
// NowPlayingIndex = MainQueue.IndexOf(songs[0].ID)
|
|
NowPlayingIndex = SliceIndexOf(MainQueue, songs[0].ID)
|
|
go StartCaching(MainQueue[NowPlayingIndex])
|
|
if NowPlayingIndex+1 <= len(MainQueue)-1 {
|
|
// fmt.Println(songdata.Title, " +1 needs to be downloaded")
|
|
go CachingWaiter(MainQueue[NowPlayingIndex], MainQueue[NowPlayingIndex+1], 5)
|
|
}
|
|
if NowPlayingIndex+2 <= len(MainQueue)-1 {
|
|
// fmt.Println(songdata.Title, " +2 needs to be downloaded")
|
|
go CachingWaiter(MainQueue[NowPlayingIndex+1], MainQueue[NowPlayingIndex+2], 5)
|
|
}
|
|
go PlayPort()
|
|
select {
|
|
case AudioControlChan <- true:
|
|
}
|
|
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
var QueueButtonClicked = func() {
|
|
var upstream = func() {
|
|
var j = len(MainQueue)
|
|
j--
|
|
for _, song := range songs {
|
|
// MainQueue.Add(song.ID)
|
|
MainQueue = append(MainQueue, song.ID)
|
|
CreateImagelessQueueListBoxRow(QueueListBox, song.Title, song.Artist, DurationToReadable(song.Duration), j, song.ID)
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
|
|
var InfoButtonClicked = func() {
|
|
var upstream = func() {
|
|
for child := lBox.FirstChild(); child != nil; {
|
|
lBox.Remove(child)
|
|
child = lBox.FirstChild()
|
|
|
|
}
|
|
for i, song := range songs {
|
|
chil, _ := CurrentClient.GetSong(song.ID)
|
|
CreateImagelessSongListBoxRow(lBox, chil.Title, chil.Artist, DurationToReadable(chil.Duration), i, chil.ID)
|
|
}
|
|
}
|
|
glib.IdleAdd(upstream)
|
|
}
|
|
InfoButton.ConnectClicked(InfoButtonClicked)
|
|
|
|
PLaybutton.ConnectClicked(PlayButtonClicked)
|
|
QueueButton.ConnectClicked(QueueButtonClicked)
|
|
|
|
lBox.Append(MainListboxRow)
|
|
}
|
|
|
|
// var TestConnButtonClicked = func() {
|
|
// // TestConnButtonClicked()
|
|
// }
|
|
|
|
var SettingsTabUserSaveButtonClicked = func() {
|
|
CurrentClient = CreateUser(HttpSettings)
|
|
|
|
usr := SettingsTabUserUsernameEntry.Text()
|
|
serv := SettingsTabUserServerEntry.Text()
|
|
plr := SettingsTabUserDeviceNameEntry.Text()
|
|
|
|
coversize := SettingsTabAppCoverSizeEntry.Text()
|
|
blur := SettingsTabAppBlurRadiusEntry.Text()
|
|
bitr := SettingsTabAppBitrateEntry.Text()
|
|
downbuff := SettingsTabAppBufferSizeEntry.Text()
|
|
|
|
var streamURL, metaURL, streamUser, streamPass, metaUser, metaPass string
|
|
|
|
if SettingsTabAppStreamingProxySwitch.Active() == true {
|
|
streamURL = SettingsTabAppStreamingProxyEntry.Text()
|
|
|
|
if SettingsTabAppAuthStreamingProxySwitch.Active() == true {
|
|
streamUser = SettingsTabAppStreamingProxyUsernameEntry.Text()
|
|
streamPass = SettingsTabAppStreamingProxyPassEntry.Text()
|
|
keyring.Set(streamURL, streamUser, streamPass)
|
|
} else {
|
|
streamUser = ""
|
|
streamPass = ""
|
|
}
|
|
|
|
} else {
|
|
streamURL = ""
|
|
streamUser = ""
|
|
streamPass = ""
|
|
|
|
}
|
|
|
|
if SettingsTabAppMetadataProxySwitch.Active() == true {
|
|
|
|
metaURL = SettingsTabAppMetadataProxyEntry.Text()
|
|
|
|
if SettingsTabAppAuthMetadataProxySwitch.Active() == true {
|
|
metaUser = SettingsTabAppMetadataProxyUsernameEntry.Text()
|
|
metaPass = SettingsTabAppMetadataProxyPassEntry.Text()
|
|
keyring.Set(metaURL, metaUser, metaPass)
|
|
}
|
|
|
|
} else {
|
|
metaURL = ""
|
|
metaUser = ""
|
|
metaPass = ""
|
|
|
|
}
|
|
|
|
UserDeserialized = User{
|
|
User: usr,
|
|
Url: serv,
|
|
}
|
|
|
|
UserList[0] = UserDeserialized
|
|
|
|
var coversizeInt int16
|
|
fmt.Sscan(coversize, &coversizeInt)
|
|
|
|
var blurInt int8
|
|
fmt.Sscan(blur, &blurInt)
|
|
|
|
var bitrInt int16
|
|
fmt.Sscan(bitr, &bitrInt)
|
|
|
|
var downbuffInt int16
|
|
fmt.Sscan(downbuff, &downbuffInt)
|
|
|
|
MainSettings = Settings{
|
|
Users: UserList,
|
|
PlayerName: plr,
|
|
|
|
DeleteOnClose: SettingsTabAppDeleteSwitch.Active(),
|
|
Coversize: coversizeInt,
|
|
BlurRadius: blurInt,
|
|
HideHeaderBar: SettingsTabAppHideHeaderBarSwitch.Active(),
|
|
|
|
Codec: SettingsTabAppCodecComboBoxTest.ActiveText(),
|
|
Bitrate: bitrInt,
|
|
DownladBufferSize: downbuffInt,
|
|
|
|
UseStreamingProxy: SettingsTabAppStreamingProxySwitch.Active(),
|
|
StreamingProxy: streamURL,
|
|
AuthStreamingProxy: SettingsTabAppAuthStreamingProxySwitch.Active(),
|
|
StreamingProxyUser: streamUser,
|
|
|
|
MetadataType: SettingsTabAppMetadataComboBoxTest.ActiveText(),
|
|
UseMetadataProxy: SettingsTabAppMetadataProxySwitch.Active(),
|
|
MetadataProxy: metaURL,
|
|
AuthMetadataProxy: SettingsTabAppAuthMetadataProxySwitch.Active(),
|
|
MetadataProxyUser: metaUser,
|
|
}
|
|
|
|
server := SettingsTabUserServerEntry.Text()
|
|
username := SettingsTabUserUsernameEntry.Text()
|
|
pass := SettingsTabUserPasswordEntry.Text()
|
|
err := keyring.Set(server, username, pass)
|
|
if err != nil {
|
|
|
|
}
|
|
fmt.Println("")
|
|
fmt.Println(UserDeserialized)
|
|
fmt.Println(MainSettings)
|
|
fmt.Println(settingsPath)
|
|
fmt.Println("")
|
|
|
|
Serialize(MainSettings, settingsPath)
|
|
}
|
|
|
|
var SearchTabSearchButtonClicked = func() {
|
|
Search()
|
|
// fmt.Println("end searching")
|
|
}
|
|
|
|
var MainSliderUserValueChange = func() {
|
|
|
|
}
|
|
|
|
var MainPlayPauseButtonClicked = func() {
|
|
|
|
// // if NowPlayingIndex == 0 && PlayAudio == false && TotalTime == 0 {
|
|
// // go PlayPort()
|
|
// // }
|
|
|
|
PlayAudio = !PlayAudio
|
|
if PlayAudio == true {
|
|
MainPlayPauseButton.SetLabel("❚❚")
|
|
} else {
|
|
MainPlayPauseButton.SetLabel("▶")
|
|
}
|
|
|
|
}
|
|
|
|
var LibraryTabBackButtonClicked = func() {
|
|
|
|
// if TempArtist != "" {
|
|
// var upstream = func() {
|
|
// for child := QueueListBoxLibrary.FirstChild(); child != nil; {
|
|
// QueueListBoxLibrary.Remove(child)
|
|
// child = QueueListBoxLibrary.FirstChild()
|
|
// }
|
|
// artist, _ := CurrentClient.GetArtist(TempArtist)
|
|
// albums := artist.Album
|
|
|
|
// for i, album := range albums {
|
|
// alb, _ := CurrentClient.GetAlbum(album.ID)
|
|
// CreateImagelessAlbumListBoxRow(QueueListBoxLibrary, alb.Name, alb.Artist, DurationToReadable(alb.Duration), i, alb.Song)
|
|
// }
|
|
// }
|
|
// glib.IdleAdd(upstream)
|
|
|
|
// TempArtist = ""
|
|
// } else {
|
|
// GetLib()
|
|
// }
|
|
|
|
GetLib()
|
|
|
|
}
|
|
var LibraryTabRefreshButtonClicked = func() {
|
|
GetLib()
|
|
}
|
|
|
|
var LibraryTabLibraryRefreshButton = func() {
|
|
GetPlaylist()
|
|
}
|
|
|
|
var LibraryTabLibraryBackButton = func() {
|
|
GetPlaylist()
|
|
}
|
|
|
|
var MainPreviousButtonClicked = func() {
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
|
|
// CurrentStream = nil
|
|
if NowPlayingIndex-1 >= 0 {
|
|
NowPlayingIndex--
|
|
}
|
|
notify.CloseNotification(MainNotification.ReplacesID)
|
|
UpdatePBar()
|
|
go PlayPort()
|
|
}
|
|
|
|
var MainNextButtonClicked = func() {
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
// CurrentStream = nil
|
|
if !(NowPlayingIndex+1 > (len(MainQueue) - 1)) {
|
|
NowPlayingIndex++
|
|
go StartCaching(MainQueue[NowPlayingIndex])
|
|
if NowPlayingIndex+1 <= len(MainQueue)-1 {
|
|
// fmt.Println(songdata.Title, " +1 needs to be downloaded")
|
|
go CachingWaiter(MainQueue[NowPlayingIndex], MainQueue[NowPlayingIndex+1], 5)
|
|
}
|
|
if NowPlayingIndex+2 <= len(MainQueue)-1 {
|
|
// fmt.Println(songdata.Title, " +2 needs to be downloaded")
|
|
go CachingWaiter(MainQueue[NowPlayingIndex+1], MainQueue[NowPlayingIndex+2], 5)
|
|
}
|
|
}
|
|
notify.CloseNotification(MainNotification.ReplacesID)
|
|
UpdatePBar()
|
|
go PlayPort()
|
|
}
|
|
|
|
// func MoveListBoxChildren(lb *gtk.ListBox, position int){
|
|
// // row := lb.RowAtIndex(position +1 )
|
|
// // lb.Remove(row)
|
|
// // lb.Insert(row, position)
|
|
// // position++
|
|
|
|
// for row := lb.RowAtIndex(position +1 ); position < len(MainQueue); {
|
|
// lb.Remove(row)
|
|
// lb.Insert(row, position)
|
|
// position++
|
|
// }
|
|
// }
|
|
|
|
var ClearQueue = func() {
|
|
|
|
PlayAudio = false
|
|
EndPlayer = true
|
|
|
|
NowPlayingIndex = 0
|
|
|
|
MainQueue = MainQueue[:0]
|
|
|
|
SetZeroTime()
|
|
|
|
for child := QueueListBox.FirstChild(); child != nil; {
|
|
QueueListBox.Remove(child)
|
|
child = QueueListBox.FirstChild()
|
|
}
|
|
}
|
|
|
|
var CacheAllQueue = func() {
|
|
StartCaching(MainQueue[0])
|
|
for i := 1; i < len(MainQueue); i++ {
|
|
go CachingWaiter(MainQueue[i-1], MainQueue[i], 5)
|
|
}
|
|
}
|