├── .github
├── FUNDING.yml
├── renovate.json
└── workflows
│ ├── codetests.yml
│ └── release.yml
├── .gitignore
├── .golangci.yml
├── LICENSE
├── Makefile
├── README.md
├── build
├── README.md
├── appicon.png
├── darwin
│ ├── Info.dev.plist
│ ├── Info.plist
│ ├── makedmg.sh
│ ├── notarize.json
│ └── sign.json
├── icon.icns
└── windows
│ ├── icon.ico
│ ├── info.json
│ ├── installer
│ ├── project.nsi
│ ├── resources
│ │ ├── eula.txt
│ │ ├── side.bmp
│ │ └── side.psdb
│ ├── tmp
│ │ └── MicrosoftEdgeWebview2Setup.exe
│ └── wails_tools.nsh
│ ├── signexe.sh
│ └── wails.exe.manifest
├── frontend
├── index.html
├── package-lock.json
├── package.json
├── package.json.md5
├── src
│ ├── About.svelte
│ ├── Landing.svelte
│ ├── Links.svelte
│ ├── Navbar.svelte
│ ├── Settings
│ │ ├── Advanced.svelte
│ │ ├── General.svelte
│ │ ├── Index.svelte
│ │ └── Logs.svelte
│ ├── Starr
│ │ ├── Actions
│ │ │ ├── AppProfiles.svelte
│ │ │ ├── BlockLists.svelte
│ │ │ ├── CustomFilters.svelte
│ │ │ ├── DownloadClients.svelte
│ │ │ ├── Exclusions.svelte
│ │ │ ├── ImportLists.svelte
│ │ │ ├── Index.svelte
│ │ │ ├── Indexers.svelte
│ │ │ ├── QualityProfiles.svelte
│ │ │ ├── action.svelte
│ │ │ ├── blockListsRow.svelte
│ │ │ ├── fragments
│ │ │ │ ├── configModal.svelte
│ │ │ │ ├── dropdown.svelte
│ │ │ │ ├── fieldInput.svelte
│ │ │ │ ├── footer.svelte
│ │ │ │ ├── modalInput.svelte
│ │ │ │ ├── paginate.svelte
│ │ │ │ ├── selectAllHeader.svelte
│ │ │ │ ├── selectAllRow.svelte
│ │ │ │ ├── tableInput.svelte
│ │ │ │ └── tabs.svelte
│ │ │ └── methods.ts
│ │ ├── Config
│ │ │ ├── Index.svelte
│ │ │ └── Instance.svelte
│ │ ├── Database
│ │ │ ├── Index.svelte
│ │ │ ├── Inspector.svelte
│ │ │ └── Migrator
│ │ │ │ ├── Form.svelte
│ │ │ │ └── Index.svelte
│ │ ├── Index.svelte
│ │ └── loading.svelte
│ ├── Toolbox.svelte
│ ├── assets
│ │ ├── bootstrap-icons.css
│ │ ├── bootstrap.darkly.css
│ │ ├── bootstrap.flatly.css
│ │ ├── fonts
│ │ │ ├── OFL.txt
│ │ │ ├── S6u8w4BMUTPHjxswWw.ttf
│ │ │ ├── S6u9w4BMUTPHh6UVew8.ttf
│ │ │ ├── S6uyw4BMUTPHvxk.ttf
│ │ │ ├── bootstrap-icons.woff
│ │ │ ├── bootstrap-icons.woff2
│ │ │ └── nunito-v16-latin-regular.woff2
│ │ └── images
│ │ │ ├── Lidarr.png
│ │ │ ├── Prowlarr.png
│ │ │ ├── Radarr.png
│ │ │ ├── Readarr.png
│ │ │ ├── Sonarr.png
│ │ │ ├── Toolbox.png
│ │ │ ├── Whisparr.png
│ │ │ ├── dark-background.png
│ │ │ ├── golift.png
│ │ │ ├── logo.png
│ │ │ ├── notifiarr.png
│ │ │ ├── servarr.png
│ │ │ ├── settings.png
│ │ │ ├── vintage-background.png
│ │ │ └── windows-conf-file.png
│ ├── index.ts
│ ├── libs
│ │ ├── Applogo.svelte
│ │ ├── BackgroundLogo.svelte
│ │ ├── Input.svelte
│ │ ├── Link.svelte
│ │ ├── Translate.svelte
│ │ ├── config.ts
│ │ ├── funcs.ts
│ │ ├── info.ts
│ │ └── locale
│ │ │ ├── da.json
│ │ │ ├── en.json
│ │ │ ├── es.json
│ │ │ ├── fr.json
│ │ │ ├── index.ts
│ │ │ ├── it.json
│ │ │ ├── nl.json
│ │ │ ├── pt.json
│ │ │ └── sv.json
│ ├── style.css
│ └── vite-env.d.ts
├── svelte.config.js
├── tsconfig.json
├── vite.config.ts
└── wailsjs
│ ├── go
│ ├── app
│ │ ├── App.d.ts
│ │ └── App.js
│ ├── models.ts
│ └── starrs
│ │ ├── Starrs.d.ts
│ │ └── Starrs.js
│ └── runtime
│ ├── package.json
│ ├── runtime.d.ts
│ └── runtime.js
├── go.mod
├── go.sum
├── main.go
├── pkg
├── app
│ ├── app.go
│ ├── instances.go
│ ├── setup.go
│ └── updates.go
├── config
│ ├── config.go
│ └── settings.go
├── local
│ ├── local.go
│ ├── local_darwin.go
│ ├── local_other.go
│ ├── local_windows.go
│ └── shortcut_windows.go
├── logs
│ ├── filemode.go
│ ├── interface.go
│ ├── logs.go
│ ├── logs_linux.go
│ ├── logs_others.go
│ └── logs_windows.go
├── mnd
│ ├── constants.go
│ ├── functions.go
│ └── interface.go
├── starrs
│ ├── blocklist.go
│ ├── downloaders.go
│ ├── exclusions.go
│ ├── importable.go
│ ├── importlist.go
│ ├── indexers.go
│ ├── migrator.go
│ ├── profiles.go
│ ├── prowlarr.go
│ ├── rootfolders.go
│ ├── sqlite3.go
│ ├── starrs.go
│ ├── tags.go
│ └── test.go
├── translations
│ ├── .gitignore
│ ├── build.sh
│ ├── locale.go
│ └── locales
│ │ ├── da
│ │ └── messages.gotext.json
│ │ ├── en
│ │ └── messages.gotext.json
│ │ ├── es
│ │ └── messages.gotext.json
│ │ ├── fr
│ │ └── messages.gotext.json
│ │ ├── it
│ │ └── messages.gotext.json
│ │ ├── nl
│ │ └── messages.gotext.json
│ │ ├── pt
│ │ └── messages.gotext.json
│ │ └── sv
│ │ └── messages.gotext.json
└── update
│ ├── check.go
│ ├── progress.go
│ ├── unstable.go
│ └── update.go
└── wails.json
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [Notifiarr]
2 |
--------------------------------------------------------------------------------
/.github/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "config:base"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/.github/workflows/codetests.yml:
--------------------------------------------------------------------------------
1 | name: test-and-lint
2 | on: push
3 | permissions:
4 | contents: read
5 | jobs:
6 | gotest:
7 | # description: "Runs `go test` against 3 operating systems."
8 | strategy:
9 | matrix:
10 | os: [ubuntu, macos, windows]
11 | runs-on: ${{ matrix.os }}-latest
12 | steps:
13 | - uses: actions/checkout@v4
14 | - uses: actions/setup-go@v5
15 | with:
16 | go-version-file: 'go.mod'
17 | - name: go-test
18 | run: go test ./pkg/...
19 |
20 | codespell:
21 | runs-on: ubuntu-latest
22 | steps:
23 | - uses: actions/checkout@v4
24 | - uses: codespell-project/actions-codespell@v2
25 | with:
26 | check_hidden: true
27 | skip: .git,node_modules,dist,catalog.go,*.json,models.ts
28 |
29 | golangci:
30 | strategy:
31 | matrix:
32 | os: [darwin, linux, windows]
33 | name: golangci-lint
34 | runs-on: ubuntu-latest
35 | env:
36 | GOOS: ${{ matrix.os }}
37 | steps:
38 | - uses: actions/checkout@v4
39 | - uses: actions/setup-go@v5
40 | with:
41 | go-version-file: 'go.mod'
42 | - name: golangci-lint
43 | uses: golangci/golangci-lint-action@v6
44 | with:
45 | version: 'v1.57'
46 | args: --verbose ./pkg/...
47 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | build/bin
2 | node_modules
3 | frontend/dist
4 | /toolbarr*
5 | .DS*
6 | /Toolbarr*
7 | /*.new
8 | ?
9 | *.signing.*
--------------------------------------------------------------------------------
/.golangci.yml:
--------------------------------------------------------------------------------
1 | linters:
2 | enable-all: true
3 | disable:
4 | # deprecated
5 | - maligned
6 | - scopelint
7 | - interfacer
8 | - golint
9 | - exhaustivestruct
10 | - nosnakecase
11 | - structcheck
12 | - deadcode
13 | - varcheck
14 | - ifshort
15 | # unused
16 | - dupl
17 | - wrapcheck
18 | - goerr113
19 | - exhaustruct
20 | - exhaustive
21 | - containedctx
22 | - nlreturn
23 | - contextcheck
24 | - depguard
25 | - perfsprint
26 | run:
27 | timeout: 5m
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022-2024 Notifiarr
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | # The Makefile is not used for GitHub Actions or official builds. Only used for development and testing.
2 | VERSION=$(shell git describe --abbrev=0 --tags $(shell git rev-list --tags --max-count=1) | tr -d v)
3 | COMMIT="$(shell git rev-parse --short HEAD || echo 0)"
4 | BRANCH="$(shell git rev-parse --abbrev-ref HEAD || echo unknown)"
5 | ifeq ($(VERSION),)
6 | VERSION:=0.0.0
7 | endif
8 | ifeq ($(REVISION),)
9 | REVISION=$(shell git rev-list --count --all || echo 0)
10 | endif
11 |
12 | VERSION_LDFLAGS:= -X \"golift.io/version.Branch=$(BRANCH) ($(COMMIT))\" \
13 | -X \"golift.io/version.BuildDate=$(shell date -u +%Y-%m-%dT%H:%M:00Z)\" \
14 | -X \"golift.io/version.BuildUser=$(shell whoami || echo "unknown")\" \
15 | -X \"golift.io/version.Revision=$(REVISION)\" \
16 | -X \"golift.io/version.Version=$(VERSION)\"
17 |
18 | .PHONY: all wailsjson build windows dev lint test
19 |
20 | all:
21 | @echo "Use 'make build', 'make dev' or 'make windows'"
22 |
23 | wailsjson:
24 | jq ".info.productVersion = \"$(VERSION)\"" wails.json > wails.json.new
25 | mv wails.json.new wails.json
26 | packagejson:
27 | jq ".version = \"$(VERSION)\"" frontend/package.json > frontend/package.json.new
28 | mv frontend/package.json.new frontend/package.json
29 |
30 | build: wailsjson packagejson
31 | wails build -debug -ldflags "$(VERSION_LDFLAGS)"
32 |
33 | windows: wailsjson packagejson
34 | wails build -debug -platform windows/amd64 -nsis -ldflags "$(VERSION_LDFLAGS)"
35 |
36 | dev: wailsjson packagejson
37 | wails dev -nosyncgomod -race -ldflags "$(VERSION_LDFLAGS)"
38 |
39 | # npm?? svelte? hm..
40 | lint:
41 | codespell -S .git,node_modules,dist,catalog.go,*.json,models.ts
42 | GOOS=darwin golangci-lint run
43 | GOOS=linux golangci-lint run
44 | GOOS=windows golangci-lint run
45 |
46 | test: lint
47 | go test -race ./...
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | #
3 |
4 | Provides a suite of utilities to fix problems with Starr applications.
5 | Toolbarr allows you to perform various actions against your Starr apps and their SQLite3 databases.
6 |
7 | # Features
8 |
9 | The first release provides 1 major feature:
10 |
11 | - **Updating Root Folders**: Use this when you need to
12 | [migrate your starr application](https://github.com/Notifiarr/toolbarr/wiki/Change-Root-Folder)
13 | to another host, and the file system paths to your media are changing.
14 |
15 | And several other features:
16 |
17 | - Mass Quality Profiles management.
18 | - Mass Indexer management.
19 | - Mass Import List management.
20 | - Mass Import List Exclsions management.
21 | - Mass Download Client management.
22 | - Mass Block List management.
23 |
24 | # How?
25 |
26 | Run this application on _your_ computer (mac/windows).
27 | Configure it with your starr app details (url/api key), and an optional sqlite3 database file.
28 |
29 | # Installation
30 |
31 | There's a DMG for mac users and an EXE installer for Windows users on the
32 | [Releases](https://github.com/Notifiarr/toolbarr/releases) page.
33 | Download the latest file for your OS and install it. Once installed,
34 | you can use the `About` menu to check for updates.
35 |
36 | **While things are under development, you can grab a copy of the Windows or macOS installer
37 | @ [https://unstable.golift.io/toolbarr](https://unstable.golift.io/toolbarr)**
38 |
39 | Linux users may not have great luck with the binaries provided.
40 | They only work on a specific version of `glibc`.
41 | Prepare to compile it yourself, but you can try installing it from the repo first:
42 |
43 | ```shell
44 | curl -s https://golift.io/repo.sh | sudo bash -s - toolbarr
45 | ```
46 |
47 | # Caution
48 |
49 | This app may be destructive. Make backups. Do not connect it to a live SQLite database file; use a backup copy!
50 |
51 | The `Actions` tab is safe, and well tested with the four primary Starr apps.
52 | Prowlarr has limited support. Whisparr may work, but is not tested.
53 |
54 | # I want more..
55 |
56 | We do too. What other things do you want to do Sonarr or Radarr that you just can't do easily some other way?
57 | **This is a work in progress and your input will make it work better!**
58 |
59 | - [Let us know how we can make your life easier](https://github.com/Notifiarr/toolbarr/issues/new).
60 |
--------------------------------------------------------------------------------
/build/README.md:
--------------------------------------------------------------------------------
1 | # Build Directory
2 |
3 | The build directory is used to house all the build files and assets for this application.
4 |
5 | The structure is:
6 |
7 | * bin - Output directory (not committed)
8 | * darwin - macOS specific build files
9 | * windows - Windows specific build files
10 | * appicon.png - Used for menu dialogs and whatnot.
11 |
12 | ## Mac
13 |
14 | - `icon.icns` - App bundle icon file.
15 |
16 | The `darwin` directory holds files specific to Mac builds.
17 | These may be customised and used as part of the build.
18 | To return these files to the default state, simply delete them and build with `wails build`.
19 |
20 | The directory contains the following files:
21 |
22 | - `Info.plist` - the main plist file used for Mac builds. It is used when building using `wails build`.
23 | - `Info.dev.plist` - same as the main plist file but used when building using `wails dev`.
24 |
25 | ## Windows
26 |
27 | The `windows` directory contains the manifest and rc files used when building with `wails build`.
28 | These may be customised for your application. To return these files to the default state, simply delete them and
29 | build with `wails build`.
30 |
31 | - `icon.ico` - The icon used for the application. This is used when building using `wails build`.
32 | - `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`.
33 | - `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer,
34 | as well as the application itself (right click the exe -> properties -> details)
35 | - `wails.exe.manifest` - The main application manifest file.
--------------------------------------------------------------------------------
/build/appicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Notifiarr/toolbarr/63ea7f7c28a4cf6a1d9b039f14f9ce4eb70226cf/build/appicon.png
--------------------------------------------------------------------------------
/build/darwin/Info.dev.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundlePackageType
5 | APPL
6 | CFBundleName
7 | {{.Info.ProductName}}
8 | CFBundleExecutable
9 | {{.Name}}
10 | CFBundleIdentifier
11 | com.notifiarr.toolbarr
12 | CFBundleVersion
13 | {{.Info.ProductVersion}}
14 | CFBundleGetInfoString
15 | {{.Info.Comments}}
16 | CFBundleShortVersionString
17 | {{.Info.ProductVersion}}
18 | CFBundleIconFile
19 | iconfile
20 | LSMinimumSystemVersion
21 | 10.13.0
22 | NSHighResolutionCapable
23 | true
24 | NSHumanReadableCopyright
25 | {{.Info.Copyright}}
26 | NSAppTransportSecurity
27 |
28 | NSAllowsArbitraryLoads
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/build/darwin/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundlePackageType
5 | APPL
6 | CFBundleName
7 | {{.Info.ProductName}}
8 | CFBundleExecutable
9 | {{.Name}}
10 | CFBundleIdentifier
11 | com.notifiarr.toolbarr
12 | CFBundleVersion
13 | {{.Info.ProductVersion}}
14 | CFBundleGetInfoString
15 | {{.Info.Comments}}
16 | CFBundleShortVersionString
17 | {{.Info.ProductVersion}}
18 | CFBundleIconFile
19 | iconfile
20 | LSMinimumSystemVersion
21 | 10.13.0
22 | NSHighResolutionCapable
23 | true
24 | NSHumanReadableCopyright
25 | {{.Info.Copyright}}
26 | NSAppTransportSecurity
27 |
28 | NSAllowsArbitraryLoads
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/build/darwin/makedmg.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # This file builds a standard DMG installer for macOS.
3 | # This only works on macOS.
4 | ###########################################
5 |
6 | set -e -o pipefail
7 |
8 | # If we are running in GH Actions, make a new keychain and import the certificate.
9 | if [ -n "$APPLE_SIGNING_KEY" ]; then
10 | KEYCHAIN="ios-build.keychain"
11 |
12 | echo "==> Creating new keychain: $KEYCHAIN"
13 | security create-keychain -p secret $KEYCHAIN
14 |
15 | echo "==> Importing certificate into ${KEYCHAIN}"
16 | echo "${APPLE_SIGNING_KEY}" | base64 -d | \
17 | security import /dev/stdin -P '' -f pkcs12 -k $KEYCHAIN -T /usr/bin/codesign
18 |
19 | echo "==> Unlocking keychain ${KEYCHAIN}"
20 | security unlock-keychain -p secret $KEYCHAIN
21 |
22 | echo "==> Increase keychain unlock timeout to 1 hour."
23 | security set-keychain-settings -lut 3600 $KEYCHAIN
24 |
25 | security set-key-partition-list -S apple-tool:,apple: -s -k secret $KEYCHAIN
26 |
27 | echo "==> Add keychain to keychain-list"
28 | security list-keychains -s $KEYCHAIN
29 | fi
30 |
31 | echo "==> Signing App."
32 | gon build/darwin/sign.json
33 |
34 | # Creating non-notarized DMG.
35 | mkdir -p build/bin
36 | hdiutil create build/bin/Toolbarr.dmg -srcfolder build/bin/Toolbarr.app -ov
37 |
38 | echo "==> Notarizing DMG."
39 | gon build/darwin/notarize.json
40 |
41 | echo "==> Finished."
42 |
--------------------------------------------------------------------------------
/build/darwin/notarize.json:
--------------------------------------------------------------------------------
1 | {
2 | "notarize": [{
3 | "path": "build/bin/Toolbarr.dmg",
4 | "bundle_id": "com.notifiarr.toolbarr",
5 | "staple": true
6 | }]
7 | }
8 |
--------------------------------------------------------------------------------
/build/darwin/sign.json:
--------------------------------------------------------------------------------
1 | {
2 | "source": ["build/bin/Toolbarr.app"],
3 | "bundle_id": "com.notifiarr.toolbarr",
4 | "sign": { "application_identity" : "1AE9653F18114B23927AF7FA6624EF74F95A4544" }
5 | }
6 |
--------------------------------------------------------------------------------
/build/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Notifiarr/toolbarr/63ea7f7c28a4cf6a1d9b039f14f9ce4eb70226cf/build/icon.icns
--------------------------------------------------------------------------------
/build/windows/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Notifiarr/toolbarr/63ea7f7c28a4cf6a1d9b039f14f9ce4eb70226cf/build/windows/icon.ico
--------------------------------------------------------------------------------
/build/windows/info.json:
--------------------------------------------------------------------------------
1 | {
2 | "fixed": {
3 | "file_version": "{{.Info.ProductVersion}}"
4 | },
5 | "info": {
6 | "0000": {
7 | "ProductVersion": "{{.Info.ProductVersion}}",
8 | "CompanyName": "{{.Info.CompanyName}}",
9 | "FileDescription": "{{.Info.ProductName}}",
10 | "LegalCopyright": "{{.Info.Copyright}}",
11 | "ProductName": "{{.Info.ProductName}}",
12 | "Comments": "{{.Info.Comments}}"
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/build/windows/installer/project.nsi:
--------------------------------------------------------------------------------
1 | Unicode true
2 |
3 | ####
4 | ## Please note: Template replacements don't work in this file. They are provided with default defines like
5 | ## mentioned underneath.
6 | ## If the keyword is not defined, "wails_tools.nsh" will populate them with the values from ProjectInfo.
7 | ## If they are defined here, "wails_tools.nsh" will not touch them. This allows to use this project.nsi manually
8 | ## from outside of Wails for debugging and development of the installer.
9 | ##
10 | ## For development first make a wails nsis build to populate the "wails_tools.nsh":
11 | ## > wails build --target windows/amd64 --nsis
12 | ## Then you can call makensis on this file with specifying the path to your binary:
13 | ## For a AMD64 only installer:
14 | ## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app.exe
15 | ## For a ARM64 only installer:
16 | ## > makensis -DARG_WAILS_ARM64_BINARY=..\..\bin\app.exe
17 | ## For a installer with both architectures:
18 | ## > makensis -DARG_WAILS_AMD64_BINARY=..\..\bin\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\..\bin\app-arm64.exe
19 | ####
20 | ## The following information is taken from the ProjectInfo file, but they can be overwritten here.
21 | ####
22 | ## !define INFO_PROJECTNAME "MyProject" # Default "{{.Name}}"
23 | ## !define INFO_COMPANYNAME "MyCompany" # Default "{{.Info.CompanyName}}"
24 | ## !define INFO_PRODUCTNAME "MyProduct" # Default "{{.Info.ProductName}}"
25 | ## !define INFO_PRODUCTVERSION "1.0.0" # Default "{{.Info.ProductVersion}}"
26 | ## !define INFO_COPYRIGHT "Copyright" # Default "{{.Info.Copyright}}"
27 | ###
28 | ## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe"
29 | ## !define UNINST_KEY_NAME "UninstKeyInRegistry" # Default "${INFO_COMPANYNAME}${INFO_PRODUCTNAME}"
30 | ####
31 | ## !define REQUEST_EXECUTION_LEVEL "admin" # Default "admin" see also https://nsis.sourceforge.io/Docs/Chapter4.html
32 | ####
33 | ## Include the wails tools
34 | ####
35 | !include "wails_tools.nsh"
36 |
37 | # The version information for this two must consist of 4 parts
38 | VIProductVersion "${INFO_PRODUCTVERSION}.0"
39 | VIFileVersion "${INFO_PRODUCTVERSION}.0"
40 |
41 | VIAddVersionKey "CompanyName" "${INFO_COMPANYNAME}"
42 | VIAddVersionKey "FileDescription" "${INFO_PRODUCTNAME} Installer"
43 | VIAddVersionKey "ProductVersion" "${INFO_PRODUCTVERSION}"
44 | VIAddVersionKey "FileVersion" "${INFO_PRODUCTVERSION}"
45 | VIAddVersionKey "LegalCopyright" "${INFO_COPYRIGHT}"
46 | VIAddVersionKey "ProductName" "${INFO_PRODUCTNAME}"
47 |
48 | !include "MUI.nsh"
49 |
50 | !define MUI_ICON "..\icon.ico"
51 | !define MUI_UNICON "..\icon.ico"
52 | !define MUI_WELCOMEFINISHPAGE_BITMAP "resources\side.bmp" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314
53 | !define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps
54 | !define MUI_ABORTWARNING # This will warn the user if they exit from the installer.
55 | !define MUI_FINISHPAGE_RUN "$INSTDIR\\${PRODUCT_EXECUTABLE}"
56 | !define MUI_FINISHPAGE_SHOWREADME "" # This reuses the 'show readme' checkbox to make a shortcut.
57 | !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
58 | !define MUI_FINISHPAGE_SHOWREADME_TEXT "Create Desktop Shortcut"
59 | !define MUI_FINISHPAGE_SHOWREADME_FUNCTION createDesktopShortcut
60 | !define REGKEY "SOFTWARE\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}"
61 | !define INSTALL_LOCATION "$PROGRAMFILES64\${INFO_COMPANYNAME}\${INFO_PRODUCTNAME}"
62 |
63 | !insertmacro MUI_PAGE_WELCOME # Welcome to the installer page.
64 | !insertmacro MUI_PAGE_LICENSE "resources\eula.txt" # Adds a EULA page to the installer
65 | !insertmacro MUI_PAGE_DIRECTORY # In which folder install page.
66 | !insertmacro MUI_PAGE_INSTFILES # Installing page.
67 | !insertmacro MUI_PAGE_FINISH # Finished installation page.
68 | !insertmacro MUI_UNPAGE_INSTFILES # Uinstalling page
69 | !insertmacro MUI_LANGUAGE "English" # Set the Language of the installer
70 |
71 | ## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1
72 | !uninstfinalize '../signexe.sh "%1"'
73 | !finalize '../signexe.sh "%1"'
74 |
75 | Name "${INFO_PRODUCTNAME}"
76 | OutFile "..\..\bin\${INFO_PROJECTNAME}.${ARCH}.installer.exe" # Name of the installer's file.
77 | InstallDir "${INSTDIR}" # Default installing folder ($PROGRAMFILES is Program Files folder).
78 | ShowInstDetails show # This will always show the installation details.
79 | InstallDirRegKey HKLM "$REGKEY" InstallLocation
80 |
81 | Function createDesktopShortcut
82 | CreateShortCut "$DESKTOP\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}"
83 | FunctionEnd
84 |
85 | Function .onInit
86 | !insertmacro wails.checkArchitecture
87 | SetRegView 64
88 | ReadRegStr $INSTDIR HKLM "${REGKEY}" InstallLocation
89 | StrCmp $INSTDIR "" 0 +2
90 | StrCpy $INSTDIR "${INSTALL_LOCATION}"
91 | FunctionEnd
92 |
93 | Section
94 | !insertmacro wails.webview2runtime
95 |
96 | SetOutPath $INSTDIR
97 |
98 | !insertmacro wails.files
99 |
100 | CreateShortcut "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk" "$INSTDIR\${PRODUCT_EXECUTABLE}"
101 | SetRegView 64
102 | WriteRegStr HKLM "${REGKEY}" InstallLocation "$INSTDIR"
103 |
104 | !insertmacro wails.writeUninstaller
105 | SectionEnd
106 |
107 | Section "uninstall"
108 | RMDir /r "$AppData\${PRODUCT_EXECUTABLE}" # Remove the WebView2 DataPath
109 | SetRegView 64
110 | ReadRegStr $INSTDIR HKLM "${REGKEY}" InstallLocation
111 | StrCmp $INSTDIR "" +2 0
112 | RMDir /r $INSTDIR
113 | Delete "$SMPROGRAMS\${INFO_PRODUCTNAME}.lnk"
114 | Delete "$DESKTOP\${INFO_PRODUCTNAME}.lnk"
115 | SetRegView 64
116 | DeleteRegKey HKLM "${REGKEY}"
117 |
118 | !insertmacro wails.deleteUninstaller
119 | SectionEnd
120 |
--------------------------------------------------------------------------------
/build/windows/installer/resources/eula.txt:
--------------------------------------------------------------------------------
1 | NOTIFIARR END USER LICENSE AGREEMENT
2 |
3 | Your use of this software constitutes unbinding agreement with this license.
4 |
5 | You shall forever acknowledge the creators of this application as supreme overlords.
6 |
7 | - Team Notifiarr
--------------------------------------------------------------------------------
/build/windows/installer/resources/side.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Notifiarr/toolbarr/63ea7f7c28a4cf6a1d9b039f14f9ce4eb70226cf/build/windows/installer/resources/side.bmp
--------------------------------------------------------------------------------
/build/windows/installer/resources/side.psdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Notifiarr/toolbarr/63ea7f7c28a4cf6a1d9b039f14f9ce4eb70226cf/build/windows/installer/resources/side.psdb
--------------------------------------------------------------------------------
/build/windows/installer/tmp/MicrosoftEdgeWebview2Setup.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Notifiarr/toolbarr/63ea7f7c28a4cf6a1d9b039f14f9ce4eb70226cf/build/windows/installer/tmp/MicrosoftEdgeWebview2Setup.exe
--------------------------------------------------------------------------------
/build/windows/signexe.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -e -o pipefail
4 |
5 | # https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/
6 | # https://stackoverflow.com/a/29073957/1142
7 | function sign() {
8 | if [ -z "${EXE_SIGNING_KEY}" ] || [ -z "${EXE_SIGNING_KEY_PASSWORD}" ]; then
9 | echo "Skipped ${FILE} .." >&2
10 | exit 0
11 | fi
12 |
13 | rm -f "${FILE}.signed"
14 | echo "${EXE_SIGNING_KEY}" | base64 -d | \
15 | osslsigncode sign -pkcs12 /dev/stdin \
16 | -pass "${EXE_SIGNING_KEY_PASSWORD}" \
17 | -n "Toolbarr" \
18 | -i "https://www.golift.io" \
19 | -t "http://timestamp.comodoca.com/authenticode" \
20 | -in "${FILE}" -out "${FILE}.signed" \
21 | && cp "${FILE}.signed" "${FILE}" >> /tmp/pwd >&2
22 | echo "Signed ${FILE} .." >&2
23 | }
24 |
25 | [ -z "$1" ] || FILE="$1" sign
26 |
--------------------------------------------------------------------------------
/build/windows/wails.exe.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | true/pm
12 | permonitorv2,permonitor
13 |
14 |
15 |
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "toolbarr",
3 | "private": true,
4 | "version": "0.1.2",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "devDependencies": {
12 | "@fortawesome/free-brands-svg-icons": "6.5.2",
13 | "@fortawesome/free-regular-svg-icons": "6.5.2",
14 | "@fortawesome/free-solid-svg-icons": "6.5.2",
15 | "@sveltejs/vite-plugin-svelte": "3.1.1",
16 | "@tsconfig/svelte": "5.0.4",
17 | "svelte": "4.2.18",
18 | "svelte-check": "3.8.1",
19 | "svelte-fa": "4.0.2",
20 | "svelte-preprocess": "6.0.1",
21 | "svelte-toasts": "1.1.2",
22 | "@sveltestrap/sveltestrap": "6.2.7",
23 | "tslib": "2.6.3",
24 | "typescript": "5.4.5",
25 | "vite": "5.3.1"
26 | },
27 | "dependencies": {
28 | "svelte-i18n": "4.0.0"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/package.json.md5:
--------------------------------------------------------------------------------
1 | 4c00cceaefc3be1a241060fc6d002cb2
--------------------------------------------------------------------------------
/frontend/src/Landing.svelte:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 | {$_("theStarroftheshow")}
13 |
14 |
15 |
16 |
22 |
--------------------------------------------------------------------------------
/frontend/src/Links.svelte:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 | {$_("words.Resources")}
14 | {$_("incompletePage")}
15 |
16 | Starr apps, unpackerr, notifiarr, autobrr, others?
17 | We can make this load dynamically from toys-arr.us.
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/frontend/src/Navbar.svelte:
--------------------------------------------------------------------------------
1 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | {#if Object.keys($conf).length > 0 && $isReady == true}
71 |
72 | (pageName =$app.Title ? $app.Title : "Unknown",e.preventDefault())}>
73 |
74 | {$_("words."+pageName) == "words."+pageName ? pageName : $_("words."+pageName)}
75 |
76 | {#if $conf.Hide.Dark != true}
77 |
78 | {/if}
79 | (isOpen = !isOpen)} />
80 |
81 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | {#if pageName == "About"}
119 |
120 | {/if}
121 |
122 |
123 |
124 | {#if pageName == "Settings"}
125 |
126 | {/if}
127 | {#each AllStarrs as starrApp}
128 |
129 | {#key $conf.Hide[starrApp]}
130 |
131 | {/key}
132 | {/each}
133 |
134 | {/if}
135 |
136 |
142 |
--------------------------------------------------------------------------------
/frontend/src/Settings/Advanced.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 | {$_("advanced_application_settings")}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | {$_("configinput.AppPath")}
23 |
24 |
25 |
--------------------------------------------------------------------------------
/frontend/src/Settings/General.svelte:
--------------------------------------------------------------------------------
1 |
15 |
16 | {$_("general_application_settings")}
17 |
18 |
19 |
20 | {#if langs != undefined && $conf.Lang != undefined}
21 |
22 | {#each Object.keys(langs) as $id}
23 | {#if $id != $conf.Lang}
24 |
25 | {/if}
26 | {/each}
27 | {/if}
28 |
29 |
32 |
33 |
34 | {langHelp = !langHelp}}
39 | header={$_("TranslationInformation")} placement="end">
40 |
41 |
42 |
--------------------------------------------------------------------------------
/frontend/src/Settings/Index.svelte:
--------------------------------------------------------------------------------
1 |
30 |
31 |
32 |
33 |
34 |
35 | {$_("main_application_settings")}
36 |
54 |
55 |
56 |
57 |
58 | {confHelp = !confHelp}}
63 | header={$_("customconfig.CustomConfigPath")} placement="end">
64 | {#if $app.IsLinux}
65 |
66 | {$_("words.Example")}
67 |
68 | {$app.Name} -c /path/to/{$app.Name}.conf
69 | {$_("customconfig.Withafullpath")}:
70 | {$app.Exe} -c {$app.Home}/.{$app.Name}/{$app.Name}.conf
71 | {$_("customconfig.Makeabashscript")}
72 |
73 | {:else if $app.IsMac}
74 |
75 | {:else}
76 |
77 |
78 |
79 |
80 |
81 |
82 | {$_("words.Directions")}
83 |
84 | {$_("words.Example")}
85 |
86 | {/if}
87 |
88 |
89 |
90 |
97 |
--------------------------------------------------------------------------------
/frontend/src/Settings/Logs.svelte:
--------------------------------------------------------------------------------
1 |
18 |
19 | {$_("logs_application_settings")}
20 |
21 |
22 |
26 |
27 |
28 |
29 |
30 |
31 | {#if $conf.DevMode}
32 |
33 | {/if}
34 |
35 |
36 |
37 | {#if !$app.IsWindows}
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | {/if}
48 |
49 |
50 | {#each Array(20) as u, i}
51 |
52 | {/each}
53 |
54 |
55 |
56 |
57 |
58 | {#each Array(50) as u, i}
59 |
60 | {/each}
61 |
62 |
63 |
--------------------------------------------------------------------------------
/frontend/src/Starr/Actions/AppProfiles.svelte:
--------------------------------------------------------------------------------
1 |
9 |
10 | {$_("incompletePage")}
11 |
12 | {instance.Name} App Profiles: {info.length}
13 |
--------------------------------------------------------------------------------
/frontend/src/Starr/Actions/BlockLists.svelte:
--------------------------------------------------------------------------------
1 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | {cv}
70 |
71 | |
72 |
73 |
74 |
75 | {$_("configvalues.SourceTitle")}
76 |
77 | |
78 | {$_("words.Quality")} |
79 |
80 | {$_("words.Date")}
81 |
82 | |
83 |
84 |
85 |
86 |
87 | {#each info.records as list, idx}
88 | {#if list}
89 |
90 |
91 |
92 |
93 | {/if}
94 | {/each}
95 |
96 |
97 |
98 |