22 Commits

Author SHA1 Message Date
Jagandeep Brar
0b59b7202d release: v10.2.2
[skip ci]
2022-12-22 10:49:42 -06:00
Jagandeep Brar
d86a5a0c72 release(testflight): candidate
[skip ci]
2022-12-21 15:14:01 -06:00
Jagandeep Brar
7a6c9772f3 release(testflight): beta
[skip ci]
2022-12-21 14:25:41 -06:00
Weblate (bot)
b22b87b6d8 chore: translations update from Hosted Weblate (#723)
Co-authored-by: Gil <almontegil@gmail.com>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Co-authored-by: 愿你多年归来仍是少年 <onestime@126.com>
2022-12-21 13:59:32 -05:00
Jagandeep Brar
d4774b0542 feat(android): add option to disable back action to open drawer
[skip ci]
2022-12-21 12:57:44 -06:00
Jagandeep Brar
e6d7e50a45 docs: remove documentation from main repository
[skip ci]
2022-12-18 01:38:04 -05:00
Jagandeep Brar
7ba4b2f018 release(testflight): beta
[skip ci]
2022-12-17 19:47:49 -05:00
Jagandeep Brar
4c99ecf927 fix(tautulli): cached or downloaded activity sessions could not be opened 2022-12-16 16:57:59 -05:00
Jagandeep Brar
edb645f887 fix(linux): install binaries to /usr/share instead of /usr/local/lib
[skip ci]
2022-11-30 16:35:28 -05:00
Jagandeep Brar
d688fe84ef release(testflight): beta
[skip ci]
2022-11-28 22:11:42 -05:00
Jagandeep Brar
c46924c996 feat(linux): include MD5 sums in Debian distributions 2022-11-27 13:34:18 -05:00
Jagandeep Brar
56f26e701e chore(flutter): upgrade Flutter packages 2022-11-27 13:34:18 -05:00
Jagandeep Brar
968fe9cbbc refactor(uiux): disable horizontal swiping/scrolling between pages 2022-11-27 13:34:18 -05:00
Jagandeep Brar
19f7ecf885 chore(flutter): upgrade to Flutter 3.3.9/8f2221fbef 2022-11-27 13:34:18 -05:00
Jagandeep Brar
3f10675422 fix(calendar): scroll to last past date with content when selected date has no content 2022-11-27 13:34:18 -05:00
Jagandeep Brar
746bcc5ac9 chore(ci): update using actions versions 2022-11-24 22:38:09 -05:00
Jagandeep Brar
721c1c957e chore(ci): set required iptables policy for Ubuntu 22.04 2022-11-24 22:26:14 -05:00
Jagandeep Brar
0e09821842 chore(ci): supply web-app-id to Firebase configuration tool 2022-11-24 22:00:27 -05:00
Jagandeep Brar
607ac4391a chore: bump version to v10.2.2 2022-11-24 21:52:43 -05:00
Jagandeep Brar
b1d01e02ca feat(linux): publish Linux builds as Debian archive (.deb)
[skip ci]
2022-11-24 21:51:21 -05:00
Jagandeep Brar
3858de8d65 chore(ci): install required Linux build tools
[skip ci]
2022-11-24 20:19:08 -05:00
Jagandeep Brar
a390a80ef1 feat(linux): publish Linux builds as tarball (.tar.gz)
[skip ci]
2022-11-24 19:50:50 -05:00
94 changed files with 855 additions and 2352 deletions

View File

@@ -2,7 +2,6 @@
.dart_tool/
android/
build/
docs/
ios/
linux/
localization/

View File

@@ -69,14 +69,14 @@ runs:
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.3.7'
flutter-version: '3.3.9'
channel: stable
cache: true
cache-key: ${{ github.sha }}
- name: Install Java
if: ${{ inputs.platform == 'android' }}
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
distribution: zulu
java-version: 11
@@ -100,11 +100,11 @@ runs:
- name: Setup Docker
if: ${{ inputs.platform == 'web' }}
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
- name: Setup Match SSH Keys
if: ${{ inputs.platform == 'ios' || inputs.platform == 'macos' }}
uses: webfactory/ssh-agent@v0.5.4
uses: webfactory/ssh-agent@v0.6.0
with:
ssh-private-key: ${{ inputs.match-ssh-private-key }}
@@ -132,6 +132,7 @@ runs:
--android-package-name=app.lunasea.lunasea \
--ios-bundle-id=app.lunasea.lunasea \
--macos-bundle-id=app.lunasea.lunasea \
--web-app-id=1:511093487055:web:37d2f8e4c960708add8eba \
--out=lib/firebase/options.dart \
--yes
@@ -157,6 +158,9 @@ runs:
shell: bash
run: |
flutter config --enable-linux-desktop
sudo iptables -P FORWARD ACCEPT
sudo apt-get update -y
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev
- name: Setup macOS Platform
if: ${{ inputs.platform == 'macos' }}

View File

@@ -52,11 +52,11 @@ runs:
- name: Set up Docker Buildx
if: ${{ inputs.channel == 'docker' }}
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
- name: Setup GitHub Package Registry
if: ${{ inputs.channel == 'docker' }}
uses: docker/login-action@v1
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ inputs.ghcr-actor }}

View File

@@ -59,6 +59,9 @@ jobs:
name: Build Linux
needs: [ prepare ]
uses: JagandeepBrar/LunaSea/.github/workflows/build_linux.yml@master
with:
build-number: ${{ needs.prepare.outputs.build-number }}
build-version: ${{ needs.prepare.outputs.build-version }}
build-macos:
name: Build macOS

View File

@@ -2,8 +2,57 @@ name: 'Build Linux'
on:
workflow_call:
inputs:
build-number:
required: true
type: string
build-version:
required: true
type: string
jobs:
build-debian:
name: Debian Archive
runs-on: ubuntu-latest
steps:
- name: Setup Environment
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
with:
platform: linux
- name: Build LunaSea
run: flutter build linux
- name: Prepare Artifact
run: dart ${{github.workspace }}/scripts/generate_debian.dart "${{ inputs.build-version }}+${{ inputs.build-number }}"
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: linux-debian
path: ${{ github.workspace }}/output
build-tarball:
name: Tarball Archive
runs-on: ubuntu-latest
steps:
- name: Setup Environment
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
with:
platform: linux
- name: Build LunaSea
run: flutter build linux
- name: Prepare Artifact
run: tar czf output/lunasea-linux-amd64.tar.gz -C build/linux/x64/release/bundle/ .
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: linux-tarball
path: ${{ github.workspace }}/output
build-snapcraft:
name: Snapcraft
runs-on: ubuntu-latest
@@ -25,3 +74,5 @@ jobs:
with:
name: linux-snapcraft
path: ${{ github.workspace }}/output

View File

@@ -87,7 +87,7 @@ jobs:
return tags.map((tag) => `ghcr.io/jagandeepbrar/lunasea:${tag}`).join(',');
- name: Build LunaSea
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: .
outputs: type=docker,dest=${{ github.workspace}}/output/lunasea-web-docker.tar

View File

@@ -58,7 +58,7 @@ jobs:
BUILD_TITLE: ${{ inputs.build-title }}
with:
result-encoding: string
script: return require('.github/scripts/notify-embed.js')();
script: return require('.github/scripts/notify_discord_embed.js')();
- name: Send Discord Message
uses: Ilshidur/action-discord@0.3.2

View File

@@ -50,7 +50,7 @@ jobs:
id: commit-count
run: |
COUNT=`git rev-list HEAD --count`
echo "::set-output name=commit-count::$COUNT"
echo "commit-count=$COUNT" >> $GITHUB_OUTPUT
- name: Build Flavor
id: build-flavor
@@ -93,14 +93,14 @@ jobs:
- name: Build Version
id: build-version
uses: martinbeentjes/npm-get-version-action@v1.1.0
uses: martinbeentjes/npm-get-version-action@main
- name: Build Title
id: build-title
run: |
HASH=`git rev-parse --short ${{ github.sha }}`
TITLE="v${{ steps.build-version.outputs.current-version }}-${{ steps.build-flavor.outputs.result }}-${{ steps.build-number.outputs.result }}-$HASH"
echo "::set-output name=output::$TITLE"
echo "output=$TITLE" >> $GITHUB_OUTPUT
- name: Log Build Details
env:

View File

@@ -47,6 +47,18 @@ jobs:
name: ios-appstore-package
path: ${{ github.workspace }}/output
- name: Download Linux Debian
uses: actions/download-artifact@v3
with:
name: linux-debian
path: ${{ github.workspace }}/output
- name: Download Linux Tarball
uses: actions/download-artifact@v3
with:
name: linux-tarball
path: ${{ github.workspace }}/output
- name: Download Linux Snap
uses: actions/download-artifact@v3
with:

4
.gitignore vendored
View File

@@ -83,4 +83,8 @@ output/
*.ipa
*.dmg
*.pkg
# Linux Artifacts
debian/DEBIAN/md5sums
debian/usr/share/lunasea
*.snap

View File

