muwire/gui/griffon-app/lifecycle/Ready.groovy

148 lines
5.2 KiB
Groovy

import com.muwire.gui.CopyPasteSupport
import com.muwire.gui.MWErrorDisplayer
import griffon.core.GriffonApplication
import griffon.core.env.Metadata
import groovy.swing.SwingBuilder
import groovy.util.logging.Log
import net.i2p.util.SystemVersion
import org.codehaus.griffon.runtime.core.AbstractLifecycleHandler
import com.muwire.core.Constants
import com.muwire.core.Core
import com.muwire.core.MuWireSettings
import com.muwire.core.UILoadedEvent
import com.muwire.core.files.FileSharedEvent
import com.muwire.core.util.DataUtil
import com.muwire.gui.wizard.WizardDefaults
import javax.swing.JButton
import javax.swing.JDialog
import javax.swing.JPanel
import javax.swing.SwingUtilities
import java.awt.BorderLayout
import java.nio.charset.StandardCharsets
import static com.muwire.gui.Translator.trans
import javax.annotation.Nonnull
import javax.inject.Inject
import javax.swing.JFileChooser
import javax.swing.JOptionPane
import static griffon.util.GriffonApplicationUtils.isMacOSX
import static groovy.swing.SwingBuilder.lookAndFeel
import java.beans.PropertyChangeEvent
import java.util.logging.Level
@Log
class Ready extends AbstractLifecycleHandler {
@Inject Metadata metadata
@Inject
Ready(@Nonnull GriffonApplication application) {
super(application)
}
@Override
void execute() {
log.info "starting core services"
String beta = metadata["application.beta"]
if (beta != null && beta != "0")
System.setProperty("beta", beta)
def home = new File(application.getContext().getAsString("muwire-home"))
def props = new Properties()
def propsFile = new File(home, "MuWire.properties")
if (propsFile.exists() && propsFile.length() > 0) {
log.info("loading existing props file")
propsFile.withReader("UTF-8", {
props.load(it)
})
props = new MuWireSettings(props)
if (System.getProperties().containsKey("disableUpdates"))
props.disableUpdates = Boolean.valueOf(System.getProperty("disableUpdates"))
} else {
log.info("creating new properties")
props = new MuWireSettings()
boolean embeddedRouterAvailable = Boolean.parseBoolean(System.getProperties().getProperty("embeddedRouter"))
def defaults
if (System.getProperties().containsKey("wizard.defaults")) {
File defaultsFile = new File(System.getProperty("wizard.defaults"))
Properties defaultsProps = new Properties()
defaultsFile.withInputStream { defaultsProps.load(it) }
defaults = new WizardDefaults(defaultsProps)
} else
defaults = new WizardDefaults()
def parent = application.windowManager.findWindow("event-list")
Properties i2pProps = new Properties()
def params = [:]
params['parent'] = parent
params['defaults'] = defaults
params['embeddedRouterAvailable'] = embeddedRouterAvailable
params['muSettings'] = props
params['i2pProps'] = i2pProps
def finished = [:]
params['finished'] = finished
application.mvcGroupManager.createMVCGroup("wizard", params)
if (!finished['applied']) {
JOptionPane.showMessageDialog(parent, trans("MUWIRE_WILL_EXIT"))
System.exit(0)
}
File i2pPropsFile = new File(home, "i2p.properties")
i2pPropsFile.withPrintWriter { i2pProps.store(it, "") }
props.updateType = System.getProperty("updateType","jar")
props.disableUpdates = Boolean.parseBoolean(System.getProperty("disableUpdates", "false"))
propsFile.withPrintWriter("UTF-8", {
props.write(it)
})
}
application.context.put("muwire-settings", props)
Core core
try {
core = new Core(props, home, metadata["application.coreVersion"])
Runtime.getRuntime().addShutdownHook({
core.shutdown()
})
application.context.put("core",core)
application.getPropertyChangeListeners("core").each {
it.propertyChange(new PropertyChangeEvent(this, "core", null, core))
}
core.eventBus.publish(new UILoadedEvent())
def initer = {
try {
core.startServices()
} catch (Throwable bad) {
log.log(Level.SEVERE, "couldn't start core", bad)
SwingUtilities.invokeLater {
MWErrorDisplayer.fatalInit(application, bad)
}
}
} as Runnable
initer = new Thread(initer, "core initializer")
initer.setDaemon(true)
initer.start()
} catch (Throwable bad) {
log.log(Level.SEVERE,"couldn't initialize core",bad)
MWErrorDisplayer.fatalInit(application, bad)
}
}
}