refactoring of main to mainUi() and mainService()

This commit is contained in:
Dan Ballard 2019-05-13 14:01:08 -07:00
parent 8a666a7f37
commit 9400d5aa63
1 changed files with 119 additions and 112 deletions

231
main.go
View File

@ -8,7 +8,6 @@ import (
"cwtch.im/ui/go/gothings/android"
"cwtch.im/ui/go/the"
"flag"
"fmt"
"git.openprivacy.ca/openprivacy/libricochet-go/connectivity"
"git.openprivacy.ca/openprivacy/libricochet-go/log"
"github.com/therecipe/qt/core"
@ -49,116 +48,6 @@ func main() {
log.SetLevel(log.LevelInfo)
}
log.Infof("cwtch main args: %v\n", os.Args)
if *flagService {
log.Infoln("I am the service")
torpath := path.Join(androidBaseDir, "lib/libtor.so")
log.Infoln("Starting Tor...")
acn, _ := connectivity.StartTor(the.CwtchDir, torpath)
log.Infoln("Starting a cwtch app...")
the.CwtchApp = libapp.NewApp(acn, the.CwtchDir)
log.Infoln("Sleepinging???")
for true {
time.Sleep(5 * time.Second)
log.Infoln("Wake up, repeat")
}
} else {
log.Infoln("I am the application")
app := gui.NewQGuiApplication(len(os.Args), os.Args)
// our globals
gcd := gothings.NewGrandCentralDispatcher(nil)
gcd.SetOs(runtime.GOOS)
if buildVer != "" {
gcd.SetVersion(buildVer)
gcd.SetBuildDate(buildDate)
} else {
gcd.SetVersion("development")
gcd.SetBuildDate("now")
}
gcd.UIState = gothings.NewUIState(gcd)
the.AcknowledgementIDs = make(map[string][]*the.AckId)
gcd.OutgoingMessages = make(chan gobjects.Letter, 1000)
//TODO: put theme stuff somewhere better
gcd.SetThemeScale(1.0)
// this is to load local qml files quickly when developing
var qmlSource *core.QUrl
if *flagLocal {
qmlSource = core.QUrl_FromLocalFile("./qml/main.qml")
} else {
qmlSource = core.NewQUrl3("qrc:/qml/main.qml", 0)
}
app.SetWindowIcon(gui.NewQIcon5(":/qml/images/cwtch-icon.png"))
// load english first so it becomes the default in case we don't have a .ts for the user's locale, or if it contains unfinished strings
translator := core.NewQTranslator(nil)
translator.Load("translation_en", ":/i18n/", "", "")
core.QCoreApplication_InstallTranslator(translator)
gcd.Translator = core.NewQTranslator(nil)
gcd.Translator.Load("translation_"+core.QLocale_System().Name(), ":/i18n/", "", "")
core.QCoreApplication_InstallTranslator(gcd.Translator)
core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)
quickcontrols2.QQuickStyle_SetStyle("Universe")
engine := qml.NewQQmlApplicationEngine(nil)
gcd.QMLEngine = engine
// prevent qt from initiating network connections (possible deanon attempts!)
factory := qml.NewQQmlNetworkAccessManagerFactory()
factory.ConnectCreate(func(parent *core.QObject) *network.QNetworkAccessManager {
nam := network.NewQNetworkAccessManager(parent)
nam.SetNetworkAccessible(network.QNetworkAccessManager__NotAccessible)
proxy := network.NewQNetworkProxy()
proxy.SetHostName("0.0.0.0")
nam.SetProxy(proxy)
//nam.ConnectCreateRequest(func(op network.QNetworkAccessManager__Operation, originalReq *network.QNetworkRequest, outgoingData *core.QIODevice) *network.QNetworkReply {
// log.Errorf("network access request detected - possible remote content insertion bug!!!")
// return nil
//})
return nam
})
engine.SetNetworkAccessManagerFactory(factory)
// variables we want to access from inside qml
if runtime.GOOS == "android" {
gcd.SetThemeScale(2.9)
} else {
gcd.SetThemeScale(1.0)
}
engine.RootContext().SetContextProperty("gcd", gcd)
var androidCwtchActivity = android.NewCwtchActivity(nil)
engine.RootContext().SetContextProperty("androidCwtchActivity", androidCwtchActivity)
/*if runtime.GOOS == "android" {
androidCwtchActivity.StartCwtchService()
}*/
//engine.addImportPath(QStringLiteral("qrc:/"));
//engine.load(QUrl(QStringLiteral("qrc:/source/qml/main.qml")));
engine.Load(qmlSource)
the.ACN = nil
go loadNetworkingAndFiles(gcd)
app.Exec()
}
if the.ACN != nil {
the.ACN.Close()
}
log.Infoln("Exiting main()")
}
func loadNetworkingAndFiles(gcd *gothings.GrandCentralDispatcher) {
if os.Getenv("CWTCH_FOLDER") != "" {
the.CwtchDir = os.Getenv("CWTCH_FOLDER")
} else if runtime.GOOS == "android" {
@ -166,12 +55,123 @@ func loadNetworkingAndFiles(gcd *gothings.GrandCentralDispatcher) {
} else {
usr, err := user.Current()
if err != nil {
fmt.Printf("\nerror: could not load current user: %v\n", err)
log.Errorf("\nerror: could not load current user: %v\n", err)
os.Exit(1)
}
the.CwtchDir = path.Join(usr.HomeDir, ".cwtch")
}
the.ACN = nil
if *flagService {
mainService()
} else {
mainUi(*flagLocal)
}
if the.ACN != nil {
the.ACN.Close()
}
}
func mainService() {
log.Infoln("I am the service")
loadACN()
log.Infoln("Starting a cwtch app...")
the.CwtchApp = libapp.NewApp(the.ACN, the.CwtchDir)
log.Infoln("Sleepinging???")
for true {
time.Sleep(5 * time.Second)
log.Infoln("Wake up, repeat")
}
}
func mainUi(flagLocal bool) {
log.Infoln("I am the application")
app := gui.NewQGuiApplication(len(os.Args), os.Args)
// our globals
gcd := gothings.NewGrandCentralDispatcher(nil)
gcd.SetOs(runtime.GOOS)
if buildVer != "" {
gcd.SetVersion(buildVer)
gcd.SetBuildDate(buildDate)
} else {
gcd.SetVersion("development")
gcd.SetBuildDate("now")
}
gcd.UIState = gothings.NewUIState(gcd)
the.AcknowledgementIDs = make(map[string][]*the.AckId)
gcd.OutgoingMessages = make(chan gobjects.Letter, 1000)
//TODO: put theme stuff somewhere better
gcd.SetThemeScale(1.0)
// this is to load local qml files quickly when developing
var qmlSource *core.QUrl
if flagLocal {
qmlSource = core.QUrl_FromLocalFile("./qml/main.qml")
} else {
qmlSource = core.NewQUrl3("qrc:/qml/main.qml", 0)
}
app.SetWindowIcon(gui.NewQIcon5(":/qml/images/cwtch-icon.png"))
// load english first so it becomes the default in case we don't have a .ts for the user's locale, or if it contains unfinished strings
translator := core.NewQTranslator(nil)
translator.Load("translation_en", ":/i18n/", "", "")
core.QCoreApplication_InstallTranslator(translator)
gcd.Translator = core.NewQTranslator(nil)
gcd.Translator.Load("translation_"+core.QLocale_System().Name(), ":/i18n/", "", "")
core.QCoreApplication_InstallTranslator(gcd.Translator)
core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)
quickcontrols2.QQuickStyle_SetStyle("Universe")
engine := qml.NewQQmlApplicationEngine(nil)
gcd.QMLEngine = engine
// prevent qt from initiating network connections (possible deanon attempts!)
factory := qml.NewQQmlNetworkAccessManagerFactory()
factory.ConnectCreate(func(parent *core.QObject) *network.QNetworkAccessManager {
nam := network.NewQNetworkAccessManager(parent)
nam.SetNetworkAccessible(network.QNetworkAccessManager__NotAccessible)
proxy := network.NewQNetworkProxy()
proxy.SetHostName("0.0.0.0")
nam.SetProxy(proxy)
//nam.ConnectCreateRequest(func(op network.QNetworkAccessManager__Operation, originalReq *network.QNetworkRequest, outgoingData *core.QIODevice) *network.QNetworkReply {
// log.Errorf("network access request detected - possible remote content insertion bug!!!")
// return nil
//})
return nam
})
engine.SetNetworkAccessManagerFactory(factory)
// variables we want to access from inside qml
if runtime.GOOS == "android" {
gcd.SetThemeScale(2.9)
} else {
gcd.SetThemeScale(1.0)
}
engine.RootContext().SetContextProperty("gcd", gcd)
var androidCwtchActivity = android.NewCwtchActivity(nil)
engine.RootContext().SetContextProperty("androidCwtchActivity", androidCwtchActivity)
//engine.addImportPath(QStringLiteral("qrc:/"));
//engine.load(QUrl(QStringLiteral("qrc:/source/qml/main.qml")));
engine.Load(qmlSource)
go loadNetworkingAndFiles(gcd)
app.Exec()
}
func loadACN() {
torpath := "tor"
if runtime.GOOS == "android" {
torpath = path.Join(androidBaseDir, "lib/libtor.so")
@ -197,8 +197,15 @@ func loadNetworkingAndFiles(gcd *gothings.GrandCentralDispatcher) {
log.Errorf("Could not start Tor: %v", err)
os.Exit(1)
}
}
func loadNetworkingAndFiles(gcd *gothings.GrandCentralDispatcher) {
if runtime.GOOS != "android" {
loadACN()
}
the.Peer = nil
os.MkdirAll(the.CwtchDir, 0700)
the.CwtchApp = libapp.NewApp(the.ACN, the.CwtchDir)