MobileMkch/ui/settings_screen.go
2025-08-05 20:08:15 +03:00

187 lines
5.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ui
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
"MobileMkch/cache"
)
type SettingsScreen struct {
uiManager *UIManager
content *fyne.Container
}
func NewSettingsScreen(uiManager *UIManager) *SettingsScreen {
screen := &SettingsScreen{
uiManager: uiManager,
content: container.NewVBox(),
}
screen.setupContent()
return screen
}
func (ss *SettingsScreen) setupContent() {
ss.content.RemoveAll()
header := widget.NewLabel("Настройки")
header.TextStyle = fyne.TextStyle{Bold: true}
ss.content.Add(header)
themeLabel := widget.NewLabel("Тема:")
themeSelect := widget.NewSelect([]string{"Темная", "Светлая"}, func(theme string) {
if theme == "Темная" {
ss.uiManager.GetSettings().Theme = "dark"
} else {
ss.uiManager.GetSettings().Theme = "light"
}
ss.uiManager.SaveSettings()
})
if ss.uiManager.GetSettings().Theme == "dark" {
themeSelect.SetSelected("Темная")
} else {
themeSelect.SetSelected("Светлая")
}
themeContainer := container.NewHBox(themeLabel, themeSelect)
ss.content.Add(themeContainer)
autoRefreshCheck := widget.NewCheck("Авторефреш", func(checked bool) {
ss.uiManager.GetSettings().AutoRefresh = checked
ss.uiManager.SaveSettings()
})
autoRefreshCheck.SetChecked(ss.uiManager.GetSettings().AutoRefresh)
ss.content.Add(autoRefreshCheck)
showFilesCheck := widget.NewCheck("Показывать файлы", func(checked bool) {
ss.uiManager.GetSettings().ShowFiles = checked
ss.uiManager.SaveSettings()
})
showFilesCheck.SetChecked(ss.uiManager.GetSettings().ShowFiles)
ss.content.Add(showFilesCheck)
compactModeCheck := widget.NewCheck("Компактный режим", func(checked bool) {
ss.uiManager.GetSettings().CompactMode = checked
ss.uiManager.SaveSettings()
})
compactModeCheck.SetChecked(ss.uiManager.GetSettings().CompactMode)
ss.content.Add(compactModeCheck)
pageSizeLabel := widget.NewLabel("Размер страницы:")
pageSizeSelect := widget.NewSelect([]string{"5", "10", "15", "20"}, func(size string) {
switch size {
case "5":
ss.uiManager.GetSettings().PageSize = 5
case "10":
ss.uiManager.GetSettings().PageSize = 10
case "15":
ss.uiManager.GetSettings().PageSize = 15
case "20":
ss.uiManager.GetSettings().PageSize = 20
}
ss.uiManager.SaveSettings()
})
currentSize := ss.uiManager.GetSettings().PageSize
switch currentSize {
case 5:
pageSizeSelect.SetSelected("5")
case 10:
pageSizeSelect.SetSelected("10")
case 15:
pageSizeSelect.SetSelected("15")
case 20:
pageSizeSelect.SetSelected("20")
default:
pageSizeSelect.SetSelected("10")
}
pageSizeContainer := container.NewHBox(pageSizeLabel, pageSizeSelect)
ss.content.Add(pageSizeContainer)
lastBoardLabel := widget.NewLabel("Последняя доска:")
lastBoardValue := widget.NewLabel(ss.uiManager.GetLastBoard())
if lastBoardValue.Text == "" {
lastBoardValue.SetText("Не выбрана")
}
lastBoardContainer := container.NewHBox(lastBoardLabel, lastBoardValue)
ss.content.Add(lastBoardContainer)
ss.content.Add(widget.NewSeparator())
cacheHeader := widget.NewLabel("Управление кэшем")
cacheHeader.TextStyle = fyne.TextStyle{Bold: true}
ss.content.Add(cacheHeader)
clearBoardsCacheBtn := widget.NewButton("Очистить кэш досок", func() {
cache.GetCache().Delete("boards")
ss.uiManager.ShowInfo("Кэш очищен", "Кэш досок очищен")
})
ss.content.Add(clearBoardsCacheBtn)
clearThreadsCacheBtn := widget.NewButton("Очистить кэш тредов", func() {
boards, err := ss.uiManager.GetAPIClient().GetBoards()
if err == nil {
for _, board := range boards {
cache.GetCache().Delete("threads_" + board.Code)
}
}
ss.uiManager.ShowInfo("Кэш очищен", "Кэш тредов для всех досок очищен")
})
ss.content.Add(clearThreadsCacheBtn)
clearThreadDetailsCacheBtn := widget.NewButton("Очистить кэш деталей тредов", func() {
// Удаляем кэш деталей тредов и комментариев
// Это более сложно, так как нужно знать ID тредов
// Пока просто очищаем весь кэш
cache.GetCache().Clear()
ss.uiManager.ShowInfo("Кэш очищен", "Кэш деталей тредов очищен")
})
ss.content.Add(clearThreadDetailsCacheBtn)
clearAllCacheBtn := widget.NewButton("Очистить весь кэш", func() {
cache.GetCache().Clear()
ss.uiManager.ShowInfo("Кэш очищен", "Весь кэш очищен")
})
ss.content.Add(clearAllCacheBtn)
ss.content.Add(widget.NewSeparator())
resetHeader := widget.NewLabel("Сброс настроек")
resetHeader.TextStyle = fyne.TextStyle{Bold: true}
ss.content.Add(resetHeader)
resetButton := widget.NewButton("Сбросить настройки", func() {
ss.uiManager.GetSettings().Theme = "dark"
ss.uiManager.GetSettings().AutoRefresh = true
ss.uiManager.GetSettings().ShowFiles = true
ss.uiManager.GetSettings().CompactMode = false
ss.uiManager.GetSettings().LastBoard = ""
ss.uiManager.GetSettings().PageSize = 10
ss.uiManager.SaveSettings()
ss.setupContent() // Перезагружаем интерфейс
})
ss.content.Add(resetButton)
ss.content.Add(widget.NewSeparator())
aboutButton := widget.NewButton("Об аппке", func() {
ss.uiManager.ShowAbout()
})
ss.content.Add(aboutButton)
ss.content.Refresh()
}
func (ss *SettingsScreen) GetContent() fyne.CanvasObject {
return ss.content
}
func (ss *SettingsScreen) GetTitle() string {
return "Настройки"
}
func (ss *SettingsScreen) OnShow() {
ss.setupContent()
}
func (ss *SettingsScreen) OnHide() {
ss.uiManager.SaveSettings()
}