Skip to content

Commit

Permalink
Fix addons startup (portapps/phyrox-portable#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
crazy-max committed May 29, 2020
1 parent d95d685 commit 9763a13
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 75 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## 2020.05-14 (2020/05/29)

* Fix addons startup (portapps/phyrox-portable#3)
* Portapps 2.4.4

## 2020.05-13 (2020/05/22)

* Waterfox Classic 2020.05
Expand Down
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ module github.com/portapps/waterfox-portable
go 1.13

require (
github.com/Jeffail/gabs v1.4.0
github.com/kevinburke/go-bindata v3.21.0+incompatible
github.com/pierrec/lz4/v3 v3.3.2
github.com/pierrec/lz4/v3 v3.1.0
github.com/pkg/errors v0.9.1
github.com/portapps/portapps/v2 v2.4.4
)
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
code.cloudfoundry.org/bytefmt v0.0.0-20190710193110-1eb035ffe2b6/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc=
github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo=
github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw=
github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
Expand All @@ -19,6 +17,7 @@ github.com/ilya1st/rotatewriter v0.0.0-20171126183947-3df0c1a3ed6d h1:OGuVAVny/9
github.com/ilya1st/rotatewriter v0.0.0-20171126183947-3df0c1a3ed6d/go.mod h1:S1q6q+21PRGd0WRX+fHjQ+TOe3CgpSv7zgCWnZcbxCs=
github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca h1:ozPUX9TKQZVek4lZWYRsQo7uS8vJ+q4OOHvRhHiCLfU=
github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE=
github.com/kevinburke/go-bindata v3.19.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM=
github.com/kevinburke/go-bindata v3.21.0+incompatible h1:baK7hwFJDlAHrOqmE9U3u8tow1Uc5ihN9E/b7djcK2g=
github.com/kevinburke/go-bindata v3.21.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
Expand All @@ -33,6 +32,7 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pierrec/cmdflag v0.0.2/go.mod h1:a3zKGZ3cdQUfxjd0RGMLZr8xI3nvpJOB+m6o/1X5BmU=
github.com/pierrec/lz4/v3 v3.1.0/go.mod h1:280XNCGS8jAcG++AHdd6SeWnzyJ1w9oow2vbORyey8Q=
github.com/pierrec/lz4/v3 v3.3.2 h1:QTUOCbMNDbK4PYtkuHyOBd28C0UhPBw3T4OH4WpFDik=
github.com/pierrec/lz4/v3 v3.3.2/go.mod h1:280XNCGS8jAcG++AHdd6SeWnzyJ1w9oow2vbORyey8Q=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
Expand Down
112 changes: 41 additions & 71 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,11 @@ package main
import (
"fmt"
"io/ioutil"
"net/url"
"os"
"path"
"strconv"
"strings"

"github.com/Jeffail/gabs"
"github.com/pkg/errors"
"github.com/portapps/portapps/v2"
"github.com/portapps/portapps/v2/pkg/dialog"
"github.com/portapps/portapps/v2/pkg/log"
Expand Down Expand Up @@ -61,6 +58,36 @@ func main() {
profileFolder,
}

// Set env vars
crashreporterFolder := utl.CreateFolder(app.DataPath, "crashreporter")
pluginsFolder := utl.CreateFolder(app.DataPath, "plugins")
utl.OverrideEnv("MOZ_CRASHREPORTER", "0")
utl.OverrideEnv("MOZ_CRASHREPORTER_DATA_DIRECTORY", crashreporterFolder)
utl.OverrideEnv("MOZ_CRASHREPORTER_DISABLE", "1")
utl.OverrideEnv("MOZ_CRASHREPORTER_NO_REPORT", "1")
utl.OverrideEnv("MOZ_DATA_REPORTING", "0")
utl.OverrideEnv("MOZ_MAINTENANCE_SERVICE", "0")
utl.OverrideEnv("MOZ_PLUGIN_PATH", pluginsFolder)
utl.OverrideEnv("MOZ_UPDATER", "0")

// Create and check mutex
mu, err := mutex.New(app.ID)
defer mu.Release()
if err != nil {
if !cfg.MultipleInstances {
log.Error().Msg("You have to enable multiple instances in your configuration if you want to launch another instance")
if _, err = dialog.MsgBox(
fmt.Sprintf("%s portable", app.Name),
"Other instance detected. You have to enable multiple instances in your configuration if you want to launch another instance.",
dialog.MsgBoxBtnOk|dialog.MsgBoxIconError); err != nil {
log.Error().Err(err).Msg("Cannot create dialog box")
}
return
} else {
log.Warn().Msg("Another instance is already running")
}
}

// Multiple instances
if cfg.MultipleInstances {
log.Info().Msg("Multiple instances enabled")
Expand Down Expand Up @@ -115,36 +142,6 @@ lockPref("toolkit.crashreporter.enabled", false);
log.Error().Err(err).Msg("Cannot fix extensions path")
}

// Set env vars
crashreporterFolder := utl.CreateFolder(app.DataPath, "crashreporter")
pluginsFolder := utl.CreateFolder(app.DataPath, "plugins")
utl.OverrideEnv("MOZ_CRASHREPORTER", "0")
utl.OverrideEnv("MOZ_CRASHREPORTER_DATA_DIRECTORY", crashreporterFolder)
utl.OverrideEnv("MOZ_CRASHREPORTER_DISABLE", "1")
utl.OverrideEnv("MOZ_CRASHREPORTER_NO_REPORT", "1")
utl.OverrideEnv("MOZ_DATA_REPORTING", "0")
utl.OverrideEnv("MOZ_MAINTENANCE_SERVICE", "0")
utl.OverrideEnv("MOZ_PLUGIN_PATH", pluginsFolder)
utl.OverrideEnv("MOZ_UPDATER", "0")

// Create and check mutex
mu, err := mutex.New(app.ID)
defer mu.Release()
if err != nil {
if !cfg.MultipleInstances {
log.Error().Msg("You have to enable multiple instances in your configuration if you want to launch another instance")
if _, err = dialog.MsgBox(
fmt.Sprintf("%s portable", app.Name),
"Other instance detected. You have to enable multiple instances in your configuration if you want to launch another instance.",
dialog.MsgBoxBtnOk|dialog.MsgBoxIconError); err != nil {
log.Error().Err(err).Msg("Cannot create dialog box")
}
return
} else {
log.Warn().Msg("Another instance is already running")
}
}

// Copy default shortcut
shortcutPath := path.Join(os.Getenv("APPDATA"), "Microsoft", "Windows", "Start Menu", "Programs", "Waterfox Portable.lnk")
defaultShortcut, err := assets.Asset("Waterfox.lnk")
Expand Down Expand Up @@ -179,55 +176,28 @@ lockPref("toolkit.crashreporter.enabled", false);
}

func updateAddonStartup(profileFolder string) error {
asLz4 := path.Join(profileFolder, "addonStartup.json.lz4")
if !utl.Exists(asLz4) {
lz4File := path.Join(profileFolder, "addonStartup.json.lz4")
if !utl.Exists(lz4File) || app.Prev.RootPath == "" {
return nil
}

decAsLz4, err := mozLz4Decompress(asLz4)
lz4Raw, err := mozLz4Decompress(lz4File)
if err != nil {
return err
}

jsonAs, err := gabs.ParseJSON(decAsLz4)
if err != nil {
return err
}
prevPathLin := strings.Replace(utl.FormatUnixPath(app.Prev.RootPath), ` `, `%20`, -1)
currPathLin := strings.Replace(utl.FormatUnixPath(app.RootPath), ` `, `%20`, -1)
lz4Str := strings.Replace(string(lz4Raw), prevPathLin, currPathLin, -1)

if err := updateAddons("app-global", utl.PathJoin(profileFolder, "extensions"), jsonAs); err != nil {
return err
}
if err := updateAddons("app-profile", utl.PathJoin(profileFolder, "extensions"), jsonAs); err != nil {
return err
}
if err := updateAddons("app-system-defaults", utl.PathJoin(app.AppPath, "browser", "features"), jsonAs); err != nil {
return err
}
log.Debug().Msgf("Updated addonStartup.json: %s", jsonAs.String())
prevPathWin := strings.Replace(strings.Replace(utl.FormatWindowsPath(app.Prev.RootPath), `\`, `\\`, -1), ` `, `%20`, -1)
currPathWin := strings.Replace(strings.Replace(utl.FormatWindowsPath(app.RootPath), `\`, `\\`, -1), ` `, `%20`, -1)
lz4Str = strings.Replace(lz4Str, prevPathWin, currPathWin, -1)

encAsLz4, err := mozLz4Compress(jsonAs.Bytes())
lz4Enc, err := mozLz4Compress([]byte(lz4Str))
if err != nil {
return err
}

return ioutil.WriteFile(asLz4, encAsLz4, 0644)
}

func updateAddons(field string, basePath string, container *gabs.Container) error {
if _, ok := container.Search(field, "path").Data().(string); !ok {
return nil
}
if _, err := container.Set(basePath, field, "path"); err != nil {
return errors.Wrap(err, fmt.Sprintf("couldn't set %s.path", field))
}

addons, _ := container.S(field, "addons").ChildrenMap()
for key, addon := range addons {
_, err := addon.Set(fmt.Sprintf("jar:file:///%s/%s.xpi!/", utl.FormatUnixPath(basePath), url.PathEscape(key)), "rootURI")
if err != nil {
return errors.Wrap(err, fmt.Sprintf("couldn't set %s %s.rootURI", field, key))
}
}

return nil
return ioutil.WriteFile(lz4File, lz4Enc, 0644)
}

0 comments on commit 9763a13

Please sign in to comment.