52 Commits

Author SHA1 Message Date
Jagandeep Brar
074e8fa756 release: v10.2.3
[skip ci]
2023-03-22 01:37:47 -04:00
Jagandeep Brar
228cc4140f release(testflight): candidate
[skip ci]
2023-03-21 23:04:17 -04:00
Jagandeep Brar
3f6d138b8d chore(ci): utilize flutterfire_cli 0.3.0-dev.16
[skip ci]
2023-03-21 19:21:52 -04:00
Jagandeep Brar
ac560ba655 release(testflight): beta
[skip ci]
2023-03-21 18:48:26 -04:00
Jagandeep Brar
c0403d7333 release(testflight): edge
[skip ci]
2023-03-21 16:41:18 -04:00
Jagandeep Brar
e591f93791 chore(ci): increase Upload to Play Store timeout 2023-03-21 13:31:43 -04:00
Jagandeep Brar
96abd83d98 chore: upgrade packages and re-integrate pods 2023-03-21 12:10:38 -04:00
Jagandeep Brar
28b9037ca5 release(testflight): edge
[skip ci]
2023-03-21 08:45:48 -04:00
Jagandeep Brar
3b2bb794c9 chore(macos): update Podfile.lock
[skip ci]
2023-03-21 08:43:53 -04:00
Jagandeep Brar
596eab4bad fix(links): use platform default method to laucnh URLs 2023-03-20 02:03:35 -04:00
Jagandeep Brar
fa01702362 release(testflight): candidate
[skip ci]
2023-03-18 15:24:24 -04:00
Jagandeep Brar
76525b201e release(testflight): beta
[skip ci]
2023-03-18 04:18:13 -04:00
Jagandeep Brar
26314ca5a5 chore(locale): generate localization assets
[skip ci]
2023-03-18 04:17:48 -04:00
Weblate (bot)
2f04edebfb chore: translations update from Weblate
Co-authored-by: cpt-kuesel <cpt-kuesel@tuta.io>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
Co-authored-by: 愿你多年归来仍是少年 <onestime@126.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: Uxose <nathan.renault@live.fr>
Co-authored-by: Zsigus Attila <zsigus.attila@gmail.com>
Co-authored-by: Carles Muñoz Gorriz <carlesmu@internautas.org>
Co-authored-by: Rémi Guerrero <remidu34070@hotmail.fr>
2023-03-18 00:57:41 -04:00
Jagandeep Brar
c53d83b22f release(testflight): beta
[skip ci]
2023-03-17 23:14:36 -04:00
Jagandeep Brar
aca5d0eb82 fix(http): correctly set content type for POST requests 2023-02-17 00:07:44 -05:00
Jagandeep Brar
26a35aadb1 chore(ci): always build using the latest Flutter stable release 2023-02-16 17:24:10 -05:00
Jagandeep Brar
8888795f27 chore(flutter): update packages 2023-02-16 17:22:58 -05:00
Jagandeep Brar
5cf1a06cec feat(tautulli): add ability to open media in Plex 2023-02-16 17:07:56 -05:00
Mário Franco
47ff2628a2 chore(android): rename development installation (#740)
[skip ci]
2023-02-16 16:29:44 -05:00
Jagandeep Brar
94488e2df8 chore(ci): update Fastlane match storage repository
[skip ci]
2023-02-10 21:53:13 -05:00
Jagandeep Brar
4e3dfbf794 release(testflight): beta
[skip ci]
2023-02-10 20:37:44 -05:00
Jagandeep Brar
6de806316e feat(tautulli): display audio language, subtitle language, and video dynamic range for activity 2023-01-27 19:33:18 -05:00
Jagandeep Brar
b98a0f8046 chore(ci): update to Flutter 3.7/b06b8b2710 2023-01-27 12:45:28 -05:00
Jagandeep Brar
449df1d104 chore: update Ruby packages 2023-01-27 12:41:55 -05:00
Jagandeep Brar
268b5e3693 chore: bump version to v10.2.3 2023-01-27 12:41:55 -05:00
Jagandeep Brar
8042c0475e fix(uiux): update bottom modal sheet package to support Flutter 3.7 2023-01-27 12:41:55 -05:00
Jagandeep Brar
6241ee4629 feat(flutter): replace Skia with Impeller rendering engine 2023-01-27 12:41:55 -05:00
Jagandeep Brar
d612ae221c fix(macos): set minimum platform version to 10.15 2023-01-27 12:41:55 -05:00
Jagandeep Brar
f1b831a118 feat(flutter): upgrade to Flutter 3.7/b06b8b2710 2023-01-27 12:41:55 -05:00
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
169 changed files with 2912 additions and 3624 deletions

View File

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

View File

@@ -1,50 +1,50 @@
name: 'Prepare for Build'
description: 'Setup all required dependencies and secrets for building the given platform'
name: "Prepare for Build"
description: "Setup all required dependencies and secrets for building the given platform"
inputs:
platform:
description: 'Platform to be Built'
description: "Platform to be Built"
required: true
# Config
firebase-token:
description: 'Firebase Token'
description: "Firebase Token"
required: false
default: ''
default: ""
skip-core:
description: 'Skip Installing Core Files'
description: "Skip Installing Core Files"
required: false
default: 'false'
default: "false"
# Secret Keys
android-key-jks:
description: 'Android Signing Key'
description: "Android Signing Key"
required: false
default: ''
default: ""
android-key-properties:
description: 'Android Signing Key Properties'
description: "Android Signing Key Properties"
required: false
default: ''
default: ""
appstore-connect-key:
description: 'App Store Connect API Key'
description: "App Store Connect API Key"
required: false
default: ''
default: ""
code-signing-certificate:
description: 'Code Signing Certificate'
description: "Code Signing Certificate"
required: false
default: ''
default: ""
firebase-service-worker:
description: 'Firebase Service Worker'
description: "Firebase Service Worker"
required: false
default: ''
default: ""
google-play-key:
description: 'Google Play Store API Key'
description: "Google Play Store API Key"
required: false
default: ''
default: ""
match-ssh-private-key:
description: 'Fastlane Match SSH Key'
description: "Fastlane Match SSH Key"
required: false
default: ''
default: ""
runs:
using: composite
@@ -53,7 +53,7 @@ runs:
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Prepare Core
if: ${{ inputs.skip-core == 'false' }}
uses: actions/download-artifact@v3
@@ -69,14 +69,13 @@ runs:
- name: Install Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: '3.3.7'
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 +99,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
- 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 }}
@@ -121,10 +120,11 @@ runs:
if: ${{ inputs.firebase-token != '' }}
shell: bash
run: |
npm install -g firebase-tools
gem install --user-install xcodeproj
dart pub global activate flutterfire_cli
npm install -g firebase-tools
firebase --version
dart pub global activate flutterfire_cli 0.3.0-dev.16
flutterfire configure \
--project=comettools-lunasea \
--token=${{ inputs.firebase-token }} \
@@ -132,6 +132,9 @@ 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 \
--no-debug-symbols-ios \
--no-debug-symbols-macos \
--out=lib/firebase/options.dart \
--yes
@@ -151,12 +154,15 @@ runs:
shell: bash
run: |
(cd ios && bundle install)
- name: Setup Linux Platform
if: ${{ inputs.platform == 'linux' }}
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:

5
.gitignore vendored
View File

@@ -32,7 +32,6 @@
*.g.dart
# Web related
lib/generated_plugin_registrant.dart
# Exceptions to above rules.
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
@@ -83,4 +82,8 @@ output/
*.ipa
*.dmg
*.pkg
# Linux Artifacts
debian/DEBIAN/md5sums
debian/usr/share/lunasea
*.snap

View File