@@ -2,6 +2,28 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [10.2.2](https://github.com/JagandeepBrar/LunaSea/compare/v10.2.1...v10.2.2) (2022-12-22)
### Features
* **android:** add option to disable back action to open drawer ([d4774b0](https://github.com/JagandeepBrar/LunaSea/commit/d4774b054204546490ef9f78090e28303eefc1fc))
* **linux:** include MD5 sums in Debian distributions ([c46924c](https://github.com/JagandeepBrar/LunaSea/commit/c46924c99645a2d9c27e2d3532d30ecf93882e2a))
* **linux:** publish Linux builds as Debian archive (.deb) ([b1d01e0](https://github.com/JagandeepBrar/LunaSea/commit/b1d01e02ca4cdb8a2775700930ada2d1d40a1031))
* **linux:** publish Linux builds as tarball (.tar.gz) ([a390a80](https://github.com/JagandeepBrar/LunaSea/commit/a390a80ef1897d4c95812045a3472527ff38fd49))
### Bug Fixes
* **calendar:** scroll to last past date with content when selected date has no content ([3f10675](https://github.com/JagandeepBrar/LunaSea/commit/3f10675422b9a32c43f4f49c16b6e9723f267f50))
* **linux:** install binaries to /usr/share instead of /usr/local/lib ([edb645f](https://github.com/JagandeepBrar/LunaSea/commit/edb645f8871d8f3a59c122191e8d8219e9957924))
* **tautulli:** cached or downloaded activity sessions could not be opened ([4c99ecf](https://github.com/JagandeepBrar/LunaSea/commit/4c99ecf927e21538f875bb7ee93fc7aaf20de479))
### Tweaks
* **uiux:** disable horizontal swiping/scrolling between pages ([968fe9c](https://github.com/JagandeepBrar/LunaSea/commit/968fe9cbbc4aff3ae584682e462defbf09ea5699))
### [10.2.1](https://github.com/JagandeepBrar/LunaSea/compare/v10.2.0...v10.2.1) (2022-11-06)

View File

@@ -52,5 +52,5 @@ Interested in using prerelease build channels of LunaSea? Learn the differences
Thank you to all tools and services for offering free subscriptions for open-source projects!
- [docs.page](https://docs.page/): docs.page is used to host LunaSea's documentation
- [Gitbook](https://www.gitbook.com): Gitbook is used to host LunaSea's documentation
- [Weblate](https://weblate.org): Weblate is used to gather community localization for LunaSea

View File

@@ -1,110 +1,56 @@
{
"motd": "Welcome to LunaSea v10.2.1!\n\nThis release adds some nice quality of life changes including the ability to set your boot module, automatic scrolling to the selected date in the calendar, and support for filesystem actions on web!\n\nThis build also includes some additional Android 13 fixes and other miscellaneous fixes and tweaks!",
"motd": "Welcome to LunaSea v10.2.2!\n\nThis release adds support for official .deb and .tar.gz builds for Linux releases!\n\nThis build also fixes an issue with cached activity sessions in Tautulli and fixes cases where it would not automatically scroll to the current date in the calendar schedule view.\n\nFinally, this release has a UX change that disables the horizontal swiping to change pages on routes with a bottom navigation bar. This will allow future extensibility of the UX to utilize horizontal actions more cleanly!",
"feat": {
"dashboard": [
"android": [
{
"commit": "3ac2c5d791f94208a4004d161bb046c24b698345",
"message": "(calendar) always show previous days in schedule view"
"commit": "d4774b054204546490ef9f78090e28303eefc1fc",
"message": "add option to disable back action to open drawer"
}
],
"linux": [
{
"commit": "c46924c99645a2d9c27e2d3532d30ecf93882e2a",
"message": "include MD5 sums in Debian distributions"
},
{
"commit": "f1226e563899cfc0950865a9734448d4e00601b9",
"message": "(calendar) scroll to selected date when loading the schedule view"
}
],
"modules": [
{
"commit": "3dd087e361619889057a0b037b1eef35157a0988",
"message": "ability to set the boot module"
}
],
"-arr": [
{
"commit": "bccd1a43c42b349901137f8fc605f393b51d541a",
"message": "(releases) button to open indexer information page"
}
],
"lidarr": [
{
"commit": "c76418d26f1a5f52f5cb1e46951f1cf6726508c2",
"message": "(links) add MusicBrainz"
}
],
"radarr": [
{
"commit": "c9bd02b75086579f60ad8987c42ab217c12f6d43",
"message": "(edit) support moving files when editing the storage path"
}
],
"web": [
{
"commit": "7d437d5c3a34a8681c372570fc366e869f0b2090",
"message": "(filesystem) support local filesystem read/save actions"
}
],
"system": [
{
"commit": "c062b3d786e55bc3ba7fe767dd946d73efbef64f",
"message": "launch recovery mode on bootstrap failure"
"commit": "b1d01e02ca4cdb8a2775700930ada2d1d40a1031",
"message": "publish Linux builds as Debian archive (.deb)"
},
{
"commit": "125596498ec9839e584912185ddc5b625602a701",
"message": "(locale) translations update from Weblate"
"commit": "a390a80ef1897d4c95812045a3472527ff38fd49",
"message": "publish Linux builds as tarball (.tar.gz)"
}
]
},
"fix": {
"firebase": [
"tautulli": [
{
"commit": "38f2eb4cb2a8e400ce2ecb0b6f2854469c9626fc",
"message": "inject service file for older OS versions"
},
{
"commit": "f3a3f222bd56beb4e961817b18d71f01fb7c5e81",
"message": "upgrade to Firebase v10"
}
],
"flutter": [
{
"commit": "3d794099a5418385dc1010f204c3f46fdbdd5503",
"message": "upgrade packages"
},
{
"commit": "cf5bfca265d03b0fd966dfb069393a4bbb24c672",
"message": "upgrade to Flutter 3.3.7/857bd6b74c"
}
],
"android": [
{
"commit": "25e0d051422b399de8c90e0fc71e57349e3355b7",
"message": "support Android 13 filesystem access"
},
{
"commit": "b7ceebcb679dbca935b6a1810c0c67a14002e358",
"message": "utilize Kotlin v1.7.20 & Gradle v7.1.2"
"commit": "4c99ecf927e21538f875bb7ee93fc7aaf20de479",
"message": "cached or downloaded activity sessions could not be opened"
}
],
"calendar": [
{
"commit": "70ed750652ff419e6fed659a0785adc5064654e7",
"message": "label unreleased movies as unreleased instead of missing"
"commit": "3f10675422b9a32c43f4f49c16b6e9723f267f50",
"message": "scroll to last past date with content when selected date has no content"
}
],
"flutter": [
{
"commit": "56f26e701eda951cd292431e23646e037332c78e",
"message": "upgrade Flutter packages"
},
{
"commit": "19f7ecf8858409f702f0656cfb7f485113c3d680",
"message": "upgrade to Flutter 3.3.9/8f2221fbef"
}
]
},
"refactor": {
"uiux": [
{
"commit": "958e6f156862c1092399649baa361cd955299c88",
"message": "remove forced-upper case on headers"
},
{
"commit": "d9623e992d2ac2039eaa4f069c739d968c921cc6",
"message": "add circular radius to linear progression bars"
}
],
"settings": [
{
"commit": "ac838f99a9c839ce4e36e5eae80f1100e2787dc5",
"message": "consolidate appearance, network, and localization pages"
"commit": "968fe9cbbc4aff3ae584682e462defbf09ea5699",
"message": "disable horizontal swiping/scrolling between pages"
}
]
}

BIN
assets/icon/icon_linux.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -517,6 +517,8 @@
"settings.NoExternalModulesFound": "No External Modules Found",
"settings.NoHeadersAdded": "No Headers Added",
"settings.NoProfilesFound": "No Profiles Found",
"settings.OpenDrawerOnBackAction": "Open Drawer on Back Action",
"settings.OpenDrawerOnBackActionDescription": "Open the drawer instead of closing LunaSea",
"settings.OpenLinksIn": "Open Links In…",
"settings.Password": "Password",
"settings.PasswordHint1": "If your password includes special characters, considering adding a basic authentication header with your username and password instead for better support",

6
debian/DEBIAN/control vendored Normal file
View File

@@ -0,0 +1,6 @@
Package:LunaSea
Architecture:amd64
Essential:no
Priority:optional
Maintainer:LunaSea Support <hello@lunasea.app>
Description:Self-hosted software controller built using Flutter

3
debian/DEBIAN/postinst vendored Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
ln -sf '/usr/share/lunasea/lunasea' '/usr/bin/lunasea'

3
debian/DEBIAN/postrm vendored Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
rm -f '/usr/bin/lunasea'

View File

@@ -0,0 +1,9 @@
[Desktop Entry]
Name=LunaSea
Comment=Self-hosted software controller built using Flutter
Icon=/usr/share/icons/lunasea.png
Terminal=false
Type=Application
Categories=Utilities;Entertainment;
Exec=/usr/bin/lunasea
TryExec=/usr/bin/lunasea

BIN
debian/usr/share/icons/lunasea.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

163
docs.json
View File

@@ -1,163 +0,0 @@
{
"name": "LunaSea",
"favicon": "/assets/logo.png",
"logo": "/assets/logo.png",
"logoDark": "/assets/logo.png",
"theme": "#4ECCA3",
"docsearch": {
"apiKey": "58e5f38cec4d05c99cc2e20f557c5463",
"indexName": "lunasea",
"appId": "W0TEIU1RA4"
},
"sidebar": [
[
"Overview",
"/"
],
[
"Getting Started",
[
[
"Build Channels",
"/getting-started/build-channels"
],
[
"Donations",
"/getting-started/donations"
],
[
"Frequently Asked Questions",
"/getting-started/frequently-asked-questions"
],
[
"Platform Restrictions",
"/getting-started/platform-restrictions"
]
]
],
[
"LunaSea",
[
[
"Account",
"/lunasea/account"
],
[
"Local Backup & Restore",
"/lunasea/local-backup-restore"
],
[
"Logs",
"/lunasea/logs"
],
[
"Notifications",
"/lunasea/notifications"
],
[
"Profiles",
"/lunasea/profiles"
]
]
],
[
"Modules",
[
[
"Lidarr",
"/modules/lidarr"
],
[
"Newznab Search",
"/modules/newznab-search"
],
[
"NZBGet",
"/modules/nzbget"
],
[
"Overseerr",
"/modules/overseerr"
],
[
"Radarr",
"/modules/radarr"
],
[
"SABnzbd",
"/modules/sabnzbd"
],
[
"Sonarr",
"/modules/sonarr"
],
[
"Tautulli",
"/modules/tautulli"
],
[
"Wake on LAN",
"/modules/wake-on-lan"
]
]
],
[
"Notifications",
[
[
"Custom",
"/notifications/custom"
],
[
"Lidarr",
"/notifications/lidarr"
],
[
"Overseerr",
"/notifications/overseerr"
],
[
"Radarr",
"/notifications/radarr"
],
[
"Sonarr",
"/notifications/sonarr"
],
[
"Tautulli",
"/notifications/tautulli"
]
]
],
[
"Releases",
[
[
"Android",
"/releases/android"
],
[
"iOS",
"/releases/ios"
],
[
"Linux",
"/releases/linux"
],
[
"macOS",
"/releases/macos"
],
[
"Web",
"/releases/web"
],
[
"Windows",
"/releases/windows"
]
]
]
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 KiB

View File

@@ -1,37 +0,0 @@
---
title: Build Channels
description: How to use different builds of LunaSea
---
# Build Channels
LunaSea offers four different build channels, each of which supply signed and notarized copies of LunaSea.
All releases for every build channel can be downloaded from the [build bucket](https://builds.lunasea.app), and all stable releases for all platforms are also available on [GitHub](https://github.com/JagandeepBrar/LunaSea/releases).
- [Android](/releases/android)
- [iOS](/releases/ios)
- [Linux](/releases/linux)
- [macOS](/releases/macos)
- [Web](/releases/web)
- [Windows](/releases/windows/)
## Stable
This is the store version and will remain the most stable version. No in-progress features will be deployed to this channel.
## Candidate
This channel is focused around _final release candidate testing of completed new features_ leading up to the release to stable. This channel is intended to help catch any remaining bugs from beta builds and overall should remain relatively stable.
## Beta
This channel is focused around _early previews and testing of work-in-progress features_. This channel is intended to allow users to give feedback to the developer on features that are actively being worked on.
## Edge
This channel's purpose is to _ensure that every commit made to master is building across all platforms_ and allows for easier access to a build for each commit. This is not intended to be used by the average user, but is for community developers or users who need to test a recently added fix that has not yet reached the beta channel.
There are no restrictions on features in these builds (barring a very specific subset used for debugging/testing) so it gives full access to everything that is work in progress.
**Do not expect a fully stable experience if you use these builds**, as it is entirely possible that a single build could cause problems including but not limited to database corruption. If you are running these builds, please ensure you have either a cloud or offline backup available for easy restoration.

View File

@@ -1,26 +0,0 @@
---
title: Donations
description: How to donate to the developer of LunaSea
---
# Donations
Thanks for considering donating to LunaSea! Donations are what keep the project alive and completely free for everyone to use. There are a few options available:
## In-App Purchases
If you have downloaded LunaSea through the Play Store or App Store, you can directly donate using in-app purchases! Simply head to the Settings and tap the "Donations" tile. There are four options available (all scaled to USD): $0.99, $2.99, $4.99, and $9.99.
> If you are using TestFlight builds on iOS devices, you will need to switch to the App Store version to donate. Any in-app purchases executed on a TestFlight build do not actually get processed.
## Ko-Fi
I have setup a Ko-Fi account for LunaSea, available here: https://ko-fi.com/JagandeepBrar.
Ko-Fi allows you to make a one-time donation in $1 increments using PayPal.
## GitHub Sponsors
I also have setup a GitHub Sponsors account, which is available here: https://github.com/sponsors/JagandeepBrar.
GitHub Sponsors allow you to setup a recurring donation in the amount of $1 to $5.

View File

@@ -1,113 +0,0 @@
---
title: Frequently Asked Questions
description: Frequently asked questions regarding LunaSea
---
# Frequently Asked Questions
## Modules
#### How Do I Install a "Module"?
The software, or as used in LunaSea, _Modules_, are all pieces of software that must be installed on a home computer or server. None of the currently supported software has been developed by me, so the amount of support offered for each module is limited. LunaSea itself does not have the functionality of that software, it acts as a remote.
#### Can You Support "X" Feature/Module?
I take all requests into consideration! If you would like to request a feature there are a few ways I recommend:
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)
> I may not have the ability to respond to all requests directly, but please be ensured I do read everything!
#### Why Isn't Feature/Module "X" Supported Yet?
LunaSea is only developed by one person and while I try to put as much time into LunaSea as I can, I still do have a family, career, and I want to enjoy my personal time.
I also want to point out that I don't want to make LunaSea a wide ranging but no depth application. I want every application to have as full of an implementation as possible, which can mean that new modules will take time to get implemented between one another.
#### Torrent Client Support: Is It Coming?
Support for torrent clients is easily the most requested new module, and I definitely see the demand. However, torrent support currently is not possible in LunaSea because of the restrictions Apple has put forward. Apple does not allow integration of P2P/torrent clients in any capacity for applications that are hosted on the App Store. This includes a P2P client that runs directly on the device and linking to a P2P client that is running on an external machine.
Torrent support is not completely off the table and may come in the future! But at the moment, over 90% of the active user base is using iOS-based devices and it is hard to justify building a module (that takes a lot of time) that the mass majority of the user base would not be able to use.
> I am actively thinking of methods to get around this limitation, if you have any ideas consider commenting on the torrent client support [Discord Forum post](https://discord.com/channels/673591529834807358/1020181897973874748).
## Development
#### Who Makes LunaSea?
Only one person, me! Hi, my name is Jagandeep, and I am a software engineer from Canada. I am currently the main and only developer on LunaSea but I encourage anyone who is interested and wants to contribute to the project to make a pull request on GitHub!
#### What is LunaSea Developed In?
LunaSea is developed using Google's hybrid framework, [Flutter](https://flutter.dev/), which uses [Dart](https://dart.dev/) as its core language. Using Flutter allows an indie developer like myself to build cross-platform applications more easily, as it is one single codebase that allows me to build across many platforms!
#### How is LunaSea Free?
LunaSea started off as (and still is) a passion project fueled by my love for data hoarding. It was open-sourced soon after it's initial launch to allow LunaSea to get into the hands of as many users as possible and to give back to the community where there is a lack of open-source, high quality mobile applications.
#### Are You Ever Going To Charge Money/Insert Ads?
The only possible reason that LunaSea will ever have any kind of payment model is if features are introduced that cost me recurring charges that are too large to bear. Any and all features that do not incur me a charge will be free, and even any features that would cost me money will become open-source, which offers everyone the ability to have a completely free experience in LunaSea.
## Bugs & Feedback
#### I Found a Bug! How Do I Let You Know?
I tried to make it as stable as possible, but bugs obviously will always be there. If you do run into a bug (especially a fatal/crashing bug), please also attach the logs from the application into the report - logs can be exported from the settings.
- [GitHub Issues](https://www.lunasea.app/github): The best place to alert me of new issues is directly on the GitHub page. Please try to follow the template for bug reports, but again I am not overly strict and a good explanation of the issue will suffice (this may change in the future if it gets increasingly hard to manage).
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)
#### How Can I Request a New Feature?
I consider all feedback and actively try to integrate new features that are requested by the community, big or small! You have a few ways to request new features for LunaSea:
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)
## Support
#### Why Don't The Settings Explain Much?
I understand that the settings section could definitely use better documentation and linking, but this ambiguity and sparse documentation directly within LunaSea is by design.
LunaSea took quite a runaround to initially get on the App Store because of its relationship with how you acquire Linux ISOs. After successfully getting it on the App Store, I want to avoid adding anything to LunaSea that would potentially get it revoked.
#### "X" Won't Connect, Help!
The initial setup can either be incredibly easy or make you want to pull your hair out, I get that and that's what the community is here for! Please feel free to send a message to any of the listed methods to get support where either I or an awesome user in the community will surely come to help you out:
- [Discord](https://www.lunasea.app/discord)
- [Email](mailto:hello@lunasea.app)
- [Reddit](https://www.lunasea.app/reddit)
A few quick tips on common problems:
- `localhost` and `0.0.0.0` are internal hostnames that means "this computer". They cannot and should not be used as the host, but is commonly used because users mainly access the service from the computer running it. In order for LunaSea to connect, you must find the local IP of your computer (most common home networking configurations have it start with `192.168.0.x` or `192.168.1.x`)
- Ensure you match the right API key to the right service. I know this seems like an obvious thing, but you'd be surprised how easy it is to mix up 3-4 API keys when you're going back and forth copying and pasting!
- For the -arr services, ensure the binding address in the advanced general settings is not set to `127.0.0.1` or `localhost`, but instead set to either `0.0.0.0`, `*`, or the local IP for the computer/server.
- Similarly for the clients, ensure that the host is set to `0.0.0.0`, or the local IP.
- As noted in the host prompt, you must add either `http://` or `https://` before the IP or domain. LunaSea does not make any assumptions on the protocol to use (http or https).
- Do not use `3xx` redirecting webpages. This is not supported for POST and PUT requests (sending data back to the module) and can cause many headaches, so ideally you should be pointing directly to the module on your network.
- _(Windows Only)_: For a lot of software to correctly bind to your network, you need to ensure that you run the software as administrator. This is specifically very important for the -arrs, which will only bind to your host machine if you do not run it as administrator.
#### How Can I Access My Services Remotely?
While this is outside of the scope of this project, I can try to point you in the right direction!
- **Reverse Proxy**: A reverse proxy allows you to open 1 or 2 ports on your network (typically 443 for SSL/https connections and 80 for http connections). Using a reverse proxy also allows you to attach a domain name to your IP and generate a free SSL certificate for https (hint, [LetsEncrypt](https://letsencrypt.org/)). Some common options for reverse proxies are [NGINX Proxy Manager](https://nginxproxymanager.com/), [Traefik](https://traefik.io/), [NGINX](https://nginx.org/), and [Apache](https://www.apache.org/).
- **VPN Tunnelling**: Another option is to create a VPN tunnel back to your home network, which would allow you to access your services as if you are on your home network. Tools like [WireGuard](https://www.wireguard.com/) and [OpenVPN](https://openvpn.net/) are perfect for this use case. This is technically the most secure method, but a bit less convenient than using a reverse proxy.
- **Direct Port Forwarding**: This method is _not recommended_, but another option is directly forward the ports of the services on your router and access the services via `<External IP>:<Port>`. The reason this is not recommended is because all of the traffic is sent unencrypted (you can use self-signed certificates, but this causes more headaches related to certificate authorities), and the more ports that are open on your network the less secure it is.
#### I Want to Complain! Where Can I Complain?
Sorry that LunaSea is not meeting your expectations, feel free to post criticisms or complaints to any of the social platforms or directly [email me](mailto:hello@lunasea.app). I hope that I can remedy your complaints, all I ask is that you do not be abusive or disrespectful to myself or others in the community.
I also kindly request that before you submit a 1-star App Store/Play Store review that you consider contacting me directly with your complaints. 1-star reviews can really hurt a smaller application's rating since we do not typically get lots of reviews.

View File

@@ -1,40 +0,0 @@
---
title: Platform Restrictions
description: Breaking down what is and isn't supported on different platforms
---
# Platform Restrictions
The tables below showcases which modules or features may not be supported on each platform. If a module or feature is not listed, you can assume that every platform has full support for said module or feature!
> Work will continuously be done to try to achieve 100% feature parity between all platforms when possible!
## Module Support
| Module | Android | iOS | Linux | macOS | Windows | Web (Hosted) | Web (Self-Hosted) |
| :---------: | :-----: | :-: | :---: | :---: | :-----: | :----------: | :---------------: |
| NZBGet | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Overseerr | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Tautulli | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Wake on LAN | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
## Feature Support
| Feature | Android | iOS | Linux | macOS | Windows | Web (Hosted) | Web (Self-Hosted) |
| :--------------: | :-----: | :-: | :---: | :---: | :-----: | :----------: | :---------------: |
| LunaSea Accounts | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
| Notifications | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
## Web-Specific Restrictions
#### HTTPS Requirement
LunaSea's web instances are hosted on [Netlify](https://www.netlify.com) and use [LetsEncrypt](https://letsencrypt.org/) TLS certificates to ensure that an encrypted connection is utilized when loading the LunaSea web application package.
One limitation this incurs is that most modern web browsers no longer support [mixed content](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content), so it is required when using these browsers to utilize a reverse proxy (or something similar) to expose a secure (`HTTPS`) connection to your instances even when hosted on the same machine.
**All network communication occurs directly between your web browser and host machine**, but this is a limitation put forward by the web browsers.
#### Wake on LAN Support
Wake on LAN support will **never** be supported when using LunaSea on the web, because the Wake on LAN protocol relies on the [User Datagram Protocol (UDP)](https://en.wikipedia.org/wiki/User_Datagram_Protocol). UDP connections are not supported in the web browser because of underlying security constraints, and so it will not be possible to utilize wake on LAN now or at any point in the future when using LunaSea on the web.

View File

@@ -1,46 +0,0 @@
---
title: LunaSea
description: Self-hosted software controller built using Flutter
---
<Image
src="https://raw.githubusercontent.com/JagandeepBrar/LunaSea/master/assets/images/branding_logo.png"
width="250px"
alt="LunaSea"
zoom={false}
caption="Self-hosted software controller built using Flutter"
/>
LunaSea is a fully featured, open source self-hosted controller focused on giving you a seamless experience between all of your self-hosted media software remotely on your devices.
## Modules
- [Lidarr](/modules/lidarr)
- [Newznab Search + NZBHydra2](/modules/newznab-search)
- [NZBGet](/modules/nzbget)
- [Radarr](/modules/radarr)
- [SABnzbd](/modules/sabnzbd)
- [Sonarr](/modules/sonarr)
- [Tautulli](/modules/tautulli)
- [Wake on LAN](/modules/wake-on-lan)
LunaSea even comes with support for webhook-based push notifications, multiple instances of applications using profiles, backup and restore functionality for your configuration, an AMOLED black theme, and more!
> LunaSea is purely a remote control application, it does not offer any functionality without software installed on a server/computer.
## Releases
All releases for every build channel can be downloaded from the [build bucket](https://builds.lunasea.app), and all stable releases for all platforms are also available on [GitHub](https://github.com/JagandeepBrar/LunaSea/releases).
- [Android](/releases/android)
- [iOS](/releases/ios)
- [Linux](/releases/linux)
- [macOS](/releases/macos)
- [Web](/releases/web)
- [Windows](/releases/windows/)
Interested in using prerelease build channels of LunaSea? Learn the differences between all the build channels and how to join one [here](https://www.lunasea.app/build-channels)!
## License
See [LICENSE.md](https://github.com/JagandeepBrar/LunaSea/blob/master/LICENSE.md) for more information.

View File

@@ -1,18 +0,0 @@
---
title: Account
description: Accounts to extend LunaSea's functionality
---
# Account
LunaSea currently offers a _free_ cloud account that can be used for extending the functionality of LunaSea. The only details required to register for an account are an email address and password. At no point will LunaSea or the developers send you any emails, unless you explicitly request a password reset email.
If you want to protect your privacy, you are free to use a fake email when registering for an account, as there is no required account verification. Be warned that you will be unable to reset your password if you decide to use a fake email, as these functions are handled through Firebase Authentication via email.
## Encrypted Cloud Configuration Storage
The three options related to backing up your encrypted backups should be self-explanatory. All configurations are encrypted on-device before being sent off the device. When restoring an encrypted backup, the encrypted backup is downloaded to the device and you will be prompted to decrypt the backup on-device.
Deleting a backup is a permanent action, **there is no way to restore that backup**.
> Because all encryption and decryption occurs on-device, it is fully end-to-end encrypted. Forgetting the encryption password will result in there being no way to retrieve the configuration.

View File

@@ -1,22 +0,0 @@
---
title: Local Backup & Restore
description: How to backup and restore your LunaSea configuration locally to your device
---
# Local Backup & Restore
Alongside cloud-based backups, LunaSea offers the ability to create local backups of your configuration which you can manually transfer between devices and restore from. This gives you the freedom to have complete control of your data, and never have your configuration saved in a cloud server. Local backups are fully encrypted on-device, there are currently no plans to offer unencrypted backups.
> Because all encryption and decryption occurs on-device, it is fully end-to-end encrypted. Forgetting the encryption password will result in there being no way to retrieve the configuration.
## Creating a Backup
Creating a backup in LunaSea is simple and painless! Simply go to Settings -> System -> "Backup to Device" to start the backup process.
The backup will use the system-level share menu or dialog prompt to allow you to save the backup (a `.lunasea` file). Please ensure to keep the `.lunasea` extension when saving the file, as backups without a `.lunasea` extension will not be selectable when attempting to restore your configuration.
## Restoring a Backup
Restoring a backup in LunaSea is as simple as creating the backup! Simply go to Settings -> System -> "Restore from Device" to start the restore process.
The restoration process will request the password used to encrypt the original backup.

View File

@@ -1,55 +0,0 @@
---
title: Logs
description: Breaking down LunaSea's built-in on-device logger
---
# Logs
LunaSea includes an on-device logging system that helps debug crashes, issues, and support requests. LunaSea stores 4 different levels of logs: **Debug**, **Warning**, **Error**, and **Critical**.
<Tabs
defaultValue="debug"
values={[
{ label: "Debug", value: "debug" },
{ label: "Warning", value: "warning" },
{ label: "Error", value: "error" },
{ label: "Critical", value: "critical" },
]}
>
<TabItem value="debug">
_Debug logs are visible/available on prerelease builds only_
Debug logs are informational logs and messages that are intended to help debug processes.
</TabItem>
<TabItem value="warning">
Warning logs are non-crashing and non-critical errors that have occurred on the device. Warning logs would occur when failing to load an image, passing an incorrect encryption key when trying to restore a backup, etc.
</TabItem>
<TabItem value="error">
Error logs are non-crashing but critical errors that have occurred on the device. Error logs would occur on network errors, connection issues, errors returned from the module, etc.
</TabItem>
<TabItem value="critical">
Fatal logs are crashing errors or unhandled errors that have occurred on the device. Fatal logs would occur when LunaSea fails to complete the boot process, fails to render the UI, etc.
</TabItem>
</Tabs>
## Viewing Log History
When a _handled_ error occurs, a toast notification will appear that allows you to directly view the error that just occurred.
LunaSea also stores a list of the **last 100 logs** that have occurred on the device. To access the history of logs, go to Settings -> System -> Logs. The log database size is checked on startup, so all logs that have occurred in the active session will remain in the log history until LunaSea is closed and reopened.
## Exporting Logs
LunaSea offers the ability to export your logs into a JSON file, which can be easily sent to the developer to help debug the problems. The exported logs also include additional information, including the code-execution stack trace to see exactly where in the code the error occurred.
To export your logs, go to Settings -> System -> Logs -> "Export" to trigger an export of your logs. A system-level share menu or dialog prompt will appear with the ability to share or save the exported logs to your device.
> Because the exported logs contain code-execution stack traces, **the logs may unintentionally contain private information**.
>
> Please ensure you do not publicly share your exported logs (or before sharing, manually scrub the exported logs). Only share the logs to trusted parties through private channels such as email or direct messages.
## Clearing Logs
LunaSea offers the ability to clear all recorded logs from your device. While an available option, it is not recommended to clear your logs often as LunaSea will internally ensure the log database does not grow to an obscenely large size.
To clear your logs, go to Settings -> System -> Logs -> "Clear" to trigger a clean of the logs database.

View File

@@ -1,62 +0,0 @@
---
title: Notifications
description: How to setup webhook-based push notifications with LunaSea
---
# Notifications
Many of the supported modules have support for webhooks, which we can utilize with the hosted notification relay to get rich, instant notifications with deep-linking support sent as push notifications directly to your devices running LunaSea!
## Platform Support
Notifications are only supported on a limited set of platforms at this time. Plans are to support all platforms in the future as support from the underlying notification service is added!
| Platform | Supported? |
| :------: | :--------: |
| Android | ✅ |
| iOS | ✅ |
| Linux | ❌ |
| macOS | ✅ |
| Windows | ❌ |
| Web | ❌ |
## Module Support
Not all modules are currently supported, below is a list of all supported modules and if they supported deep linking to the relevant content. Additional support and deeper integration will arrive in future updates!
| Module | Supported? | Deep Linking? |
| :-----------------------------------: | :--------: | :-----------: |
| [Lidarr](/notifications/lidarr) | ✅ | ❌ |
| NZBGet | ❌ | ❌ |
| [Overseerr](/notifications/overseerr) | ✅ | ❌ |
| [Radarr](/notifications/radarr) | ✅ | ✅ |
| SABnzbd | ❌ | ❌ |
| [Sonarr](/notifications/sonarr) | ✅ | ✅ |
| [Tautulli](/notifications/tautulli) | ✅ | ✅ |
## Notification Types
LunaSea supports two different types of notifications: **User-Based** and **Device-Based**.
<Tabs
defaultValue="user"
values={[
{ label: "User-Based", value: "user" },
{ label: "Device-Based", value: "device" },
]}
>
<TabItem value="user">
User-based notifications send notifications to all devices that are linked to your LunaSea account. Your device is automatically linked when you register or sign in to your account. This means that any current and future devices that are signed-in to your account will receive notifications automatically.
</TabItem>
<TabItem value="device">
Device-based notifications send notifications to a single, specific device. Device-based notifications do not require a LunaSea account, but require you to register every device as a new webhook in the module.
</TabItem>
</Tabs>
## Getting Your Webhook URLs
To get the correct webhook URL for each module simply head to the Settings within LunaSea, then into the "Notifications" page! The buttons on each module card will copy the full, constructed webhook URL to receive user-based or device-based notifications for that specific module. Please ensure to copy and use the correct webhook URL for each module, as mixing them up can lead to unexpected results.
> **Do not publicly share your user-based or device-based URL!**
>
> Anyone with access to your user or device webhook URLs can send notifications to your account or device.

View File

@@ -1,3 +0,0 @@
---
redirect: /notifications/custom
---

View File

@@ -1,3 +0,0 @@
---
redirect: /notifications/lidarr
---

View File

@@ -1,3 +0,0 @@
---
redirect: /notifications/overseerr
---

View File

@@ -1,3 +0,0 @@
---
redirect: /notifications/radarr
---

View File

@@ -1,3 +0,0 @@
---
redirect: /notifications/sonarr
---

View File

@@ -1,3 +0,0 @@
---
redirect: /notifications/tautulli
---

View File

@@ -1,39 +0,0 @@
---
title: Profiles
description: Use multiple instances of modules with LunaSea
---
# Profiles
Do you have multiple instances of modules you want to add to LunaSea? Profiles are the way to do this! LunaSea allows you to have an infinite amount of profiles, each of which can contain a whole new set of configurations for modules.
## Adding, Deleting, and Renaming Profiles
To add, delete, or rename a profile, head to Settings -> Profiles. There are a small collection of simple options on this page, each of which should be self-explanatory.
## Changing Profiles
There are many ways to switch profiles within LunaSea, but let it be noted that switching profiles clears all state-stored data from memory, and all fetched data will be fully refreshed.
<Tabs
defaultValue="drawer"
values={[
{ label: "Drawer", value: "drawer" },
{ label: "AppBar", value: "appbar" },
{ label: "Settings", value: "settings" },
]}
>
<TabItem value="drawer">
When you have more than a single profile enabled, the top header of the drawer will show the currently active profile and can be tapped to trigger a dropdown allowing you to select any profile to switch to.
When in a module and you switch to a profile that does not have the module enabled, the only option available on that page will be to return to the dashboard.
</TabItem>
<TabItem value="appbar">
When on the home/base route of a module that has another instance enabled in another profile, a dropdown arrow will be displayed beside the module title in the AppBar. Simply tap the module name to get a dropdown list of profiles that have that module enabled.
Any additional profiles that do not have the module enabled will not be shown within the dropdown. If you have additional profiles but no profile has that specific module enabled, the dropdown will not be accessible.
</TabItem>
<TabItem value="settings">
You can change your profile within the Settings, either by entering the "Profiles" page and selecting the enabled profile or by entering the "Configuration" page and hitting the profile icon in the AppBar.
</TabItem>
</Tabs>

View File

@@ -1,64 +0,0 @@
---
title: Lidarr
description: How to configure and add Lidarr to LunaSea
---
# Lidarr
Adding your Lidarr instance to LunaSea only requires a few steps to get going!
> This documentation only covers adding Lidarr to LunaSea via local area network (LAN) connections, and does not cover exposing Lidarr externally and connecting remotely.
## Preparation
#### Find Your Local Area Network IP Address
Finding your local area network IP address of the machine running Lidarr is the first step to get setup. To find your local IP address, please look at the following guides:
- [Linux](https://ubuntuhandbook.org/index.php/2020/07/find-ip-address-ubuntu-20-04/)
- [macOS](https://osxdaily.com/2010/11/21/find-ip-address-mac/)
- [Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9)
If you are running a different operating system, you can use any search engine to look up "Find local IP address on \<your operating system\>" to typically find tons of guides for any platform.
> It is recommended to set your host machine's IP address to be statically assigned instead of dynamic/DHCP. This ensures that the IP address will not change through machine or network reboots.
#### Check What Port is Being Used
If using the default installation, Lidarr runs on port **8686**. In most cases, this port is not changed and does not need to be changed.
The simplest way to check is to go to Lidarr's web GUI, go to Settings -> General and note the value entered into "Port Number".
#### Ensure Lidarr is Accessible Across Your Network
To ensure that Lidarr is accessible across your local network, check the following:
- In Lidarr's web GUI, go to Settings -> General and enable advanced settings, then ensure that the "Bind Address" is set to `*`
- Check any enabled firewalls to confirm that the port running Lidarr is not being blocked
- _(Windows Only)_: Ensure that Lidarr has been run as administrator at least once
#### Check If You Are Using a URL Base
In Lidarr's web GUI, go to Settings -> General and check the value of "URL Base". If you have nothing set, you can move on. If you do have a value set, please remember the set value as it will be necessary when setting the host within LunaSea.
## Connecting in LunaSea
#### Host
The host is a combination of multiple values found above:
- The local IP address
- The port
- If being used, the URL base
Combine all the values into the following format: `<IP address>:<port>/<URL base>`
For example, if Lidarr is running on port `8686` on a machine that has the IP address `192.168.100.100` with a URL base set to `/lidarr`, the host is: `http://192.168.100.100:8686/lidarr`. If it had no URL base set, it would be `http://192.168.100.100:8686`.
#### API Key
The API key is copied from Lidarr's web GUI, by going to Settings -> General and finding the API key value.
#### Custom Headers
Custom headers allows users to attach custom request headers to each API call that is made. This is typically an advanced feature, and is not necessary in most network configurations.

View File

@@ -1,50 +0,0 @@
---
title: Newznab Search
description: How to configure and add Newznab Search to LunaSea
---
# Newznab Search
LunaSea supports any indexer that supports the [Newznab API specification](https://newznab.readthedocs.io/en/latest/). Most modern indexers (including NZBHydra2) are fully compliant with this specification, and compatible with LunaSea.
> LunaSea supports infinite scrolling of search and category results, which can result in multiple API hits. It is only recommended to add indexers with high API limits to prevent quickly reaching your API limit.
## Adding an Indexer
#### Display Name
Your personal display name for the indexer. The display name can be anything, but indexers are displayed in _alphabetical order_ and the display name you choose will determine where it lands in your list of indexers.
#### Indexer API Host
This is the _API host_ from the indexer. Do not confused this with the homepage for the indexer! Some indexers use the same URL, but many indexers will use a separate URL (commonly https://api.indexer.tld).
If your indexer can and has been added to Lidarr, Radarr, or Sonarr, you can simply copy the URL from the indexer configuration page within their settings.
#### Indexer API Key
Your API key that is typically available in the dashboard of the indexer or received by email when originally signing up for the indexer.
If you are unable to find your API key, consider contacting the administrators of the indexer to get help! The LunaSea developer and community users can try to help, but we cannot guarantee support if nobody has access to said indexer.
#### Custom Headers
Custom headers allows users to attach custom request headers to each API call that is made. This is typically an advanced feature, and is not necessary for most public indexers.
## Indexer API Hosts
| Indexer | API Host |
| :------------: | :----------------------------: |
| DOGnzb | https://api.dognzb.cr/ |
| DrunkenSlug | https://api.drunkenslug.com/ |
| NZB.su | https://api.nzb.su/ |
| NZBCat | https://nzb.cat |
| NZBFinder | https://nzbfinder.ws |
| NZBGeek | https://api.nzbgeek.info |
| NZBPlanet | https://api.nzbplanet.net |
| omgwtfnzbs | https://api.omgwtfnzbs.me |
| OZnzb | https://api.oznzb.com |
| SimplyNZBs | https://simplynzbs.com |
| Usenet Crawler | https://www.usenet-crawler.com |
Want to add something to list? Make a pull request on [GitHub](https://www.lunasea.app/github)!

View File

@@ -1,8 +0,0 @@
---
title: NZBGet
description: How to configure and add NZBGet to LunaSea
---
# NZBGet
> Coming soon!

View File

@@ -1,8 +0,0 @@
---
title: Overseerr
description: How to configure and add Overseerr to LunaSea
---
# Overseerr
> Coming soon!

View File

@@ -1,64 +0,0 @@
---
title: Radarr
description: How to configure and add Radarr to LunaSea
---
# Radarr
Adding your Radarr instance to LunaSea only requires a few steps to get going!
> This documentation only covers adding Radarr to LunaSea via local area network (LAN) connections, and does not cover exposing Radarr externally and connecting remotely.
## Preparation
#### Find Your Local Area Network IP Address
Finding your local area network IP address of the machine running Radarr is the first step to get setup. To find your local IP address, please look at the following guides:
- [Linux](https://ubuntuhandbook.org/index.php/2020/07/find-ip-address-ubuntu-20-04/)
- [macOS](https://osxdaily.com/2010/11/21/find-ip-address-mac/)
- [Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9)
If you are running a different operating system, you can use any search engine to look up "Find local IP address on \<your operating system\>" to typically find tons of guides for any platform.
> It is recommended to set your host machine's IP address to be statically assigned instead of dynamic/DHCP. This ensures that the IP address will not change through machine or network reboots.
#### Check What Port is Being Used
If using the default installation, Radarr runs on port **7878**. In most cases, this port is not changed and does not need to be changed.
The simplest way to check is to go to Radarr's web GUI, go to Settings -> General and note the value entered into "Port Number".
#### Ensure Radarr is Accessible Across Your Network
To ensure that Radarr is accessible across your local network, check the following:
- In Radarr's web GUI, go to Settings -> General and enable advanced settings, then ensure that the "Bind Address" is set to `*`
- Check any enabled firewalls to confirm that the port running Radarr is not being blocked
- _(Windows Only)_: Ensure that Radarr has been run as administrator at least once
#### Check If You Are Using a URL Base
In Radarr's web GUI, go to Settings -> General and check the value of "URL Base". If you have nothing set, you can move on. If you do have a value set, please remember the set value as it will be necessary when setting the host within LunaSea.
## Connecting in LunaSea
#### Host
The host is a combination of multiple values found above:
- The local IP address
- The port
- If being used, the URL base
Combine all the values into the following format: `<IP address>:<port>/<URL base>`
For example, if Radarr is running on port `7878` on a machine that has the IP address `192.168.100.100` with a URL base set to `/radarr`, the host is: `http://192.168.100.100:7878/radarr`. If it had no URL base set, it would be `http://192.168.100.100:7878`.
#### API Key
The API key is copied from Radarr's web GUI, by going to Settings -> General and finding the API key value.
#### Custom Headers
Custom headers allows users to attach custom request headers to each API call that is made. This is typically an advanced feature, and is not necessary in most network configurations.

View File

@@ -1,8 +0,0 @@
---
title: SABnzbd
description: How to configure and add SABnzbd to LunaSea
---
# SABnzbd
> Coming soon!

View File

@@ -1,64 +0,0 @@
---
title: Sonarr
description: How to configure and add Sonarr to LunaSea
---
# Sonarr
Adding your Sonarr instance to LunaSea only requires a few steps to get going!
> This documentation only covers adding Sonarr to LunaSea via local area network (LAN) connections, and does not cover exposing Sonarr externally and connecting remotely.
## Preparation
#### Find Your Local Area Network IP Address
Finding your local area network IP address of the machine running Sonarr is the first step to get setup. To find your local IP address, please look at the following guides:
- [Linux](https://ubuntuhandbook.org/index.php/2020/07/find-ip-address-ubuntu-20-04/)
- [macOS](https://osxdaily.com/2010/11/21/find-ip-address-mac/)
- [Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9)
If you are running a different operating system, you can use any search engine to look up "Find local IP address on \<your operating system\>" to typically find tons of guides for any platform.
> It is recommended to set your host machine's IP address to be statically assigned instead of dynamic/DHCP. This ensures that the IP address will not change through machine or network reboots.
#### Check What Port is Being Used
If using the default installation, Sonarr runs on port **8989**. In most cases, this port is not changed and does not need to be changed.
The simplest way to check is to go to Sonarr's web GUI, go to Settings -> General and note the value entered into "Port Number".
#### Ensure Sonarr is Accessible Across Your Network
To ensure that Sonarr is accessible across your local network, check the following:
- In Sonarr's web GUI, go to Settings -> General and enable advanced settings, then ensure that the "Bind Address" is set to `*`
- Check any enabled firewalls to confirm that the port running Sonarr is not being blocked
- _(Windows Only)_: Ensure that Sonarr has been run as administrator at least once
#### Check If You Are Using a URL Base
In Sonarr's web GUI, go to Settings -> General and check the value of "URL Base". If you have nothing set, you can move on. If you do have a value set, please remember the set value as it will be necessary when setting the host within LunaSea.
## Connecting in LunaSea
#### Host
The host is a combination of multiple values found above:
- The local IP address
- The port
- If being used, the URL base
Combine all the values into the following format: `<IP address>:<port>/<URL base>`
For example, if Sonarr is running on port `8989` on a machine that has the IP address `192.168.100.100` with a URL base set to `/sonarr`, the host is: `http://192.168.100.100:8989/sonarr`. If it had no URL base set, it would be `http://192.168.100.100:8989`.
#### API Key
The API key is copied from Sonarr's web GUI, by going to Settings -> General and finding the API key value.
#### Custom Headers
Custom headers allows users to attach custom request headers to each API call that is made. This is typically an advanced feature, and is not necessary in most network configurations.

View File

@@ -1,8 +0,0 @@
---
title: Tautulli
description: How to configure and add Tautulli to LunaSea
---
# Tautulli
> Coming soon!

View File

@@ -1,8 +0,0 @@
---
title: Wake on LAN
description: How to configure and add Wake on LAN to LunaSea
---
# Wake on LAN
> Coming soon!

View File

@@ -1,125 +0,0 @@
---
title: Custom Notifications
description: Setting up custom webhook-based push notifications
---
# Custom Notifications
## Preparation
> Custom notifications are considered an advanced feature, and requires basic knowledge of JSON syntax and creating your own scripts/tools to handle sending the payloads.
1. Read through the main [Notifications](/lunasea/notifications) page
2. Copy your device-based or user-based webhook URL from LunaSea
You will need to slightly modify the webhook URL you have copied from any of the modules. Simply replace the name of the module within the webhook URL to custom and you're good to go!
Alternatively, you can copy the content of the URL after the last slash (after `device/` or `user/`) to obtain your Firebase device or user identifier.
## Device-Based
Send a custom notification using a device token to a single device running LunaSea.
<Tabs
defaultValue="endpoint"
values={[
{ label: "Endpoint", value: "endpoint" },
{ label: "JSON Body Schema", value: "json_body_schema" },
]}
>
<TabItem value="endpoint">
```bash
POST https://notify.lunasea.app/v1/custom/device/:device_id
```
`device_id`: Firebase device identifier
</TabItem>
<TabItem value="json_body_schema">
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Device-Based Custom Notification",
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The notification title"
},
"body": {
"type": "string",
"description": "The notification body content"
},
"image": {
"type": "string",
"description": "A publicly accessible image to be attached to the notification"
}
},
"required": ["title", "body"]
}
```
If `title` or `body` are missing in the request, a notification will still be sent but with a default title or body respectively.
</TabItem>
</Tabs>
## User-Based
<Tabs
defaultValue="endpoint"
values={[
{ label: "Endpoint", value: "endpoint" },
{ label: "JSON Body Schema", value: "json_body_schema" },
]}
>
<TabItem value="endpoint">
```bash
POST https://notify.lunasea.app/v1/custom/user/:user_id
```
`user_id`: Firebase user identifier
</TabItem>
<TabItem value="json_body_schema">
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "User-Based Custom Notification",
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The notification title"
},
"body": {
"type": "string",
"description": "The notification body content"
},
"image": {
"type": "string",
"description": "A publicly accessible image to be attached to the notification"
}
},
"required": ["title", "body"]
}
```
If `title` or `body` are missing in the request, a notification will still be sent but with a default title or body respectively.
</TabItem>
</Tabs>
## Troubleshooting
- Ensure that the required `title` parameter is a string type
- If the type is not a string, the notification will fail
- Sending no value or a null value will result in the title "Unknown Title" being used
- Ensure that the required `body` parameter is a string type
- If the type is not a string, the notification will fail
- Sending no value or a null value will result in the body "Unknown Content" being used
- If sending an image, ensure that the content is a valid URL
- If the content is not a valid URL, the notification will fail
- The URL must contain the protocol, `http://` or `https://`
- The URL must be a direct link to the image and does not redirect
- The URL must be publicly accessible, not requiring any authentication to access
- If sending an image, the image must be a supported image type
- Supported types include JPGs, PNGs, and animated GIFs

View File

@@ -1,92 +0,0 @@
---
title: Lidarr Notifications
description: Setting up Lidarr for webhook-based push notifications
---
# Lidarr Notifications
## Preparation
1. Read through the main [Notifications](/lunasea/notifications) page
2. Copy your device-based or user-based webhook URL from LunaSea
## Setup the Webhook
In Lidarr's web GUI, head to Settings -> Connect, hit the "+" button to add a new connection and select "Webhook". Please follow each section below to setup the webhook:
<Tabs
defaultValue="name"
values={[
{ label: "Name", value: "name" },
{ label: "Triggers", value: "triggers" },
{ label: "Tags", value: "tags" },
{ label: "URL", value: "url" },
{ label: "Method", value: "method" },
{ label: "Username", value: "username" },
{ label: "Password", value: "password" },
]}
>
<TabItem value="name">
Select any name, for example "LunaSea".
</TabItem>
<TabItem value="triggers">
Select which events should trigger a push notification. The following triggers are supported:
| Trigger | Supported? |
| :---------------------: | :--------: |
| On Grab | ✅ |
| On Release Import | ✅ |
| On Upgrade | ✅ |
| On Download Failure | ❌ |
| On Import Failure | ❌ |
| On Rename | ✅ |
| On Track Retag | ✅ |
| On Application Update | ❌ |
| On Health Issue | ❌ |
| Include Health Warnings | ❌ |
</TabItem>
<TabItem value="tags">
You can _optionally_ select a tag that must be attached to an artist for the webhook to get triggered.
This can be useful when working with a large media collection to only receive notifications for content you are actively monitoring.
If you want to receive notifications for all artists, leave the tags area empty.
</TabItem>
<TabItem value="url">
Paste the full device-based or user-based URL that was copied from LunaSea.
Each webhook can support a single user-based or device-based webhook URL. Attaching multiple device-based or user-based webhooks to a single Lidarr instance requires setting up multiple webhooks.
</TabItem>
<TabItem value="method">
Keep the method on `POST`. Changing the method to `PUT` will cause the webhooks to fail.
</TabItem>
<TabItem value="username">
The username field should be an _exact match_ to the profile that this module instance was added to within LunaSea. Capitalization and punctuation does matter.
> This step is only required if you are not using the default LunaSea profile (`default`). LunaSea will assume the default profile when none is supplied.
>
> Correctly setting up this field is critically important to get full deep-linking support.
</TabItem>
<TabItem value="password">
Leave the password field empty. Setting this field will currently have no effect.
</TabItem>
</Tabs>
Once setup, close LunaSea and run the webhook test in Lidarr. You should receive a new notification letting you know that LunaSea is ready to receive Lidarr notifications!
## Example
An example Lidarr webhook can be seen below:
- No tags are set for this webhook, meaning all artists will trigger a notification
- This is a user-based notification webhook, meaning it will be sent to all devices that are linked to the user ID `1234567890`
- The webhook is associated with the profile named `My Profile`
![Lidarr Notification Example](/assets/notification-lidarr-example.png)

View File

@@ -1,67 +0,0 @@
---
title: Overseerr Notifications
description: Setting up Overseerr for webhook-based push notifications
---
# Overseerr Notifications
## Preparation
1. Read through the main [Notifications](/lunasea/notifications) page
2. Copy your device-based or user-based webhook URL from LunaSea
## Setup the Webhook
In Overseerr's web GUI, head to Settings -> Notifications -> LunaSea. Ensure that the agent is enabled, then follow each section below to setup the webhook:
<Tabs
defaultValue="webhook_url"
values={[
{ label: "Webhook URL", value: "webhook_url" },
{ label: "Profile Name", value: "profile_name" },
{ label: "Notification Types", value: "notification_types" },
]}
>
<TabItem value="webhook_url">
Paste the full device-based or user-based URL that was copied from LunaSea.
Overseerr currently only supports 1 LunaSea notification agent, which means you can only setup a single user-based or device-based notification.
</TabItem>
<TabItem value="profile_name">
The profile name field should be an _exact match_ to the profile that this module instance was added to within LunaSea. Capitalization and punctuation does matter.
> This step is only required if you are not using the default LunaSea profile (`default`). LunaSea will assume the default profile when none is supplied.
>
> Correctly setting up this field is critically important to get full deep-linking support.
</TabItem>
<TabItem value="notification_types">
Select which events should trigger a push notification. The following triggers are supported:
| Trigger | Supported? |
| :----------------------------: | :--------: |
| Request Pending Approval | ✅ |
| Request Automatically Approved | ✅ |
| Request Approved | ✅ |
| Request Declined | ✅ |
| Request Available | ✅ |
| Request Processing Failed | ✅ |
| Issue Reported | ✅ |
| Issue Comment | ✅ |
| Issue Resolved | ✅ |
| Issue Reopened | ✅ |
</TabItem>
</Tabs>
Once setup, close LunaSea and run the webhook test in Overseerr. You should receive a new notification letting you know that LunaSea is ready to receive Overseerr notifications!
## Example
An example Overseerr webhook can be seen below:
- This is a user-based notification webhook, meaning it will be sent to all devices that are linked to the user ID `1234567890`
- The webhook is associated with the profile named `My Profile`
![Overseerr Notification Example](/assets/notification-overseerr-example.png)

View File

@@ -1,92 +0,0 @@
---
title: Radarr Notifications
description: Setting up Radarr for webhook-based push notifications
---
# Radarr Notifications
## Preparation
1. Read through the main [Notifications](/lunasea/notifications) page
2. Copy your device-based or user-based webhook URL from LunaSea
## Setup the Webhook
In Radarr's web GUI, head to Settings -> Connect, hit the "+" button to add a new connection and select "Webhook". Please follow each section below to setup the webhook:
<Tabs
defaultValue="name"
values={[
{ label: "Name", value: "name" },
{ label: "Triggers", value: "triggers" },
{ label: "Tags", value: "tags" },
{ label: "URL", value: "url" },
{ label: "Method", value: "method" },
{ label: "Username", value: "username" },
{ label: "Password", value: "password" },
]}
>
<TabItem value="name">
Select any name, for example "LunaSea".
</TabItem>
<TabItem value="triggers">
Select which events should trigger a push notification. The following triggers are supported:
| Trigger | Supported? |
| :------------------------------: | :--------: |
| On Grab | ✅ |
| On Import | ✅ |
| On Upgrade | ✅ |
| On Rename | ✅ |
| On Movie Delete | ❌ |
| On Movie File Delete | ❌ |
| On Movie File Delete For Upgrade | ❌ |
| On Health Issue | ✅ |
| Include Health Warnings | ✅ |
| On Application Update | ❌ |
</TabItem>
<TabItem value="tags">
You can _optionally_ select a tag that must be attached to a movie for the webhook to get triggered.
This can be useful when working with a large media collection to only receive notifications for content you are actively monitoring.
If you want to receive notifications for all movies, leave the tags area empty.
</TabItem>
<TabItem value="url">
Paste the full device-based or user-based URL that was copied from LunaSea.
Each webhook can support a single user-based or device-based webhook URL. Attaching multiple device-based or user-based webhooks to a single Radarr instance requires setting up multiple webhooks.
</TabItem>
<TabItem value="method">
Keep the method on `POST`. Changing the method to `PUT` will cause the webhooks to fail.
</TabItem>
<TabItem value="username">
The username field should be an _exact match_ to the profile that this module instance was added to within LunaSea. Capitalization and punctuation does matter.
> This step is only required if you are not using the default LunaSea profile (`default`). LunaSea will assume the default profile when none is supplied.
>
> Correctly setting up this field is critically important to get full deep-linking support.
</TabItem>
<TabItem value="password">
Leave the password field empty. Setting this field will currently have no effect.
</TabItem>
</Tabs>
Once setup, close LunaSea and run the webhook test in Radarr. You should receive a new notification letting you know that LunaSea is ready to receive Radarr notifications!
## Example
An example Radarr webhook can be seen below:
- No tags are set for this webhook, meaning all movies will trigger a notification
- This is a user-based notification webhook, meaning it will be sent to all devices that are linked to the user ID `1234567890`
- The webhook is associated with the profile named `My Profile`
![Radarr Notification Example](/assets/notification-radarr-example.png)

View File

@@ -1,92 +0,0 @@
---
title: Sonarr Notifications
description: Setting up Sonarr for webhook-based push notifications
---
# Sonarr Notifications
## Preparation
1. Read through the main [Notifications](/lunasea/notifications) page
2. Copy your device-based or user-based webhook URL from LunaSea
## Setup the Webhook
In Sonarr's web GUI, head to Settings -> Connect, hit the "+" button to add a new connection and select "Webhook". Please follow each section below to setup the webhook:
<Tabs
defaultValue="name"
values={[
{ label: "Name", value: "name" },
{ label: "Triggers", value: "triggers" },
{ label: "Tags", value: "tags" },
{ label: "URL", value: "url" },
{ label: "Method", value: "method" },
{ label: "Username", value: "username" },
{ label: "Password", value: "password" },
]}
>
<TabItem value="name">
Select any name, for example "LunaSea".
</TabItem>
<TabItem value="triggers">
Select which events should trigger a push notification. The following triggers are supported:
| Trigger | Supported? |
| :--------------------------------: | :--------: |
| On Grab | ✅ |
| On Import | ✅ |
| On Upgrade | ✅ |
| On Rename | ✅ |
| On Series Delete | ❌ |
| On Episode File Delete | ❌ |
| On Episode File Delete For Upgrade | ❌ |
| On Health Issue | ✅ |
| Include Health Warnings | ✅ |
| On Application Update | ❌ |
</TabItem>
<TabItem value="tags">
You can _optionally_ select a tag that must be attached to a series for the webhook to get triggered.
This can be useful when working with a large media collection to only receive notifications for content you are actively monitoring.
If you want to receive notifications for all series, leave the tags area empty.
</TabItem>
<TabItem value="url">
Paste the full device-based or user-based URL that was copied from LunaSea.
Each webhook can support a single user-based or device-based webhook URL. Attaching multiple device-based or user-based webhooks to a single Sonarr instance requires setting up multiple webhooks.
</TabItem>
<TabItem value="method">
Keep the method on `POST`. Changing the method to `PUT` will cause the webhooks to fail.
</TabItem>
<TabItem value="username">
The username field should be an _exact match_ to the profile that this module instance was added to within LunaSea. Capitalization and punctuation does matter.
> This step is only required if you are not using the default LunaSea profile (`default`). LunaSea will assume the default profile when none is supplied.
>
> Correctly setting up this field is critically important to get full deep-linking support.
</TabItem>
<TabItem value="password">
Leave the password field empty. Setting this field will currently have no effect.
</TabItem>
</Tabs>
Once setup, close LunaSea and run the webhook test in Sonarr. You should receive a new notification letting you know that LunaSea is ready to receive Sonarr notifications!
## Example
An example Sonarr webhook can be seen below:
- No tags are set for this webhook, meaning all series will trigger a notification
- This is a user-based notification webhook, meaning it will be sent to all devices that are linked to the user ID `1234567890`
- The webhook is associated with the profile named `My Profile`
![Sonarr Notification Example](/assets/notification-sonarr-example.png)

View File

@@ -1,89 +0,0 @@
---
title: Tautulli Notifications
description: Setting up Tautulli for webhook-based push notifications
---
# Tautulli Notifications
## Preparation
1. Read through the main [Notifications](/lunasea/notifications) page
2. Copy your device-based or user-based webhook URL from LunaSea
## Setup the Webhook
In Tautulli's web GUI, head to Settings -> Notification Agents, hit the "Add a new notification agent" button and select "LunaSea". Please follow each section below to setup the webhook:
<Tabs
defaultValue="configuration"
values={[
{ label: "Configuration", value: "configuration" },
{ label: "Triggers", value: "triggers" },
{ label: "Conditions", value: "conditions" },
{ label: "Text", value: "text" },
]}
>
<TabItem value="configuration">
**LunaSea Webhook URL**
Paste the full device-based or user-based URL that was copied from LunaSea.
**LunaSea Profile**
Enter in the name of the profile which should be an _exact match_ to the profile that this module instance was added to within LunaSea. Capitalization and punctuation does matter.
> This step is only required if you are not using the default LunaSea profile (`default`). LunaSea will assume the default profile when none is supplied.
>
> Correctly setting up this field is critically important to get full deep-linking support.
</TabItem>
<TabItem value="triggers">
Select which events should trigger a push notification. The following triggers are supported:
| Trigger | Supported? |
| :--------------------------: | :--------: |
| Playback Start | ✅ |
| Playback Stop | ✅ |
| Playback Pause | ✅ |
| Playback Resume | ✅ |
| Playback Error | ✅ |
| Transcode Decision Change | ✅ |
| Watched | ✅ |
| Buffer Warning | ✅ |
| User Concurrent Streams | ✅ |
| User New Device | ✅ |
| Recently Added | ✅ |
| Plex Server Down | ✅ |
| Plex Server Back Up | ✅ |
| Plex Remote Access Down | ✅ |
| Plex Remote Access Back Up | ✅ |
| Plex Update Available | ✅ |
| Tautulli Update Available | ✅ |
| Tautulli Database Corruption | ✅ |
</TabItem>
<TabItem value="conditions">
You can _optionally_ add conditions that must be met for the webhook notifications to trigger.
You can set as many conditions as you like, and can combine different conditions for different triggers by adding separate webhooks to Tautulli.
</TabItem>
<TabItem value="text">
A default message is set for all trigger types, but on this page you can alter the exact text that would appear in the message.
Please read the top of this tab in Tautulli about how to utilize the different modifiers.
</TabItem>
</Tabs>
Once setup, close LunaSea and run the webhook test in Tautulli. You should receive a new notification letting you know that LunaSea is ready to receive Tautulli notifications!
## Attach Images to Notifications
This step is **optional** but recommended. Unlike other modules, in order to receive the actual images (posters, etc.) instead of a generic poster along with the notification, you will need to setup an image host within Tautulli.
1. Go to Tautulli's web GUI
2. Open the Settings, enter "3rd Party APIs"
3. Select any of the available image providers
- If selecting `Self-hosted on public domain`, ensure that the image path (`/tautulli/image`) is publicly accessible from the internet
4. Follow the [3rd Party APIs Guide](https://github.com/Tautulli/Tautulli/wiki/3rd-Party-APIs-Guide) to acquire the required details for the chosen image provider
5. Enter and save the acquired API/Client ID information

View File

@@ -1,62 +0,0 @@
---
title: Android Releases
description: Where to download Android releases of LunaSea
---
# Android Releases
> If you want a stable experience, stick with stable releases. Want to test new builds of LunaSea? Read about the [build channels](/getting-started/build-channels) to make the right choice!
LunaSea is available on Android 7.0+.
Note that Google Play Services are not required for core functionality, however LunaSea account features and push notifications are not supported at this time.
## Google Play Store
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_
The easiest way for most users with Android devices would be to download releases of LunaSea directly from the [Google Play Store](https://www.lunasea.app/playstore)!
<Tabs
defaultValue="stable"
values={[
{ label: "Stable", value: "stable" },
{ label: "Candidate", value: "candidate" },
{ label: "Beta", value: "beta" },
{ label: "Edge", value: "edge" },
]}
>
<TabItem value="stable">
Head to the [Google Play Store](https://www.lunasea.app/playstore)!
</TabItem>
<TabItem value="candidate">
1. Head to the [Google Play Store](https://www.lunasea.app/playstore)
2. Register for the test directly on the store listing
3. Download LunaSea via the Google Play Store
</TabItem>
<TabItem value="beta">
1. Join the [LunaSea: Beta Testing](https://groups.google.com/g/lunasea-beta-test) Google Group
2. Head to the [Google Play Store](https://www.lunasea.app/playstore)
3. Register for the test directly on the store listing
4. Download LunaSea via the Google Play Store
</TabItem>
<TabItem value="edge">
Because of the limitations on internal testing set by the Google Play Store, develop builds on Android are only available upon request to a very limited amount of users.
Reach out via [email](mailto:hello@lunasea.app) for more information.
</TabItem>
</Tabs>
## Build Bucket
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
_Format(s): `.apk`_
All Android releases are available in the [Build Bucket](https://builds.lunasea.app/#latest/)!
## GitHub Releases
_Channel(s): `Stable`_<br/>
_Format(s): `.apk`_
All stable releases are available on GitHub via the [Releases](https://github.com/JagandeepBrar/LunaSea/releases) page!

View File

@@ -1,69 +0,0 @@
---
title: iOS Releases
description: Where to download iOS releases of LunaSea
---
# iOS Releases
> If you want a stable experience, stick with stable releases. Want to test new builds of LunaSea? Read about the [build channels](/getting-started/build-channels) to make the right choice!
LunaSea is available on iOS 11.0+.
Note that installation of iOS app package (`.ipa`) files is a relatively advanced task and instructions are outside the scope of LunaSea's documentation and no support will be provided.
## App Store
_Channel(s): `Stable`_
The easiest way for most users with iOS devices who want stable releases would be to download releases of LunaSea directly from the [App Store](https://www.lunasea.app/appstore)!
## TestFlight
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_
The easiest way for most users with iOS devices to use test channels is using the [TestFlight](https://apps.apple.com/app/testflight/id899247664) platform!
<Tabs
defaultValue="stable"
values={[
{ label: "Stable", value: "stable" },
{ label: "Candidate", value: "candidate" },
{ label: "Beta", value: "beta" },
{ label: "Edge", value: "edge" },
]}
>
<TabItem value="stable">
1. [Download TestFlight for iOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight stable channel](https://www.lunasea.app/testflight/stable)
3. Download LunaSea via the TestFlight application
</TabItem>
<TabItem value="candidate">
1. [Download TestFlight for iOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight candidate channel](https://www.lunasea.app/testflight/candidate)
3. Download LunaSea via the TestFlight application
</TabItem>
<TabItem value="beta">
1. [Download TestFlight for iOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight beta channel](https://www.lunasea.app/testflight/beta)
3. Download LunaSea via the TestFlight application
</TabItem>
<TabItem value="edge">
1. [Download TestFlight for iOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight edge channel](https://www.lunasea.app/testflight/edge)
3. Download LunaSea via the TestFlight application
</TabItem>
</Tabs>
## Build Bucket
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
_Format(s): `.ipa`_
All iOS releases are available in the [Build Bucket](https://builds.lunasea.app/#latest/)!
## GitHub Releases
_Channel(s): `Stable`_<br/>
_Format(s): `.ipa`_
All stable releases are available on GitHub via the [Releases](https://github.com/JagandeepBrar/LunaSea/releases) page!

View File

@@ -1,62 +0,0 @@
---
title: Linux Releases
description: Where to download Linux releases of LunaSea
---
# Linux Releases
> If you want a stable experience, stick with stable releases. Want to test new builds of LunaSea? Read about the [build channels](/getting-started/build-channels) to make the right choice!
LunaSea is available on all graphical Linux distributions that have `snap` installed and configured.
## Snapcraft
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_
The easiest way for most users on graphic Linux distributions would be to download releases of LunaSea directly from [Snapcraft](https://www.lunasea.app/snapcraft)!
<Tabs
groupId="channel"
defaultValue="stable"
values={[
{ label: "Stable", value: "stable" },
{ label: "Candidate", value: "candidate" },
{ label: "Beta", value: "beta" },
{ label: "Edge", value: "edge" },
]}
>
<TabItem value="stable">
```bash
sudo snap install lunasea
```
</TabItem>
<TabItem value="candidate">
```bash
sudo snap install lunasea --candidate
```
</TabItem>
<TabItem value="beta">
```bash
sudo snap install lunasea --beta
```
</TabItem>
<TabItem value="edge">
```bash
sudo snap install lunasea --edge
```
</TabItem>
</Tabs>
## Build Bucket
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
_Format(s): `.snap`_
All Linux releases are available in the [Build Bucket](https://builds.lunasea.app/#latest/)!
## GitHub Releases
_Channel(s): `Stable`_<br/>
_Format(s): `.snap`_
All stable releases are available on GitHub via the [Releases](https://github.com/JagandeepBrar/LunaSea/releases) page!

View File

@@ -1,67 +0,0 @@
---
title: macOS Releases
description: Where to download macOS releases of LunaSea
---
# macOS Releases
> If you want a stable experience, stick with stable releases. Want to test new builds of LunaSea? Read about the [build channels](/getting-started/build-channels) to make the right choice!
LunaSea is available on macOS 10.14+.
## TestFlight
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_
The easiest way for most users with macOS devices would be to download releases of LunaSea using the [TestFlight](https://apps.apple.com/app/testflight/id899247664) platform!
<Tabs
defaultValue="stable"
values={[
{ label: "Stable", value: "stable" },
{ label: "Candidate", value: "candidate" },
{ label: "Beta", value: "beta" },
{ label: "Edge", value: "edge" },
]}
>
<TabItem value="stable">
1. [Download TestFlight for macOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight stable channel](https://www.lunasea.app/testflight/stable)
3. Download LunaSea via the TestFlight application
</TabItem>
<TabItem value="candidate">
1. [Download TestFlight for macOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight candidate channel](https://www.lunasea.app/testflight/candidate)
3. Download LunaSea via the TestFlight application
</TabItem>
<TabItem value="beta">
1. [Download TestFlight for macOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight beta channel](https://www.lunasea.app/testflight/beta)
3. Download LunaSea via the TestFlight application
</TabItem>
<TabItem value="edge">
1. [Download TestFlight for macOS](https://apps.apple.com/app/testflight/id899247664)
2. Join the [TestFlight edge channel](https://www.lunasea.app/testflight/edge)
3. Download LunaSea via the TestFlight application
</TabItem>
</Tabs>
## Build Bucket
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
_Format(s): `.dmg`, `.zip`_
All macOS releases are available in the [Build Bucket](https://builds.lunasea.app/#latest/)!
## Homebrew Cask
_Channel(s): `Stable`_<br/>
All stable releases are available via [Homebrew Cask](https://formulae.brew.sh/cask/lunasea)!
## GitHub Releases
_Channel(s): `Stable`_<br/>
_Format(s): `.dmg`, `.zip`_
All stable releases are available on GitHub via the [Releases](https://github.com/JagandeepBrar/LunaSea/releases) page!

View File

@@ -1,88 +0,0 @@
---
title: Web Releases
description: Where to download Web releases of LunaSea
---
# Web Releases
> If you want a stable experience, stick with stable releases. Want to test new builds of LunaSea? Read about the [build channels](/getting-started/build-channels) to make the right choice!
## Hosted Builds
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
All web releases of LunaSea are available on hosted instances by the LunaSea team! All communication and data stored is client-side, but there are some limitations of the platform which can be [viewed here](/getting-started/platform-restrictions).
<Tabs
defaultValue="stable"
values={[
{ label: "Stable", value: "stable" },
{ label: "Candidate", value: "candidate" },
{ label: "Beta", value: "beta" },
{ label: "Edge", value: "edge" },
]}
>
<TabItem value="stable">
Access the stable release [here](https://web.lunasea.app)!
</TabItem>
<TabItem value="candidate">
Access the candidate release [here](https://candidate.web.lunasea.app)!
</TabItem>
<TabItem value="beta">
Access the beta release [here](https://beta.web.lunasea.app)!
</TabItem>
<TabItem value="edge">
Access the edge release [here](https://edge.web.lunasea.app)!
</TabItem>
</Tabs>
## Docker
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
All web releases of LunaSea are also available in officially hosted Docker images! There is currently only one value that needs to be configured which is the port mapping. LunaSea functions as a frontend application with all data being stored client-side.
<Tabs
defaultValue="stable"
values={[
{ label: "Stable", value: "stable" },
{ label: "Candidate", value: "candidate" },
{ label: "Beta", value: "beta" },
{ label: "Edge", value: "edge" },
]}
>
<TabItem value="stable">
```bash
docker run -p 80:80 ghcr.io/jagandeepbrar/lunasea:stable
```
</TabItem>
<TabItem value="candidate">
```bash
docker run -p 80:80 ghcr.io/jagandeepbrar/lunasea:candidate
```
</TabItem>
<TabItem value="beta">
```bash
docker run -p 80:80 ghcr.io/jagandeepbrar/lunasea:beta
```
</TabItem>
<TabItem value="edge">
```bash
docker run -p 80:80 ghcr.io/jagandeepbrar/lunasea:edge
```
</TabItem>
</Tabs>
## Build Bucket
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
_Format(s): `.zip`_
All web releases are available in the [Build Bucket](https://builds.lunasea.app/#latest/)!
## GitHub Releases
_Channel(s): `Stable`_<br/>
_Format(s): `.zip`_
All stable releases are available on GitHub via the [Releases](https://github.com/JagandeepBrar/LunaSea/releases) page!

View File

@@ -1,24 +0,0 @@
---
title: Windows Releases
description: Where to download Windows releases of LunaSea
---
# Windows Releases
> If you want a stable experience, stick with stable releases. Want to test new builds of LunaSea? Read about the [build channels](/getting-started/build-channels) to make the right choice!
LunaSea is available on Windows 10+.
## Build Bucket
_Channel(s): `Stable`, `Candidate`, `Beta`, `Edge`_<br/>
_Format(s): `.msix`, `.zip`_
All Windows releases are available in the [Build Bucket](https://builds.lunasea.app/#latest/)!
## GitHub Releases
_Channel(s): `Stable`_<br/>
_Format(s): `.msix`, `.zip`_
All stable releases are available on GitHub via the [Releases](https://github.com/JagandeepBrar/LunaSea/releases) page!

View File

@@ -1,5 +1,5 @@
platform :ios, '11.0'
$FirebaseSDKVersion = '10.0.0'
$FirebaseSDKVersion = '10.2.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@@ -1,6 +1,6 @@
PODS:
- cloud_firestore (4.0.4):
- Firebase/Firestore (= 10.0.0)
- cloud_firestore (4.1.0):
- Firebase/Firestore (= 10.2.0)
- firebase_core
- Flutter
- nanopb (< 2.30910.0, >= 2.30908.0)
@@ -38,64 +38,64 @@ PODS:
- file_picker (0.0.1):
- DKImagePickerController/PhotoGallery
- Flutter
- Firebase/Auth (10.0.0):
- Firebase/Auth (10.2.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 10.0.0)
- Firebase/CoreOnly (10.0.0):
- FirebaseCore (= 10.0.0)
- Firebase/Firestore (10.0.0):
- FirebaseAuth (~> 10.2.0)
- Firebase/CoreOnly (10.2.0):
- FirebaseCore (= 10.2.0)
- Firebase/Firestore (10.2.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 10.0.0)
- Firebase/Messaging (10.0.0):
- FirebaseFirestore (~> 10.2.0)
- Firebase/Messaging (10.2.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 10.0.0)
- Firebase/Storage (10.0.0):
- FirebaseMessaging (~> 10.2.0)
- Firebase/Storage (10.2.0):
- Firebase/CoreOnly
- FirebaseStorage (~> 10.0.0)
- firebase_auth (4.1.1):
- Firebase/Auth (= 10.0.0)
- FirebaseStorage (~> 10.2.0)
- firebase_auth (4.1.4):
- Firebase/Auth (= 10.2.0)
- firebase_core
- Flutter
- firebase_core (2.1.1):
- Firebase/CoreOnly (= 10.0.0)
- firebase_core (2.3.0):
- Firebase/CoreOnly (= 10.2.0)
- Flutter
- firebase_messaging (14.0.4):
- Firebase/Messaging (= 10.0.0)
- firebase_messaging (14.1.2):
- Firebase/Messaging (= 10.2.0)
- firebase_core
- Flutter
- firebase_storage (11.0.4):
- Firebase/Storage (= 10.0.0)
- firebase_storage (11.0.6):
- Firebase/Storage (= 10.2.0)
- firebase_core
- Flutter
- FirebaseAppCheckInterop (10.1.0)
- FirebaseAuth (10.0.0):
- FirebaseAppCheckInterop (10.2.0)
- FirebaseAuth (10.2.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GTMSessionFetcher/Core (~> 2.1)
- FirebaseAuthInterop (10.1.0)
- FirebaseCore (10.0.0):
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- FirebaseAuthInterop (10.2.0)
- FirebaseCore (10.2.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreExtension (10.1.0):
- FirebaseCoreExtension (10.2.0):
- FirebaseCore (~> 10.0)
- FirebaseCoreInternal (10.1.0):
- FirebaseCoreInternal (10.2.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseFirestore (10.0.0):
- FirebaseFirestore/AutodetectLeveldb (= 10.0.0)
- FirebaseFirestore/AutodetectLeveldb (10.0.0):
- FirebaseFirestore (10.2.0):
- FirebaseFirestore/AutodetectLeveldb (= 10.2.0)
- FirebaseFirestore/AutodetectLeveldb (10.2.0):
- FirebaseFirestore/Base
- FirebaseFirestore/WithLeveldb
- FirebaseFirestore/Base (10.0.0)
- FirebaseFirestore/WithLeveldb (10.0.0):
- FirebaseFirestore/Base (10.2.0)
- FirebaseFirestore/WithLeveldb (10.2.0):
- FirebaseFirestore/Base
- FirebaseInstallations (10.1.0):
- FirebaseInstallations (10.2.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseMessaging (10.0.0):
- FirebaseMessaging (10.2.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
@@ -104,12 +104,12 @@ PODS:
- GoogleUtilities/Reachability (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseStorage (10.0.0):
- FirebaseStorage (10.2.0):
- FirebaseAppCheckInterop (~> 10.0)
- FirebaseAuthInterop (~> 10.0)
- FirebaseCore (~> 10.0)
- FirebaseCoreExtension (~> 10.0)
- GTMSessionFetcher/Core (~> 2.1)
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- Flutter (1.0.0)
- flutter_native_splash (0.0.1):
- Flutter
@@ -120,24 +120,24 @@ PODS:
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.8.0):
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.8.0):
- GoogleUtilities/Environment (7.10.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.8.0):
- GoogleUtilities/Logger (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.8.0):
- GoogleUtilities/Network (7.10.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.8.0)"
- GoogleUtilities/Reachability (7.8.0):
- "GoogleUtilities/NSData+zlib (7.10.0)"
- GoogleUtilities/Reachability (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.8.0):
- GoogleUtilities/UserDefaults (7.10.0):
- GoogleUtilities/Logger
- GTMSessionFetcher/Core (2.2.0)
- GTMSessionFetcher/Core (3.0.0)
- in_app_purchase_storekit (0.0.1):
- Flutter
- nanopb (2.30909.0):
@@ -152,16 +152,14 @@ PODS:
- PromisesObjC (2.1.1)
- quick_actions_ios (0.0.1):
- Flutter
- SDWebImage (5.13.5):
- SDWebImage/Core (= 5.13.5)
- SDWebImage/Core (5.13.5)
- Sentry (7.30.0):
- Sentry/Core (= 7.30.0)
- Sentry/Core (7.30.0)
- SDWebImage (5.14.2):
- SDWebImage/Core (= 5.14.2)
- SDWebImage/Core (5.14.2)
- Sentry/HybridSDK (7.31.2)
- sentry_flutter (0.0.1):
- Flutter
- FlutterMacOS
- Sentry (~> 7.30.0)
- Sentry/HybridSDK (= 7.31.2)
- share_plus (0.0.1):
- Flutter
- shared_preferences_ios (0.0.1):
@@ -181,7 +179,7 @@ DEPENDENCIES:
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- firebase_storage (from `.symlinks/plugins/firebase_storage/ios`)
- FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.0.0`)
- FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.2.0`)
- Flutter (from `Flutter`)
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
- in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/ios`)
@@ -233,7 +231,7 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/firebase_storage/ios"
FirebaseFirestore:
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
:tag: 10.0.0
:tag: 10.2.0
Flutter:
:path: Flutter
flutter_native_splash:
@@ -260,49 +258,49 @@ EXTERNAL SOURCES:
CHECKOUT OPTIONS:
FirebaseFirestore:
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
:tag: 10.0.0
:tag: 10.2.0
SPEC CHECKSUMS:
cloud_firestore: 62c5fa0e5ce5373be25d6233e8edbbe991fa973d
cloud_firestore: 14451f06cca99dbd56b069624621063150fef3e5
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95
Firebase: 1b810f3d0c0532e27a48f1961f8c0400a668a2cf
firebase_auth: dd33e93fce72a1c72040f7380dacf06e89db5705
firebase_core: 5c0bb0ca7d0e70480a68a6e9ad9bf55d1edd5305
firebase_messaging: bf848602391fa6ee68d86e337f81be14be120aaf
firebase_storage: 5cf5e677fd9793e26ec5d006100c25e28cd21c05
FirebaseAppCheckInterop: 53eec3c354a95f8fe6ff947dd9518ea17f624914
FirebaseAuth: 493382cf533cc45e2862b00e9aa4cfe4c98daf71
FirebaseAuthInterop: 15b2c717321d5e46a60562e388c4d1b039ea7e28
FirebaseCore: 97f48a3a567a72b8d4daa0f03c3aadb78df4e995
FirebaseCoreExtension: 69b966c399abc4ca6dc75006ab87160f81512725
FirebaseCoreInternal: 96d75228e10fd369564da51bd898414eb0f54df5
FirebaseFirestore: d1b97d497a6e6c31bb38dff714af8e606395b959
FirebaseInstallations: 99d24bac0243cf8b0e96cf5426340d211f0bcc80
FirebaseMessaging: 8916bf5edb1dbfac74665a181e4d1ab3a78a08a2
FirebaseStorage: 8b0b0630e11b9f3e4a479a26cfccb70ec790ec50
Firebase: a3ea7eba4382afd83808376edb99acdaff078dcf
firebase_auth: 2e7181850b75b99cdf7eccffa35def8f7704b905
firebase_core: db1432de826785171029b7c1a26e5b22ce1dd477
firebase_messaging: 7d54a2ef65a4a28c5729241bbdd5854d305e86ec
firebase_storage: c08af1e9ef906c05586b91cb52adc759dddee96e
FirebaseAppCheckInterop: af164d9c623f82174e3ffa54394dee189587c601
FirebaseAuth: 08e7739244eeae5216d0a3f8d9f16a76be9c252e
FirebaseAuthInterop: 027d42ca8fec84dc6151566479af05095a0bd5c0
FirebaseCore: 813838072b797b64f529f3c2ee35e696e5641dd1
FirebaseCoreExtension: d08b424832917cf13612021574399afbbedffeef
FirebaseCoreInternal: 091bde13e47bb1c5e9fe397634f3593dc390430f
FirebaseFirestore: 8efd95c87f0210125fbd50d1a894e2693053c9c9
FirebaseInstallations: 004915af170935e3a583faefd5f8bc851afc220f
FirebaseMessaging: cc9f40f5b7494680f3844d08e517e92aa4e8d9f7
FirebaseStorage: e7b3fdc90b579cda35e5a0e4c6b206325766e75a
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
GTMSessionFetcher: d62ffccea5108bb9e7762ee121ae63bbdd2c6303
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
GTMSessionFetcher: c1edebe64e9fb4e8f6415d018edf1fd3eac074a1
in_app_purchase_storekit: d7fcf4646136ec258e237872755da8ea6c1b6096
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
quick_actions_ios: 56c03753992beabaa6c598e470e12d430d6e5e2f
SDWebImage: 23d714cd599354ee7906dbae26dff89b421c4370
Sentry: dcd74a503a6d4594ef5d6ab28cf30895a2c19a40
sentry_flutter: d6f51618010b194d871b063903b1bb8170d396fb
quick_actions_ios: d211ffc5d7619ace7e9fb1800540b14a1aafe940
SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84
Sentry: b15765d11769852fe78c9add942f7df60ed5dbf5
sentry_flutter: 8ef5e68ee2d301805279ed134b3b38dbe9e090f0
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
PODFILE CHECKSUM: 0f2923ed3bf0e590c5af6cab3b1cde48e6ae0eec
PODFILE CHECKSUM: b2f109c17926fd56cbc12eababc3e30100824d15
COCOAPODS: 1.11.3

View File

@@ -11,6 +11,7 @@ import 'package:lunasea/vendor.dart';
import 'package:lunasea/widgets/ui.dart';
enum LunaSeaDatabase<T> with LunaTableMixin<T> {
ANDROID_BACK_OPENS_DRAWER<bool>(true),
DRAWER_AUTOMATIC_MANAGE<bool>(true),
DRAWER_MANUAL_ORDER<List>([]),
ENABLED_PROFILE<String>(LunaProfile.DEFAULT_PROFILE),

View File

@@ -56,13 +56,14 @@ class _State extends State<ScheduleView> {
Tuple2<List<Widget>, double> _buildSchedule() {
double offset = 0.0;
double offsetOfSelected = 0.0;
List<Widget> days = [];
List<DateTime> keys = widget.events.keys.toList();
keys.sort();
for (final key in keys) {
final selected = context.read<ModuleState>().selected;
if (selected.isAtSameMomentAs(key)) {
if (key.isBefore(selected) || key.isAtSameMomentAs(selected)) {
offsetOfSelected = offset;
}

View File

@@ -4,6 +4,7 @@ import 'package:lunasea/database/tables/bios.dart';
import 'package:lunasea/modules/settings.dart';
import 'package:lunasea/system/localization.dart';
import 'package:lunasea/system/network/network.dart';
import 'package:lunasea/system/platform.dart';
class ConfigurationGeneralRoute extends StatefulWidget {
const ConfigurationGeneralRoute({
@@ -42,6 +43,7 @@ class _State extends State<ConfigurationGeneralRoute>
..._localization(),
..._modules(),
if (LunaNetwork.isSupported) ..._network(),
..._platform(),
],
);
}
@@ -77,6 +79,33 @@ class _State extends State<ConfigurationGeneralRoute>
];
}
List<Widget> _platform() {
if (LunaPlatform.isAndroid) {
return [
LunaHeader(text: 'settings.Platform'.tr()),
_openDrawerOnBackAction(),
];
}
return [];
}
Widget _openDrawerOnBackAction() {
const _db = LunaSeaDatabase.ANDROID_BACK_OPENS_DRAWER;
return _db.listenableBuilder(
builder: (context, _) => LunaBlock(
title: 'settings.OpenDrawerOnBackAction'.tr(),
body: [
TextSpan(text: 'settings.OpenDrawerOnBackActionDescription'.tr()),
],
trailing: LunaSwitch(
value: _db.read(),
onChanged: _db.update,
),
),
);
}
Widget _amoledTheme() {
const _db = LunaSeaDatabase.THEME_AMOLED;
return _db.listenableBuilder(

View File

@@ -172,7 +172,7 @@ class TautulliAPIHelper {
.api!
.activity
.terminateSession(
sessionId: session.sessionId,
sessionKey: session.sessionKey,
message: terminationMessage,
)
.then((_) {

View File

@@ -120,26 +120,26 @@ extension _EventTypeExtension on _EventType {
}
Future<void> _bufferWarning(Map data) async =>
_goToActivityDetails(data['session_id']);
_goToActivityDetails(data['session_key']);
Future<void> _playbackErrorEvent(Map data) async =>
_goToUserDetails(int.tryParse(data['user_id']));
_goToUserDetails(data['user_id']);
Future<void> _playbackPauseEvent(Map data) async =>
_goToActivityDetails(data['session_id']);
_goToActivityDetails(data['session_key']);
Future<void> _playbackResumeEvent(Map data) async =>
_goToActivityDetails(data['session_id']);
_goToActivityDetails(data['session_key']);
Future<void> _playbackStartEvent(Map data) async =>
_goToActivityDetails(data['session_id']);
_goToActivityDetails(data['session_key']);
Future<void> _playbackStopEvent(Map data) async =>
_goToUserDetails(int.tryParse(data['user_id']));
_goToUserDetails(data['user_id']);
Future<void> _transcodeDecisionChangeEvent(Map data) async =>
_goToActivityDetails(data['session_id']);
_goToActivityDetails(data['session_key']);
Future<void> _userConcurrentStreams(Map data) async =>
_goToUserDetails(int.tryParse(data['user_id']));
_goToUserDetails(data['user_id']);
Future<void> _userNewDevice(Map data) async =>
_goToUserDetails(int.tryParse(data['user_id']));
_goToUserDetails(data['user_id']);
Future<void> _watchedEvent(Map data) async =>
_goToUserDetails(int.tryParse(data['user_id']));
_goToUserDetails(data['user_id']);
Future<void> _plexRemoteAccessBackUp(Map data) async {
TautulliRoutes.LOGS.go(buildTree: true);
@@ -177,24 +177,24 @@ extension _EventTypeExtension on _EventType {
return LunaModule.TAUTULLI.launch();
}
Future<void> _goToUserDetails(int? userId) async {
if (userId != null) {
Future<void> _goToUserDetails(String? userId) async {
if (userId != null && userId.isNotEmpty) {
return TautulliRoutes.USER_DETAILS.go(
buildTree: true,
params: {
'user': userId.toString(),
'user': userId,
},
);
}
return _goToHome();
}
Future<void> _goToActivityDetails(String? sessionId) async {
if (sessionId != null && sessionId.isNotEmpty) {
Future<void> _goToActivityDetails(String? sessionKey) async {
if (sessionKey != null && sessionKey.isNotEmpty) {
return TautulliRoutes.ACTIVITY_DETAILS.go(
buildTree: true,
params: {
'session': sessionId.toString(),
'session': sessionKey,
},
);
}

View File

@@ -121,7 +121,7 @@ class TautulliActivityTile extends StatelessWidget {
Future<void> _enterDetails(BuildContext context) async {
TautulliRoutes.ACTIVITY_DETAILS.go(params: {
'session': session.sessionId!.toString(),
'session': session.sessionKey.toString(),
});
}
}

View File

@@ -4,11 +4,11 @@ import 'package:lunasea/core.dart';
import 'package:lunasea/modules/tautulli.dart';
class ActivityDetailsRoute extends StatefulWidget {
final String? sessionId;
final int sessionKey;
const ActivityDetailsRoute({
Key? key,
required this.sessionId,
required this.sessionKey,
}) : super(key: key);
@override
@@ -28,12 +28,19 @@ class _State extends State<ActivityDetailsRoute>
@override
Widget build(BuildContext context) {
if (widget.sessionKey == -1) {
return LunaMessage.goBack(
context: context,
text: 'tautulli.SessionEnded'.tr(),
);
}
return LunaScaffold(
scaffoldKey: _scaffoldKey,
appBar: _appBar() as PreferredSizeWidget?,
body: _body(),
bottomNavigationBar:
TautulliActivityDetailsBottomActionBar(sessionId: widget.sessionId),
TautulliActivityDetailsBottomActionBar(sessionKey: widget.sessionKey),
);
}
@@ -44,8 +51,8 @@ class _State extends State<ActivityDetailsRoute>
scrollController
],
actions: [
TautulliActivityDetailsUserAction(sessionId: widget.sessionId),
TautulliActivityDetailsMetadataAction(sessionId: widget.sessionId),
TautulliActivityDetailsUserAction(sessionKey: widget.sessionKey),
TautulliActivityDetailsMetadataAction(sessionKey: widget.sessionKey),
]);
}
@@ -70,7 +77,7 @@ class _State extends State<ActivityDetailsRoute>
if (snapshot.hasData) {
TautulliSession? session = snapshot.data!.sessions!
.firstWhereOrNull(
(element) => element.sessionId == widget.sessionId);
(element) => element.sessionKey == widget.sessionKey);
return _session(session);
}
return const LunaLoader();

View File

@@ -5,11 +5,11 @@ import 'package:lunasea/modules/tautulli.dart';
import 'package:lunasea/router/routes/tautulli.dart';
class TautulliActivityDetailsMetadataAction extends StatelessWidget {
final String? sessionId;
final int sessionKey;
const TautulliActivityDetailsMetadataAction({
Key? key,
required this.sessionId,
required this.sessionKey,
}) : super(key: key);
@override
@@ -21,7 +21,7 @@ class TautulliActivityDetailsMetadataAction extends StatelessWidget {
if (snapshot.hasError) return Container();
if (snapshot.hasData) {
TautulliSession? session = snapshot.data!.sessions!
.firstWhereOrNull((element) => element.sessionId == sessionId);
.firstWhereOrNull((element) => element.sessionKey == sessionKey);
if (session != null)
return LunaIconButton(
icon: Icons.info_outline_rounded,

View File

@@ -5,11 +5,11 @@ import 'package:lunasea/modules/tautulli.dart';
import 'package:lunasea/router/routes/tautulli.dart';
class TautulliActivityDetailsUserAction extends StatelessWidget {
final String? sessionId;
final int sessionKey;
const TautulliActivityDetailsUserAction({
Key? key,
required this.sessionId,
required this.sessionKey,
}) : super(key: key);
@override
@@ -21,7 +21,7 @@ class TautulliActivityDetailsUserAction extends StatelessWidget {
if (snapshot.hasError) return Container();
if (snapshot.hasData) {
TautulliSession? session = snapshot.data!.sessions!
.firstWhereOrNull((element) => element.sessionId == sessionId);
.firstWhereOrNull((element) => element.sessionKey == sessionKey);
if (session != null)
return LunaIconButton(
icon: Icons.person_rounded,

View File

@@ -4,11 +4,11 @@ import 'package:lunasea/core.dart';
import 'package:lunasea/modules/tautulli.dart';
class TautulliActivityDetailsBottomActionBar extends StatelessWidget {
final String? sessionId;
final int sessionKey;
const TautulliActivityDetailsBottomActionBar({
Key? key,
required this.sessionId,
required this.sessionKey,
}) : super(key: key);
@override
@@ -19,7 +19,7 @@ class TautulliActivityDetailsBottomActionBar extends StatelessWidget {
if (snapshot.hasError) return Container(height: 0.0);
if (snapshot.hasData) {
TautulliSession? session = snapshot.data!.sessions!
.firstWhereOrNull((element) => element.sessionId == sessionId);
.firstWhereOrNull((element) => element.sessionKey == sessionKey);
if (session != null)
return LunaBottomActionBar(
actions: [

View File

@@ -70,7 +70,7 @@ enum TautulliRoutes with LunaRoutesMixin {
case TautulliRoutes.ACTIVITY_DETAILS:
return route(builder: (_, state) {
return ActivityDetailsRoute(
sessionId: state.params['session'],
sessionKey: int.tryParse(state.params['session'] ?? '') ?? -1,
);
});
case TautulliRoutes.CHECK_FOR_UPDATES:

View File

@@ -15,6 +15,7 @@ class LunaPageView extends StatelessWidget {
return PageView(
controller: controller,
children: children,
physics: const NeverScrollableScrollPhysics(),
);
}
}

View File

@@ -33,24 +33,27 @@ class LunaScaffold extends StatelessWidget {
@override
Widget build(BuildContext context) {
if (LunaPlatform.isAndroid) {
return WillPopScope(
onWillPop: () async {
final state = scaffoldKey.currentState;
if (state?.hasDrawer ?? false) {
if (state!.isDrawerOpen) return true;
state.openDrawer();
return false;
}
return true;
},
child: scaffold,
);
}
if (LunaPlatform.isAndroid) return android;
return scaffold;
}
Widget get android {
return WillPopScope(
onWillPop: () async {
if (!LunaSeaDatabase.ANDROID_BACK_OPENS_DRAWER.read()) return true;
final state = scaffoldKey.currentState;
if (state?.hasDrawer ?? false) {
if (state!.isDrawerOpen) return true;
state.openDrawer();
return false;
}
return true;
},
child: scaffold,
);
}
Widget get scaffold {
return LunaSeaDatabase.ENABLED_PROFILE.listenableBuilder(
builder: (context, _) {

View File

@@ -1 +1,26 @@
{}
{
"sabnzbd.Age": "Yaş",
"sabnzbd.Duplicate": "Yinelenen",
"sabnzbd.Failed": "Başarısız",
"sabnzbd.Force": "Zorla",
"sabnzbd.Repair": "Onar",
"sabnzbd.RepairUnpack": "Onar/Ayıkla",
"sabnzbd.RepairUnpackDelete": "Onar/Ayıkla/Sil",
"sabnzbd.Size": "Boyut",
"sabnzbd.ShutdownPC": "Bilgisayarı Kapat",
"sabnzbd.ShutdownSABnzbd": "SABnzbd'yi Kapat",
"sabnzbd.StandbyPC": "Bilgisayarı Beklemeye Al",
"sabnzbd.Stop": "Durdur",
"sabnzbd.CategoryDefault": "Kategori Öntanımlı Değeri",
"sabnzbd.Completed": "Tamamlandı",
"sabnzbd.Descending": "Azalan",
"sabnzbd.High": "Yüksek",
"sabnzbd.Low": "Düşük",
"sabnzbd.Paused": "Duraklatıldı",
"sabnzbd.All": "Tümü",
"sabnzbd.Ascending": "Artan",
"sabnzbd.HibernatePC": "Bilgisayarı Hazırda Beklet",
"sabnzbd.None": "Yok",
"sabnzbd.Name": "Ad",
"sabnzbd.Normal": "Normal"
}

View File

@@ -189,6 +189,8 @@
"settings.NoExternalModulesFound": "No External Modules Found",
"settings.NoHeadersAdded": "No Headers Added",
"settings.NoProfilesFound": "No Profiles Found",
"settings.OpenDrawerOnBackAction": "Open Drawer on Back Action",
"settings.OpenDrawerOnBackActionDescription": "Open the drawer instead of closing LunaSea",
"settings.OpenLinksIn": "Open Links In…",
"settings.Password": "Password",
"settings.PasswordHint1": "If your password includes special characters, considering adding a basic authentication header with your username and password instead for better support",

View File

@@ -264,5 +264,6 @@
"settings.SentryLoggingDescription": "上传错误崩溃到Sentry",
"settings.DiscordDescription": "请求功能获得支持",
"settings.General": "通用",
"settings.GeneralDescription": "自定义LunaSea"
"settings.GeneralDescription": "自定义LunaSea",
"settings.BootModule": "启动模块"
}

View File

@@ -142,5 +142,7 @@
"sonarr.Runtime": "Duración",
"sonarr.Streams": "Transmisiones",
"sonarr.DownloadID": "ID de descarga",
"sonarr.DownloadFailed": "Descarga fracasó"
"sonarr.DownloadFailed": "Descarga fracasó",
"sonarr.DeleteEpisodeFileHint1": "¿Seguro que quieres eliminar este archivo de episodio?",
"sonarr.DeleteReasonManual": "El archivo fue borrado vía UI"
}

View File

@@ -33,7 +33,7 @@
"sonarr.Monitor": "Takip Et",
"sonarr.MonitorEpisode": "Bölümü Takip Et",
"sonarr.MonitorSeries": "Diziyi Takip Et",
"sonarr.Name": "İsim",
"sonarr.Name": "Ad",
"sonarr.NoEpisodesFound": "Bölüm Bulunamadı",
"sonarr.NoSeasonsFound": "Sezonlar Bulunamadı",
"sonarr.NoSeriesFound": "Diziler Bulunamadı",

View File

@@ -1,5 +1,5 @@
platform :osx, '10.14'
$FirebaseSDKVersion = '10.0.0'
$FirebaseSDKVersion = '10.2.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@@ -1,71 +1,71 @@
PODS:
- cloud_firestore (4.0.4):
- Firebase/CoreOnly (~> 10.0.0)
- Firebase/Firestore (~> 10.0.0)
- cloud_firestore (4.1.0):
- Firebase/CoreOnly (~> 10.2.0)
- Firebase/Firestore (~> 10.2.0)
- firebase_core
- FlutterMacOS
- nanopb (< 2.30910.0, >= 2.30908.0)
- Firebase/Auth (10.0.0):
- Firebase/Auth (10.2.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 10.0.0)
- Firebase/CoreOnly (10.0.0):
- FirebaseCore (= 10.0.0)
- Firebase/Firestore (10.0.0):
- FirebaseAuth (~> 10.2.0)
- Firebase/CoreOnly (10.2.0):
- FirebaseCore (= 10.2.0)
- Firebase/Firestore (10.2.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 10.0.0)
- Firebase/Messaging (10.0.0):
- FirebaseFirestore (~> 10.2.0)
- Firebase/Messaging (10.2.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 10.0.0)
- Firebase/Storage (10.0.0):
- FirebaseMessaging (~> 10.2.0)
- Firebase/Storage (10.2.0):
- Firebase/CoreOnly
- FirebaseStorage (~> 10.0.0)
- firebase_auth (4.1.1):
- Firebase/Auth (~> 10.0.0)
- Firebase/CoreOnly (~> 10.0.0)
- FirebaseStorage (~> 10.2.0)
- firebase_auth (4.1.4):
- Firebase/Auth (~> 10.2.0)
- Firebase/CoreOnly (~> 10.2.0)
- firebase_core
- FlutterMacOS
- firebase_core (2.1.1):
- Firebase/CoreOnly (~> 10.0.0)
- firebase_core (2.3.0):
- Firebase/CoreOnly (~> 10.2.0)
- FlutterMacOS
- firebase_messaging (14.0.4):
- Firebase/CoreOnly (~> 10.0.0)
- Firebase/Messaging (~> 10.0.0)
- firebase_messaging (14.1.2):
- Firebase/CoreOnly (~> 10.2.0)
- Firebase/Messaging (~> 10.2.0)
- firebase_core
- FlutterMacOS
- firebase_storage (11.0.4):
- Firebase/CoreOnly (~> 10.0.0)
- Firebase/Storage (~> 10.0.0)
- firebase_storage (11.0.6):
- Firebase/CoreOnly (~> 10.2.0)
- Firebase/Storage (~> 10.2.0)
- firebase_core
- FlutterMacOS
- FirebaseAppCheckInterop (10.1.0)
- FirebaseAuth (10.0.0):
- FirebaseAppCheckInterop (10.2.0)
- FirebaseAuth (10.2.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GTMSessionFetcher/Core (~> 2.1)
- FirebaseAuthInterop (10.1.0)
- FirebaseCore (10.0.0):
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- FirebaseAuthInterop (10.2.0)
- FirebaseCore (10.2.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreExtension (10.1.0):
- FirebaseCoreExtension (10.2.0):
- FirebaseCore (~> 10.0)
- FirebaseCoreInternal (10.1.0):
- FirebaseCoreInternal (10.2.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseFirestore (10.0.0):
- FirebaseFirestore/AutodetectLeveldb (= 10.0.0)
- FirebaseFirestore/AutodetectLeveldb (10.0.0):
- FirebaseFirestore (10.2.0):
- FirebaseFirestore/AutodetectLeveldb (= 10.2.0)
- FirebaseFirestore/AutodetectLeveldb (10.2.0):
- FirebaseFirestore/Base
- FirebaseFirestore/WithLeveldb
- FirebaseFirestore/Base (10.0.0)
- FirebaseFirestore/WithLeveldb (10.0.0):
- FirebaseFirestore/Base (10.2.0)
- FirebaseFirestore/WithLeveldb (10.2.0):
- FirebaseFirestore/Base
- FirebaseInstallations (10.1.0):
- FirebaseInstallations (10.2.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseMessaging (10.0.0):
- FirebaseMessaging (10.2.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
@@ -74,12 +74,12 @@ PODS:
- GoogleUtilities/Reachability (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseStorage (10.0.0):
- FirebaseStorage (10.2.0):
- FirebaseAppCheckInterop (~> 10.0)
- FirebaseAuthInterop (~> 10.0)
- FirebaseCore (~> 10.0)
- FirebaseCoreExtension (~> 10.0)
- GTMSessionFetcher/Core (~> 2.1)
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- FlutterMacOS (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
@@ -88,24 +88,24 @@ PODS:
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.8.0):
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.8.0):
- GoogleUtilities/Environment (7.10.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.8.0):
- GoogleUtilities/Logger (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.8.0):
- GoogleUtilities/Network (7.10.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.8.0)"
- GoogleUtilities/Reachability (7.8.0):
- "GoogleUtilities/NSData+zlib (7.10.0)"
- GoogleUtilities/Reachability (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.8.0):
- GoogleUtilities/UserDefaults (7.10.0):
- GoogleUtilities/Logger
- GTMSessionFetcher/Core (2.2.0)
- GTMSessionFetcher/Core (3.0.0)
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
@@ -118,13 +118,11 @@ PODS:
- PromisesObjC (2.1.1)
- screen_retriever (0.0.1):
- FlutterMacOS
- Sentry (7.30.0):
- Sentry/Core (= 7.30.0)
- Sentry/Core (7.30.0)
- Sentry/HybridSDK (7.31.2)
- sentry_flutter (0.0.1):
- Flutter
- FlutterMacOS
- Sentry (~> 7.30.0)
- Sentry/HybridSDK (= 7.31.2)
- share_plus (0.0.1):
- FlutterMacOS
- shared_preferences_macos (0.0.1):
@@ -143,7 +141,7 @@ DEPENDENCIES:
- firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`)
- firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`)
- firebase_storage (from `Flutter/ephemeral/.symlinks/plugins/firebase_storage/macos`)
- FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.0.0`)
- FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.2.0`)
- FlutterMacOS (from `Flutter/ephemeral`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`)
@@ -188,7 +186,7 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_storage/macos
FirebaseFirestore:
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
:tag: 10.0.0
:tag: 10.2.0
FlutterMacOS:
:path: Flutter/ephemeral
package_info_plus:
@@ -213,43 +211,43 @@ EXTERNAL SOURCES:
CHECKOUT OPTIONS:
FirebaseFirestore:
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
:tag: 10.0.0
:tag: 10.2.0
SPEC CHECKSUMS:
cloud_firestore: 74062ccfd34d272ba0b1c18e3f315e48da5e1ef8
Firebase: 1b810f3d0c0532e27a48f1961f8c0400a668a2cf
firebase_auth: 65dab2f61a160cab11d6bbbc4090ee8b1d8a17ed
firebase_core: 2ad407221995257e47215d9ae92467db0dd48ced
firebase_messaging: 730da0ddfc4ac41bfd66c4c2405ad7bb94fa0efa
firebase_storage: ba73a019ba35178ce2ff26662a8bbccf85847bf7
FirebaseAppCheckInterop: 53eec3c354a95f8fe6ff947dd9518ea17f624914
FirebaseAuth: 493382cf533cc45e2862b00e9aa4cfe4c98daf71
FirebaseAuthInterop: 15b2c717321d5e46a60562e388c4d1b039ea7e28
FirebaseCore: 97f48a3a567a72b8d4daa0f03c3aadb78df4e995
FirebaseCoreExtension: 69b966c399abc4ca6dc75006ab87160f81512725
FirebaseCoreInternal: 96d75228e10fd369564da51bd898414eb0f54df5
FirebaseFirestore: d1b97d497a6e6c31bb38dff714af8e606395b959
FirebaseInstallations: 99d24bac0243cf8b0e96cf5426340d211f0bcc80
FirebaseMessaging: 8916bf5edb1dbfac74665a181e4d1ab3a78a08a2
FirebaseStorage: 8b0b0630e11b9f3e4a479a26cfccb70ec790ec50
cloud_firestore: 5bfd8f92a2f11f9d25a0ee69303ca069cadc7637
Firebase: a3ea7eba4382afd83808376edb99acdaff078dcf
firebase_auth: 39cbb463ecc764727d7659b2254341d654f1570c
firebase_core: f6f75d92dcdd5ef1b43876017affde02b7b402ec
firebase_messaging: 1e5166c4774de7bc18d49b4d638977ceeb5f5e0b
firebase_storage: ba70eaeb4eed78ee8ba094e072eefda421d1778f
FirebaseAppCheckInterop: af164d9c623f82174e3ffa54394dee189587c601
FirebaseAuth: 08e7739244eeae5216d0a3f8d9f16a76be9c252e
FirebaseAuthInterop: 027d42ca8fec84dc6151566479af05095a0bd5c0
FirebaseCore: 813838072b797b64f529f3c2ee35e696e5641dd1
FirebaseCoreExtension: d08b424832917cf13612021574399afbbedffeef
FirebaseCoreInternal: 091bde13e47bb1c5e9fe397634f3593dc390430f
FirebaseFirestore: 8efd95c87f0210125fbd50d1a894e2693053c9c9
FirebaseInstallations: 004915af170935e3a583faefd5f8bc851afc220f
FirebaseMessaging: cc9f40f5b7494680f3844d08e517e92aa4e8d9f7
FirebaseStorage: e7b3fdc90b579cda35e5a0e4c6b206325766e75a
FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
GTMSessionFetcher: d62ffccea5108bb9e7762ee121ae63bbdd2c6303
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
GTMSessionFetcher: c1edebe64e9fb4e8f6415d018edf1fd3eac074a1
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce
path_provider_macos: 3c0c3b4b0d4a76d2bf989a913c2de869c5641a19
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38
Sentry: dcd74a503a6d4594ef5d6ab28cf30895a2c19a40
sentry_flutter: d6f51618010b194d871b063903b1bb8170d396fb
Sentry: b15765d11769852fe78c9add942f7df60ed5dbf5
sentry_flutter: 8ef5e68ee2d301805279ed134b3b38dbe9e090f0
share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7
shared_preferences_macos: a64dc611287ed6cbe28fd1297898db1336975727
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3
window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8
PODFILE CHECKSUM: 45c89a63e22053295154d91cdbf3f8d59fe5c2f1
PODFILE CHECKSUM: 2a6df9f4f4c724ecaaaf815e35a4e76c044d80c2
COCOAPODS: 1.11.3

286
package-lock.json generated
View File

@@ -1,20 +1,20 @@
{
"name": "lunasea",
"version": "10.2.1",
"version": "10.2.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "lunasea",
"version": "10.2.1",
"version": "10.2.2",
"devDependencies": {
"@commitlint/cli": "^17.2.0",
"@commitlint/config-conventional": "^17.2.0",
"@commitlint/cli": "^17.3.0",
"@commitlint/config-conventional": "^17.3.0",
"all-contributors-cli": "^6.24.0",
"commitizen": "^4.2.5",
"cross-env": "^7.0.3",
"cz-conventional-changelog": "^3.3.0",
"husky": "^8.0.1",
"husky": "^8.0.2",
"standard-version": "^9.5.0"
}
},
@@ -128,18 +128,18 @@
}
},
"node_modules/@commitlint/cli": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.2.0.tgz",
"integrity": "sha512-kd1zykcrjIKyDRftWW1E1TJqkgzeosEkv1BiYPCdzkb/g/3BrfgwZUHR1vg+HO3qKUb/0dN+jNXArhGGAHpmaQ==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.3.0.tgz",
"integrity": "sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==",
"dev": true,
"dependencies": {
"@commitlint/format": "^17.0.0",
"@commitlint/lint": "^17.2.0",
"@commitlint/load": "^17.2.0",
"@commitlint/lint": "^17.3.0",
"@commitlint/load": "^17.3.0",
"@commitlint/read": "^17.2.0",
"@commitlint/types": "^17.0.0",
"execa": "^5.0.0",
"lodash": "^4.17.19",
"lodash.isfunction": "^3.0.9",
"resolve-from": "5.0.0",
"resolve-global": "1.0.0",
"yargs": "^17.0.0"
@@ -152,9 +152,9 @@
}
},
"node_modules/@commitlint/config-conventional": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.2.0.tgz",
"integrity": "sha512-g5hQqRa80f++SYS233dbDSg16YdyounMTAhVcmqtInNeY/GF3aA4st9SVtJxpeGrGmueMrU4L+BBb+6Vs5wrcg==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.3.0.tgz",
"integrity": "sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw==",
"dev": true,
"dependencies": {
"conventional-changelog-conventionalcommits": "^5.0.0"
@@ -191,13 +191,17 @@
}
},
"node_modules/@commitlint/ensure": {
"version": "17.0.0",
"resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz",
"integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.3.0.tgz",
"integrity": "sha512-kWbrQHDoW5veIUQx30gXoLOCjWvwC6OOEofhPCLl5ytRPBDAQObMbxTha1Bt2aSyNE/IrJ0s0xkdZ1Gi3wJwQg==",
"dev": true,
"dependencies": {
"@commitlint/types": "^17.0.0",
"lodash": "^4.17.19"
"lodash.camelcase": "^4.3.0",
"lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1",
"lodash.startcase": "^4.4.0",
"lodash.upperfirst": "^4.3.1"
},
"engines": {
"node": ">=v14"
@@ -239,14 +243,14 @@
}
},
"node_modules/@commitlint/lint": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.2.0.tgz",
"integrity": "sha512-N2oLn4Dj672wKH5qJ4LGO+73UkYXGHO+NTVUusGw83SjEv7GjpqPGKU6KALW2kFQ/GsDefSvOjpSi3CzWHQBDg==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.3.0.tgz",
"integrity": "sha512-VilOTPg0i9A7CCWM49E9bl5jytfTvfTxf9iwbWAWNjxJ/A5mhPKbm3sHuAdwJ87tDk1k4j8vomYfH23iaY+1Rw==",
"dev": true,
"dependencies": {
"@commitlint/is-ignored": "^17.2.0",
"@commitlint/parse": "^17.2.0",
"@commitlint/rules": "^17.2.0",
"@commitlint/rules": "^17.3.0",
"@commitlint/types": "^17.0.0"
},
"engines": {
@@ -254,20 +258,22 @@
}
},
"node_modules/@commitlint/load": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.2.0.tgz",
"integrity": "sha512-HDD57qSqNrk399R4TIjw31AWBG8dBjNj1MrDKZKmC/wvimtnIFlqzcu1+sxfXIOHj/+M6tcMWDtvknGUd7SU+g==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.3.0.tgz",
"integrity": "sha512-u/pV6rCAJrCUN+HylBHLzZ4qj1Ew3+eN9GBPhNi9otGxtOfA8b+8nJSxaNbcC23Ins/kcpjGf9zPSVW7628Umw==",
"dev": true,
"dependencies": {
"@commitlint/config-validator": "^17.1.0",
"@commitlint/execute-rule": "^17.0.0",
"@commitlint/resolve-extends": "^17.1.0",
"@commitlint/resolve-extends": "^17.3.0",
"@commitlint/types": "^17.0.0",
"@types/node": "^14.0.0",
"chalk": "^4.1.0",
"cosmiconfig": "^7.0.0",
"cosmiconfig-typescript-loader": "^4.0.0",
"lodash": "^4.17.19",
"lodash.isplainobject": "^4.0.6",
"lodash.merge": "^4.6.2",
"lodash.uniq": "^4.5.0",
"resolve-from": "^5.0.0",
"ts-node": "^10.8.1",
"typescript": "^4.6.4"
@@ -316,15 +322,15 @@
}
},
"node_modules/@commitlint/resolve-extends": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.1.0.tgz",
"integrity": "sha512-jqKm00LJ59T0O8O4bH4oMa4XyJVEOK4GzH8Qye9XKji+Q1FxhZznxMV/bDLyYkzbTodBt9sL0WLql8wMtRTbqQ==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.3.0.tgz",
"integrity": "sha512-Lf3JufJlc5yVEtJWC8o4IAZaB8FQAUaVlhlAHRACd0TTFizV2Lk2VH70et23KgvbQNf7kQzHs/2B4QZalBv6Cg==",
"dev": true,
"dependencies": {
"@commitlint/config-validator": "^17.1.0",
"@commitlint/types": "^17.0.0",
"import-fresh": "^3.0.0",
"lodash": "^4.17.19",
"lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
},
@@ -333,12 +339,12 @@
}
},
"node_modules/@commitlint/rules": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.2.0.tgz",
"integrity": "sha512-1YynwD4Eh7HXZNpqG8mtUlL2pSX2jBy61EejYJv4ooZPcg50Ak7LPOyD3a9UZnsE76AXWFBz+yo9Hv4MIpAa0Q==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.3.0.tgz",
"integrity": "sha512-s2UhDjC5yP2utx3WWqsnZRzjgzAX8BMwr1nltC0u0p8T/nzpkx4TojEfhlsOUj1t7efxzZRjUAV0NxNwdJyk+g==",
"dev": true,
"dependencies": {
"@commitlint/ensure": "^17.0.0",
"@commitlint/ensure": "^17.3.0",
"@commitlint/message": "^17.2.0",
"@commitlint/to-lines": "^17.0.0",
"@commitlint/types": "^17.0.0",
@@ -503,9 +509,9 @@
"dev": true
},
"node_modules/ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"version": "8.11.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz",
"integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -2369,9 +2375,9 @@
}
},
"node_modules/husky": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz",
"integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz",
"integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==",
"dev": true,
"bin": {
"husky": "lib/bin.js"
@@ -2822,18 +2828,78 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"node_modules/lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
"dev": true
},
"node_modules/lodash.isfunction": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
"integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
"dev": true
},
"node_modules/lodash.ismatch": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
"integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
"dev": true
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
"dev": true
},
"node_modules/lodash.kebabcase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
"integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
"dev": true
},
"node_modules/lodash.map": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
"integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
"dev": true
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
"node_modules/lodash.mergewith": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
"integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
"dev": true
},
"node_modules/lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
"integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
"dev": true
},
"node_modules/lodash.startcase": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
"integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
"dev": true
},
"node_modules/lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
"dev": true
},
"node_modules/lodash.upperfirst": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
"integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
"dev": true
},
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -4391,27 +4457,27 @@
}
},
"@commitlint/cli": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.2.0.tgz",
"integrity": "sha512-kd1zykcrjIKyDRftWW1E1TJqkgzeosEkv1BiYPCdzkb/g/3BrfgwZUHR1vg+HO3qKUb/0dN+jNXArhGGAHpmaQ==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.3.0.tgz",
"integrity": "sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==",
"dev": true,
"requires": {
"@commitlint/format": "^17.0.0",
"@commitlint/lint": "^17.2.0",
"@commitlint/load": "^17.2.0",
"@commitlint/lint": "^17.3.0",
"@commitlint/load": "^17.3.0",
"@commitlint/read": "^17.2.0",
"@commitlint/types": "^17.0.0",
"execa": "^5.0.0",
"lodash": "^4.17.19",
"lodash.isfunction": "^3.0.9",
"resolve-from": "5.0.0",
"resolve-global": "1.0.0",
"yargs": "^17.0.0"
}
},
"@commitlint/config-conventional": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.2.0.tgz",
"integrity": "sha512-g5hQqRa80f++SYS233dbDSg16YdyounMTAhVcmqtInNeY/GF3aA4st9SVtJxpeGrGmueMrU4L+BBb+6Vs5wrcg==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.3.0.tgz",
"integrity": "sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw==",
"dev": true,
"requires": {
"conventional-changelog-conventionalcommits": "^5.0.0"
@@ -4441,13 +4507,17 @@
}
},
"@commitlint/ensure": {
"version": "17.0.0",
"resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.0.0.tgz",
"integrity": "sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.3.0.tgz",
"integrity": "sha512-kWbrQHDoW5veIUQx30gXoLOCjWvwC6OOEofhPCLl5ytRPBDAQObMbxTha1Bt2aSyNE/IrJ0s0xkdZ1Gi3wJwQg==",
"dev": true,
"requires": {
"@commitlint/types": "^17.0.0",
"lodash": "^4.17.19"
"lodash.camelcase": "^4.3.0",
"lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1",
"lodash.startcase": "^4.4.0",
"lodash.upperfirst": "^4.3.1"
}
},
"@commitlint/execute-rule": {
@@ -4477,32 +4547,34 @@
}
},
"@commitlint/lint": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.2.0.tgz",
"integrity": "sha512-N2oLn4Dj672wKH5qJ4LGO+73UkYXGHO+NTVUusGw83SjEv7GjpqPGKU6KALW2kFQ/GsDefSvOjpSi3CzWHQBDg==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.3.0.tgz",
"integrity": "sha512-VilOTPg0i9A7CCWM49E9bl5jytfTvfTxf9iwbWAWNjxJ/A5mhPKbm3sHuAdwJ87tDk1k4j8vomYfH23iaY+1Rw==",
"dev": true,
"requires": {
"@commitlint/is-ignored": "^17.2.0",
"@commitlint/parse": "^17.2.0",
"@commitlint/rules": "^17.2.0",
"@commitlint/rules": "^17.3.0",
"@commitlint/types": "^17.0.0"
}
},
"@commitlint/load": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.2.0.tgz",
"integrity": "sha512-HDD57qSqNrk399R4TIjw31AWBG8dBjNj1MrDKZKmC/wvimtnIFlqzcu1+sxfXIOHj/+M6tcMWDtvknGUd7SU+g==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.3.0.tgz",
"integrity": "sha512-u/pV6rCAJrCUN+HylBHLzZ4qj1Ew3+eN9GBPhNi9otGxtOfA8b+8nJSxaNbcC23Ins/kcpjGf9zPSVW7628Umw==",
"dev": true,
"requires": {
"@commitlint/config-validator": "^17.1.0",
"@commitlint/execute-rule": "^17.0.0",
"@commitlint/resolve-extends": "^17.1.0",
"@commitlint/resolve-extends": "^17.3.0",
"@commitlint/types": "^17.0.0",
"@types/node": "^14.0.0",
"chalk": "^4.1.0",
"cosmiconfig": "^7.0.0",
"cosmiconfig-typescript-loader": "^4.0.0",
"lodash": "^4.17.19",
"lodash.isplainobject": "^4.0.6",
"lodash.merge": "^4.6.2",
"lodash.uniq": "^4.5.0",
"resolve-from": "^5.0.0",
"ts-node": "^10.8.1",
"typescript": "^4.6.4"
@@ -4539,26 +4611,26 @@
}
},
"@commitlint/resolve-extends": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.1.0.tgz",
"integrity": "sha512-jqKm00LJ59T0O8O4bH4oMa4XyJVEOK4GzH8Qye9XKji+Q1FxhZznxMV/bDLyYkzbTodBt9sL0WLql8wMtRTbqQ==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.3.0.tgz",
"integrity": "sha512-Lf3JufJlc5yVEtJWC8o4IAZaB8FQAUaVlhlAHRACd0TTFizV2Lk2VH70et23KgvbQNf7kQzHs/2B4QZalBv6Cg==",
"dev": true,
"requires": {
"@commitlint/config-validator": "^17.1.0",
"@commitlint/types": "^17.0.0",
"import-fresh": "^3.0.0",
"lodash": "^4.17.19",
"lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
}
},
"@commitlint/rules": {
"version": "17.2.0",
"resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.2.0.tgz",
"integrity": "sha512-1YynwD4Eh7HXZNpqG8mtUlL2pSX2jBy61EejYJv4ooZPcg50Ak7LPOyD3a9UZnsE76AXWFBz+yo9Hv4MIpAa0Q==",
"version": "17.3.0",
"resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.3.0.tgz",
"integrity": "sha512-s2UhDjC5yP2utx3WWqsnZRzjgzAX8BMwr1nltC0u0p8T/nzpkx4TojEfhlsOUj1t7efxzZRjUAV0NxNwdJyk+g==",
"dev": true,
"requires": {
"@commitlint/ensure": "^17.0.0",
"@commitlint/ensure": "^17.3.0",
"@commitlint/message": "^17.2.0",
"@commitlint/to-lines": "^17.0.0",
"@commitlint/types": "^17.0.0",
@@ -4693,9 +4765,9 @@
"dev": true
},
"ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"version": "8.11.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz",
"integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
@@ -6122,9 +6194,9 @@
"dev": true
},
"husky": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz",
"integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==",
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz",
"integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==",
"dev": true
},
"iconv-lite": {
@@ -6463,18 +6535,78 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
"dev": true
},
"lodash.isfunction": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
"integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
"dev": true
},
"lodash.ismatch": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
"integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=",
"dev": true
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
"dev": true
},
"lodash.kebabcase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
"integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
"dev": true
},
"lodash.map": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
"integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
"dev": true
},
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
"lodash.mergewith": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
"integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
"dev": true
},
"lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
"integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
"dev": true
},
"lodash.startcase": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
"integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
"dev": true
},
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
"dev": true
},
"lodash.upperfirst": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
"integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
"dev": true
},
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",

View File

@@ -1,7 +1,7 @@
{
"name": "lunasea",
"description": "Self-Hosted Controller",
"version": "10.2.1",
"version": "10.2.2",
"private": true,
"scripts": {
"build:android": "flutter clean && flutter build apk --bundle-sksl-path shaders/android_sksl.json --release",
@@ -43,13 +43,13 @@
"release:prepare": "npm run cocoapods:nuke && npm run generate && npm run fastlane:update"
},
"devDependencies": {
"@commitlint/cli": "^17.2.0",
"@commitlint/config-conventional": "^17.2.0",
"@commitlint/cli": "^17.3.0",
"@commitlint/config-conventional": "^17.3.0",
"all-contributors-cli": "^6.24.0",
"commitizen": "^4.2.5",
"cross-env": "^7.0.3",
"cz-conventional-changelog": "^3.3.0",
"husky": "^8.0.1",
"husky": "^8.0.2",
"standard-version": "^9.5.0"
}
}

View File

@@ -14,7 +14,7 @@ packages:
name: _flutterfire_internals
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.7"
version: "1.0.9"
analyzer:
dependency: transitive
description:
@@ -28,7 +28,7 @@ packages:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.2"
version: "3.3.5"
args:
dependency: transitive
description:
@@ -42,7 +42,7 @@ packages:
name: asn1lib
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.2"
version: "1.4.0"
async:
dependency: transitive
description:
@@ -126,7 +126,7 @@ packages:
name: cached_network_image
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.2"
version: "3.2.3"
cached_network_image_platform_interface:
dependency: transitive
description:
@@ -175,21 +175,21 @@ packages:
name: cloud_firestore
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.4"
version: "4.1.0"
cloud_firestore_platform_interface:
dependency: transitive
description:
name: cloud_firestore_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "5.8.4"
version: "5.9.0"
cloud_firestore_web:
dependency: transitive
description:
name: cloud_firestore_web
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.4"
version: "3.1.0"
code_builder:
dependency: transitive
description:
@@ -364,28 +364,28 @@ packages:
name: firebase_auth
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.1"
version: "4.1.4"
firebase_auth_platform_interface:
dependency: transitive
description:
name: firebase_auth_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "6.11.1"
version: "6.11.3"
firebase_auth_web:
dependency: transitive
description:
name: firebase_auth_web
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.1"
version: "5.1.3"
firebase_core:
dependency: "direct main"
description:
name: firebase_core
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
version: "2.3.0"
firebase_core_platform_interface:
dependency: transitive
description:
@@ -406,42 +406,42 @@ packages:
name: firebase_messaging
url: "https://pub.dartlang.org"
source: hosted
version: "14.0.4"
version: "14.1.2"
firebase_messaging_platform_interface:
dependency: transitive
description:
name: firebase_messaging_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.5"
version: "4.2.7"
firebase_messaging_web:
dependency: transitive
description:
name: firebase_messaging_web
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.5"
version: "3.2.7"
firebase_storage:
dependency: "direct main"
description:
name: firebase_storage
url: "https://pub.dartlang.org"
source: hosted
version: "11.0.4"
version: "11.0.6"
firebase_storage_platform_interface:
dependency: transitive
description:
name: firebase_storage_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.22"
version: "4.1.24"
firebase_storage_web:
dependency: transitive
description:
name: firebase_storage_web
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.14"
version: "3.3.16"
fixnum:
dependency: transitive
description:
@@ -488,7 +488,7 @@ packages:
name: flutter_launcher_icons
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.0"
version: "0.11.0"
flutter_lints:
dependency: "direct dev"
description:
@@ -507,7 +507,7 @@ packages:
name: flutter_native_splash
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.13"
version: "2.2.15"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
@@ -552,7 +552,7 @@ packages:
name: frontend_server_client
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
version: "3.2.0"
get_it:
dependency: transitive
description:
@@ -566,14 +566,14 @@ packages:
name: glob
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
version: "2.1.1"
go_router:
dependency: "direct main"
description:
name: go_router
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.5"
version: "5.2.0"
google_fonts:
dependency: "direct main"
description:
@@ -664,7 +664,7 @@ packages:
name: in_app_purchase_android
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.3+6"
version: "0.2.3+7"
in_app_purchase_platform_interface:
dependency: transitive
description:
@@ -804,7 +804,7 @@ packages:
name: package_info_plus
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
version: "3.0.2"
package_info_plus_platform_interface:
dependency: transitive
description:
@@ -832,7 +832,7 @@ packages:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.21"
version: "2.0.22"
path_provider_ios:
dependency: transitive
description:
@@ -937,7 +937,7 @@ packages:
name: pub_semver
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
version: "2.1.3"
pubspec_parse:
dependency: transitive
description:
@@ -965,7 +965,7 @@ packages:
name: quick_actions_ios
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
version: "1.0.2"
quick_actions_platform_interface:
dependency: transitive
description:
@@ -1000,7 +1000,7 @@ packages:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.5"
version: "0.27.7"
screen_retriever:
dependency: transitive
description:
@@ -1014,21 +1014,21 @@ packages:
name: sentry
url: "https://pub.dartlang.org"
source: hosted
version: "6.14.0"
version: "6.16.1"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "6.14.0"
version: "6.16.1"
share_plus:
dependency: "direct main"
description:
name: share_plus
url: "https://pub.dartlang.org"
source: hosted
version: "6.2.0"
version: "6.3.0"
share_plus_platform_interface:
dependency: transitive
description:
@@ -1187,14 +1187,14 @@ packages:
name: stash
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.4"
version: "4.4.1"
stash_memory:
dependency: "direct main"
description:
name: stash_memory
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.4"
version: "4.4.1"
state_notifier:
dependency: transitive
description:
@@ -1306,14 +1306,14 @@ packages:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.6"
version: "6.1.7"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.21"
version: "6.0.22"
url_launcher_ios:
dependency: transitive
description:
@@ -1362,7 +1362,7 @@ packages:
name: uuid
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.6"
version: "3.0.7"
vector_math:
dependency: transitive
description:
@@ -1397,7 +1397,7 @@ packages:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
version: "3.1.2"
window_manager:
dependency: "direct main"
description:

View File

@@ -1,6 +1,6 @@
name: lunasea
description: Self-Hosted Controller
version: 10.2.1+1
version: 10.2.2+1
publish_to: 'none'
environment:
sdk: '>=2.17.0 <3.0.0'
@@ -9,8 +9,8 @@ dependencies:
flutter:
sdk: flutter
badges: ^2.0.3
cached_network_image: ^3.2.2
cloud_firestore: ^4.0.4
cached_network_image: ^3.2.3
cloud_firestore: ^4.1.0
collection: ^1.16.0
convert: ^3.1.1
cupertino_icons: ^1.0.5
@@ -22,16 +22,16 @@ dependencies:
expandable: ^5.0.1
fading_edge_scrollview: ^3.0.0
file_picker: ^5.2.2
firebase_auth: ^4.1.1
firebase_core: ^2.1.1
firebase_messaging: ^14.0.4
firebase_storage: ^11.0.4
firebase_auth: ^4.1.4
firebase_core: ^2.3.0
firebase_messaging: ^14.1.2
firebase_storage: ^11.0.6
fl_chart: ^0.55.2
flash: ^2.0.5
flutter_cache_manager: ^3.3.0
flutter_riverpod: ^2.1.1
flutter_spinkit: ^5.1.0
go_router: ^5.1.5
go_router: ^5.2.0
google_fonts: ^3.0.1
google_nav_bar: ^5.0.6
hive: ^2.2.3
@@ -41,23 +41,23 @@ dependencies:
intl: ^0.17.0
json_annotation: ^4.6.0
modal_bottom_sheet: ^2.1.2
package_info_plus: ^3.0.1
package_info_plus: ^3.0.2
path_provider: ^2.0.11
percent_indicator: ^4.2.2
quick_actions: ^1.0.1
retrofit: ^3.0.1+1
sentry_flutter: ^6.14.0
share_plus: ^6.2.0
sentry_flutter: ^6.16.1
share_plus: ^6.3.0
shimmer: ^2.0.0
simple_icons: ^7.10.0
stack_trace: ^1.10.0
stash_memory: ^4.3.4
stash_memory: ^4.4.1
supercharged: ^2.1.1
table_calendar: ^3.0.8
transparent_image: ^2.0.0
tuple: ^2.0.1
url_launcher: ^6.1.6
uuid: ^3.0.6
url_launcher: ^6.1.7
uuid: ^3.0.7
wake_on_lan: ^3.0.0
window_manager: ^0.2.7
xml: ^6.1.0
@@ -70,9 +70,9 @@ dev_dependencies:
hive_generator: ^2.0.0
retrofit_generator: ^4.2.0
# Tooling
flutter_launcher_icons: ^0.10.0
flutter_launcher_icons: ^0.11.0
flutter_lints: ^2.0.1
flutter_native_splash: ^2.2.13
flutter_native_splash: ^2.2.15
msix: ^3.7.0
flutter:

View File

@@ -0,0 +1,67 @@
import 'dart:io';
void main(List<String> args) {
_setVersion(args[0]);
_copyBuild();
_determineMD5Sums();
_buildDebian();
}
void _setVersion(String version) {
final control = File('debian/DEBIAN/control');
control.writeAsStringSync('Version:$version\n', mode: FileMode.append);
}
void _copyBuild() {
const path = 'debian/usr/share';
final directory = Directory('$path/lunasea');
if (directory.existsSync()) directory.deleteSync(recursive: true);
Process.runSync('cp', [
'-r',
'build/linux/x64/release/bundle',
path,
]);
Process.runSync('mv', [
'$path/bundle',
'$path/lunasea',
]);
}
void _determineMD5Sums() {
final find = Process.runSync(
'find',
[".", "-type", "f", "-not", "-path", "'./DEBIAN/*'"],
workingDirectory: 'debian',
).stdout as String;
final files = find
.split('\n')
.where((file) => !file.startsWith('./DEBIAN'))
.map((file) => file.replaceAll('./', ''))
.toList();
final md5 = Process.runSync(
'md5sum',
files,
workingDirectory: 'debian',
).stdout as String;
File('debian/DEBIAN/md5sums').writeAsStringSync(md5);
}
void _buildDebian() {
if (!Directory('output').existsSync()) {
Directory('output').createSync(recursive: true);
}
Process.runSync('dpkg-deb', [
'--build',
'debian',
]);
Process.runSync('mv', [
'debian.deb',
'output/lunasea-linux-amd64.deb',
]);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
name: lunasea
version: 10.2.1
version: 10.2.2
confinement: strict
base: core18