|
|
|
@ -1,24 +1,34 @@
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"embed"
|
|
|
|
|
"fmt"
|
|
|
|
|
"math/rand"
|
|
|
|
|
"time"
|
|
|
|
|
|
|
|
|
|
"log"
|
|
|
|
|
"os"
|
|
|
|
|
|
|
|
|
|
"github.com/mrusme/superhighway84/database"
|
|
|
|
|
"github.com/mrusme/superhighway84/models"
|
|
|
|
|
"github.com/mrusme/superhighway84/tui"
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
//go:embed superhighway84.jpeg
|
|
|
|
|
var EMBEDFS embed.FS
|
|
|
|
|
|
|
|
|
|
func NewLogger(filename string) (*zap.Logger, error) {
|
|
|
|
|
cfg := zap.NewProductionConfig()
|
|
|
|
|
cfg.OutputPaths = []string{
|
|
|
|
|
fmt.Sprintf("%s.log", filename),
|
|
|
|
|
}
|
|
|
|
|
return cfg.Build()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
// ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
|
// defer cancel()
|
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
|
|
dbInit := false
|
|
|
|
|
dbInitValue := os.Getenv("SUPERHIGHWAY84_DB_INIT")
|
|
|
|
@ -26,6 +36,11 @@ func main() {
|
|
|
|
|
dbInit = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dbName := os.Getenv("SUPERHIGHWAY84_DB_NAME")
|
|
|
|
|
if dbInit == true && dbName == "" {
|
|
|
|
|
log.Panicln("SUPERHIGHWAY84_DB_NAME missing!")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dbURI := os.Getenv("SUPERHIGHWAY84_DB_URI")
|
|
|
|
|
if dbInit == false && dbURI == "" {
|
|
|
|
|
log.Panicln("SUPERHIGHWAY84_DB_URI missing!")
|
|
|
|
@ -36,59 +51,74 @@ func main() {
|
|
|
|
|
log.Panicln("SUPERHIGHWAY84_DB_CACHE missing!")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// logger, err := zap.NewDevelopment()
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// log.Panicln(err)
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// db, err := database.NewDatabase(ctx, dbURI, dbCache, dbInit, logger)
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// log.Panicln(err)
|
|
|
|
|
// }
|
|
|
|
|
// defer db.Disconnect()
|
|
|
|
|
// db.Connect(func() {
|
|
|
|
|
// //TUI.App.Stop()
|
|
|
|
|
// })
|
|
|
|
|
//
|
|
|
|
|
// articles, _ := db.ListArticles()
|
|
|
|
|
var articles []models.Article
|
|
|
|
|
mockGroups := []string{
|
|
|
|
|
"comp.test",
|
|
|
|
|
"news.conspiracy",
|
|
|
|
|
"sci.physics",
|
|
|
|
|
"talk.lolz",
|
|
|
|
|
"sci.chemistry",
|
|
|
|
|
"talk.random",
|
|
|
|
|
"alt.anarchism",
|
|
|
|
|
"alt.tv.simpsons",
|
|
|
|
|
logger, err := NewLogger(os.Getenv("LOGFILE"))
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Panicln(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ======================== TESTING ===============================
|
|
|
|
|
go func() {
|
|
|
|
|
for i := 0; i < 100; i++ {
|
|
|
|
|
grp := mockGroups[(rand.Intn(len(mockGroups) - 1))]
|
|
|
|
|
var articles []models.Article
|
|
|
|
|
|
|
|
|
|
time.Sleep(time.Millisecond * 250)
|
|
|
|
|
art1 := *models.NewArticle()
|
|
|
|
|
art1.Subject = fmt.Sprintf("A test in %s", grp)
|
|
|
|
|
art1.Body = "This is just a test article\nWhat's up there?"
|
|
|
|
|
art1.From = "test@example.com"
|
|
|
|
|
art1.Newsgroup = grp
|
|
|
|
|
TUI := tui.Init(&EMBEDFS)
|
|
|
|
|
TUI.ArticlesDatasource = &articles
|
|
|
|
|
|
|
|
|
|
articles = append(articles, art1)
|
|
|
|
|
db, err := database.NewDatabase(ctx, dbURI, dbCache, dbInit, dbName, logger)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Panicln(err)
|
|
|
|
|
}
|
|
|
|
|
defer db.Disconnect()
|
|
|
|
|
err = db.Connect(func(address string) {
|
|
|
|
|
//TUI.App.Stop()
|
|
|
|
|
TUI.Views["mainscreen"].(*tui.Mainscreen).SetFooter(address)
|
|
|
|
|
articles, _ = db.ListArticles()
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Panicln(err)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
// ======================== /TESTING ==============================
|
|
|
|
|
|
|
|
|
|
TUI := tui.Init(&EMBEDFS, &articles)
|
|
|
|
|
// TUI.CallbackRefreshArticles = func() (error) {
|
|
|
|
|
// articles, err := db.ListArticles()
|
|
|
|
|
// return err
|
|
|
|
|
|
|
|
|
|
// ======================== TESTING ===============================
|
|
|
|
|
// var articles []models.Article
|
|
|
|
|
// mockGroups := []string{
|
|
|
|
|
// "comp.test",
|
|
|
|
|
// "news.conspiracy",
|
|
|
|
|
// "sci.physics",
|
|
|
|
|
// "talk.lolz",
|
|
|
|
|
// "sci.chemistry",
|
|
|
|
|
// "talk.random",
|
|
|
|
|
// "alt.anarchism",
|
|
|
|
|
// "alt.tv.simpsons",
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// go func() {
|
|
|
|
|
// var prev models.Article
|
|
|
|
|
// for i := 0; i < 100; i++ {
|
|
|
|
|
// grp := mockGroups[(rand.Intn(len(mockGroups) - 1))]
|
|
|
|
|
//
|
|
|
|
|
// time.Sleep(time.Millisecond * 250)
|
|
|
|
|
// art1 := *models.NewArticle()
|
|
|
|
|
// art1.Subject = fmt.Sprintf("A test in %s", grp)
|
|
|
|
|
// art1.Body = "This is just a test article\nWhat's up there?"
|
|
|
|
|
// art1.From = "test@example.com"
|
|
|
|
|
// art1.Newsgroup = grp
|
|
|
|
|
//
|
|
|
|
|
// if prev.Newsgroup == art1.Newsgroup {
|
|
|
|
|
// art1.InReplyToID = prev.ID
|
|
|
|
|
// art1.Subject = fmt.Sprintf("Re: %s", prev.Subject)
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// articles = append(articles, art1)
|
|
|
|
|
// prev = art1
|
|
|
|
|
// }
|
|
|
|
|
// }()
|
|
|
|
|
// ======================== /TESTING ==============================
|
|
|
|
|
|
|
|
|
|
TUI.CallbackRefreshArticles = func() (error) {
|
|
|
|
|
articles, err = db.ListArticles()
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
TUI.CallbackSubmitArticle = func(article *models.Article) (error) {
|
|
|
|
|
// return db.SubmitArticle(article)
|
|
|
|
|
return nil
|
|
|
|
|
return db.SubmitArticle(article)
|
|
|
|
|
// return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|