@@ -2,6 +2,46 @@
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.3](https://github.com/JagandeepBrar/LunaSea/compare/v10.2.2...v10.2.3) (2023-03-22)
### Features
* **flutter:** replace Skia with Impeller rendering engine ([6241ee4](https://github.com/JagandeepBrar/LunaSea/commit/6241ee462989f1f65fa8f1e18378579e2e77197b))
* **flutter:** upgrade to Flutter 3.7/b06b8b2710 ([f1b831a](https://github.com/JagandeepBrar/LunaSea/commit/f1b831a118e56c480aae72042ee4eb7013f954b2))
* **tautulli:** add ability to open media in Plex ([5cf1a06](https://github.com/JagandeepBrar/LunaSea/commit/5cf1a06cec079aa66c77425c0ed8d4fa7897bbd3))
* **tautulli:** display audio language, subtitle language, and video dynamic range for activity ([6de8063](https://github.com/JagandeepBrar/LunaSea/commit/6de806316efaa61c5ddbac1b8f5b214949f0bcf8))
### Bug Fixes
* **http:** correctly set content type for POST requests ([aca5d0e](https://github.com/JagandeepBrar/LunaSea/commit/aca5d0eb826b38ebeec33e3495045bf21e8a49c7))
* **links:** use platform default method to laucnh URLs ([596eab4](https://github.com/JagandeepBrar/LunaSea/commit/596eab4bad1aa183e3c0dfc8d20a32c15ecdb78d))
* **macos:** set minimum platform version to 10.15 ([d612ae2](https://github.com/JagandeepBrar/LunaSea/commit/d612ae221cac741b3a36893d4bc7f05f5055c7b8))
* **uiux:** update bottom modal sheet package to support Flutter 3.7 ([8042c04](https://github.com/JagandeepBrar/LunaSea/commit/8042c0475ecff05d9337842eef7cfe4117d05528))
### [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,23 +1,23 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.5)
CFPropertyList (3.0.6)
rexml
addressable (2.8.1)
public_suffix (>= 2.0.2, < 6.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.655.0)
aws-sdk-core (3.166.0)
aws-partitions (1.731.0)
aws-sdk-core (3.170.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.59.0)
aws-sdk-kms (1.63.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.117.1)
aws-sdk-s3 (1.119.1)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
@@ -36,8 +36,8 @@ GEM
unf (>= 0.0.5, < 1.0.0)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.93.1)
faraday (1.10.2)
excon (0.99.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -66,7 +66,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.210.1)
fastlane (2.212.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -106,9 +106,9 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.30.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-core (0.9.1)
google-apis-androidpublisher_v3 (0.37.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -117,10 +117,10 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.16.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-playcustomapp_v1 (0.12.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-cloud-core (1.6.0)
@@ -128,7 +128,7 @@ GEM
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.3.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
@@ -148,11 +148,11 @@ GEM
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.1)
json (2.6.2)
jwt (2.5.0)
jmespath (1.6.2)
json (2.6.3)
jwt (2.7.0)
memoist (0.16.2)
mini_magick (4.11.0)
mini_magick (4.12.0)
mini_mime (1.1.2)
multi_json (1.15.0)
multipart-post (2.0.0)
@@ -160,8 +160,8 @@ GEM
naturally (2.2.1)
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
public_suffix (5.0.0)
plist (3.7.0)
public_suffix (5.0.1)
rake (13.0.6)
representable (3.2.0)
declarative (< 0.1.0)
@@ -178,7 +178,7 @@ GEM
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
simctl (1.6.10)
CFPropertyList
naturally
terminal-notifier (2.0.0)
@@ -194,7 +194,7 @@ GEM
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.7.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)

View File

@@ -1,8 +1,13 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="app.lunasea.lunasea">
<application tools:replace="android:label" android:label="LunaSea Dev"></application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.vending.BILLING" />
<queries>
<package android:name="com.plexapp.android" />
</queries>
</manifest>

View File

@@ -40,4 +40,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.vending.BILLING" />
<queries>
<package android:name="com.plexapp.android" />
</queries>
</manifest>

View File

@@ -8,4 +8,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.android.vending.BILLING" />
<queries>
<package android:name="com.plexapp.android" />
</queries>
</manifest>

View File

@@ -8,7 +8,6 @@ platform :android do
"build",
"appbundle",
"--release",
"--bundle-sksl-path=shaders/android_sksl.json",
"--build-number=#{options[:build_number]}",
)
@@ -23,7 +22,6 @@ platform :android do
"build",
"apk",
"--release",
"--bundle-sksl-path=shaders/android_sksl.json",
"--build-number=#{options[:build_number]}",
)
@@ -38,6 +36,7 @@ platform :android do
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
timeout: 600,
track: options[:track],
version_name: options[:version_name],
)

View File

@@ -1,111 +1,46 @@
{
"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.3!\n\nThis update adds the ability to open Tautulli library items directly in Plex and more details about activity streams.",
"feat": {
"dashboard": [
"tautulli": [
{
"commit": "3ac2c5d791f94208a4004d161bb046c24b698345",
"message": "(calendar) always show previous days in schedule view"
"commit": "5cf1a06cec079aa66c77425c0ed8d4fa7897bbd3",
"message": "add ability to open media in Plex"
},
{
"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": "125596498ec9839e584912185ddc5b625602a701",
"message": "(locale) translations update from Weblate"
}
]
},
"fix": {
"firebase": [
{
"commit": "38f2eb4cb2a8e400ce2ecb0b6f2854469c9626fc",
"message": "inject service file for older OS versions"
},
{
"commit": "f3a3f222bd56beb4e961817b18d71f01fb7c5e81",
"message": "upgrade to Firebase v10"
"commit": "6de806316efaa61c5ddbac1b8f5b214949f0bcf8",
"message": "display audio language, subtitle language, and video dynamic range for activity"
}
],
"flutter": [
{
"commit": "3d794099a5418385dc1010f204c3f46fdbdd5503",
"message": "upgrade packages"
"commit": "6241ee462989f1f65fa8f1e18378579e2e77197b",
"message": "replace Skia with Impeller rendering engine"
},
{
"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"
}
],
"calendar": [
{
"commit": "70ed750652ff419e6fed659a0785adc5064654e7",
"message": "label unreleased movies as unreleased instead of missing"
"commit": "f1b831a118e56c480aae72042ee4eb7013f954b2",
"message": "upgrade to Flutter 3.7.7/1837b5be5f"
}
]
},
"refactor": {
"uiux": [
"fix": {
"links": [
{
"commit": "958e6f156862c1092399649baa361cd955299c88",
"message": "remove forced-upper case on headers"
},
{
"commit": "d9623e992d2ac2039eaa4f069c739d968c921cc6",
"message": "add circular radius to linear progression bars"
"commit": "596eab4bad1aa183e3c0dfc8d20a32c15ecdb78d",
"message": "use platform default method to launch URLs"
}
],
"settings": [
"http": [
{
"commit": "ac838f99a9c839ce4e36e5eae80f1100e2787dc5",
"message": "consolidate appearance, network, and localization pages"
"commit": "aca5d0eb826b38ebeec33e3495045bf21e8a49c7",
"message": "correctly set content type for POST requests"
}
],
"macos": [
{
"commit": "d612ae221cac741b3a36893d4bc7f05f5055c7b8",
"message": "set minimum platform version to 10.15"
}
]
}
},
"refactor": {}
}

BIN
assets/icon/icon_linux.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -18,6 +18,7 @@
"radarr.Codec": "Còdec",
"radarr.Configure": "Configura",
"radarr.Copy": "Copia",
"radarr.CopyFiles": "Enllaç fort/Copia fitxers",
"radarr.CopyFull": "Enllaç fort/Copia fitxers",
"radarr.CutoffUnmet": "Data límit no trobada",
"radarr.DateAdded": "Data d'alta",
@@ -54,6 +55,8 @@
"radarr.MonitoredDescription": "Segueix les noves versions",
"radarr.More": "Més",
"radarr.Move": "Mou",
"radarr.MoveFiles": "Mou fitxers",
"radarr.MoveFilesDescription": "Voleu moure els fitxers?",
"radarr.MoveFull": "Mou fitxers",
"radarr.Movie": "Pel·lícula",
"radarr.MovieFileDeleted": "S'ha suprimit el fitxer de la pel·lícula",
@@ -114,6 +117,7 @@
"radarr.UnmappedFolders": "{} carpetes no assignades",
"radarr.UnmonitorMovie": "Deixa de seguir la pel·lícula",
"radarr.Unmonitored": "Deixa de seguir",
"radarr.Unreleased": "No publicada",
"radarr.Upcoming": "Proper",
"radarr.UpdateLibrary": "Actualitza la biblioteca",
"radarr.UpdateMovie": "Actualitza la pel·lícula",

View File

@@ -32,6 +32,7 @@
"lunasea.BuyMeACoffee": "Kauf mir einen Kaffee",
"lunasea.BuyMeASoda": "Kauf mir eine Limonade",
"lunasea.Cancel": "Abbrechen",
"lunasea.Candidate": "Kandidat",
"lunasea.ChangeProfiles": "Profile wechseln",
"lunasea.Changelog": "Änderungsprotokoll",
"lunasea.CheckLogsMessage": "Überprüfe die Protokolle für mehr Details",
@@ -39,53 +40,95 @@
"lunasea.Clear": "Entfernen",
"lunasea.Close": "Schließen",
"lunasea.ComingSoon": "Bald verfügbar",
"lunasea.Copied": "Kopiert",
"lunasea.CopiedContentToTheClipboard": "Inhalt in die Zwischenablage kopiert",
"lunasea.Critical": "Kritisch",
"lunasea.Dashboard": "Übersicht",
"lunasea.Days": "{} Tage",
"lunasea.DaysAgo": "Vor {} Tagen",
"lunasea.Debug": "Fehlersuche",
"lunasea.Delete": "Löschen",
"lunasea.Descending": "Absteigend",
"lunasea.Develop": "Entwicklung",
"lunasea.Disable": "Ausschalten",
"lunasea.Disabled": "Deaktiviert",
"lunasea.Dismiss": "Ausblenden",
"lunasea.Docs": "Doku",
"lunasea.DownloadClient": "Downloadklient",
"lunasea.Edge": "Edge",
"lunasea.Error": "Fehler",
"lunasea.ExternalModules": "Externe Module",
"lunasea.Features": "Funktionen",
"lunasea.Fixes": "Behoben",
"lunasea.FullChangelog": "Vollständiger Changelog",
"lunasea.GoBack": "Zurück",
"lunasea.GoToSettings": "Einstellungen öffnen",
"lunasea.GridView": "Rasteransicht",
"lunasea.Home": "Startseite",
"lunasea.Hours": "{} Stunden",
"lunasea.HoursAgo": "Vor {} Stunden",
"lunasea.IncorrectEncryptionKey": "Ungültige Sicherungsphrase",
"lunasea.Internal": "Intern",
"lunasea.InvalidFileTypeSelected": "Ungültiger Dateityp ausgewählt",
"lunasea.JustNow": "Jetzt gerade",
"lunasea.Minutes": "{} Minuten",
"lunasea.MinutesAgo": "Vor {} Minuten",
"lunasea.Module": "Modul",
"lunasea.ModuleIsNotEnabled": "{} ist nicht aktiviert",
"lunasea.Months": "{} Monate",
"lunasea.MonthsAgo": "Vor {} Monaten",
"lunasea.New": "Neu",
"lunasea.No": "Nein",
"lunasea.NoModulesEnabled": "Keine Module aktiviert",
"lunasea.NotSet": "Nicht gesetzt",
"lunasea.OneDay": "1 Tag",
"lunasea.OneDayAgo": "Vor 1 Tag",
"lunasea.OneHour": "1 Stunde",
"lunasea.OneHourAgo": "Vor 1 Stunde",
"lunasea.OneMinute": "1 Minute",
"lunasea.OneMinuteAgo": "Vor 1 Minute",
"lunasea.OneMonth": "1 Monat",
"lunasea.OneMonthAgo": "Vor 1 Monat",
"lunasea.OneSecond": "1 Sekunde",
"lunasea.OneSecondAgo": "Vor 1 Sekunde",
"lunasea.OneYear": "1 Jahr",
"lunasea.OneYearAgo": "Vor 1 Jahr",
"lunasea.Options": "Optionen",
"lunasea.Other": "Andere",
"lunasea.Page": "Seite",
"lunasea.PlatformSpecific": "Plattformspezifisch",
"lunasea.PleaseTryAgain": "Bitte versuche es erneut",
"lunasea.Production": "Produktion",
"lunasea.Refresh": "Aktualisieren",
"lunasea.Refreshing": "Aktualisieren…",
"lunasea.Remove": "Entfernen",
"lunasea.Rename": "Umbenennen",
"lunasea.Restore": "Wiederherstellen",
"lunasea.Retry": "Wiederholung",
"lunasea.ReturnToDashboard": "Zurück zur Instrumentenanlage",
"lunasea.SearchTextBar": "Suche…",
"lunasea.Seconds": "{} Sekunden",
"lunasea.SecondsAgo": "Vor {} Sekunden",
"lunasea.Set": "Wähle",
"lunasea.Settings": "Einstellungen",
"lunasea.Stable": "Stabil",
"lunasea.StartingView": "Startansicht",
"lunasea.Today": "Heute",
"lunasea.TransactionFailure": "Transaktion fehlgeschlagen",
"lunasea.TryAgain": "Erneut versuchen",
"lunasea.Tweaks": "Optimierungen",
"lunasea.UnderAMinute": "Unter einer Minute",
"lunasea.Unknown": "Unbekannt",
"lunasea.UnknownDate": "Unbekanntes Datum",
"lunasea.UnknownError": "Unbekannter Fehler",
"lunasea.UnknownModule": "Unbekanntes Modul",
"lunasea.Update": "Aktualisierung",
"lunasea.View": "Ansicht",
"lunasea.Warning": "Warnung",
"lunasea.Website": "Internetseite",
"lunasea.Years": "{} Jahre",
"lunasea.YearsAgo": "Vor {} Jahren",
"lunasea.Yes": "Ja",
"overseerr.Users": "Benutzer",
"overseerr.UnknownUser": "Unbekannter Benutzer",
"overseerr.NoUsersFound": "Keine Benutzer gefunden",
@@ -199,7 +242,7 @@
"radarr.Rejected": "Abgelehnt",
"radarr.Released": "Veröffentlicht",
"radarr.ReleasedToday": "Heute veröffentlicht",
"radarr.Releases": "Releases",
"radarr.Releases": "Veröffentlichungen",
"radarr.RemoveMovie": "Film entfernen",
"radarr.Resolution": "Auflösung",
"radarr.RootFolder": "Root-Verzeichnis",
@@ -230,6 +273,7 @@
"radarr.UnmappedFolders": "{} unbekannte Ordner",
"radarr.UnmonitorMovie": "Filmüberwachung entfernen",
"radarr.Unmonitored": "Nicht überwacht",
"radarr.Unreleased": "Unveröffentlicht",
"radarr.Upcoming": "Aufkommend",
"radarr.UpdateLibrary": "Mediathek aktualisieren",
"radarr.UpdateMovie": "Film aktualisieren",
@@ -526,7 +570,7 @@
"settings.PasswordUpdated": "Passwort aktualisiert",
"settings.PleaseSignInAgain": "Bitte erneut anmelden",
"settings.RestoreFromDeviceDescription": "Konfigurationsdaten wiederherstellen",
"settings.AddedProfile": "Profil hinzugefügt",
"settings.AddedProfile": "Hinzugefügtes Profil",
"settings.Build": "Build",
"settings.ChangedProfile": "Profil geändert",
"settings.CurrentPassword": "Aktuelles Passwort",
@@ -539,6 +583,19 @@
"settings.DownloadUpdate": "Update herunterladen",
"settings.EmailUpdated": "E-Mail aktualisiert",
"settings.EnableInAppNotifications": "App-Benachrichtigungen Aktivieren",
"settings.SentryLoggingDescription": "Fehler und Abstürze hochladen und an Sentry senden",
"settings.SentryLogging": "Sentry Protokollierung",
"settings.Version": "Version",
"settings.OpenDrawerOnBackAction": "Seitenmenü bei Zurück-Aktion öffnen",
"settings.OpenDrawerOnBackActionDescription": "Öffne das Seitenmenü anstatt LunaSea zu schließen",
"settings.UpdateEmail": "Email aktualisieren",
"settings.UpdatePassword": "Passwort aktualisieren",
"settings.UpToDate": "Auf dem neuesten Stand",
"settings.DiscordDescription": "Schlage neue Funktionen vor & erhalte Unterstützung",
"settings.ViewTypeLogs": "{} Protokolle ansehen",
"settings.BootModule": "Startmodul",
"settings.General": "Allgemein",
"settings.GeneralDescription": "LunaSea anpassen",
"sonarr.AddSeries": "Serie hinzufügen",
"sonarr.AddToExclusionList": "Zur Ignorierliste hinzufügen",
"sonarr.AllSeasons": "Alle Staffeln",
@@ -696,7 +753,7 @@
"sonarr.RunningRSSSync": "RSS-Synchro wird durchgeführt {}",
"sonarr.Runtime": "Laufzeit",
"sonarr.SearchFor": "Nach {} suchen",
"sonarr.Releases": "Releases",
"sonarr.Releases": "Veröffentlichungen",
"sonarr.RemovedSeriesWithFiles": "Serie entfernt (Mit Dateien)",
"sonarr.SearchingForSeason": "Staffel wird gesucht…",
"sonarr.SeriesFolderImported": "Folge aus Serien-Ordner importiert",

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",
@@ -816,6 +818,7 @@
"tautulli.BackupDatabase": "Backup Database",
"tautulli.Bandwidth": "Bandwidth",
"tautulli.Burn": "Burn",
"tautulli.Converting": "Converting",
"tautulli.Container": "Container",
"tautulli.Copy": "Copy",
"tautulli.DeleteCache": "Delete Cache",
@@ -853,6 +856,7 @@
"tautulli.Sessions": "Sessions",
"tautulli.SessionsOne": "1 Session",
"tautulli.SessionsMany": "{} Sessions",
"tautulli.Speed": "Speed: {}x",
"tautulli.Stream": "Stream",
"tautulli.Subtitle": "Subtitle",
"tautulli.Terminate": "Terminate",

View File

@@ -680,6 +680,8 @@
"sonarr.Streams": "Transmisiones",
"sonarr.DownloadID": "ID de descarga",
"sonarr.DownloadFailed": "Descarga fracasó",
"sonarr.DeleteEpisodeFileHint1": "¿Seguro que quieres eliminar este archivo de episodio?",
"sonarr.DeleteReasonManual": "El archivo fue borrado vía UI",
"tautulli.Quality": "Calidad",
"tautulli.None": "Ninguno",
"tautulli.Terminate": "Terminar",

View File

@@ -54,6 +54,7 @@
"lunasea.Disabled": "Désactivé",
"lunasea.Dismiss": "Rejeter",
"lunasea.Docs": "Documents",
"lunasea.DownloadClient": "Client de téléchargement",
"lunasea.Edge": "Limite",
"lunasea.Error": "Erreur",
"lunasea.ExternalModules": "Modules externes",
@@ -77,6 +78,7 @@
"lunasea.Months": "{} Mois",
"lunasea.MonthsAgo": "Il y a {} mois",
"lunasea.New": "Nouveau",
"lunasea.No": "Non",
"lunasea.NoModulesEnabled": "Aucun module activé",
"lunasea.NotSet": "Non défini",
"lunasea.OneDay": "1 Jour",
@@ -126,6 +128,7 @@
"lunasea.Website": "Site web",
"lunasea.Years": "{} années",
"lunasea.YearsAgo": "Il y a {} années",
"lunasea.Yes": "Oui",
"overseerr.Users": "Utilisateurs",
"overseerr.UnknownUser": "Utilisateur inconnu",
"overseerr.NoUsersFound": "Aucun utilisateur trouvé",
@@ -171,6 +174,7 @@
"radarr.Codec": "Codec",
"radarr.Configure": "Configurer",
"radarr.Copy": "Copier",
"radarr.CopyFiles": "Copier les fichiers",
"radarr.CopyFull": "Lien physique/Copier les fichiers",
"radarr.CutoffUnmet": "Prérequis non atteints",
"radarr.DateAdded": "Date ajoutée",
@@ -207,6 +211,8 @@
"radarr.MonitoredDescription": "Surveiller les nouvelles versions",
"radarr.More": "Plus",
"radarr.Move": "Déplacer",
"radarr.MoveFiles": "Déplacer les fichiers",
"radarr.MoveFilesDescription": "Voulez-vous déplacer les fichiers ?",
"radarr.MoveFull": "Déplacer les fichiers",
"radarr.Movie": "Film",
"radarr.MovieFileDeleted": "Fichier vidéo supprimé",
@@ -267,6 +273,7 @@
"radarr.UnmappedFolders": "{} dossiers non cartographiés",
"radarr.UnmonitorMovie": "Ne plus surveiller le film",
"radarr.Unmonitored": "Non surveillé",
"radarr.Unreleased": "Inédits",
"radarr.Upcoming": "À venir",
"radarr.UpdateLibrary": "Mettre à jour la bibliothèque",
"radarr.UpdateMovie": "Mettre à jour le film",
@@ -275,6 +282,30 @@
"radarr.Wanted": "Recherché",
"radarr.Weight": "Poids",
"radarr.Year": "Année",
"sabnzbd.Failed": "Échoué",
"sabnzbd.Low": "Bas",
"sabnzbd.Ascending": "Ascendant",
"sabnzbd.CategoryDefault": "Catégorie par défaut",
"sabnzbd.StandbyPC": "Mettre le PC en veille",
"sabnzbd.Stop": "Arrêter",
"sabnzbd.Name": "Nom",
"sabnzbd.Paused": "En pause",
"sabnzbd.RepairUnpack": "Réparer/Deballer",
"sabnzbd.High": "Haut",
"sabnzbd.None": "Aucun",
"sabnzbd.Normal": "Normal",
"sabnzbd.RepairUnpackDelete": "Réparer/Deballer/Supprimer",
"sabnzbd.Size": "Taille",
"sabnzbd.Repair": "Réparer",
"sabnzbd.ShutdownPC": "Arrêter le PC",
"sabnzbd.ShutdownSABnzbd": "Arrêter SABnzbd",
"sabnzbd.Force": "Forcer",
"sabnzbd.Completed": "Complétés",
"sabnzbd.Descending": "Descendant",
"sabnzbd.Duplicate": "Dupliquer",
"sabnzbd.HibernatePC": "Mettre le PC en veille",
"sabnzbd.All": "Tout",
"sabnzbd.Age": "Âge",
"search.Subcategories": "Sous-catégories",
"search.Size": "Taille",
"search.SentTo": "Envoyé à {}",
@@ -559,6 +590,12 @@
"settings.DatabaseCorruptionDetectedMessageLine1": "Une corruption de la base de données a été détectée et votre configuration a été effacée.",
"settings.DatabaseCorruptionDetectedMessageLine2": "Désolé pour ce problème, toutes les sauvegardes devraient pouvoir être restaurés même celles créés avec une base de données corrompue.",
"settings.DatabaseCorruptionDetected": "Base de données corrompue détectée",
"settings.OpenDrawerOnBackActionDescription": "Ouvrir le tiroir au lieu de fermer LunaSea",
"settings.OpenDrawerOnBackAction": "Ouvrir le tiroir au dos",
"settings.DiscordDescription": "Demandes d'améliorations et assistance",
"settings.BootModule": "Module de démarrage",
"settings.General": "Général",
"settings.GeneralDescription": "Personnaliser LunsaSea",
"sonarr.AddedOn": "Ajouté le",
"sonarr.AddedSeries": "Série ajoutée",
"sonarr.AddedTag": "Étiquette ajoutée",
@@ -776,10 +813,10 @@
"tautulli.Video": "Vidéo",
"tautulli.Users": "Utilisateurs",
"tautulli.User": "Utilisateur",
"tautulli.Transcodes": "Transcodes",
"tautulli.Transcode": "Transcode",
"tautulli.Transcodes": "Conversions",
"tautulli.Transcode": "Conversion",
"tautulli.Title": "Titre",
"tautulli.Throttled": "Throttled",
"tautulli.Throttled": "Limité",
"tautulli.TerminateSessionFailed": "Échec de la fin de la session",
"tautulli.TerminateSession": "Mettre fin à la session",
"tautulli.TerminatedSession": "Session terminée",
@@ -838,6 +875,8 @@
"tautulli.Audio": "Audio",
"tautulli.ActivityDetails": "Détails de l'activité",
"tautulli.Activity": "Activité",
"tautulli.Speed": "Vitesse : x{}",
"tautulli.Converting": "Conversion",
"wake_on_lan.MagicPacketSent": "Paquet magique envoyé",
"wake_on_lan.MagicPacketSentMessage": "Votre machine devrait se réveiller !",
"wake_on_lan.MagicPacketFailedToSend": "Échec de l'envoi du paquet magique"

View File

@@ -34,37 +34,67 @@
"lunasea.Cancel": "Mégsem",
"lunasea.Candidate": "Jelölt",
"lunasea.ChangeProfiles": "Profil váltása",
"lunasea.Changelog": "Változási napló",
"lunasea.CheckLogsMessage": "További részletekért ellenőrizze a naplót",
"lunasea.Chores": "Házimunka",
"lunasea.Clear": "Törlés",
"lunasea.Close": "Bezárás",
"lunasea.ComingSoon": "Hamarosan",
"lunasea.Copied": "Másolva",
"lunasea.CopiedContentToTheClipboard": "Tartalom a vágólapra másolva",
"lunasea.Critical": "Kritikus",
"lunasea.Dashboard": "Irányítópult",
"lunasea.Days": "{} Nap",
"lunasea.DaysAgo": "{} Napja",
"lunasea.Debug": "Hibakeresés",
"lunasea.Delete": "Törlés",
"lunasea.Descending": "Csökkenő",
"lunasea.Develop": "Fejlesztés",
"lunasea.Disable": "Letiltás",
"lunasea.Disabled": "Letiltva",
"lunasea.Dismiss": "Elvetés",
"lunasea.Docs": "Dokumentumok",
"lunasea.DownloadClient": "Letöltő kliens",
"lunasea.Edge": "Él",
"lunasea.Error": "Hiba",
"lunasea.ExternalModules": "Külső modulok",
"lunasea.Features": "Jellemzők",
"lunasea.Fixes": "Javítások",
"lunasea.FullChangelog": "Teljes változásnapló",
"lunasea.GoBack": "Vissza",
"lunasea.GoToSettings": "Beállítások",
"lunasea.GridView": "Rács nézet",
"lunasea.Home": "Főképernyő",
"lunasea.Hours": "{} Óra",
"lunasea.HoursAgo": "{} Órája",
"lunasea.IncorrectEncryptionKey": "Helytelen titkosítási kulcs",
"lunasea.Internal": "Belső",
"lunasea.InvalidFileTypeSelected": "Érvénytelen fájltípus van kiválasztva",
"lunasea.JustNow": "Csak most",
"lunasea.Minutes": "{} Perc",
"lunasea.MinutesAgo": "{} Perccel ezelőtt",
"lunasea.Module": "Modul",
"lunasea.ModuleIsNotEnabled": "{} nincs engedélyezve",
"lunasea.Months": "{} Hónap",
"lunasea.MonthsAgo": "{} Hónappal ezelőtt",
"lunasea.New": "Új",
"lunasea.No": "Nem",
"lunasea.NoModulesEnabled": "Nincs engedélyezett modul",
"lunasea.NotSet": "Nincs beállítva",
"lunasea.OneDay": "1 nap",
"lunasea.OneDayAgo": "1 napja",
"lunasea.OneHour": "1 óra",
"lunasea.OneHourAgo": "1 órája",
"lunasea.OneMinute": "1 perc",
"lunasea.OneMinuteAgo": "1 perce",
"lunasea.OneMonth": "1 hónap",
"lunasea.OneMonthAgo": "1 hónapja",
"lunasea.OneSecond": "1 másodperc",
"lunasea.OneSecondAgo": "1 másodperce",
"lunasea.OneYear": "1 év",
"lunasea.OneYearAgo": "1 éve",
"lunasea.Options": "Opciók",
"lunasea.Other": "Egyéb",
"lunasea.Page": "Oldal",
"lunasea.PlatformSpecific": "Platform-specifikus",
"lunasea.PleaseTryAgain": "Kérem próbálja újra",
@@ -77,19 +107,28 @@
"lunasea.Retry": "Újra",
"lunasea.ReturnToDashboard": "Vissza az Irányítópultra",
"lunasea.SearchTextBar": "Keresés…",
"lunasea.Seconds": "{} másodperc",
"lunasea.SecondsAgo": "{} másodperce",
"lunasea.Set": "Beállítva",
"lunasea.Settings": "Beállítások",
"lunasea.Stable": "Stabil",
"lunasea.StartingView": "Kezdő nézet",
"lunasea.Today": "Ma",
"lunasea.TransactionFailure": "Sikertelen tranzakció",
"lunasea.TryAgain": "Próbálja újra",
"lunasea.Tweaks": "Tweakek",
"lunasea.UnderAMinute": "Egy perc alatt",
"lunasea.Unknown": "Ismeretlen",
"lunasea.UnknownDate": "Ismeretlen dátum",
"lunasea.UnknownError": "Ismeretlen hiba",
"lunasea.UnknownModule": "Ismeretlen modul",
"lunasea.Update": "Frissítés",
"lunasea.View": "Nézet",
"lunasea.Warning": "Figyelem",
"lunasea.Website": "Weboldal",
"lunasea.Years": "{} Év",
"lunasea.YearsAgo": "{} Éve",
"lunasea.Yes": "Igen",
"overseerr.NoRequestsFound": "Nem találtam kéréseket",
"overseerr.Audio": "Audió",
"overseerr.Approved": "Jóváhagyott",
@@ -135,6 +174,7 @@
"radarr.Codec": "Codec",
"radarr.Configure": "Konfigurálás",
"radarr.Copy": "Másolás",
"radarr.CopyFiles": "Hivatkozás/fájl másolása",
"radarr.CopyFull": "Hardlink/Fájlok másolása",
"radarr.CutoffUnmet": "Teljesítetlen levágása",
"radarr.DateAdded": "Hozzáadás dátuma",
@@ -171,6 +211,8 @@
"radarr.MonitoredDescription": "Új megjelenések monitorozása",
"radarr.More": "Továbbiak",
"radarr.Move": "Mozgatás",
"radarr.MoveFiles": "Fájlok átnevezése",
"radarr.MoveFilesDescription": "Szeretné áthelyezni a fájlokat?",
"radarr.MoveFull": "Fájlok mozgatása",
"radarr.Movie": "Film",
"radarr.MovieFileDeleted": "Film fájl törölve",
@@ -231,6 +273,7 @@
"radarr.UnmappedFolders": "{} leképezés nélküli mappa",
"radarr.UnmonitorMovie": "Film monitorozásának visszavonása",
"radarr.Unmonitored": "Nincs monitorozva",
"radarr.Unreleased": "Kiadatlan",
"radarr.Upcoming": "Hamarosan",
"radarr.UpdateLibrary": "Könyvtár frissítése",
"radarr.UpdateMovie": "Film frissítése",
@@ -239,6 +282,30 @@
"radarr.Wanted": "Kívánatos",
"radarr.Weight": "Súly",
"radarr.Year": "Év",
"sabnzbd.Age": "Kor",
"sabnzbd.All": "Összes",
"sabnzbd.Ascending": "Emelkedő",
"sabnzbd.CategoryDefault": "Alapértelmezett kategória",
"sabnzbd.Completed": "Befejezve",
"sabnzbd.Descending": "Csökkenő",
"sabnzbd.Duplicate": "Duplikálás",
"sabnzbd.Failed": "Nem sikerült",
"sabnzbd.HibernatePC": "PC Hibernálása",
"sabnzbd.Low": "Alacsony",
"sabnzbd.Force": "Kényszerítés",
"sabnzbd.High": "Magas",
"sabnzbd.Repair": "Javítás",
"sabnzbd.RepairUnpack": "Javítás/kicsomagolás",
"sabnzbd.ShutdownSABnzbd": "SABnzbd leállítása",
"sabnzbd.Name": "Név",
"sabnzbd.RepairUnpackDelete": "Javítás/kicsomagolás/törlés",
"sabnzbd.StandbyPC": "PC készenlétbe",
"sabnzbd.None": "Egyik sem",
"sabnzbd.Size": "Méret",
"sabnzbd.Normal": "Normál",
"sabnzbd.Paused": "Szüneteltetve",
"sabnzbd.ShutdownPC": "PC leállítása",
"sabnzbd.Stop": "Megállítás",
"search.Subcategories": "Alkategóriák",
"search.Size": "Méret",
"search.SentTo": "Elküldve {}",
@@ -331,7 +398,7 @@
"settings.HostHint4": "Ha nem használ fordított proxyt, kérjük, adja meg a portot",
"settings.HostHint3": "Ne használjon localhostot vagy 127.0.0.1-t",
"settings.HostHint2": "Meg kell adnia a http: // vagy a https: //",
"settings.HostHint1": "Ez az az URL, amelyben hozzáfér a szolgáltatás webes felhasználói felületéhez",
"settings.HostHint1": "Ez az URL amelyben hozzáfér a szolgáltatás webes felhasználói felületéhez",
"settings.Host": "Hoszt",
"settings.HeaderValueValidation": "Fejlécérték szükséges",
"settings.HeaderValue": "Fejléc értéke",
@@ -363,7 +430,7 @@
"settings.DeleteIndexer": "Indexer törlése",
"settings.DeleteHeaderHint1": "Biztosan törli ezt a fejlécet?",
"settings.DeleteHeader": "Fejléc törlése",
"settings.DeleteCloudBackupSuccess": "Sikeresen törölve",
"settings.DeleteCloudBackupSuccess": "Törölve",
"settings.DeleteCloudBackupFailure": "Nem sikerült törölni",
"settings.DeleteCloudBackupDescription": "Konfigurációs fájl törlése",
"settings.DeleteCloudBackup": "A biztonsági mentés törlése a felhőből",
@@ -380,7 +447,7 @@
"settings.ConnectionDetailsDescription": "A(z) {} kapcsolatának részletei",
"settings.ConnectionDetails": "Kapcsolat részletei",
"settings.ConnectedSuccessfullyMessage": "{} készen áll a LunaSea használatára!",
"settings.ConnectedSuccessfully": "Csatlakozás sikeres",
"settings.ConnectedSuccessfully": "Csatlakozva",
"settings.ConfigurationDescription": "Konfigurálja és állítsa be a LunaSea-t",
"settings.Configuration": "Konfiguráció",
"settings.ConfigureModule": "{} konfigurálása",
@@ -501,6 +568,32 @@
"settings.DefaultPagesDescription": "Állítsa be az alapértelmezett céloldalakat",
"settings.FutureDays": "Napokban",
"settings.GitHubDescription": "Tekintse meg a forráskódot",
"settings.RenamedProfile": "Profil átnevezése",
"settings.ProfileToProfile": "\"{}\"-tól \"{}\"-ig",
"settings.SentryLogging": "Sentry naplózás",
"settings.SentryLoggingDescription": "Hibák és összeomlások feltöltése a Sentry-be",
"settings.EnableInAppNotifications": "Alkalmazáson belüli értesítések engedélyezése",
"settings.BootModule": "Indító modul",
"settings.DatabaseCorruptionDetectedMessageLine2": "Elnézést kérünk a kellemetlenségért, minden korábban létrehozott biztonsági másolatnak visszaállíthatónak kell lennie, még akkor is, ha korábban sérült adatbázissal exportálták.",
"settings.DatabaseCorruptionDetected": "Korrupt adatbázis",
"settings.OpenDrawerOnBackActionDescription": "LunaSea bezárásakor nyissa meg a fiókot",
"settings.NoProfilesFound": "Nem található profil",
"settings.OpenDrawerOnBackAction": "Nyissa ki a fiókot a visszalépéskor",
"settings.AddedProfile": "Hozzáadott profil",
"settings.DeletedProfile": "Törölt profil",
"settings.DiscordDescription": "Kérjen funkciókat és kérjen támogatást",
"settings.ViewTypeLogs": "Tekintse meg a {} naplókat",
"settings.ChangedProfile": "Megváltoztatott profil",
"settings.DatabaseCorruptionDetectedMessageLine1": "Adatbázissérülést észleltünk, és a konfigurációt töröltük.",
"settings.General": "Általános",
"settings.GeneralDescription": "LunaSea testreszabása",
"settings.NoAdditionalProfilesAdded": "További profilok nem lettek hozzáadva",
"settings.Build": "Buildszám",
"settings.Channel": "Csatorna",
"settings.DownloadUpdate": "Frissítés letöltése",
"settings.Platform": "Platform adatai",
"settings.UpToDate": "Naprakész",
"settings.Version": "Verzió",
"sonarr.ManySeasons": "{} Évad",
"sonarr.AddReleaseToBlocklist": "Adja hozzá a kiadást a tiltólistához",
"sonarr.CheckDownloadClient": "További részletekért ellenőrizze a letöltési klienst",
@@ -780,6 +873,8 @@
"tautulli.Audio": "Hang",
"tautulli.ActivityDetails": "Tevékenység részletei",
"tautulli.Activity": "Tevékenység",
"tautulli.Converting": "Konvertálás",
"tautulli.Speed": "Sebesség: {}x",
"wake_on_lan.MagicPacketSent": "Magic Packet elküldve",
"wake_on_lan.MagicPacketSentMessage": "A gépednek fel kellene ébrednie!",
"wake_on_lan.MagicPacketFailedToSend": "Nem sikerült Magic Packet-et küldeni"

View File

@@ -164,18 +164,18 @@
"radarr.Language": "Idioma",
"radarr.Languages": "Idiomas",
"radarr.ManualImport": "Importação manual",
"radarr.ManualImportDescription": "Importar filmes do sistema de arquivos",
"radarr.ManualImportDescription": "Importar filmes do sistema de ficheiros",
"radarr.MinimumAvailability": "Disponibilidade mínima",
"radarr.More": "Mais",
"radarr.Movie": "Filme",
"radarr.MovieFileDeleted": "Arquivo do filme excluído",
"radarr.MovieFileRenamed": "Arquivo do filme renomeado",
"radarr.MovieFileDeleted": "Ficheiro do filme apagado",
"radarr.MovieFileRenamed": "Ficheiro do filme renomeado",
"radarr.MovieImported": "Filme importado ({})",
"radarr.MovieNotFound": "Filme não encontrado",
"radarr.MoviePath": "Caminho do filme",
"radarr.Movies": "Filmes",
"radarr.NoDisksFound": "Nenhum disco encontrado",
"radarr.NoFilesFound": "Nenhum arquivo encontrado",
"radarr.NoFilesFound": "Nenhum ficheiro encontrado",
"radarr.NoHistoryFound": "Nenhum histórico encontrado",
"radarr.NoMoviesFound": "Nenhum filme encontrado",
"radarr.NoResultsFound": "Nenhum resultado encontrado",
@@ -479,9 +479,9 @@
"settings.UpdatePassword": "Atualizar senha",
"sonarr.AddedTag": "Tag Adicionada",
"sonarr.AddSeries": "Adicionar Série",
"sonarr.DeleteFile": "Deletar Arquivo",
"sonarr.EpisodeFileDeleted": "Arquivo do Episódio Deletado",
"sonarr.EpisodeFileRenamed": "Arquivo do Episódio Renomeado",
"sonarr.DeleteFile": "Apagar Ficheiro",
"sonarr.EpisodeFileDeleted": "Ficheiro do Episódio Apagado",
"sonarr.EpisodeFileRenamed": "Ficheiro do Episódio Renomeado",
"sonarr.EpisodeNumber": "Episódio {}",
"sonarr.FailedToAddSeries": "Falhou ao Adicionar Séries",
"sonarr.FailedToAddTag": "Falhou ao adicionar Tag",
@@ -502,18 +502,18 @@
"sonarr.Monitoring": "Monitorando",
"sonarr.AllSeasons": "Todas as Temporadas",
"sonarr.AutomaticSearch": "Busca Automática",
"sonarr.DeleteEpisodeFile": "Deletar Arquivo do Episódio",
"sonarr.DeleteEpisodeFile": "Deletar Ficheiro do Episódio",
"sonarr.Language": "Língua",
"sonarr.Audio": "Áudio",
"sonarr.DeleteEpisodeFileHint1": "Tem certeza que deseja apagar o arquivo desse episódio?",
"sonarr.DeleteFiles": "Deletar Arquivos",
"sonarr.DeleteEpisodeFileHint1": "Tem certeza que deseja apagar o ficheiro desse episódio?",
"sonarr.DeleteFiles": "Apagar Ficheiros",
"sonarr.Episode": "Episódio",
"sonarr.EpisodesAvailable": "Episódios Disponíveis",
"sonarr.EpisodeImported": "Episódio Importado ({})",
"sonarr.FilterCatalogue": "Filtrar Catálogo",
"sonarr.FilterReleases": "Filtrar Lançamentos",
"sonarr.Languages": "Línguas",
"sonarr.ManualImportDescription": "Importar Conteúdo do Sistema de Arquivos",
"sonarr.ManualImportDescription": "Importar Conteúdo do Sistema de Ficheiros",
"sonarr.Monitored": "Monitorado",
"sonarr.MissingEpisodesHint1": "Tem certeza que deseja procurar por todos os episódios faltantes?",
"sonarr.MonitorEpisode": "Monitorar Episódio",
@@ -533,12 +533,12 @@
"sonarr.Channels": "Canais",
"sonarr.Client": "Cliente",
"sonarr.Continuing": "Continuando",
"sonarr.DeleteReasonUpgrade": "O arquivo foi excluído para importar uma atualização",
"sonarr.DeleteReasonUpgrade": "O ficheiro foi apagado para importar uma atualização",
"sonarr.DestinationRelative": "Destino relativo",
"sonarr.Download": "Baixar",
"sonarr.BackupDatabase": "Backup do banco de dados",
"sonarr.CheckDownloadClient": "Verifique o cliente de download para obter mais detalhes",
"sonarr.DeleteReasonMissingFromDisk": "O Sonarr não conseguiu encontrar o arquivo no disco, então ele foi removido",
"sonarr.DeleteReasonMissingFromDisk": "O Sonarr não conseguiu encontrar o ficheiro no disco, então ele foi removido",
"sonarr.EditSeries": "Editar séries",
"sonarr.DownloadingWithMessage": "Baixando: {}",
"sonarr.Downloading": "Baixando",

View File

@@ -282,6 +282,30 @@
"radarr.Wanted": "İstenen",
"radarr.Weight": "Ağırlık",
"radarr.Year": "Yıl",
"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",
"search.Subcategories": "Alt Kategoriler",
"search.Size": "Boyut",
"search.SentTo": "{}'e gönderildi",
@@ -568,6 +592,8 @@
"settings.BootModule": "Önyükleme Modülü",
"settings.GeneralDescription": "LunaSea'yi Özelleştirin",
"settings.General": "Genel",
"settings.OpenDrawerOnBackAction": "Geri Eyleminde Çekmeceyi Aç",
"settings.OpenDrawerOnBackActionDescription": "LunaSea'yi kapatmak yerine çekmeceyi açın",
"sonarr.AddedSeries": "Eklenen Diziler",
"sonarr.Age": "Yıl",
"sonarr.All": "Her Şey",
@@ -602,7 +628,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ı",
@@ -847,6 +873,8 @@
"tautulli.BackingUpConfiguration": "Yapılandırma Yedekleniyor…",
"tautulli.Audio": "Ses",
"tautulli.ActivityDetails": "Etkinlik Ayrıntıları",
"tautulli.Converting": "Dönüştürülüyor",
"tautulli.Speed": "Hız: {}x",
"wake_on_lan.MagicPacketSent": "Sihirli Paket Gönderildi",
"wake_on_lan.MagicPacketSentMessage": "Makineniz uyanıyor olmalı!",
"wake_on_lan.MagicPacketFailedToSend": "Sihirli Paket Gönderilemedi"

View File

@@ -593,8 +593,11 @@
"settings.DiscordDescription": "请求功能获得支持",
"settings.General": "通用",
"settings.GeneralDescription": "自定义LunaSea",
"settings.BootModule": "启动模块",
"settings.OpenDrawerOnBackAction": "从背面打开抽屉",
"settings.OpenDrawerOnBackActionDescription": "打开抽屉而不关闭LunaSea",
"sonarr.AddSeries": "添加系列",
"sonarr.AddedOn": "添加",
"sonarr.AddedOn": "添加",
"sonarr.Age": "年龄",
"sonarr.All": "全部",
"sonarr.AllSeasons": "所有季",
@@ -770,7 +773,7 @@
"sonarr.UpdatedSeries": "更新系列",
"sonarr.Languages": "语言文字",
"sonarr.NoReleasesFound": "未找到任何新版本",
"sonarr.AddedSeries": "添加系列",
"sonarr.AddedSeries": "新增系列",
"sonarr.AddedTag": "添加标签",
"sonarr.AddReleaseToBlocklist": "添加发布到阻止列表",
"sonarr.DownloadWarning": "下载警告",
@@ -872,6 +875,8 @@
"tautulli.NoActiveStreams": "没有活动流",
"tautulli.Season": "季 {}",
"tautulli.TerminateSessionFailed": "终止会话失败",
"tautulli.Converting": "转换",
"tautulli.Speed": "倍速:{}x",
"wake_on_lan.MagicPacketSent": "已发送幻包",
"wake_on_lan.MagicPacketSentMessage": "您的机器正在唤醒!",
"wake_on_lan.MagicPacketFailedToSend": "幻包发送失败"

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,14 +1,13 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.5)
CFPropertyList (3.0.6)
rexml
activesupport (6.1.7)
activesupport (7.0.4.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.1)
public_suffix (>= 2.0.2, < 6.0)
algoliasearch (1.27.5)
@@ -17,16 +16,16 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.655.0)
aws-sdk-core (3.166.0)
aws-partitions (1.731.0)
aws-sdk-core (3.170.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.59.0)
aws-sdk-kms (1.63.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.117.1)
aws-sdk-s3 (1.119.1)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
@@ -34,15 +33,15 @@ GEM
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.1.0)
cocoapods (1.11.3)
cocoapods (1.12.0)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.11.3)
cocoapods-core (= 1.12.0)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.4.0, < 2.0)
cocoapods-downloader (>= 1.6.0, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.4.0, < 2.0)
cocoapods-trunk (>= 1.6.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
@@ -50,10 +49,10 @@ GEM
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 1.0, < 3.0)
ruby-macho (>= 2.3.0, < 3.0)
xcodeproj (>= 1.21.0, < 2.0)
cocoapods-core (1.11.3)
activesupport (>= 5.0, < 7)
cocoapods-core (1.12.0)
activesupport (>= 5.0, < 8)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
@@ -75,7 +74,7 @@ GEM
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
concurrent-ruby (1.1.10)
concurrent-ruby (1.2.2)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
@@ -84,10 +83,10 @@ GEM
dotenv (2.8.1)
emoji_regex (3.2.3)
escape (0.0.4)
ethon (0.15.0)
ethon (0.16.0)
ffi (>= 1.15.0)
excon (0.93.1)
faraday (1.10.2)
excon (0.99.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -116,7 +115,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.210.1)
fastlane (2.212.1)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -159,9 +158,9 @@ GEM
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.30.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-core (0.9.1)
google-apis-androidpublisher_v3 (0.37.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -170,10 +169,10 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.16.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-playcustomapp_v1 (0.12.0)
google-apis-core (>= 0.9.1, < 2.a)
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-cloud-core (1.6.0)
@@ -181,7 +180,7 @@ GEM
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.3.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
@@ -203,13 +202,13 @@ GEM
httpclient (2.8.3)
i18n (1.12.0)
concurrent-ruby (~> 1.0)
jmespath (1.6.1)
json (2.6.2)
jwt (2.5.0)
jmespath (1.6.2)
json (2.6.3)
jwt (2.7.0)
memoist (0.16.2)
mini_magick (4.11.0)
mini_magick (4.12.0)
mini_mime (1.1.2)
minitest (5.16.3)
minitest (5.18.0)
molinillo (0.8.0)
multi_json (1.15.0)
multipart-post (2.0.0)
@@ -219,7 +218,7 @@ GEM
netrc (0.11.0)
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
plist (3.7.0)
public_suffix (4.0.7)
rake (13.0.6)
representable (3.2.0)
@@ -238,7 +237,7 @@ GEM
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
simctl (1.6.10)
CFPropertyList
naturally
terminal-notifier (2.0.0)
@@ -251,14 +250,14 @@ GEM
tty-cursor (~> 0.7)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.5)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.7.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
@@ -271,7 +270,6 @@ GEM
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
zeitwerk (2.6.4)
PLATFORMS
ruby

View File

@@ -1,5 +1,5 @@
platform :ios, '11.0'
$FirebaseSDKVersion = '10.0.0'
$FirebaseSDKVersion = '10.5.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.4.5):
- Firebase/Firestore (= 10.5.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.5.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 10.0.0)
- Firebase/CoreOnly (10.0.0):
- FirebaseCore (= 10.0.0)
- Firebase/Firestore (10.0.0):
- FirebaseAuth (~> 10.5.0)
- Firebase/CoreOnly (10.5.0):
- FirebaseCore (= 10.5.0)
- Firebase/Firestore (10.5.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 10.0.0)
- Firebase/Messaging (10.0.0):
- FirebaseFirestore (~> 10.5.0)
- Firebase/Messaging (10.5.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 10.0.0)
- Firebase/Storage (10.0.0):
- FirebaseMessaging (~> 10.5.0)
- Firebase/Storage (10.5.0):
- Firebase/CoreOnly
- FirebaseStorage (~> 10.0.0)
- firebase_auth (4.1.1):
- Firebase/Auth (= 10.0.0)
- FirebaseStorage (~> 10.5.0)
- firebase_auth (4.3.0):
- Firebase/Auth (= 10.5.0)
- firebase_core
- Flutter
- firebase_core (2.1.1):
- Firebase/CoreOnly (= 10.0.0)
- firebase_core (2.8.0):
- Firebase/CoreOnly (= 10.5.0)
- Flutter
- firebase_messaging (14.0.4):
- Firebase/Messaging (= 10.0.0)
- firebase_messaging (14.3.0):
- Firebase/Messaging (= 10.5.0)
- firebase_core
- Flutter
- firebase_storage (11.0.4):
- Firebase/Storage (= 10.0.0)
- firebase_storage (11.0.16):
- Firebase/Storage (= 10.5.0)
- firebase_core
- Flutter
- FirebaseAppCheckInterop (10.1.0)
- FirebaseAuth (10.0.0):
- FirebaseAppCheckInterop (10.7.0)
- FirebaseAuth (10.5.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.7.0)
- FirebaseCore (10.5.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreExtension (10.1.0):
- FirebaseCoreExtension (10.7.0):
- FirebaseCore (~> 10.0)
- FirebaseCoreInternal (10.1.0):
- FirebaseCoreInternal (10.7.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseFirestore (10.0.0):
- FirebaseFirestore/AutodetectLeveldb (= 10.0.0)
- FirebaseFirestore/AutodetectLeveldb (10.0.0):
- FirebaseFirestore (10.5.0):
- FirebaseFirestore/AutodetectLeveldb (= 10.5.0)
- FirebaseFirestore/AutodetectLeveldb (10.5.0):
- FirebaseFirestore/Base
- FirebaseFirestore/WithLeveldb
- FirebaseFirestore/Base (10.0.0)
- FirebaseFirestore/WithLeveldb (10.0.0):
- FirebaseFirestore/Base (10.5.0)
- FirebaseFirestore/WithLeveldb (10.5.0):
- FirebaseFirestore/Base
- FirebaseInstallations (10.1.0):
- FirebaseInstallations (10.7.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseMessaging (10.0.0):
- FirebaseMessaging (10.5.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
@@ -104,42 +104,43 @@ PODS:
- GoogleUtilities/Reachability (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseStorage (10.0.0):
- FirebaseStorage (10.5.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
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- GoogleDataTransport (9.2.0):
- GoogleDataTransport (9.2.1):
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.8.0):
- GoogleUtilities/AppDelegateSwizzler (7.11.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.8.0):
- GoogleUtilities/Environment (7.11.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.8.0):
- GoogleUtilities/Logger (7.11.0):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.8.0):
- GoogleUtilities/Network (7.11.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.8.0)"
- GoogleUtilities/Reachability (7.8.0):
- "GoogleUtilities/NSData+zlib (7.11.0)"
- GoogleUtilities/Reachability (7.11.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.8.0):
- GoogleUtilities/UserDefaults (7.11.0):
- GoogleUtilities/Logger
- GTMSessionFetcher/Core (2.2.0)
- GTMSessionFetcher/Core (3.1.0)
- in_app_purchase_storekit (0.0.1):
- Flutter
- FlutterMacOS
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
@@ -147,29 +148,31 @@ PODS:
- nanopb/encode (2.30909.0)
- package_info_plus (0.4.5):
- Flutter
- path_provider_ios (0.0.1):
- path_provider_foundation (0.0.1):
- Flutter
- PromisesObjC (2.1.1)
- FlutterMacOS
- PromisesObjC (2.2.0)
- 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.15.5):
- SDWebImage/Core (= 5.15.5)
- SDWebImage/Core (5.15.5)
- Sentry/HybridSDK (8.3.1):
- SentryPrivate (= 8.3.1)
- sentry_flutter (0.0.1):
- Flutter
- FlutterMacOS
- Sentry (~> 7.30.0)
- Sentry/HybridSDK (= 8.3.1)
- SentryPrivate (8.3.1)
- share_plus (0.0.1):
- Flutter
- shared_preferences_ios (0.0.1):
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- SwiftyGif (5.4.3)
- SwiftyGif (5.4.4)
- url_launcher_ios (0.0.1):
- Flutter
@@ -181,16 +184,16 @@ 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.5.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`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`)
- quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`)
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
@@ -216,6 +219,7 @@ SPEC REPOS:
- PromisesObjC
- SDWebImage
- Sentry
- SentryPrivate
- SwiftyGif
EXTERNAL SOURCES:
@@ -233,7 +237,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.5.0
Flutter:
:path: Flutter
flutter_native_splash:
@@ -242,16 +246,16 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/in_app_purchase_storekit/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/ios"
quick_actions_ios:
:path: ".symlinks/plugins/quick_actions_ios/ios"
sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios"
share_plus:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_ios:
:path: ".symlinks/plugins/shared_preferences_ios/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher_ios:
@@ -260,49 +264,50 @@ EXTERNAL SOURCES:
CHECKOUT OPTIONS:
FirebaseFirestore:
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
:tag: 10.0.0
:tag: 10.5.0
SPEC CHECKSUMS:
cloud_firestore: 62c5fa0e5ce5373be25d6233e8edbbe991fa973d
cloud_firestore: 29dafcfe235974cd3907d6212400629838180a16
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
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Firebase: 3d6637234ab163e31852834617b4fe1df3b7af6d
firebase_auth: 94ca572cd6a84385096c5a8f6328d5ee6cf84a16
firebase_core: d9c8f891a986a99a60ab81eabb5ef2ea2edcfee1
firebase_messaging: b9ce7e6dbd0c80fca3c8b9ba112eb59e50e178ae
firebase_storage: b6a95fdcb9cc14e4ae44121764e893e08fd65020
FirebaseAppCheckInterop: 8e907eea79958960a8bd2058e067f31e03a7914b
FirebaseAuth: 1028326bcaa7a61391386e74b9078cc558ae14f1
FirebaseAuthInterop: 46201190fe90ef1f581513eb0f9fa3d7820e7d6d
FirebaseCore: 324b8d182d9ff7e3f6d1fa2f04b082d1c7a3e366
FirebaseCoreExtension: f17247ba8c61e4d3c8d136b5e2de3cb4ac6a85b6
FirebaseCoreInternal: 8845798510aae74703467480f71ac613788d0696
FirebaseFirestore: 41e14a56b72dfdf579790c42b7ac361b30d171f2
FirebaseInstallations: 59c0e4c7a816a0f76710d83f77e5369b3e45eb96
FirebaseMessaging: 35ecbbc68ff547fca80f9326c9622e79288c7149
FirebaseStorage: 858ba102341232ad8f4e3a457090858200716966
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
GTMSessionFetcher: d62ffccea5108bb9e7762ee121ae63bbdd2c6303
in_app_purchase_storekit: d7fcf4646136ec258e237872755da8ea6c1b6096
GoogleDataTransport: ea169759df570f4e37bdee1623ec32a7e64e67c4
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
quick_actions_ios: 56c03753992beabaa6c598e470e12d430d6e5e2f
SDWebImage: 23d714cd599354ee7906dbae26dff89b421c4370
Sentry: dcd74a503a6d4594ef5d6ab28cf30895a2c19a40
sentry_flutter: d6f51618010b194d871b063903b1bb8170d396fb
path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9
PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
quick_actions_ios: bb09d1c35b4a89f9dbb15487039fa1b983ca375e
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
Sentry: 316f997b2f89557014ae9919f0d0c71e6e43c01e
sentry_flutter: f0e51fac01e46af2e16f0a7458e3014bbc131ff5
SentryPrivate: 63dd9ee25187d20427ab7b5d03054df149912c23
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
PODFILE CHECKSUM: 0f2923ed3bf0e590c5af6cab3b1cde48e6ae0eec
PODFILE CHECKSUM: e27cc29c7cdd07e9428874a7c32df1ab5677bbc7
COCOAPODS: 1.11.3
COCOAPODS: 1.12.0

View File

@@ -3,14 +3,14 @@
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
0076D3D6D60E83034A1E0D0E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09FE6EE3FA652F683E30D461 /* Pods_Runner.framework */; };
007DE1E782B48FF895CE4B6C /* Pods_ImageNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD8A9D1D71899A3A89676B04 /* Pods_ImageNotification.framework */; };
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
371E6475B0A3BE94B2BDF716 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44EF78720B687FDBE9001C4D /* Pods_Runner.framework */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
5A2FBF43F4CBC30F9BB6CD42 /* Pods_ImageNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DFFCA57A5DC71BDB2499BC1 /* Pods_ImageNotification.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
@@ -55,16 +55,14 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
09FE6EE3FA652F683E30D461 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
2ED7BA47F325235F982A481E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
44EF78720B687FDBE9001C4D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
702080D64FE7B3882B9842A3 /* Pods-ImageNotification.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.profile.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.profile.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7DFFCA57A5DC71BDB2499BC1 /* Pods_ImageNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ImageNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8D3B7B67E1BB6745AD368CC8 /* Pods-ImageNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.debug.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.debug.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -80,10 +78,12 @@
9C7092B125E77E470056AE0B /* NotificationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationService.h; sourceTree = "<group>"; };
9C7092B225E77E470056AE0B /* NotificationService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationService.m; sourceTree = "<group>"; };
9C7092B425E77E470056AE0B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ACC178F98C7426A348E138DD /* Pods-ImageNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.debug.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.debug.xcconfig"; sourceTree = "<group>"; };
AD9EB60D5E1FDD26501B69CA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
D010600D97E23D1BE9FBA1CC /* Pods-ImageNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.release.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.release.xcconfig"; sourceTree = "<group>"; };
DB821AD0857E62B21015D760 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
A0A8F8D04139A672EDF6A85F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
B4DF18831CC2053BF748706B /* Pods-ImageNotification.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.profile.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.profile.xcconfig"; sourceTree = "<group>"; };
BB3E22A8716743EFBC805A48 /* Pods-ImageNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.release.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.release.xcconfig"; sourceTree = "<group>"; };
BD8A9D1D71899A3A89676B04 /* Pods_ImageNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ImageNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C4DA1502BC108DB9BB52F223 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
D9B67C19C099711F4CDD87D9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -92,7 +92,7 @@
buildActionMask = 2147483647;
files = (
9C2991242453FE3100B93AB2 /* StoreKit.framework in Frameworks */,
371E6475B0A3BE94B2BDF716 /* Pods_Runner.framework in Frameworks */,
0076D3D6D60E83034A1E0D0E /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -100,7 +100,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5A2FBF43F4CBC30F9BB6CD42 /* Pods_ImageNotification.framework in Frameworks */,
007DE1E782B48FF895CE4B6C /* Pods_ImageNotification.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -179,8 +179,8 @@
isa = PBXGroup;
children = (
9C2991232453FE3100B93AB2 /* StoreKit.framework */,
7DFFCA57A5DC71BDB2499BC1 /* Pods_ImageNotification.framework */,
44EF78720B687FDBE9001C4D /* Pods_Runner.framework */,
BD8A9D1D71899A3A89676B04 /* Pods_ImageNotification.framework */,
09FE6EE3FA652F683E30D461 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -188,12 +188,12 @@
F5D05D221249C73674C5DB0D /* Pods */ = {
isa = PBXGroup;
children = (
ACC178F98C7426A348E138DD /* Pods-ImageNotification.debug.xcconfig */,
D010600D97E23D1BE9FBA1CC /* Pods-ImageNotification.release.xcconfig */,
702080D64FE7B3882B9842A3 /* Pods-ImageNotification.profile.xcconfig */,
2ED7BA47F325235F982A481E /* Pods-Runner.debug.xcconfig */,
DB821AD0857E62B21015D760 /* Pods-Runner.release.xcconfig */,
AD9EB60D5E1FDD26501B69CA /* Pods-Runner.profile.xcconfig */,
8D3B7B67E1BB6745AD368CC8 /* Pods-ImageNotification.debug.xcconfig */,
BB3E22A8716743EFBC805A48 /* Pods-ImageNotification.release.xcconfig */,
B4DF18831CC2053BF748706B /* Pods-ImageNotification.profile.xcconfig */,
D9B67C19C099711F4CDD87D9 /* Pods-Runner.debug.xcconfig */,
A0A8F8D04139A672EDF6A85F /* Pods-Runner.release.xcconfig */,
C4DA1502BC108DB9BB52F223 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -205,7 +205,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
1AF231CBAF75F471E97C5E3F /* [CP] Check Pods Manifest.lock */,
5AC1B074EBDF4B45CD073933 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
@@ -213,8 +213,8 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
9C7092B825E77E470056AE0B /* Embed App Extensions */,
4C0D8B6E700C55D46B0878AF /* [CP] Embed Pods Frameworks */,
7B696945E0B5C5F36D81D6B3 /* [CP] Copy Pods Resources */,
E6A6BAA8A7CCB50967DD02A1 /* [CP] Embed Pods Frameworks */,
8FC36251779B316E672E05BD /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -230,7 +230,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 9C7092BC25E77E470056AE0B /* Build configuration list for PBXNativeTarget "ImageNotification" */;
buildPhases = (
1B47C8D8F52BAFB243086F88 /* [CP] Check Pods Manifest.lock */,
1D89D7AEADC332B0D3E033A0 /* [CP] Check Pods Manifest.lock */,
9C7092AB25E77E470056AE0B /* Sources */,
9C7092AC25E77E470056AE0B /* Frameworks */,
9C7092AD25E77E470056AE0B /* Resources */,
@@ -308,29 +308,7 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
1AF231CBAF75F471E97C5E3F /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
1B47C8D8F52BAFB243086F88 /* [CP] Check Pods Manifest.lock */ = {
1D89D7AEADC332B0D3E033A0 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -354,6 +332,7 @@
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -366,7 +345,62 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
4C0D8B6E700C55D46B0878AF /* [CP] Embed Pods Frameworks */ = {
5AC1B074EBDF4B45CD073933 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
8FC36251779B316E672E05BD /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
"${PODS_ROOT}/FirebaseFirestore/FirebaseFirestore/Resources/gRPCCertificates-Cpp.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates-Cpp.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
};
E6A6BAA8A7CCB50967DD02A1 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -391,17 +425,18 @@
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework",
"${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
"${BUILT_PRODUCTS_DIR}/flutter_native_splash/flutter_native_splash.framework",
"${BUILT_PRODUCTS_DIR}/in_app_purchase_storekit/in_app_purchase_storekit.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/package_info_plus/package_info_plus.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_ios/path_provider_ios.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework",
"${BUILT_PRODUCTS_DIR}/quick_actions_ios/quick_actions_ios.framework",
"${BUILT_PRODUCTS_DIR}/sentry_flutter/sentry_flutter.framework",
"${BUILT_PRODUCTS_DIR}/share_plus/share_plus.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_ios/shared_preferences_ios.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_foundation/shared_preferences_foundation.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework",
);
@@ -425,17 +460,18 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_native_splash.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_storekit.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/quick_actions_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_foundation.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework",
);
@@ -444,38 +480,6 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
7B696945E0B5C5F36D81D6B3 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
"${PODS_ROOT}/FirebaseFirestore/FirebaseFirestore/Resources/gRPCCertificates-Cpp.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates-Cpp.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */

View File

@@ -61,6 +61,11 @@
<string>Main</string>
<key>UIStatusBarHidden</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>plex</string>
<string>https</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
@@ -78,5 +83,9 @@
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
</dict>
</plist>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>FLTEnableImpeller</key>
<true/>
</dict>
</plist>

View File

@@ -54,7 +54,6 @@ platform :ios do
sh(
"flutter", "build", "ios",
"--release",
"--bundle-sksl-path=shaders/ios_sksl.json",
"--no-codesign",
"--build-number=#{options[:build_number]}",
)

View File

@@ -1,4 +1,4 @@
git_url("git@github.com:JagandeepBrar/LunaSea-Fastlane-Storage.git")
git_url("git@github.com:RoninComputer/fastlane-match-storage.git")
storage_mode("git")
app_identifier(["app.lunasea.lunasea", "app.lunasea.lunasea.ImageNotification"])
platform("ios")

View File

@@ -21,6 +21,8 @@ abstract class LidarrAPI {
queryParameters: {
if (apiKey.isNotEmpty) 'apikey': apiKey,
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
));
return _LidarrAPI(dio, baseUrl: _baseUrl(host));
}

View File

@@ -1,8 +1,6 @@
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:lunasea/api/nzbget/models/status.dart';
import 'package:lunasea/api/nzbget/models/version.dart';
import 'package:retrofit/retrofit.dart';
import 'package:lunasea/vendor.dart';
part 'api.g.dart';
@@ -31,7 +29,7 @@ void _attachInterceptor(Dio dio) {
}
void _setResponseTransformer(Dio dio) {
(dio.transformer as DefaultTransformer).jsonDecodeCallback = (data) {
(dio.transformer as BackgroundTransformer).jsonDecodeCallback = (data) {
final parsed = json.decode(data);
final result = parsed['result'];
if (result is Map) return result;
@@ -51,6 +49,8 @@ abstract class NZBGetAPI {
headers: headers,
followRedirects: true,
maxRedirects: 5,
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
));
_attachInterceptor(dio);
_setResponseTransformer(dio);

View File

@@ -27,6 +27,8 @@ abstract class OverseerrAPI {
'X-Api-Key': apiKey,
...headers,
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
followRedirects: true,
maxRedirects: 5,
),

View File

@@ -68,6 +68,8 @@ class RadarrAPI {
headers: headers,
followRedirects: followRedirects,
maxRedirects: maxRedirects,
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
),
);
return RadarrAPI._internal(

View File

@@ -32,6 +32,8 @@ abstract class SABnzbdAPI {
headers: headers,
followRedirects: true,
maxRedirects: 5,
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
queryParameters: {
if (apiKey.isNotEmpty) 'apikey': apiKey,
'output': 'json',

View File

@@ -36,6 +36,8 @@ class SonarrAPI {
queryParameters: {
'apikey': apiKey,
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
headers: headers,
followRedirects: followRedirects,
maxRedirects: maxRedirects,

View File

@@ -312,7 +312,7 @@ class TautulliSession {
fromJson: TautulliUtilities.ensureStringFromJson)
final String? videoResolution;
/// Full resoltuion of the video stream.
/// Full resolution of the video stream.
@JsonKey(
name: 'video_full_resolution',
fromJson: TautulliUtilities.ensureStringFromJson)
@@ -793,13 +793,13 @@ class TautulliSession {
@JsonKey(
name: 'transcode_hw_encode',
fromJson: TautulliUtilities.ensureStringFromJson)
final String? transcodeHardwarEencode;
final String? transcodeHardwareEncode;
/// Hardware encode title of the transcode stream.
@JsonKey(
name: 'transcode_hw_encode_title',
fromJson: TautulliUtilities.ensureStringFromJson)
final String? transcodeHardwarEencodeTitle;
final String? transcodeHardwareEncodeTitle;
/// Is the transcoder using hardware acceleration for the full pipeline?
@JsonKey(
@@ -958,7 +958,7 @@ class TautulliSession {
@JsonKey(name: 'subtitles', fromJson: TautulliUtilities.ensureBooleanFromJson)
final bool? subtitles;
/// Full resoltuion of the final video stream.
/// Full resolution of the final video stream.
@JsonKey(
name: 'stream_video_full_resolution',
fromJson: TautulliUtilities.ensureStringFromJson)
@@ -1295,8 +1295,8 @@ class TautulliSession {
this.transcodeHardwareRequested,
this.transcodeHardwareDecode,
this.transcodeHardwareDecodeTitle,
this.transcodeHardwarEencode,
this.transcodeHardwarEencodeTitle,
this.transcodeHardwareEncode,
this.transcodeHardwareEncodeTitle,
this.transcodeHardwareFullPipeline,
this.audioDecision,
this.videoDecision,

View File

@@ -51,6 +51,8 @@ class TautulliAPI {
queryParameters: {
'apikey': apiKey,
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
headers: headers,
followRedirects: followRedirects,
maxRedirects: maxRedirects,

View File

@@ -9,8 +9,12 @@ enum TautulliMediaType {
ARTIST,
ALBUM,
TRACK,
LIVE,
PHOTO_ALBUM,
PHOTO,
CLIP,
COLLECTION,
PLAYLIST,
LIVE,
NULL;
static TautulliMediaType from(String? type) {
@@ -29,10 +33,18 @@ enum TautulliMediaType {
return TautulliMediaType.ALBUM;
case 'track':
return TautulliMediaType.TRACK;
case 'live':
return TautulliMediaType.LIVE;
case 'photoalbum':
return TautulliMediaType.PHOTO_ALBUM;
case 'photo':
return TautulliMediaType.PHOTO;
case 'clip':
return TautulliMediaType.CLIP;
case 'collection':
return TautulliMediaType.COLLECTION;
case 'playlist':
return TautulliMediaType.PLAYLIST;
case 'live':
return TautulliMediaType.LIVE;
default:
return TautulliMediaType.NULL;
}
@@ -55,10 +67,18 @@ enum TautulliMediaType {
return 'album';
case TautulliMediaType.TRACK:
return 'track';
case TautulliMediaType.LIVE:
return 'live';
case TautulliMediaType.PHOTO_ALBUM:
return 'photoalbum';
case TautulliMediaType.PHOTO:
return 'photo';
case TautulliMediaType.CLIP:
return 'clip';
case TautulliMediaType.COLLECTION:
return 'collection';
case TautulliMediaType.PLAYLIST:
return 'playlist';
case TautulliMediaType.LIVE:
return 'live';
default:
return '';
}

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

@@ -1,17 +1,17 @@
import 'package:lunasea/system/logger.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher/url_launcher_string.dart';
extension StringAsLinksExtension on String {
Future<bool> _launchUniversal(uri) async {
return await launchUrl(
Future<bool> _launchUniversal(String uri) async {
return await launchUrlString(
uri,
webOnlyWindowName: '_blank',
mode: LaunchMode.externalNonBrowserApplication,
);
}
Future<bool> _launchDefault(uri) async {
return await launchUrl(
Future<bool> _launchDefault(String uri) async {
return await launchUrlString(
uri,
webOnlyWindowName: '_blank',
mode: LaunchMode.platformDefault,
@@ -20,9 +20,8 @@ extension StringAsLinksExtension on String {
Future<void> openLink() async {
try {
Uri uri = Uri.parse(this);
if (await _launchUniversal(uri)) return;
await _launchDefault(uri);
if (await _launchUniversal(this)) return;
await _launchDefault(this);
} catch (error, stack) {
LunaLogger().error(
'Unable to open URL',
@@ -32,6 +31,10 @@ extension StringAsLinksExtension on String {
}
}
Future<bool> canOpenUrl() async {
return canLaunchUrlString(this);
}
Future<void> openImdb() async =>
await 'https://www.imdb.com/title/$this'.openLink();

View File

@@ -20,6 +20,8 @@ extension StringExtension on String {
String toTitleCase({
String delimiter = ' ',
}) {
if (isEmpty) return '';
final split = this.split(delimiter);
for (var i = 0; i < split.length; i++) {
String word = split[i];

View File

@@ -413,7 +413,7 @@ extension LunaModuleRoutingExtension on LunaModule {
Future<void> launch() async {
if (homeRoute != null) {
LunaRouter.router.replace(homeRoute!);
LunaRouter.router.pushReplacement(homeRoute!);
}
}
}

View File

@@ -48,6 +48,8 @@ class API {
'start': _startDate(today),
'end': _endDate(today),
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
headers: profile.lidarrHeaders,
followRedirects: true,
maxRedirects: 5,
@@ -91,6 +93,8 @@ class API {
'start': _startDate(today),
'end': _endDate(today),
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
headers: profile.radarrHeaders,
followRedirects: true,
maxRedirects: 5,
@@ -145,6 +149,8 @@ class API {
'start': _startDate(today),
'end': _endDate(today),
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
headers: profile.sonarrHeaders,
followRedirects: true,
maxRedirects: 5,

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

@@ -14,6 +14,8 @@ class LidarrAPI {
queryParameters: {
if (profile.lidarrKey != '') 'apikey': profile.lidarrKey,
},
contentType: Headers.jsonContentType,
responseType: ResponseType.json,
headers: LunaProfile.current.lidarrHeaders,
followRedirects: true,
maxRedirects: 5,

Some files were not shown because too many files have changed in this diff Show More