95 lines
2.9 KiB
Go
95 lines
2.9 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"log/slog"
|
||
"os"
|
||
"path/filepath"
|
||
|
||
"github.com/rivo/tview"
|
||
)
|
||
|
||
func init() {
|
||
logger := slog.New(&Handler{os.Stderr, slog.LevelInfo})
|
||
slog.SetDefault(logger)
|
||
}
|
||
|
||
func main() {
|
||
configFilePath, scriptFilePath, exportFileFormat, encoding, err := getReportParams()
|
||
if err != nil {
|
||
log.Fatalln(err)
|
||
}
|
||
|
||
err = launch(configFilePath, scriptFilePath, exportFileFormat, encoding)
|
||
if err != nil {
|
||
slog.Error("Ошибка при выполнении", slog.Any("err", err))
|
||
fmt.Scanln()
|
||
return
|
||
}
|
||
}
|
||
|
||
func getReportParams() (configFilePath, scriptFilePath string, exportFileFormat ExportFormat, encoding Encoding, err error) {
|
||
exportFileFormatStr := ""
|
||
|
||
// Список файлов с SQL-скриптами
|
||
files, _ := filepath.Glob(filepath.Join(SQL_FILES_DIR, "*.sql"))
|
||
for i := range files {
|
||
files[i] = filepath.Base(files[i])
|
||
}
|
||
// Список файлов с настройками подключения к БД
|
||
configs, _ := filepath.Glob("*.ini")
|
||
|
||
configFileDropDown := tview.NewDropDown().
|
||
SetOptions(configs, nil).
|
||
SetLabel("Файл настроек серверов").
|
||
SetCurrentOption(0)
|
||
sqlFileDropDown := tview.NewDropDown().
|
||
SetOptions(files, nil).
|
||
SetLabel("Файл SQL-скрипта").
|
||
SetCurrentOption(0)
|
||
encodingDropDown := tview.NewDropDown().
|
||
SetOptions([]string{string(EncodingWin1251), string(EncodingUtf8)}, nil).
|
||
SetLabel("Кодировка CSV-файла")
|
||
encodingDropDown.SetDisabled(true)
|
||
encodingDropDown.SetCurrentOption(0)
|
||
|
||
formatDropDown := tview.NewDropDown().
|
||
SetOptions([]string{string(ExportFormatExcel), string(ExportFormatCsv)}, func(text string, index int) {
|
||
if text == string(ExportFormatCsv) {
|
||
encodingDropDown.SetDisabled(false)
|
||
return
|
||
}
|
||
|
||
encodingDropDown.SetDisabled(true)
|
||
}).
|
||
SetLabel("Формат выгрузки").SetCurrentOption(0)
|
||
|
||
form := tview.NewForm().
|
||
AddFormItem(configFileDropDown).
|
||
AddFormItem(sqlFileDropDown).
|
||
AddFormItem(formatDropDown).
|
||
AddFormItem(encodingDropDown)
|
||
form.SetTitle("Параметры").SetBorder(true)
|
||
|
||
app := tview.NewApplication()
|
||
grid := tview.NewGrid().SetRows(-1, 1).
|
||
AddItem(form, 0, 0, 1, 1, 0, 0, true).
|
||
AddItem(tview.NewButton("Запуск").SetSelectedFunc(func() {
|
||
_, scriptFilePath = sqlFileDropDown.GetCurrentOption()
|
||
_, exportFileFormatStr = formatDropDown.GetCurrentOption()
|
||
_, configFilePath = configFileDropDown.GetCurrentOption()
|
||
_, encodingStr := encodingDropDown.GetCurrentOption()
|
||
encoding = Encoding(encodingStr)
|
||
app.Stop()
|
||
}), 1, 0, 1, 1, 0, 0, false)
|
||
grid.SetBorderPadding(0, 1, 1, 1)
|
||
|
||
form.SetTitle("Параметры выгрузки").SetTitleAlign(tview.AlignLeft)
|
||
if err := app.SetRoot(grid, true).EnableMouse(true).Run(); err != nil {
|
||
return "", "", "", "", err
|
||
}
|
||
|
||
return configFilePath, filepath.Join(SQL_FILES_DIR, scriptFilePath), ExportFormat(exportFileFormatStr), encoding, nil
|
||
}
|