Migrated from GORM to bbolt for lightweight key-value storage, better aligning with project requirements. Updated repository methods to utilize bbolt's native APIs and removed dependencies associated with GORM.
120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fyne.io/fyne/v2"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/convertor"
|
|
dberror "git.kor-elf.net/kor-elf/gui-for-ffmpeg/db"
|
|
error2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/error"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/handler"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/localizer"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/menu"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/migration"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/setting"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"go.etcd.io/bbolt"
|
|
"golang.org/x/text/language"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
var application kernel.AppContract
|
|
var ffPathUtilities *kernel.FFPathUtilities
|
|
|
|
func init() {
|
|
iconResource, _ := fyne.LoadResourceFromPath("icon.png")
|
|
appMetadata := &fyne.AppMetadata{
|
|
ID: "net.kor-elf.projects.gui-for-ffmpeg",
|
|
Name: "GUI for FFmpeg",
|
|
Version: "0.7.0",
|
|
Icon: iconResource,
|
|
}
|
|
|
|
localizerService, err := kernel.NewLocalizer("languages", language.Russian)
|
|
if err != nil {
|
|
kernel.PanicErrorLang(err, appMetadata)
|
|
}
|
|
|
|
ffPathUtilities = &kernel.FFPathUtilities{FFmpeg: "", FFprobe: ""}
|
|
convertorService := kernel.NewService(ffPathUtilities)
|
|
|
|
queue := kernel.NewQueueList()
|
|
application = kernel.NewApp(
|
|
appMetadata,
|
|
localizerService,
|
|
queue,
|
|
kernel.NewQueueLayoutObject(queue, localizerService),
|
|
convertorService,
|
|
)
|
|
}
|
|
|
|
func main() {
|
|
errorView := error2.NewView(application)
|
|
if canCreateFile("data/database.db") != true {
|
|
errorView.PanicErrorWriteDirectoryData()
|
|
application.GetWindow().ShowAndRun()
|
|
return
|
|
}
|
|
|
|
db, err := bbolt.Open("data/database.db", 0600, &bbolt.Options{Timeout: 3 * time.Second})
|
|
if err != nil {
|
|
errorView.PanicError(err)
|
|
application.GetWindow().ShowAndRun()
|
|
return
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
err = migration.Run(db)
|
|
if err != nil {
|
|
errorView.PanicError(err)
|
|
application.GetWindow().ShowAndRun()
|
|
return
|
|
}
|
|
|
|
settingRepository := setting.NewRepository(db)
|
|
convertorRepository := convertor.NewRepository(settingRepository)
|
|
pathFFmpeg, err := convertorRepository.GetPathFfmpeg()
|
|
if err != nil && errors.Is(err, dberror.ErrRecordNotFound) == false {
|
|
errorView.PanicError(err)
|
|
application.GetWindow().ShowAndRun()
|
|
return
|
|
}
|
|
ffPathUtilities.FFmpeg = pathFFmpeg
|
|
|
|
pathFFprobe, err := convertorRepository.GetPathFfprobe()
|
|
if err != nil && errors.Is(err, dberror.ErrRecordNotFound) == false {
|
|
errorView.PanicError(err)
|
|
application.GetWindow().ShowAndRun()
|
|
return
|
|
}
|
|
ffPathUtilities.FFprobe = pathFFprobe
|
|
|
|
application.RunConvertor()
|
|
defer application.AfterClosing()
|
|
|
|
localizerView := localizer.NewView(application)
|
|
convertorView := convertor.NewView(application)
|
|
convertorHandler := handler.NewConvertorHandler(application, convertorView, errorView, convertorRepository)
|
|
|
|
localizerRepository := localizer.NewRepository(settingRepository)
|
|
menuView := menu.NewView(application)
|
|
mainMenu := handler.NewMenuHandler(application, convertorHandler, menuView, localizerView, localizerRepository)
|
|
|
|
mainHandler := handler.NewMainHandler(application, convertorHandler, mainMenu, localizerRepository)
|
|
mainHandler.Start()
|
|
|
|
application.GetWindow().SetMainMenu(mainMenu.GetMainMenu())
|
|
application.GetWindow().ShowAndRun()
|
|
}
|
|
|
|
func canCreateFile(path string) bool {
|
|
file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0666)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
_ = file.Close()
|
|
return true
|
|
}
|