mirror of
https://github.com/jagandeepbrar/lunasea.git
synced 2026-08-31 04:32:32 +00:00
Compare commits
48 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69f094135c | ||
|
|
ce69e8ea90 | ||
|
|
d81052d817 | ||
|
|
1c18d007d3 | ||
|
|
14e4f6a036 | ||
|
|
83dd953a06 | ||
|
|
f3fdf6d5f3 | ||
|
|
93d740bb9b | ||
|
|
85f8558e5d | ||
|
|
896f24f5b6 | ||
|
|
d271412a99 | ||
|
|
b1a513973d | ||
|
|
e2e1c7449b | ||
|
|
8e3c477bf7 | ||
|
|
335aaa3acd | ||
|
|
021a08e4e4 | ||
|
|
7ea7dfc2d6 | ||
|
|
cfa78fb6ec | ||
|
|
89b0906eab | ||
|
|
79d13889f2 | ||
|
|
5adaf059c8 | ||
|
|
44e2611008 | ||
|
|
9d17eea143 | ||
|
|
ebf85f0f79 | ||
|
|
5a04fd95ed | ||
|
|
e3a21d2817 | ||
|
|
50714fa603 | ||
|
|
fe3d41af57 | ||
|
|
1304ae327d | ||
|
|
aeb80fcf08 | ||
|
|
a44ec79b3d | ||
|
|
a15d09b455 | ||
|
|
3aa2cc974c | ||
|
|
605002f5bd | ||
|
|
2f94c42da1 | ||
|
|
b65af75075 | ||
|
|
4b149b58d0 | ||
|
|
5ce12795e7 | ||
|
|
0f4ac9a893 | ||
|
|
4e243d6f30 | ||
|
|
568c28cd92 | ||
|
|
3500d83477 | ||
|
|
b515a0d14e | ||
|
|
6a2e7d83f3 | ||
|
|
f1a82c06aa | ||
|
|
c5eace4352 | ||
|
|
781727abba | ||
|
|
7c8e17e59f |
@@ -1,406 +0,0 @@
|
||||
{
|
||||
"files": [
|
||||
"CONTRIBUTORS.md"
|
||||
],
|
||||
"imageSize": 100,
|
||||
"commit": false,
|
||||
"contributors": [
|
||||
{
|
||||
"login": "JagandeepBrar",
|
||||
"name": "Jagandeep Brar",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/3048295?v=4",
|
||||
"profile": "https://www.jagandeepbrar.io",
|
||||
"contributions": [
|
||||
"code",
|
||||
"design",
|
||||
"ideas"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "lightglitch",
|
||||
"name": "Mário Franco",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/196953?v=4",
|
||||
"profile": "https://github.com/lightglitch",
|
||||
"contributions": [
|
||||
"code",
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Qstick",
|
||||
"name": "Qstick",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/376117?v=4",
|
||||
"profile": "https://github.com/Qstick",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "AliMickey",
|
||||
"name": "Micky",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/60691199?v=4",
|
||||
"profile": "https://github.com/AliMickey",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "xrths",
|
||||
"name": "xrths",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/40337934?v=4",
|
||||
"profile": "http://www.xrths.fr",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Phaugt",
|
||||
"name": "Patrik Hauguth",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/41962737?v=4",
|
||||
"profile": "https://pythonexplainedto.me/",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "comradekingu",
|
||||
"name": "Allan Nordhøy",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/13802408?v=4",
|
||||
"profile": "https://liberapay.com/kingu/",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "cpt-kuesel",
|
||||
"name": "cpt-kuesel",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/79487102?v=4",
|
||||
"profile": "https://github.com/cpt-kuesel",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "KovalevArtem",
|
||||
"name": "KovalevArtem",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/36500228?v=4",
|
||||
"profile": "https://github.com/KovalevArtem",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "iFelix18",
|
||||
"name": "Davide",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/19800006?v=4",
|
||||
"profile": "https://github.com/iFelix18",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "ersen0",
|
||||
"name": "Oğuz Ersen",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/88676873?v=4",
|
||||
"profile": "https://ersen.srht.site/",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "bittin",
|
||||
"name": "bittin",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/43197?v=4",
|
||||
"profile": "https://github.com/bittin",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "almontegil",
|
||||
"name": "Gil",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/68232356?v=4",
|
||||
"profile": "https://github.com/almontegil",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "TheSander562",
|
||||
"name": "Sander Lambrechts",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/14059770?v=4",
|
||||
"profile": "https://github.com/TheSander562",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Guilhermerrrr",
|
||||
"name": "Guilhermerrrr",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/92966143?v=4",
|
||||
"profile": "https://github.com/Guilhermerrrr",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Ben-Wallner",
|
||||
"name": "Ben Biber",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/24373331?v=4",
|
||||
"profile": "https://github.com/Ben-Wallner",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Sytom",
|
||||
"name": "Sytom",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/30535521?v=4",
|
||||
"profile": "https://github.com/Sytom",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "xxzj990",
|
||||
"name": "xxzj990",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/5134154?v=4",
|
||||
"profile": "https://xxzj990.top",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "mfrelink",
|
||||
"name": "Mark Frelink",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/3245077?v=4",
|
||||
"profile": "https://www.openflixr.com",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "diemade",
|
||||
"name": "diemade",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/174809?v=4",
|
||||
"profile": "https://github.com/diemade",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "FeikoJoosten",
|
||||
"name": "Feiko Joosten",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/10920052?v=4",
|
||||
"profile": "https://feikojoosten.com",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "TheMaxul",
|
||||
"name": "TheMaxul",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/2436527?v=4",
|
||||
"profile": "https://github.com/TheMaxul",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Lisapple",
|
||||
"name": "Maxime Leroy",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/6952213?v=4",
|
||||
"profile": "https://lisacintosh.itch.io",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "vc5",
|
||||
"name": "Vincent",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/13097192?v=4",
|
||||
"profile": "https://github.com/vc5",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "gmcinalli",
|
||||
"name": "Gian Marco Cinalli",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/9024983?v=4",
|
||||
"profile": "https://github.com/gmcinalli",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "issaccv",
|
||||
"name": "八月的蠢",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/17275050?v=4",
|
||||
"profile": "https://www.issacc.top/",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "neoestremi",
|
||||
"name": "neoestremi",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1340877?v=4",
|
||||
"profile": "https://github.com/neoestremi",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "marcosvdiasofc",
|
||||
"name": "marcosvdiasofc",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/96720080?v=4",
|
||||
"profile": "https://github.com/marcosvdiasofc",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "fscorrupt",
|
||||
"name": "FSCorrupt",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/45659314?v=4",
|
||||
"profile": "https://liberapay.com/FSCorrupt/donate",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "iHunterX",
|
||||
"name": "iHunterX",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/16854718?v=4",
|
||||
"profile": "https://github.com/iHunterX",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Brokeos",
|
||||
"name": "Brokeos",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/8388746?v=4",
|
||||
"profile": "https://github.com/Brokeos",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "punchy98",
|
||||
"name": "Michael Maldonado",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/12002902?v=4",
|
||||
"profile": "https://github.com/punchy98",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "natiz",
|
||||
"name": "natiz",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/3515888?v=4",
|
||||
"profile": "https://github.com/natiz",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "KevoM",
|
||||
"name": "KevoM",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/8274366?v=4",
|
||||
"profile": "https://github.com/KevoM",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "rogeriomendes",
|
||||
"name": "rogeriomendes",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1494503?v=4",
|
||||
"profile": "https://github.com/rogeriomendes",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Irishsmurf",
|
||||
"name": "David K",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/587220?v=4",
|
||||
"profile": "http://www.paddez.com/",
|
||||
"contributions": [
|
||||
"design"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Slam4uk",
|
||||
"name": "Slam4uk",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/78175288?v=4",
|
||||
"profile": "https://github.com/Slam4uk",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "timrettop",
|
||||
"name": "Tim Potter",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/434913?v=4",
|
||||
"profile": "https://github.com/timrettop",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "carlesmu",
|
||||
"name": "Carles Muñoz Gorriz",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1310090?v=4",
|
||||
"profile": "https://github.com/carlesmu",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "osjurso",
|
||||
"name": "Olav Markus Sjursø",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/17827103?v=4",
|
||||
"profile": "https://github.com/osjurso",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "fyu0h",
|
||||
"name": "fyu0h",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/33602841?v=4",
|
||||
"profile": "https://github.com/fyu0h",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "johnflorin",
|
||||
"name": "Florin",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/45756085?v=4",
|
||||
"profile": "https://github.com/johnflorin",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "tuzumbear",
|
||||
"name": "tuzumbear",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/61370405?v=4",
|
||||
"profile": "https://github.com/tuzumbear",
|
||||
"contributions": [
|
||||
"translation"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 8,
|
||||
"projectName": "LunaSea",
|
||||
"projectOwner": "JagandeepBrar",
|
||||
"repoType": "github",
|
||||
"repoHost": "https://github.com",
|
||||
"skipCi": true,
|
||||
"commitConvention": "none"
|
||||
}
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -4,7 +4,7 @@ contact_links:
|
||||
url: https://www.lunasea.app/discord
|
||||
about: Request new features and get support from the community
|
||||
- name: Support via GitHub Discussions
|
||||
url: https://github.com/JagandeepBrar/LunaSea/discussions
|
||||
url: https://github.com/JagandeepBrar/lunasea/discussions
|
||||
about: Ask questions and discuss with other community members
|
||||
- name: Support via Reddit
|
||||
url: https://www.lunasea.app/reddit
|
||||
|
||||
@@ -1,28 +1,20 @@
|
||||
name: 'Prepare for Deployment'
|
||||
description: 'Setup all required dependencies and secrets for the given release channel'
|
||||
name: "Prepare for Deployment"
|
||||
description: "Setup all required dependencies and secrets for the given release channel"
|
||||
|
||||
inputs:
|
||||
channel:
|
||||
description: 'Release Channel'
|
||||
description: "Release Channel"
|
||||
required: true
|
||||
|
||||
# Secret Keys
|
||||
appstore-connect-key:
|
||||
description: 'App Store Connect API Key'
|
||||
description: "App Store Connect API Key"
|
||||
required: false
|
||||
default: ''
|
||||
ghcr-actor:
|
||||
description: 'GitHub Container Registry Actor'
|
||||
required: false
|
||||
default: ''
|
||||
ghcr-token:
|
||||
description: 'GitHub Container Registry Token'
|
||||
required: false
|
||||
default: ''
|
||||
default: ""
|
||||
google-play-key:
|
||||
description: 'Google Play Store API Key'
|
||||
description: "Google Play Store API Key"
|
||||
required: false
|
||||
default: ''
|
||||
default: ""
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
@@ -43,25 +35,13 @@ runs:
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
|
||||
- name: Install XCode
|
||||
if: ${{ inputs.channel == 'app-store' }}
|
||||
uses: maxim-lobanov/setup-xcode@v1
|
||||
with:
|
||||
xcode-version: latest-stable
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
if: ${{ inputs.channel == 'docker' }}
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Setup GitHub Package Registry
|
||||
if: ${{ inputs.channel == 'docker' }}
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ inputs.ghcr-actor }}
|
||||
password: ${{ inputs.ghcr-token }}
|
||||
|
||||
- name: Setup Secret Keys
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -79,7 +59,7 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
cd ios && bundle install
|
||||
|
||||
|
||||
- name: Setup macOS Platform
|
||||
if: ${{ inputs.channel == 'app-store' }}
|
||||
shell: bash
|
||||
|
||||
68
.github/workflows/build.yml
vendored
68
.github/workflows/build.yml
vendored
@@ -1,4 +1,5 @@
|
||||
name: Build
|
||||
run-name: "Build Release: ${{ inputs.flavor || github.sha }}"
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -14,13 +15,12 @@ on:
|
||||
options:
|
||||
- edge
|
||||
- beta
|
||||
- candidate
|
||||
- stable
|
||||
|
||||
jobs:
|
||||
prepare:
|
||||
name: Prepare
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/prepare.yml@master
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/prepare.yml@master
|
||||
with:
|
||||
flavor: ${{ inputs.flavor }}
|
||||
secrets:
|
||||
@@ -29,8 +29,8 @@ jobs:
|
||||
|
||||
build-android:
|
||||
name: Build Android
|
||||
needs: [ prepare ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/build_android.yml@master
|
||||
needs: [prepare]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/build_android.yml@master
|
||||
with:
|
||||
build-number: ${{ needs.prepare.outputs.build-number }}
|
||||
secrets:
|
||||
@@ -40,8 +40,8 @@ jobs:
|
||||
|
||||
build-ios:
|
||||
name: Build iOS
|
||||
needs: [ prepare ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/build_ios.yml@master
|
||||
needs: [prepare]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/build_ios.yml@master
|
||||
with:
|
||||
build-number: ${{ needs.prepare.outputs.build-number }}
|
||||
secrets:
|
||||
@@ -57,16 +57,16 @@ jobs:
|
||||
|
||||
build-linux:
|
||||
name: Build Linux
|
||||
needs: [ prepare ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/build_linux.yml@master
|
||||
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
|
||||
needs: [ prepare ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/build_macos.yml@master
|
||||
needs: [prepare]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/build_macos.yml@master
|
||||
with:
|
||||
build-number: ${{ needs.prepare.outputs.build-number }}
|
||||
build-version: ${{ needs.prepare.outputs.build-version }}
|
||||
@@ -87,8 +87,8 @@ jobs:
|
||||
|
||||
build-web:
|
||||
name: Build Web
|
||||
needs: [ prepare ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/build_web.yml@master
|
||||
needs: [prepare]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/build_web.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-title: ${{ needs.prepare.outputs.build-title }}
|
||||
@@ -98,18 +98,16 @@ jobs:
|
||||
|
||||
build-windows:
|
||||
name: Build Windows
|
||||
needs: [ prepare ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/build_windows.yml@master
|
||||
needs: [prepare]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/build_windows.yml@master
|
||||
secrets:
|
||||
CODE_SIGNING_CERTIFICATE: ${{ secrets.CODE_SIGNING_CERTIFICATE }}
|
||||
CODE_SIGNING_PASSWORD: ${{ secrets.CODE_SIGNING_PASSWORD }}
|
||||
CODE_SIGNING_PUBLISHER: ${{ secrets.CODE_SIGNING_PUBLISHER }}
|
||||
CODE_SIGNING_PUBLISHER_NAME: ${{ secrets.CODE_SIGNING_PUBLISHER_NAME }}
|
||||
|
||||
publish-android:
|
||||
name: Publish Android
|
||||
needs: [ prepare, build-android ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/publish_android.yml@master
|
||||
needs: [prepare, build-android]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/publish_android.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-motd: ${{ needs.prepare.outputs.build-motd }}
|
||||
@@ -119,8 +117,8 @@ jobs:
|
||||
|
||||
publish-ios:
|
||||
name: Publish iOS
|
||||
needs: [ prepare, build-ios ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/publish_ios.yml@master
|
||||
needs: [prepare, build-ios]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/publish_ios.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-motd: ${{ needs.prepare.outputs.build-motd }}
|
||||
@@ -134,8 +132,8 @@ jobs:
|
||||
|
||||
publish-linux:
|
||||
name: Publish Linux
|
||||
needs: [ prepare, build-linux ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/publish_linux.yml@master
|
||||
needs: [prepare, build-linux]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/publish_linux.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
secrets:
|
||||
@@ -143,8 +141,8 @@ jobs:
|
||||
|
||||
publish-macos:
|
||||
name: Publish macOS
|
||||
needs: [ prepare, build-macos ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/publish_macos.yml@master
|
||||
needs: [prepare, build-macos]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/publish_macos.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-motd: ${{ needs.prepare.outputs.build-motd }}
|
||||
@@ -158,8 +156,8 @@ jobs:
|
||||
|
||||
publish-web:
|
||||
name: Publish Web
|
||||
needs: [ prepare, build-web ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/publish_web.yml@master
|
||||
needs: [prepare, build-web]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/publish_web.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-title: ${{ needs.prepare.outputs.build-title }}
|
||||
@@ -168,8 +166,17 @@ jobs:
|
||||
|
||||
publish-s3:
|
||||
name: Publish S3
|
||||
needs: [ prepare, build-android, build-ios, build-linux, build-macos, build-web, build-windows ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/publish_s3.yml@master
|
||||
needs:
|
||||
[
|
||||
prepare,
|
||||
build-android,
|
||||
build-ios,
|
||||
build-linux,
|
||||
build-macos,
|
||||
build-web,
|
||||
build-windows,
|
||||
]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/publish_s3.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-number: ${{ needs.prepare.outputs.build-number }}
|
||||
@@ -183,13 +190,12 @@ jobs:
|
||||
|
||||
notify:
|
||||
name: Notify
|
||||
needs: [ prepare, publish-s3 ]
|
||||
uses: JagandeepBrar/LunaSea/.github/workflows/notify.yml@master
|
||||
needs: [prepare, publish-s3]
|
||||
uses: JagandeepBrar/lunasea/.github/workflows/notify.yml@master
|
||||
with:
|
||||
build-flavor: ${{ needs.prepare.outputs.build-flavor }}
|
||||
build-title: ${{ needs.prepare.outputs.build-title }}
|
||||
secrets:
|
||||
DISCORD_WEBHOOK_EDGE: ${{ secrets.DISCORD_WEBHOOK_EDGE }}
|
||||
DISCORD_WEBHOOK_BETA: ${{ secrets.DISCORD_WEBHOOK_BETA }}
|
||||
DISCORD_WEBHOOK_CANDIDATE: ${{ secrets.DISCORD_WEBHOOK_CANDIDATE }}
|
||||
DISCORD_WEBHOOK_STABLE: ${{ secrets.DISCORD_WEBHOOK_STABLE }}
|
||||
|
||||
10
.github/workflows/build_android.yml
vendored
10
.github/workflows/build_android.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'Build Android'
|
||||
name: "Build Android"
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -21,12 +21,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: android
|
||||
android-key-jks: ${{ secrets.KEY_JKS }}
|
||||
android-key-properties: ${{ secrets.KEY_PROPERTIES }}
|
||||
android-key-properties: ${{ secrets.KEY_PROPERTIES }}
|
||||
|
||||
- name: Build LunaSea
|
||||
working-directory: ${{ github.workspace }}/android
|
||||
@@ -43,12 +43,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: android
|
||||
android-key-jks: ${{ secrets.KEY_JKS }}
|
||||
android-key-properties: ${{ secrets.KEY_PROPERTIES }}
|
||||
android-key-properties: ${{ secrets.KEY_PROPERTIES }}
|
||||
|
||||
- name: Build LunaSea
|
||||
working-directory: ${{ github.workspace }}/android
|
||||
|
||||
8
.github/workflows/build_ios.yml
vendored
8
.github/workflows/build_ios.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'Build iOS'
|
||||
name: "Build iOS"
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -33,11 +33,11 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: ios
|
||||
match-ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
|
||||
match-ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
|
||||
|
||||
- name: Build LunaSea
|
||||
working-directory: ${{ github.workspace }}/ios
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
MATCH_KEYCHAIN_NAME: ${{ secrets.MATCH_KEYCHAIN_NAME }}
|
||||
MATCH_KEYCHAIN_PASSWORD: ${{ secrets.MATCH_KEYCHAIN_PASSWORD }}
|
||||
run: bundle exec fastlane build_appstore build_number:${{ inputs.build-number }}
|
||||
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
18
.github/workflows/build_linux.yml
vendored
18
.github/workflows/build_linux.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'Build Linux'
|
||||
name: "Build Linux"
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: linux
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
|
||||
- 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:
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: linux
|
||||
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
|
||||
- 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:
|
||||
@@ -58,14 +58,14 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: linux
|
||||
|
||||
|
||||
- name: Build LunaSea
|
||||
uses: snapcore/action-build@v1
|
||||
id: build
|
||||
|
||||
|
||||
- name: Prepare Artifact
|
||||
run: mv ${{ steps.build.outputs.snap }} ${{ github.workspace }}/output/lunasea-linux-amd64.snap
|
||||
|
||||
@@ -74,5 +74,3 @@ jobs:
|
||||
with:
|
||||
name: linux-snapcraft
|
||||
path: ${{ github.workspace }}/output
|
||||
|
||||
|
||||
12
.github/workflows/build_macos.yml
vendored
12
.github/workflows/build_macos.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'Build macOS'
|
||||
name: "Build macOS"
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -44,12 +44,12 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: macos
|
||||
appstore-connect-key: ${{ secrets.APPLE_STORE_CONNECT_KEY }}
|
||||
match-ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
|
||||
match-ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
|
||||
|
||||
- name: Build LunaSea
|
||||
working-directory: ${{ github.workspace }}/macos
|
||||
@@ -77,12 +77,12 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: macos
|
||||
appstore-connect-key: ${{ secrets.APPLE_STORE_CONNECT_KEY }}
|
||||
match-ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
|
||||
match-ssh-private-key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
|
||||
|
||||
- name: Build LunaSea
|
||||
working-directory: ${{ github.workspace }}/macos
|
||||
@@ -110,7 +110,7 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: macos
|
||||
|
||||
29
.github/workflows/build_web.yml
vendored
29
.github/workflows/build_web.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'Build Web'
|
||||
name: "Build Web"
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
firebase-service-worker: ${{ secrets.FIREBASE_SERVICE_WORKER }}
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: web
|
||||
|
||||
@@ -67,7 +67,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: web
|
||||
|
||||
@@ -86,15 +86,18 @@ jobs:
|
||||
if (process.env.BUILD_FLAVOR === 'stable') tags.push('latest');
|
||||
return tags.map((tag) => `ghcr.io/jagandeepbrar/lunasea:${tag}`).join(',');
|
||||
|
||||
- name: Build LunaSea
|
||||
uses: docker/build-push-action@v3
|
||||
- name: Setup GitHub Package Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ github.token }}
|
||||
|
||||
- name: Build & Push LunaSea
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
outputs: type=docker,dest=${{ github.workspace}}/output/lunasea-web-docker.tar
|
||||
platforms: linux/amd64,linux/arm64
|
||||
provenance: false
|
||||
push: true
|
||||
tags: ${{ steps.tags.outputs.result }}
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: web-docker
|
||||
path: ${{ github.workspace }}/output
|
||||
|
||||
16
.github/workflows/build_windows.yml
vendored
16
.github/workflows/build_windows.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'Build Windows'
|
||||
name: "Build Windows"
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
@@ -7,10 +7,6 @@ on:
|
||||
required: true
|
||||
CODE_SIGNING_PASSWORD:
|
||||
required: true
|
||||
CODE_SIGNING_PUBLISHER:
|
||||
required: true
|
||||
CODE_SIGNING_PUBLISHER_NAME:
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
build-app-package:
|
||||
@@ -18,7 +14,7 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: windows
|
||||
|
||||
@@ -27,7 +23,7 @@ jobs:
|
||||
|
||||
- name: Prepare Artifact
|
||||
run: Compress-Archive -path ${{ github.workspace }}\build\windows\runner\Release\* ${{github.workspace}}\output\lunasea-windows-amd64.zip
|
||||
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
@@ -39,7 +35,7 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
platform: windows
|
||||
code-signing-certificate: ${{ secrets.CODE_SIGNING_CERTIFICATE }}
|
||||
@@ -49,9 +45,7 @@ jobs:
|
||||
flutter pub run msix:create `
|
||||
--certificate-password=${{ secrets.CODE_SIGNING_PASSWORD }} `
|
||||
--certificate-path=${{ github.workspace }}/keys/codesigning.pfx `
|
||||
--output-path=${{ github.workspace }}/output `
|
||||
--publisher=${{ secrets.CODE_SIGNING_PUBLISHER }} `
|
||||
--publisher-display-name=${{ secrets.CODE_SIGNING_PUBLISHER_NAME }}
|
||||
--output-path=${{ github.workspace }}/output
|
||||
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
|
||||
12
.github/workflows/github_issue_labels.yml
vendored
12
.github/workflows/github_issue_labels.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 'GitHub Issue Labels'
|
||||
name: "GitHub Issue Labels"
|
||||
|
||||
on:
|
||||
issues:
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
uses: dessant/support-requests@v2
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
support-label: 'feature request'
|
||||
support-label: "feature request"
|
||||
issue-comment: >
|
||||
Hi @{issue-author}! We use the issue tracker exclusively
|
||||
for bug reports and issues. However, this issue appears
|
||||
@@ -20,13 +20,13 @@ jobs:
|
||||
to request new features.
|
||||
close-issue: true
|
||||
lock-issue: true
|
||||
issue-lock-reason: 'off-topic'
|
||||
issue-lock-reason: "off-topic"
|
||||
|
||||
- name: Support
|
||||
uses: dessant/support-requests@v2
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
support-label: 'support'
|
||||
support-label: "support"
|
||||
issue-comment: >
|
||||
Hi @{issue-author}! We use the issue tracker exclusively
|
||||
for bug reports and issues. However, this issue appears
|
||||
@@ -34,9 +34,9 @@ jobs:
|
||||
|
||||
- [Discord](https://www.lunasea.app/discord)
|
||||
|
||||
- [GitHub Discussions](https://github.com/JagandeepBrar/LunaSea/discussions)
|
||||
- [GitHub Discussions](https://github.com/JagandeepBrar/lunasea/discussions)
|
||||
|
||||
- [Subreddit](https://www.lunasea.app/reddit)
|
||||
close-issue: true
|
||||
lock-issue: true
|
||||
issue-lock-reason: 'off-topic'
|
||||
issue-lock-reason: "off-topic"
|
||||
|
||||
6
.github/workflows/notify.yml
vendored
6
.github/workflows/notify.yml
vendored
@@ -15,8 +15,6 @@ on:
|
||||
required: true
|
||||
DISCORD_WEBHOOK_BETA:
|
||||
required: true
|
||||
DISCORD_WEBHOOK_CANDIDATE:
|
||||
required: true
|
||||
DISCORD_WEBHOOK_STABLE:
|
||||
required: true
|
||||
|
||||
@@ -36,7 +34,6 @@ jobs:
|
||||
env:
|
||||
DISCORD_WEBHOOK_EDGE: ${{ secrets.DISCORD_WEBHOOK_EDGE }}
|
||||
DISCORD_WEBHOOK_BETA: ${{ secrets.DISCORD_WEBHOOK_BETA }}
|
||||
DISCORD_WEBHOOK_CANDIDATE: ${{ secrets.DISCORD_WEBHOOK_CANDIDATE }}
|
||||
DISCORD_WEBHOOK_STABLE: ${{ secrets.DISCORD_WEBHOOK_STABLE }}
|
||||
BUILD_FLAVOR: ${{ inputs.build-flavor }}
|
||||
with:
|
||||
@@ -44,7 +41,6 @@ jobs:
|
||||
script: |
|
||||
switch (process.env.BUILD_FLAVOR) {
|
||||
case 'beta': return process.env.DISCORD_WEBHOOK_BETA;
|
||||
case 'candidate': return process.env.DISCORD_WEBHOOK_CANDIDATE;
|
||||
case 'stable': return process.env.DISCORD_WEBHOOK_STABLE;
|
||||
case 'edge':
|
||||
default: return process.env.DISCORD_WEBHOOK_EDGE;
|
||||
@@ -65,5 +61,5 @@ jobs:
|
||||
env:
|
||||
DISCORD_WEBHOOK: ${{ steps.webhook.outputs.result }}
|
||||
DISCORD_USERNAME: LunaSea Support
|
||||
DISCORD_AVATAR: https://raw.githubusercontent.com/JagandeepBrar/LunaSea/master/assets/icon/icon.png
|
||||
DISCORD_AVATAR: https://raw.githubusercontent.com/JagandeepBrar/lunasea/master/assets/icon/icon.png
|
||||
DISCORD_EMBEDS: ${{ steps.embed.outputs.result }}
|
||||
|
||||
7
.github/workflows/prepare.yml
vendored
7
.github/workflows/prepare.yml
vendored
@@ -51,7 +51,7 @@ jobs:
|
||||
run: |
|
||||
COUNT=`git rev-list HEAD --count`
|
||||
echo "commit-count=$COUNT" >> $GITHUB_OUTPUT
|
||||
|
||||
|
||||
- name: Build Flavor
|
||||
id: build-flavor
|
||||
uses: actions/github-script@v6
|
||||
@@ -64,7 +64,6 @@ jobs:
|
||||
if (flavor) switch (flavor) {
|
||||
case 'edge':
|
||||
case 'beta':
|
||||
case 'candidate':
|
||||
case 'stable':
|
||||
return flavor;
|
||||
}
|
||||
@@ -122,7 +121,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: test
|
||||
@@ -135,7 +134,7 @@ jobs:
|
||||
export BUILD=${{ needs.build-details.outputs.build-number }}
|
||||
export SENTRY_DSN=${{ secrets.SENTRY_DSN }}
|
||||
flutter packages pub run environment_config:generate
|
||||
|
||||
|
||||
- name: Generate Localization
|
||||
run: dart ${{github.workspace }}/scripts/generate_localization.dart
|
||||
|
||||
|
||||
9
.github/workflows/publish_android.yml
vendored
9
.github/workflows/publish_android.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: play-store
|
||||
google-play-key: ${{ secrets.GOOGLE_PLAY_API }}
|
||||
@@ -44,11 +44,10 @@ jobs:
|
||||
script: |
|
||||
const ref = process.env.FLAVOR || 'edge';
|
||||
switch (ref) {
|
||||
case 'beta': return 'alpha';
|
||||
case 'candidate': return 'beta';
|
||||
case 'beta': return 'beta';
|
||||
case 'stable': return 'production';
|
||||
case 'edge':
|
||||
default: return 'internal';
|
||||
default: return 'alpha';
|
||||
}
|
||||
|
||||
- name: Generate Changelog
|
||||
@@ -58,7 +57,7 @@ jobs:
|
||||
run: |
|
||||
mkdir -p $OUTPUT_PATH
|
||||
echo $MOTD > $OUTPUT_PATH/default.txt
|
||||
|
||||
|
||||
- name: Deploy to Google Play Store
|
||||
working-directory: ${{ github.workspace }}/android
|
||||
env:
|
||||
|
||||
2
.github/workflows/publish_ios.yml
vendored
2
.github/workflows/publish_ios.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: app-store
|
||||
appstore-connect-key: ${{ secrets.APPLE_STORE_CONNECT_KEY }}
|
||||
|
||||
2
.github/workflows/publish_linux.yml
vendored
2
.github/workflows/publish_linux.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: snapcraft
|
||||
|
||||
|
||||
2
.github/workflows/publish_macos.yml
vendored
2
.github/workflows/publish_macos.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: app-store
|
||||
appstore-connect-key: ${{ secrets.APPLE_STORE_CONNECT_KEY }}
|
||||
|
||||
6
.github/workflows/publish_s3.yml
vendored
6
.github/workflows/publish_s3.yml
vendored
@@ -31,7 +31,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: s3
|
||||
|
||||
@@ -109,7 +109,7 @@ jobs:
|
||||
- name: Upload to S3 Bucket (Build Title)
|
||||
uses: jakejarvis/s3-sync-action@v0.5.1
|
||||
with:
|
||||
args: --acl public-read --follow-symlinks
|
||||
args: --acl public-read --follow-symlinks
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.S3_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
|
||||
@@ -122,7 +122,7 @@ jobs:
|
||||
- name: Upload to S3 Bucket (Latest)
|
||||
uses: jakejarvis/s3-sync-action@v0.5.1
|
||||
with:
|
||||
args: --acl public-read --follow-symlinks
|
||||
args: --acl public-read --follow-symlinks
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.S3_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY }}
|
||||
|
||||
28
.github/workflows/publish_web.yml
vendored
28
.github/workflows/publish_web.yml
vendored
@@ -15,35 +15,12 @@ on:
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
name: Docker
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: docker
|
||||
ghcr-actor: ${{ github.actor }}
|
||||
ghcr-token: ${{ github.token }}
|
||||
|
||||
- name: Download Docker Image
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: web-docker
|
||||
path: ${{ github.workspace }}/output
|
||||
|
||||
- name: Load Docker Image
|
||||
run: docker load --input ${{ github.workspace}}/output/lunasea-web-docker.tar
|
||||
|
||||
- name: Deploy to GitHub Container Registry
|
||||
run: docker image push --all-tags ghcr.io/jagandeepbrar/lunasea
|
||||
|
||||
netlify:
|
||||
name: Netlify
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_deployment@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_deployment@master
|
||||
with:
|
||||
channel: netlify
|
||||
|
||||
@@ -64,14 +41,13 @@ jobs:
|
||||
const ref = process.env.FLAVOR || 'edge';
|
||||
switch (ref) {
|
||||
case 'beta': return '11ef2676-fc31-41b5-897b-fd21273d87ed';
|
||||
case 'candidate': return '4636e6a1-17ef-45a2-a2b6-3d1c166fd1df';
|
||||
case 'stable': return '6634f0b1-323c-4a2f-bd0b-8f1f388673a9';
|
||||
case 'edge':
|
||||
default: return '325e197e-55f4-449a-b2bb-6831fe47bf2a';
|
||||
}
|
||||
|
||||
- name: Deploy to Netlify
|
||||
uses: nwtgck/actions-netlify@v1.2
|
||||
uses: nwtgck/actions-netlify@v2.0
|
||||
env:
|
||||
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
NETLIFY_SITE_ID: ${{ steps.channel.outputs.result }}
|
||||
|
||||
2
.github/workflows/validate.yml
vendored
2
.github/workflows/validate.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Environment
|
||||
uses: JagandeepBrar/LunaSea/.github/actions/prepare_for_build@master
|
||||
uses: JagandeepBrar/lunasea/.github/actions/prepare_for_build@master
|
||||
with:
|
||||
firebase-token: ${{ secrets.FIREBASE_TOKEN }}
|
||||
platform: test
|
||||
|
||||
76
.vscode/cspell.json
vendored
76
.vscode/cspell.json
vendored
@@ -1,76 +0,0 @@
|
||||
{
|
||||
"ignorePaths": [
|
||||
"*.lock",
|
||||
"*.yaml",
|
||||
"*.yml",
|
||||
/** Directories */
|
||||
".dart_tool",
|
||||
".git",
|
||||
"build",
|
||||
"shaders",
|
||||
/** Files */
|
||||
".all-contributorsrc",
|
||||
".commitlintrc",
|
||||
".czrc",
|
||||
".packages"
|
||||
],
|
||||
"useGitignore": true,
|
||||
"words": [
|
||||
"AMOLED",
|
||||
"appbundle",
|
||||
"autofocused",
|
||||
"blackbox",
|
||||
"CanvasKit",
|
||||
"cocoapods",
|
||||
"codecov",
|
||||
"colours",
|
||||
"deinitialize",
|
||||
"deintegrate",
|
||||
"Discogs",
|
||||
"emdash",
|
||||
"encrypter",
|
||||
"fanart",
|
||||
"fastlane",
|
||||
"Firestore",
|
||||
"Fluro",
|
||||
"Gitbook",
|
||||
"hardlink",
|
||||
"Hellonext",
|
||||
"IMDb",
|
||||
"keychain",
|
||||
"leechers",
|
||||
"Letterboxd",
|
||||
"Lidarr",
|
||||
"LunaBox",
|
||||
"LunaConfig",
|
||||
"lunasea",
|
||||
"LunaTable",
|
||||
"microtask",
|
||||
"msix",
|
||||
"Newznab",
|
||||
"NZBGet",
|
||||
"Overseerr",
|
||||
"Plex",
|
||||
"podfile",
|
||||
"prefill",
|
||||
"Radarr",
|
||||
"Riverpod",
|
||||
"roboto",
|
||||
"SABnzbd",
|
||||
"scrollview",
|
||||
"sksl",
|
||||
"snapcraft",
|
||||
"Sonarr",
|
||||
"stickied",
|
||||
"subheaders",
|
||||
"subroutes",
|
||||
"Tautulli",
|
||||
"TestFlight",
|
||||
"Trakt",
|
||||
"typescale",
|
||||
"unencrypted",
|
||||
"unignore",
|
||||
"Weblate",
|
||||
"worktree"
|
||||
]
|
||||
}
|
||||
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"yaml.schemas": {
|
||||
"https://json.schemastore.org/github-issue-config.json": "file:///Users/jagandeepbrar/Git/LunaSea/.github/ISSUE_TEMPLATE/config.yml"
|
||||
}
|
||||
}
|
||||
360
CHANGELOG.md
360
CHANGELOG.md
@@ -2,271 +2,309 @@
|
||||
|
||||
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)
|
||||
### [10.2.5](https://github.com/JagandeepBrar/lunasea/compare/v10.2.4...v10.2.5) (2023-07-03)
|
||||
|
||||
|
||||
### 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))
|
||||
* **sonarr:** re-implementation of multi-select episode actions ([79d1388](https://github.com/JagandeepBrar/lunasea/commit/79d13889f2eb0668b1fbb4d29ea9b11b1d82d9bb))
|
||||
* **web:** build multi-platform Docker image for amd64 and arm64 ([89b0906](https://github.com/JagandeepBrar/lunasea/commit/89b0906eab883bddb860583cc6e4bf86efd2b115))
|
||||
|
||||
|
||||
### 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))
|
||||
* **ios:** update App Store signing certificate ([b1a5139](https://github.com/JagandeepBrar/lunasea/commit/b1a513973d16a1a17cf0805da6cdd8e7929072c9))
|
||||
* **search:** profile could not be changed on download prompt ([d81052d](https://github.com/JagandeepBrar/lunasea/commit/d81052d81783df6d93d9f41e2c543782299e7067))
|
||||
* **sonarr:** remove duplicate episode file IDs on multi-select deletion ([335aaa3](https://github.com/JagandeepBrar/lunasea/commit/335aaa3acd7ff7645018e305639586a25411771c))
|
||||
* **windows:** revert Firebase packages to maintain Windows support ([8e3c477](https://github.com/JagandeepBrar/lunasea/commit/8e3c477bf7d8a0fa47276ba5bb2096f07c6dc69d))
|
||||
|
||||
### [10.2.2](https://github.com/JagandeepBrar/LunaSea/compare/v10.2.1...v10.2.2) (2022-12-22)
|
||||
### [10.2.4](https://github.com/JagandeepBrar/lunasea/compare/v10.2.3...v10.2.4) (2023-04-09)
|
||||
|
||||
|
||||
### 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))
|
||||
* **settings:** add direct link to documentation for service notifications ([0f4ac9a](https://github.com/JagandeepBrar/lunasea/commit/0f4ac9a893d5b13a732db49e0bfc7b09fe7c05d9))
|
||||
* **settings:** replace all strings with localizable strings ([5ce1279](https://github.com/JagandeepBrar/lunasea/commit/5ce12795e7223a543bd037151b1a3eaa484f2634))
|
||||
|
||||
|
||||
### 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))
|
||||
* **images:** utilize new technique to persistently cache images ([f1a82c0](https://github.com/JagandeepBrar/lunasea/commit/f1a82c06aa58fe493af2b2b0bf9ef8a93011802b))
|
||||
* **routing:** handle pushing route which may return data ([3500d83](https://github.com/JagandeepBrar/lunasea/commit/3500d83477880b8ee490132bc270e632af4a4bb1))
|
||||
* **uiux:** remove fading edge on horizontal scrollviews ([781727a](https://github.com/JagandeepBrar/lunasea/commit/781727abbab0dc70d959c723c3d101e66430ac60))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **uiux:** disable horizontal swiping/scrolling between pages ([968fe9c](https://github.com/JagandeepBrar/LunaSea/commit/968fe9cbbc4aff3ae584682e462defbf09ea5699))
|
||||
* **flavors:** remove candidate flavor and merge with beta ([fe3d41a](https://github.com/JagandeepBrar/lunasea/commit/fe3d41af57717b994e71370968404fc05f20f72b))
|
||||
* remove cupertino_icons and email_validator packages ([605002f](https://github.com/JagandeepBrar/lunasea/commit/605002f5bd4b015791d3d1f260e03b4127c5020d))
|
||||
* remove riverpod state management ([2f94c42](https://github.com/JagandeepBrar/lunasea/commit/2f94c42da1a97847be4a77e79d096eb0212a9657))
|
||||
|
||||
### [10.2.1](https://github.com/JagandeepBrar/LunaSea/compare/v10.2.0...v10.2.1) (2022-11-06)
|
||||
### [10.2.3](https://github.com/JagandeepBrar/lunasea/compare/v10.2.2...v10.2.3) (2023-03-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **-arr:** button to open indexer information page ([bccd1a4](https://github.com/JagandeepBrar/LunaSea/commit/bccd1a43c42b349901137f8fc605f393b51d541a))
|
||||
* **calendar:** remove option to show previous days in schedule view, now always shows them ([3ac2c5d](https://github.com/JagandeepBrar/LunaSea/commit/3ac2c5d791f94208a4004d161bb046c24b698345))
|
||||
* **calendar:** scroll to selected date when switching from calendar to schedule view ([f1226e5](https://github.com/JagandeepBrar/LunaSea/commit/f1226e563899cfc0950865a9734448d4e00601b9))
|
||||
* launch recovery mode on bootstrap failure ([c062b3d](https://github.com/JagandeepBrar/LunaSea/commit/c062b3d786e55bc3ba7fe767dd946d73efbef64f))
|
||||
* **lidarr:** add MusicBrainz to links ([c76418d](https://github.com/JagandeepBrar/LunaSea/commit/c76418d26f1a5f52f5cb1e46951f1cf6726508c2))
|
||||
* **modules:** ability to set the boot module ([3dd087e](https://github.com/JagandeepBrar/LunaSea/commit/3dd087e361619889057a0b037b1eef35157a0988))
|
||||
* **radarr:** support moving files when editing the storage path ([c9bd02b](https://github.com/JagandeepBrar/LunaSea/commit/c9bd02b75086579f60ad8987c42ab217c12f6d43))
|
||||
* **web:** support local filesystem read/save actions ([7d437d5](https://github.com/JagandeepBrar/LunaSea/commit/7d437d5c3a34a8681c372570fc366e869f0b2090))
|
||||
* **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
|
||||
|
||||
* **android:** apply Google Play Services plugin during gradle build ([71f597b](https://github.com/JagandeepBrar/LunaSea/commit/71f597baa7c23102b711c3ca3c1ea5b2f8e1f5e9))
|
||||
* **android:** revert applying Google Play Services plugin during gradle build ([250a494](https://github.com/JagandeepBrar/LunaSea/commit/250a49490333f4de726226dc4aa15a681f32a70c))
|
||||
* **android:** support Android 13 filesystem access ([25e0d05](https://github.com/JagandeepBrar/LunaSea/commit/25e0d051422b399de8c90e0fc71e57349e3355b7))
|
||||
* **android:** utilize Kotlin v1.7.20 & Gradle v7.1.2 ([b7ceebc](https://github.com/JagandeepBrar/LunaSea/commit/b7ceebcb679dbca935b6a1810c0c67a14002e358))
|
||||
* **backup:** edge-case where backup/restore would fail ([f3931c6](https://github.com/JagandeepBrar/LunaSea/commit/f3931c6b08025a70920039e5cbbc9cf7120c0b36))
|
||||
* **calendar:** label unreleased movies as unreleased instead of missing ([70ed750](https://github.com/JagandeepBrar/LunaSea/commit/70ed750652ff419e6fed659a0785adc5064654e7))
|
||||
* **calendar:** start to current date when past days are enabled ([6eff6c9](https://github.com/JagandeepBrar/LunaSea/commit/6eff6c902cd7bcd523d83be09034098234679a79))
|
||||
* **firebase:** inject service file for older OS versions ([38f2eb4](https://github.com/JagandeepBrar/LunaSea/commit/38f2eb4cb2a8e400ce2ecb0b6f2854469c9626fc))
|
||||
* **firebase:** upgrade to Firebase v10 ([#717](https://github.com/JagandeepBrar/LunaSea/issues/717)) ([f3a3f22](https://github.com/JagandeepBrar/LunaSea/commit/f3a3f222bd56beb4e961817b18d71f01fb7c5e81))
|
||||
* **uiux:** add circular radius to linear progression bars ([d9623e9](https://github.com/JagandeepBrar/LunaSea/commit/d9623e992d2ac2039eaa4f069c739d968c921cc6))
|
||||
* **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
|
||||
|
||||
* **settings:** consolidate appearance, network, and localization pages ([ac838f9](https://github.com/JagandeepBrar/LunaSea/commit/ac838f99a9c839ce4e36e5eae80f1100e2787dc5))
|
||||
* **uiux:** remove forced-upper case on headers ([958e6f1](https://github.com/JagandeepBrar/LunaSea/commit/958e6f156862c1092399649baa361cd955299c88))
|
||||
* **uiux:** disable horizontal swiping/scrolling between pages ([968fe9c](https://github.com/JagandeepBrar/lunasea/commit/968fe9cbbc4aff3ae584682e462defbf09ea5699))
|
||||
|
||||
## [10.2.0](https://github.com/JagandeepBrar/LunaSea/compare/v10.1.1...v10.2.0) (2022-09-22)
|
||||
### [10.2.1](https://github.com/JagandeepBrar/lunasea/compare/v10.2.0...v10.2.1) (2022-11-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **-arr:** view download client queue via overlay sheet ([0c59886](https://github.com/JagandeepBrar/LunaSea/commit/0c59886657db0ed05a9d741c82689cb1272c6ad2))
|
||||
* **android:** add support for monochromatic adaptive icon ([#701](https://github.com/JagandeepBrar/LunaSea/issues/701)) ([96b2b1b](https://github.com/JagandeepBrar/LunaSea/commit/96b2b1b5b010507dd7ece3421bf02eac6ba32486))
|
||||
* **locale:** support Croatian ([a160f09](https://github.com/JagandeepBrar/LunaSea/commit/a160f0941f2e0c86d2e2fab5e01a577ceba2a8f3))
|
||||
* **logging:** integrate Sentry logging support for all platforms ([57bbb80](https://github.com/JagandeepBrar/LunaSea/commit/57bbb80a0188d3bed9ca70846a89df6a3c2c0953))
|
||||
* **logo:** add Vectorized app logos ([113b294](https://github.com/JagandeepBrar/LunaSea/commit/113b2943469464598ce07b931818c7e29c6cc63a))
|
||||
* **router:** re-implementation of routing via go_router ([1d4207a](https://github.com/JagandeepBrar/LunaSea/commit/1d4207ae5106c2a0648b77a3b3ef6508665561e8))
|
||||
* **sabnzbd:** rewrite SABnzbd API interface ([a1b736a](https://github.com/JagandeepBrar/LunaSea/commit/a1b736ae0c9bf754d913e86c69d15c27f256c413))
|
||||
* **search:** view download client queue via overlay sheet ([a6be658](https://github.com/JagandeepBrar/LunaSea/commit/a6be658164fed7dd2411a167dec6b4c53eab70f0))
|
||||
* **settings:** re-add option to disable Sentry logging ([3d0c520](https://github.com/JagandeepBrar/LunaSea/commit/3d0c5209cb3e796629817dee986634154e7ffe9e))
|
||||
* **web:** enable service worker processing of notifications ([4b41110](https://github.com/JagandeepBrar/LunaSea/commit/4b411107f74f048e6f3d571845590a5d29720ac3))
|
||||
* **-arr:** button to open indexer information page ([bccd1a4](https://github.com/JagandeepBrar/lunasea/commit/bccd1a43c42b349901137f8fc605f393b51d541a))
|
||||
* **calendar:** remove option to show previous days in schedule view, now always shows them ([3ac2c5d](https://github.com/JagandeepBrar/lunasea/commit/3ac2c5d791f94208a4004d161bb046c24b698345))
|
||||
* **calendar:** scroll to selected date when switching from calendar to schedule view ([f1226e5](https://github.com/JagandeepBrar/lunasea/commit/f1226e563899cfc0950865a9734448d4e00601b9))
|
||||
* launch recovery mode on bootstrap failure ([c062b3d](https://github.com/JagandeepBrar/lunasea/commit/c062b3d786e55bc3ba7fe767dd946d73efbef64f))
|
||||
* **lidarr:** add MusicBrainz to links ([c76418d](https://github.com/JagandeepBrar/lunasea/commit/c76418d26f1a5f52f5cb1e46951f1cf6726508c2))
|
||||
* **modules:** ability to set the boot module ([3dd087e](https://github.com/JagandeepBrar/lunasea/commit/3dd087e361619889057a0b037b1eef35157a0988))
|
||||
* **radarr:** support moving files when editing the storage path ([c9bd02b](https://github.com/JagandeepBrar/lunasea/commit/c9bd02b75086579f60ad8987c42ab217c12f6d43))
|
||||
* **web:** support local filesystem read/save actions ([7d437d5](https://github.com/JagandeepBrar/lunasea/commit/7d437d5c3a34a8681c372570fc366e869f0b2090))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **android:** support Android 13 notification prompt ([83e8374](https://github.com/JagandeepBrar/LunaSea/commit/83e8374c33977c82096fcf8d5a4d94da5c291f8f))
|
||||
* **cache:** add type-safety to LRU cache ([7aae480](https://github.com/JagandeepBrar/LunaSea/commit/7aae4807221184dbe1d02454f73998a0458dd7f6))
|
||||
* **database:** prevent deadlock in database deletion actions ([9960124](https://github.com/JagandeepBrar/LunaSea/commit/9960124d3219e2ab72e14443a1a79a1bac6b2cd3))
|
||||
* **graphs:** support fl_chart@0.55.1 ([b812c7b](https://github.com/JagandeepBrar/LunaSea/commit/b812c7b4a12b4766e04b5d4023b45320e6b7927c))
|
||||
* **images:** validate image availability before fading-in ([6f9e0e8](https://github.com/JagandeepBrar/LunaSea/commit/6f9e0e87ce3d02dfff7dec439a2e975585c5b986))
|
||||
* **notifications:** correctly inject service worker for notification handling ([82ef5f0](https://github.com/JagandeepBrar/LunaSea/commit/82ef5f0c529a9e30475f86f496fa63c18785e87c))
|
||||
* **notifications:** enable in-app notifications config was inversed ([3593eb3](https://github.com/JagandeepBrar/LunaSea/commit/3593eb329b38fb4a5b776cf1b165ad6f463e371b))
|
||||
* **resources:** remove feedback board resource ([d3d090e](https://github.com/JagandeepBrar/LunaSea/commit/d3d090e277f7dda7d4ef3d7808e7341cf79178fe))
|
||||
* **scrolling:** remove custom scrolling behaviour ([864082f](https://github.com/JagandeepBrar/LunaSea/commit/864082fd4045ef7dea0e0ab6a17d41ca86015fcb))
|
||||
* **settings:** show notification settings area on web ([136cda5](https://github.com/JagandeepBrar/LunaSea/commit/136cda5215ae1d44dcd898e8e8e0b1e1912b3a41))
|
||||
* **sheets:** set default overlay theme for sheets, remove bottom radius clipping ([3a5e19b](https://github.com/JagandeepBrar/LunaSea/commit/3a5e19b02c048df21bd169a0a06f1e9ae741debb))
|
||||
* **sonarr:** support Sonarr v4 API changes ([e477eca](https://github.com/JagandeepBrar/LunaSea/commit/e477ecafcce268d7de112f33711fc02a089a4206))
|
||||
* **web:** correctly register notification service worker ([579531c](https://github.com/JagandeepBrar/LunaSea/commit/579531c30a17e2c8d53d011dbecf710f42598ec8))
|
||||
* **android:** apply Google Play Services plugin during gradle build ([71f597b](https://github.com/JagandeepBrar/lunasea/commit/71f597baa7c23102b711c3ca3c1ea5b2f8e1f5e9))
|
||||
* **android:** revert applying Google Play Services plugin during gradle build ([250a494](https://github.com/JagandeepBrar/lunasea/commit/250a49490333f4de726226dc4aa15a681f32a70c))
|
||||
* **android:** support Android 13 filesystem access ([25e0d05](https://github.com/JagandeepBrar/lunasea/commit/25e0d051422b399de8c90e0fc71e57349e3355b7))
|
||||
* **android:** utilize Kotlin v1.7.20 & Gradle v7.1.2 ([b7ceebc](https://github.com/JagandeepBrar/lunasea/commit/b7ceebcb679dbca935b6a1810c0c67a14002e358))
|
||||
* **backup:** edge-case where backup/restore would fail ([f3931c6](https://github.com/JagandeepBrar/lunasea/commit/f3931c6b08025a70920039e5cbbc9cf7120c0b36))
|
||||
* **calendar:** label unreleased movies as unreleased instead of missing ([70ed750](https://github.com/JagandeepBrar/lunasea/commit/70ed750652ff419e6fed659a0785adc5064654e7))
|
||||
* **calendar:** start to current date when past days are enabled ([6eff6c9](https://github.com/JagandeepBrar/lunasea/commit/6eff6c902cd7bcd523d83be09034098234679a79))
|
||||
* **firebase:** inject service file for older OS versions ([38f2eb4](https://github.com/JagandeepBrar/lunasea/commit/38f2eb4cb2a8e400ce2ecb0b6f2854469c9626fc))
|
||||
* **firebase:** upgrade to Firebase v10 ([#717](https://github.com/JagandeepBrar/lunasea/issues/717)) ([f3a3f22](https://github.com/JagandeepBrar/lunasea/commit/f3a3f222bd56beb4e961817b18d71f01fb7c5e81))
|
||||
* **uiux:** add circular radius to linear progression bars ([d9623e9](https://github.com/JagandeepBrar/lunasea/commit/d9623e992d2ac2039eaa4f069c739d968c921cc6))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **remove logos:** removes unused logo pngs ([2adfe59](https://github.com/JagandeepBrar/LunaSea/commit/2adfe59bd5cd289beb7f7c703fe26397310dbc90))
|
||||
* **settings:** consolidate appearance, network, and localization pages ([ac838f9](https://github.com/JagandeepBrar/lunasea/commit/ac838f99a9c839ce4e36e5eae80f1100e2787dc5))
|
||||
* **uiux:** remove forced-upper case on headers ([958e6f1](https://github.com/JagandeepBrar/lunasea/commit/958e6f156862c1092399649baa361cd955299c88))
|
||||
|
||||
### [10.1.1](https://github.com/JagandeepBrar/LunaSea/compare/v10.1.0...v10.1.1) (2022-08-21)
|
||||
## [10.2.0](https://github.com/JagandeepBrar/lunasea/compare/v10.1.1...v10.2.0) (2022-09-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **changelog:** do not show changelog on first boot of new installs ([52fd7fc](https://github.com/JagandeepBrar/LunaSea/commit/52fd7fca0c5076b4b98458d449a4b1f581726a52))
|
||||
* **-arr:** view download client queue via overlay sheet ([0c59886](https://github.com/JagandeepBrar/lunasea/commit/0c59886657db0ed05a9d741c82689cb1272c6ad2))
|
||||
* **android:** add support for monochromatic adaptive icon ([#701](https://github.com/JagandeepBrar/lunasea/issues/701)) ([96b2b1b](https://github.com/JagandeepBrar/lunasea/commit/96b2b1b5b010507dd7ece3421bf02eac6ba32486))
|
||||
* **locale:** support Croatian ([a160f09](https://github.com/JagandeepBrar/lunasea/commit/a160f0941f2e0c86d2e2fab5e01a577ceba2a8f3))
|
||||
* **logging:** integrate Sentry logging support for all platforms ([57bbb80](https://github.com/JagandeepBrar/lunasea/commit/57bbb80a0188d3bed9ca70846a89df6a3c2c0953))
|
||||
* **logo:** add Vectorized app logos ([113b294](https://github.com/JagandeepBrar/lunasea/commit/113b2943469464598ce07b931818c7e29c6cc63a))
|
||||
* **router:** re-implementation of routing via go_router ([1d4207a](https://github.com/JagandeepBrar/lunasea/commit/1d4207ae5106c2a0648b77a3b3ef6508665561e8))
|
||||
* **sabnzbd:** rewrite SABnzbd API interface ([a1b736a](https://github.com/JagandeepBrar/lunasea/commit/a1b736ae0c9bf754d913e86c69d15c27f256c413))
|
||||
* **search:** view download client queue via overlay sheet ([a6be658](https://github.com/JagandeepBrar/lunasea/commit/a6be658164fed7dd2411a167dec6b4c53eab70f0))
|
||||
* **settings:** re-add option to disable Sentry logging ([3d0c520](https://github.com/JagandeepBrar/lunasea/commit/3d0c5209cb3e796629817dee986634154e7ffe9e))
|
||||
* **web:** enable service worker processing of notifications ([4b41110](https://github.com/JagandeepBrar/lunasea/commit/4b411107f74f048e6f3d571845590a5d29720ac3))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **config:** log restoration error after resetting the database to default ([b02fe81](https://github.com/JagandeepBrar/LunaSea/commit/b02fe81df697066be6172a7d423768490639593e))
|
||||
* **indexer:** remove LunaIndexerIcon from model definition ([cf3d9bb](https://github.com/JagandeepBrar/LunaSea/commit/cf3d9bbc17cd67f0c5e8be22b9450563046a2127))
|
||||
|
||||
## [10.1.0](https://github.com/JagandeepBrar/LunaSea/compare/v10.0.3...v10.1.0) (2022-08-21)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **calendar:** show current month in header ([925f163](https://github.com/JagandeepBrar/LunaSea/commit/925f163e1534aeb45e5b22e8254eaf391eabd79f))
|
||||
* **changelog:** prepare and show changelog on pre-release builds ([df65f53](https://github.com/JagandeepBrar/LunaSea/commit/df65f53a4b00d11abc998f681274d22d94254f14))
|
||||
* **locale:** support Vietnamese (vi) ([8b57450](https://github.com/JagandeepBrar/LunaSea/commit/8b5745044e3af64a6c9bc593a9877400ac8a2dc2))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **android:** correctly handle back-button to open drawer on applicable routes ([c91ba2c](https://github.com/JagandeepBrar/LunaSea/commit/c91ba2ce8134fdc796d0431ba1c9134908fddd91))
|
||||
* **changelog:** group changelog item rows by key feature change ([2ababbd](https://github.com/JagandeepBrar/LunaSea/commit/2ababbd1b32abd153fa73fcdfe292c7791edbf52))
|
||||
* **ci:** utilize latest standard for Snapcraft login ([aff6e2c](https://github.com/JagandeepBrar/LunaSea/commit/aff6e2ca184e9539f28dd326c06478ca2dbfee4c))
|
||||
* **database:** correctly store manually ordered module list ([8fe81d1](https://github.com/JagandeepBrar/LunaSea/commit/8fe81d11ab5c5aa484f0c2b471932d5364e6209c))
|
||||
* **database:** detect and recover from database corruption ([758756f](https://github.com/JagandeepBrar/LunaSea/commit/758756fcf2456996c7ee02be2bd523cca91c45d3))
|
||||
* **database:** fallback to defaults on null values in profile ([fb3e8e5](https://github.com/JagandeepBrar/LunaSea/commit/fb3e8e53255c457d0922505ad6c2d91f5c0fcf03))
|
||||
* **database:** safely type indexer fields and headers ([f1dcd0c](https://github.com/JagandeepBrar/LunaSea/commit/f1dcd0c36d558882bfbc7f4465ed56fac0743c55))
|
||||
* **database:** utilize stricter typing for module headers map ([d4d9816](https://github.com/JagandeepBrar/LunaSea/commit/d4d9816c945b1930ecfda0382d809a7c67839a26))
|
||||
* **database:** validate enabled profile exists on restore ([d8506ee](https://github.com/JagandeepBrar/LunaSea/commit/d8506ee2834ca6a83394c11f6d4d329f03a3647f))
|
||||
* display 0-length timestamps as "0 Minutes" instead of "Under a Minute" ([e05b17a](https://github.com/JagandeepBrar/LunaSea/commit/e05b17ae5ed35cec85ade5b910b82869cb7ad3f2))
|
||||
* **lidarr:** (history) sort list by date descending ([ad22820](https://github.com/JagandeepBrar/LunaSea/commit/ad22820d6662371d3d2bc7fbf596f86619002d20))
|
||||
* **lists:** reorderable lists could not be reordered on some platforms ([95a645c](https://github.com/JagandeepBrar/LunaSea/commit/95a645c06cf2a76231c4b8dbea87ec593961c205))
|
||||
* **locale:** create stub primary language localization assets ([18ef4cf](https://github.com/JagandeepBrar/LunaSea/commit/18ef4cf1d4032a3f9db54b5da56158ffaf9b50c8))
|
||||
* **overseerr:** issues/requests list view translation keys ([136b92b](https://github.com/JagandeepBrar/LunaSea/commit/136b92b8a7bdd5cd0ec2322444443d054df6daed))
|
||||
* **radarr:** (queue) allow loading queue list when associated movie is not found ([22bf728](https://github.com/JagandeepBrar/LunaSea/commit/22bf728a3dab6b7d76c7674cb4d97dc73e849201))
|
||||
* **sonarr:** fanart image requests not including headers ([b5bb300](https://github.com/JagandeepBrar/LunaSea/commit/b5bb300046431d8c1c26fd8ac4a26c42444f4f53))
|
||||
* **sonarr:** invalid linking to theTVDB content ([80678a7](https://github.com/JagandeepBrar/LunaSea/commit/80678a75bb871a4835d1c73934e043564d80b6b0))
|
||||
* **android:** support Android 13 notification prompt ([83e8374](https://github.com/JagandeepBrar/lunasea/commit/83e8374c33977c82096fcf8d5a4d94da5c291f8f))
|
||||
* **cache:** add type-safety to LRU cache ([7aae480](https://github.com/JagandeepBrar/lunasea/commit/7aae4807221184dbe1d02454f73998a0458dd7f6))
|
||||
* **database:** prevent deadlock in database deletion actions ([9960124](https://github.com/JagandeepBrar/lunasea/commit/9960124d3219e2ab72e14443a1a79a1bac6b2cd3))
|
||||
* **graphs:** support fl_chart@0.55.1 ([b812c7b](https://github.com/JagandeepBrar/lunasea/commit/b812c7b4a12b4766e04b5d4023b45320e6b7927c))
|
||||
* **images:** validate image availability before fading-in ([6f9e0e8](https://github.com/JagandeepBrar/lunasea/commit/6f9e0e87ce3d02dfff7dec439a2e975585c5b986))
|
||||
* **notifications:** correctly inject service worker for notification handling ([82ef5f0](https://github.com/JagandeepBrar/lunasea/commit/82ef5f0c529a9e30475f86f496fa63c18785e87c))
|
||||
* **notifications:** enable in-app notifications config was inversed ([3593eb3](https://github.com/JagandeepBrar/lunasea/commit/3593eb329b38fb4a5b776cf1b165ad6f463e371b))
|
||||
* **resources:** remove feedback board resource ([d3d090e](https://github.com/JagandeepBrar/lunasea/commit/d3d090e277f7dda7d4ef3d7808e7341cf79178fe))
|
||||
* **scrolling:** remove custom scrolling behaviour ([864082f](https://github.com/JagandeepBrar/lunasea/commit/864082fd4045ef7dea0e0ab6a17d41ca86015fcb))
|
||||
* **settings:** show notification settings area on web ([136cda5](https://github.com/JagandeepBrar/lunasea/commit/136cda5215ae1d44dcd898e8e8e0b1e1912b3a41))
|
||||
* **sheets:** set default overlay theme for sheets, remove bottom radius clipping ([3a5e19b](https://github.com/JagandeepBrar/lunasea/commit/3a5e19b02c048df21bd169a0a06f1e9ae741debb))
|
||||
* **sonarr:** support Sonarr v4 API changes ([e477eca](https://github.com/JagandeepBrar/lunasea/commit/e477ecafcce268d7de112f33711fc02a089a4206))
|
||||
* **web:** correctly register notification service worker ([579531c](https://github.com/JagandeepBrar/lunasea/commit/579531c30a17e2c8d53d011dbecf710f42598ec8))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **changelog:** do not show documentation changes in in-app changelog ([2367050](https://github.com/JagandeepBrar/LunaSea/commit/2367050a66f2929d1ead17cc9191f47ddcb07f3a))
|
||||
* **core:** destructure core folder and reintegrate extensions ([5d52440](https://github.com/JagandeepBrar/LunaSea/commit/5d52440a43e4b605a8ac95bcb02b909f489ef7e2))
|
||||
* **database:** rewrite interface to key-value database ([a0eaca0](https://github.com/JagandeepBrar/LunaSea/commit/a0eaca084a399a2e249b142cb720cc50739a3f51))
|
||||
* **environment:** load environment using environment_config ([c4dd509](https://github.com/JagandeepBrar/LunaSea/commit/c4dd509e3210847c0ddba4c7982f38099228a2d6))
|
||||
* refactored in-app purchase interface ([9cb3fab](https://github.com/JagandeepBrar/LunaSea/commit/9cb3fabdf1f5fa10d65770a181ced937413642a2))
|
||||
* utilize statics and class functions for LunaModule enum ([9f3c3f7](https://github.com/JagandeepBrar/LunaSea/commit/9f3c3f779dda1b2da007abe5c2079dcfa834eb99))
|
||||
* **remove logos:** removes unused logo pngs ([2adfe59](https://github.com/JagandeepBrar/lunasea/commit/2adfe59bd5cd289beb7f7c703fe26397310dbc90))
|
||||
|
||||
### [10.0.3](https://github.com/JagandeepBrar/LunaSea/compare/v10.0.2...v10.0.3) (2022-05-26)
|
||||
### [10.1.1](https://github.com/JagandeepBrar/lunasea/compare/v10.1.0...v10.1.1) (2022-08-21)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **-arr:** updated UI for viewing content links ([8b559e0](https://github.com/JagandeepBrar/LunaSea/commit/8b559e00b01305af6d1f8139a75aa25391127626))
|
||||
* **ci:** build web docker images ([73fbb10](https://github.com/JagandeepBrar/LunaSea/commit/73fbb1076ec8e951d99ad2df28a28454ca8189a1))
|
||||
* **notifications:** option to disable in-app notifications ([da0c44c](https://github.com/JagandeepBrar/LunaSea/commit/da0c44c8b1bc846acc4a1d0a4b7f1ee7c4c2e44d))
|
||||
* **settings:** ability to check for updates ([b3caf34](https://github.com/JagandeepBrar/LunaSea/commit/b3caf34074ecc72257b26d091a332e8f54a47587))
|
||||
* **changelog:** do not show changelog on first boot of new installs ([52fd7fc](https://github.com/JagandeepBrar/lunasea/commit/52fd7fca0c5076b4b98458d449a4b1f581726a52))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* correctly calculate age of releases in -arrs ([e35433a](https://github.com/JagandeepBrar/LunaSea/commit/e35433af314b13ff3c951eef4c99f42e460f2b28))
|
||||
* **ui:** enable interactivity on all scrollbars on all platforms ([174fa96](https://github.com/JagandeepBrar/LunaSea/commit/174fa969517b00e611534defc12ca3768348623a))
|
||||
* **config:** log restoration error after resetting the database to default ([b02fe81](https://github.com/JagandeepBrar/lunasea/commit/b02fe81df697066be6172a7d423768490639593e))
|
||||
* **indexer:** remove LunaIndexerIcon from model definition ([cf3d9bb](https://github.com/JagandeepBrar/lunasea/commit/cf3d9bbc17cd67f0c5e8be22b9450563046a2127))
|
||||
|
||||
### [10.0.2](https://github.com/JagandeepBrar/LunaSea/compare/v10.0.1...v10.0.2) (2022-04-12)
|
||||
## [10.1.0](https://github.com/JagandeepBrar/lunasea/compare/v10.0.3...v10.1.0) (2022-08-21)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **account:** ability to update account email and password ([5ea6269](https://github.com/JagandeepBrar/LunaSea/commit/5ea6269bca9cc21f9a3ec34ff9840ea22384b717))
|
||||
* **firebase:** allow building LunaSea without setting up Firebase [skip ci] ([d7431b1](https://github.com/JagandeepBrar/LunaSea/commit/d7431b110217ff868e662be4a34af656ca1d6515))
|
||||
* **firebase:** conditionally load Firebase depending on the platform ([91f556d](https://github.com/JagandeepBrar/LunaSea/commit/91f556d07833c9be6a4d176d663e7889361b8ec2))
|
||||
* **linux:** initial linux support ([12fab1d](https://github.com/JagandeepBrar/LunaSea/commit/12fab1d6c22104cbf18ff695b1c636cc48236126))
|
||||
* **resources:** add link to build bucket [skip ci] ([64db574](https://github.com/JagandeepBrar/LunaSea/commit/64db574155182942dabbaffba5dbf43e0cca950c))
|
||||
* **resources:** add link to information about build channels ([fb31aba](https://github.com/JagandeepBrar/LunaSea/commit/fb31aba7f9b2678736f2d9abacdbf244edd1048a))
|
||||
* **ui:** ability to set background color on LunaBlock tiles [skip ci] ([e108cfb](https://github.com/JagandeepBrar/LunaSea/commit/e108cfbac5f5bb2a1cd7404af0a331fadba85612))
|
||||
* **windows:** initial windows support ([313e05c](https://github.com/JagandeepBrar/LunaSea/commit/313e05c8f519ca0c17efbec3d0587418e712cb81))
|
||||
* **calendar:** show current month in header ([925f163](https://github.com/JagandeepBrar/lunasea/commit/925f163e1534aeb45e5b22e8254eaf391eabd79f))
|
||||
* **changelog:** prepare and show changelog on pre-release builds ([df65f53](https://github.com/JagandeepBrar/lunasea/commit/df65f53a4b00d11abc998f681274d22d94254f14))
|
||||
* **locale:** support Vietnamese (vi) ([8b57450](https://github.com/JagandeepBrar/lunasea/commit/8b5745044e3af64a6c9bc593a9877400ac8a2dc2))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **charts:** rollback to fl_charts@0.46.0 ([cc81ee7](https://github.com/JagandeepBrar/LunaSea/commit/cc81ee7f14adc49b84556224dfef54c735c54758))
|
||||
* **database:** write to LunaSea parent folder on Linux and Windows ([6e89796](https://github.com/JagandeepBrar/LunaSea/commit/6e89796a15622f82759a6f8f02a82b1494ea1f8d))
|
||||
* **desktop:** prevent flickering by waiting for window settings to apply ([5a2a9b7](https://github.com/JagandeepBrar/LunaSea/commit/5a2a9b780b94d27aa2005823e1a18e225970967f))
|
||||
* **desktop:** set initial and minimum window sizes ([dd30c3a](https://github.com/JagandeepBrar/LunaSea/commit/dd30c3a0a32201a6503c81685dfdbc928a4aee90))
|
||||
* **android:** correctly handle back-button to open drawer on applicable routes ([c91ba2c](https://github.com/JagandeepBrar/lunasea/commit/c91ba2ce8134fdc796d0431ba1c9134908fddd91))
|
||||
* **changelog:** group changelog item rows by key feature change ([2ababbd](https://github.com/JagandeepBrar/lunasea/commit/2ababbd1b32abd153fa73fcdfe292c7791edbf52))
|
||||
* **ci:** utilize latest standard for Snapcraft login ([aff6e2c](https://github.com/JagandeepBrar/lunasea/commit/aff6e2ca184e9539f28dd326c06478ca2dbfee4c))
|
||||
* **database:** correctly store manually ordered module list ([8fe81d1](https://github.com/JagandeepBrar/lunasea/commit/8fe81d11ab5c5aa484f0c2b471932d5364e6209c))
|
||||
* **database:** detect and recover from database corruption ([758756f](https://github.com/JagandeepBrar/lunasea/commit/758756fcf2456996c7ee02be2bd523cca91c45d3))
|
||||
* **database:** fallback to defaults on null values in profile ([fb3e8e5](https://github.com/JagandeepBrar/lunasea/commit/fb3e8e53255c457d0922505ad6c2d91f5c0fcf03))
|
||||
* **database:** safely type indexer fields and headers ([f1dcd0c](https://github.com/JagandeepBrar/lunasea/commit/f1dcd0c36d558882bfbc7f4465ed56fac0743c55))
|
||||
* **database:** utilize stricter typing for module headers map ([d4d9816](https://github.com/JagandeepBrar/lunasea/commit/d4d9816c945b1930ecfda0382d809a7c67839a26))
|
||||
* **database:** validate enabled profile exists on restore ([d8506ee](https://github.com/JagandeepBrar/lunasea/commit/d8506ee2834ca6a83394c11f6d4d329f03a3647f))
|
||||
* display 0-length timestamps as "0 Minutes" instead of "Under a Minute" ([e05b17a](https://github.com/JagandeepBrar/lunasea/commit/e05b17ae5ed35cec85ade5b910b82869cb7ad3f2))
|
||||
* **lidarr:** (history) sort list by date descending ([ad22820](https://github.com/JagandeepBrar/lunasea/commit/ad22820d6662371d3d2bc7fbf596f86619002d20))
|
||||
* **lists:** reorderable lists could not be reordered on some platforms ([95a645c](https://github.com/JagandeepBrar/lunasea/commit/95a645c06cf2a76231c4b8dbea87ec593961c205))
|
||||
* **locale:** create stub primary language localization assets ([18ef4cf](https://github.com/JagandeepBrar/lunasea/commit/18ef4cf1d4032a3f9db54b5da56158ffaf9b50c8))
|
||||
* **overseerr:** issues/requests list view translation keys ([136b92b](https://github.com/JagandeepBrar/lunasea/commit/136b92b8a7bdd5cd0ec2322444443d054df6daed))
|
||||
* **radarr:** (queue) allow loading queue list when associated movie is not found ([22bf728](https://github.com/JagandeepBrar/lunasea/commit/22bf728a3dab6b7d76c7674cb4d97dc73e849201))
|
||||
* **sonarr:** fanart image requests not including headers ([b5bb300](https://github.com/JagandeepBrar/lunasea/commit/b5bb300046431d8c1c26fd8ac4a26c42444f4f53))
|
||||
* **sonarr:** invalid linking to theTVDB content ([80678a7](https://github.com/JagandeepBrar/lunasea/commit/80678a75bb871a4835d1c73934e043564d80b6b0))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **flavor:** rename build flavors [skip ci] ([26cc258](https://github.com/JagandeepBrar/LunaSea/commit/26cc2585b28f17342caf034ef9ef76dad06eb474))
|
||||
* **settings:** do not show version code [skip ci] ([ac807a8](https://github.com/JagandeepBrar/LunaSea/commit/ac807a8a01993939b86baad2dcb11e7d2a73e509))
|
||||
* **ui:** remove usages of tab indentations [skip ci] ([d9e7009](https://github.com/JagandeepBrar/LunaSea/commit/d9e70090007b402d2596e09195da5324ac1aafd0))
|
||||
* **changelog:** do not show documentation changes in in-app changelog ([2367050](https://github.com/JagandeepBrar/lunasea/commit/2367050a66f2929d1ead17cc9191f47ddcb07f3a))
|
||||
* **core:** destructure core folder and reintegrate extensions ([5d52440](https://github.com/JagandeepBrar/lunasea/commit/5d52440a43e4b605a8ac95bcb02b909f489ef7e2))
|
||||
* **database:** rewrite interface to key-value database ([a0eaca0](https://github.com/JagandeepBrar/lunasea/commit/a0eaca084a399a2e249b142cb720cc50739a3f51))
|
||||
* **environment:** load environment using environment_config ([c4dd509](https://github.com/JagandeepBrar/lunasea/commit/c4dd509e3210847c0ddba4c7982f38099228a2d6))
|
||||
* refactored in-app purchase interface ([9cb3fab](https://github.com/JagandeepBrar/lunasea/commit/9cb3fabdf1f5fa10d65770a181ced937413642a2))
|
||||
* utilize statics and class functions for LunaModule enum ([9f3c3f7](https://github.com/JagandeepBrar/lunasea/commit/9f3c3f779dda1b2da007abe5c2079dcfa834eb99))
|
||||
|
||||
### [10.0.1](https://github.com/JagandeepBrar/LunaSea/compare/v10.0.0...v10.0.1) (2022-03-25)
|
||||
### [10.0.3](https://github.com/JagandeepBrar/lunasea/compare/v10.0.2...v10.0.3) (2022-05-26)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **config:** support retrying entering encryption password on failure ([cd9a3d2](https://github.com/JagandeepBrar/LunaSea/commit/cd9a3d295e87b7d8987e508e6c77b02c1c5290f8))
|
||||
* **filesystem:** rewrite filesystem interface for better compatibility ([4c60df5](https://github.com/JagandeepBrar/LunaSea/commit/4c60df5523b98da3a7f135bb26fa20b36ed653e9))
|
||||
* **ios:** enable landscape support on iOS devices ([f8e6760](https://github.com/JagandeepBrar/LunaSea/commit/f8e676015c26f1e33f8680043663ea4f25dbc872))
|
||||
* **web:** initial web support ([91e1fa0](https://github.com/JagandeepBrar/LunaSea/commit/91e1fa03d9fae7cf82d158f00587075b29c610ea))
|
||||
* **window_manager:** rewrite window manager to be platform-safe ([d6aed6c](https://github.com/JagandeepBrar/LunaSea/commit/d6aed6c707ad75c0a02c3a4fa496ee6d8adeb55e))
|
||||
* **-arr:** updated UI for viewing content links ([8b559e0](https://github.com/JagandeepBrar/lunasea/commit/8b559e00b01305af6d1f8139a75aa25391127626))
|
||||
* **ci:** build web docker images ([73fbb10](https://github.com/JagandeepBrar/lunasea/commit/73fbb1076ec8e951d99ad2df28a28454ca8189a1))
|
||||
* **notifications:** option to disable in-app notifications ([da0c44c](https://github.com/JagandeepBrar/lunasea/commit/da0c44c8b1bc846acc4a1d0a4b7f1ee7c4c2e44d))
|
||||
* **settings:** ability to check for updates ([b3caf34](https://github.com/JagandeepBrar/lunasea/commit/b3caf34074ecc72257b26d091a332e8f54a47587))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **android:** prevent multiple splash screens from appearing on Android 12 ([26523e5](https://github.com/JagandeepBrar/LunaSea/commit/26523e58ed12c8789c5c2c0df8d9f6e75e719f11))
|
||||
* **web:** set notification vapid key ([1ddcc27](https://github.com/JagandeepBrar/LunaSea/commit/1ddcc279dd6adf629a2f99939a567481e3675bd2))
|
||||
* correctly calculate age of releases in -arrs ([e35433a](https://github.com/JagandeepBrar/lunasea/commit/e35433af314b13ff3c951eef4c99f42e460f2b28))
|
||||
* **ui:** enable interactivity on all scrollbars on all platforms ([174fa96](https://github.com/JagandeepBrar/lunasea/commit/174fa969517b00e611534defc12ca3768348623a))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **images:** guard and fallback image cache implementation ([601d82c](https://github.com/JagandeepBrar/LunaSea/commit/601d82cf89a22890d4197d10e1b74dbe110b0755))
|
||||
* **platform:** guard usages of dart:io and dart:html for future compatibility ([c7bd62d](https://github.com/JagandeepBrar/LunaSea/commit/c7bd62de2ee5669b41e6ccbc5e706ecb237cbcac))
|
||||
* **wake_on_lan:** refactor wake on LAN support, support loading API with dart:html ([403edc1](https://github.com/JagandeepBrar/LunaSea/commit/403edc16fb8188bba9bb6dd5b60a128dc8c2b0d4))
|
||||
|
||||
## [10.0.0](https://github.com/JagandeepBrar/LunaSea/tree/v10.0.0) (2022-03-12)
|
||||
### [10.0.2](https://github.com/JagandeepBrar/lunasea/compare/v10.0.1...v10.0.2) (2022-04-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **debug:** debug page for multiple UI elements ([80c5d21](https://github.com/JagandeepBrar/LunaSea/commit/80c5d2118a68129690cde5acbf70a23746d30acf))
|
||||
* **http:** set User-Agent to "LunaSea/{version} {build}" ([420d11c](https://github.com/JagandeepBrar/LunaSea/commit/420d11c37188fe1d56d76b51b98325b384a45cff))
|
||||
* **overseerr:** integrate request list and request tiles ([b7fc3c0](https://github.com/JagandeepBrar/LunaSea/commit/b7fc3c0a0fe917ca13513be74159af022c956465))
|
||||
* **overseerr:** issues (de)serialization & list integration ([db4dfda](https://github.com/JagandeepBrar/LunaSea/commit/db4dfdaf9ca1976d1a6e4b0ebc451b2e0f08b19e))
|
||||
* **overseerr:** serialized movie & tv objects ([2b778dc](https://github.com/JagandeepBrar/LunaSea/commit/2b778dc437559549df7404fa5266719979c3cce3))
|
||||
* **settings:** add test build information to resources ([be2d3e6](https://github.com/JagandeepBrar/LunaSea/commit/be2d3e63c27dc8eb5f2f01740df02d23b75eec8e))
|
||||
* **sonarr:** support for searching entire series for monitored episodes [skip ci] ([ba958b5](https://github.com/JagandeepBrar/LunaSea/commit/ba958b59a6445d422ae1ea9533f9a6ada188962b))
|
||||
* **ui:** support skeleton-state loading on LunaBlock ([8ab5f80](https://github.com/JagandeepBrar/LunaSea/commit/8ab5f80d004ead52a40a69f33482f371fe0f8c8b))
|
||||
* **account:** ability to update account email and password ([5ea6269](https://github.com/JagandeepBrar/lunasea/commit/5ea6269bca9cc21f9a3ec34ff9840ea22384b717))
|
||||
* **firebase:** allow building LunaSea without setting up Firebase [skip ci] ([d7431b1](https://github.com/JagandeepBrar/lunasea/commit/d7431b110217ff868e662be4a34af656ca1d6515))
|
||||
* **firebase:** conditionally load Firebase depending on the platform ([91f556d](https://github.com/JagandeepBrar/lunasea/commit/91f556d07833c9be6a4d176d663e7889361b8ec2))
|
||||
* **linux:** initial linux support ([12fab1d](https://github.com/JagandeepBrar/lunasea/commit/12fab1d6c22104cbf18ff695b1c636cc48236126))
|
||||
* **resources:** add link to build bucket [skip ci] ([64db574](https://github.com/JagandeepBrar/lunasea/commit/64db574155182942dabbaffba5dbf43e0cca950c))
|
||||
* **resources:** add link to information about build channels ([fb31aba](https://github.com/JagandeepBrar/lunasea/commit/fb31aba7f9b2678736f2d9abacdbf244edd1048a))
|
||||
* **ui:** ability to set background color on LunaBlock tiles [skip ci] ([e108cfb](https://github.com/JagandeepBrar/lunasea/commit/e108cfbac5f5bb2a1cd7404af0a331fadba85612))
|
||||
* **windows:** initial windows support ([313e05c](https://github.com/JagandeepBrar/lunasea/commit/313e05c8f519ca0c17efbec3d0587418e712cb81))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **desktop:** handle pull-to-refresh drag action ([d38fc77](https://github.com/JagandeepBrar/LunaSea/commit/d38fc770d2de4c2e2471aa4b61f8c4eb231ee134))
|
||||
* **firebase:** remove remaining references to crashlytics and analytics [skip ci] ([67afaa0](https://github.com/JagandeepBrar/LunaSea/commit/67afaa05f22163b95faff7be526c7a7ddbd5ac5e))
|
||||
* **overseerr:** rehydrate missing cached media content when required after cache ejection ([b09353b](https://github.com/JagandeepBrar/LunaSea/commit/b09353ba6e35992ce90613a198f7eb39759522a1))
|
||||
* **radarr:** localized strings and correctly display disk/root folder tiles ([490ecf6](https://github.com/JagandeepBrar/LunaSea/commit/490ecf60d1d2267a1e2a6677db8e58c0dea9e096))
|
||||
* **radarr:** match file details to web GUI ([a42aa41](https://github.com/JagandeepBrar/LunaSea/commit/a42aa4109ecde42dd2226ee13d398ca09c66a4b3))
|
||||
* **radarr:** prevent using preDB availability when adding movie ([9d71c1a](https://github.com/JagandeepBrar/LunaSea/commit/9d71c1ac9ae5505692c24c425be2ce22ae292a25))
|
||||
* **tautulli:** set graph padding to theme-default padding ([1229e5e](https://github.com/JagandeepBrar/LunaSea/commit/1229e5ee5ba1534d3e694fb85657b79b7dfcbf78))
|
||||
* **charts:** rollback to fl_charts@0.46.0 ([cc81ee7](https://github.com/JagandeepBrar/lunasea/commit/cc81ee7f14adc49b84556224dfef54c735c54758))
|
||||
* **database:** write to LunaSea parent folder on Linux and Windows ([6e89796](https://github.com/JagandeepBrar/lunasea/commit/6e89796a15622f82759a6f8f02a82b1494ea1f8d))
|
||||
* **desktop:** prevent flickering by waiting for window settings to apply ([5a2a9b7](https://github.com/JagandeepBrar/lunasea/commit/5a2a9b780b94d27aa2005823e1a18e225970967f))
|
||||
* **desktop:** set initial and minimum window sizes ([dd30c3a](https://github.com/JagandeepBrar/lunasea/commit/dd30c3a0a32201a6503c81685dfdbc928a4aee90))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **flavor:** rename "internal" to "develop" ([5652cb0](https://github.com/JagandeepBrar/LunaSea/commit/5652cb04bc7a23292d0ea9d65d6e919218975905))
|
||||
* **modules:** remove canonical module import file [skip ci] ([0cbd61e](https://github.com/JagandeepBrar/LunaSea/commit/0cbd61eac5c8e8675b3dd5702977c99e06ca81d5))
|
||||
* **overseerr:** utilize JsonEnum generators in enum types [skip ci] ([76d530e](https://github.com/JagandeepBrar/LunaSea/commit/76d530ed0810724d9b61bb73b689d6afb23d4ebd))
|
||||
* **flavor:** rename build flavors [skip ci] ([26cc258](https://github.com/JagandeepBrar/lunasea/commit/26cc2585b28f17342caf034ef9ef76dad06eb474))
|
||||
* **settings:** do not show version code [skip ci] ([ac807a8](https://github.com/JagandeepBrar/lunasea/commit/ac807a8a01993939b86baad2dcb11e7d2a73e509))
|
||||
* **ui:** remove usages of tab indentations [skip ci] ([d9e7009](https://github.com/JagandeepBrar/lunasea/commit/d9e70090007b402d2596e09195da5324ac1aafd0))
|
||||
|
||||
### [10.0.1](https://github.com/JagandeepBrar/lunasea/compare/v10.0.0...v10.0.1) (2022-03-25)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **config:** support retrying entering encryption password on failure ([cd9a3d2](https://github.com/JagandeepBrar/lunasea/commit/cd9a3d295e87b7d8987e508e6c77b02c1c5290f8))
|
||||
* **filesystem:** rewrite filesystem interface for better compatibility ([4c60df5](https://github.com/JagandeepBrar/lunasea/commit/4c60df5523b98da3a7f135bb26fa20b36ed653e9))
|
||||
* **ios:** enable landscape support on iOS devices ([f8e6760](https://github.com/JagandeepBrar/lunasea/commit/f8e676015c26f1e33f8680043663ea4f25dbc872))
|
||||
* **web:** initial web support ([91e1fa0](https://github.com/JagandeepBrar/lunasea/commit/91e1fa03d9fae7cf82d158f00587075b29c610ea))
|
||||
* **window_manager:** rewrite window manager to be platform-safe ([d6aed6c](https://github.com/JagandeepBrar/lunasea/commit/d6aed6c707ad75c0a02c3a4fa496ee6d8adeb55e))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **android:** prevent multiple splash screens from appearing on Android 12 ([26523e5](https://github.com/JagandeepBrar/lunasea/commit/26523e58ed12c8789c5c2c0df8d9f6e75e719f11))
|
||||
* **web:** set notification vapid key ([1ddcc27](https://github.com/JagandeepBrar/lunasea/commit/1ddcc279dd6adf629a2f99939a567481e3675bd2))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **images:** guard and fallback image cache implementation ([601d82c](https://github.com/JagandeepBrar/lunasea/commit/601d82cf89a22890d4197d10e1b74dbe110b0755))
|
||||
* **platform:** guard usages of dart:io and dart:html for future compatibility ([c7bd62d](https://github.com/JagandeepBrar/lunasea/commit/c7bd62de2ee5669b41e6ccbc5e706ecb237cbcac))
|
||||
* **wake_on_lan:** refactor wake on LAN support, support loading API with dart:html ([403edc1](https://github.com/JagandeepBrar/lunasea/commit/403edc16fb8188bba9bb6dd5b60a128dc8c2b0d4))
|
||||
|
||||
## [10.0.0](https://github.com/JagandeepBrar/lunasea/tree/v10.0.0) (2022-03-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **debug:** debug page for multiple UI elements ([80c5d21](https://github.com/JagandeepBrar/lunasea/commit/80c5d2118a68129690cde5acbf70a23746d30acf))
|
||||
* **http:** set User-Agent to "LunaSea/{version} {build}" ([420d11c](https://github.com/JagandeepBrar/lunasea/commit/420d11c37188fe1d56d76b51b98325b384a45cff))
|
||||
* **overseerr:** integrate request list and request tiles ([b7fc3c0](https://github.com/JagandeepBrar/lunasea/commit/b7fc3c0a0fe917ca13513be74159af022c956465))
|
||||
* **overseerr:** issues (de)serialization & list integration ([db4dfda](https://github.com/JagandeepBrar/lunasea/commit/db4dfdaf9ca1976d1a6e4b0ebc451b2e0f08b19e))
|
||||
* **overseerr:** serialized movie & tv objects ([2b778dc](https://github.com/JagandeepBrar/lunasea/commit/2b778dc437559549df7404fa5266719979c3cce3))
|
||||
* **settings:** add test build information to resources ([be2d3e6](https://github.com/JagandeepBrar/lunasea/commit/be2d3e63c27dc8eb5f2f01740df02d23b75eec8e))
|
||||
* **sonarr:** support for searching entire series for monitored episodes [skip ci] ([ba958b5](https://github.com/JagandeepBrar/lunasea/commit/ba958b59a6445d422ae1ea9533f9a6ada188962b))
|
||||
* **ui:** support skeleton-state loading on LunaBlock ([8ab5f80](https://github.com/JagandeepBrar/lunasea/commit/8ab5f80d004ead52a40a69f33482f371fe0f8c8b))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **desktop:** handle pull-to-refresh drag action ([d38fc77](https://github.com/JagandeepBrar/lunasea/commit/d38fc770d2de4c2e2471aa4b61f8c4eb231ee134))
|
||||
* **firebase:** remove remaining references to crashlytics and analytics [skip ci] ([67afaa0](https://github.com/JagandeepBrar/lunasea/commit/67afaa05f22163b95faff7be526c7a7ddbd5ac5e))
|
||||
* **overseerr:** rehydrate missing cached media content when required after cache ejection ([b09353b](https://github.com/JagandeepBrar/lunasea/commit/b09353ba6e35992ce90613a198f7eb39759522a1))
|
||||
* **radarr:** localized strings and correctly display disk/root folder tiles ([490ecf6](https://github.com/JagandeepBrar/lunasea/commit/490ecf60d1d2267a1e2a6677db8e58c0dea9e096))
|
||||
* **radarr:** match file details to web GUI ([a42aa41](https://github.com/JagandeepBrar/lunasea/commit/a42aa4109ecde42dd2226ee13d398ca09c66a4b3))
|
||||
* **radarr:** prevent using preDB availability when adding movie ([9d71c1a](https://github.com/JagandeepBrar/lunasea/commit/9d71c1ac9ae5505692c24c425be2ce22ae292a25))
|
||||
* **tautulli:** set graph padding to theme-default padding ([1229e5e](https://github.com/JagandeepBrar/lunasea/commit/1229e5ee5ba1534d3e694fb85657b79b7dfcbf78))
|
||||
|
||||
|
||||
### Tweaks
|
||||
|
||||
* **flavor:** rename "internal" to "develop" ([5652cb0](https://github.com/JagandeepBrar/lunasea/commit/5652cb04bc7a23292d0ea9d65d6e919218975905))
|
||||
* **modules:** remove canonical module import file [skip ci] ([0cbd61e](https://github.com/JagandeepBrar/lunasea/commit/0cbd61eac5c8e8675b3dd5702977c99e06ca81d5))
|
||||
* **overseerr:** utilize JsonEnum generators in enum types [skip ci] ([76d530e](https://github.com/JagandeepBrar/lunasea/commit/76d530ed0810724d9b61bb73b689d6afb23d4ebd))
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
# Contributors
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
[](#contributors-)
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
Thank you to everyone who has helped contribute to LunaSea, from development to localization efforts!
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
<!-- markdownlint-disable -->
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center"><a href="https://www.jagandeepbrar.io"><img src="https://avatars.githubusercontent.com/u/3048295?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jagandeep Brar</b></sub></a><br /><a href="https://github.com/JagandeepBrar/LunaSea/commits?author=JagandeepBrar" title="Code">💻</a> <a href="#design-JagandeepBrar" title="Design">🎨</a> <a href="#ideas-JagandeepBrar" title="Ideas, Planning, & Feedback">🤔</a></td>
|
||||
<td align="center"><a href="https://github.com/lightglitch"><img src="https://avatars.githubusercontent.com/u/196953?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mário Franco</b></sub></a><br /><a href="https://github.com/JagandeepBrar/LunaSea/commits?author=lightglitch" title="Code">💻</a> <a href="#translation-lightglitch" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Qstick"><img src="https://avatars.githubusercontent.com/u/376117?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Qstick</b></sub></a><br /><a href="https://github.com/JagandeepBrar/LunaSea/commits?author=Qstick" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/AliMickey"><img src="https://avatars.githubusercontent.com/u/60691199?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Micky</b></sub></a><br /><a href="https://github.com/JagandeepBrar/LunaSea/commits?author=AliMickey" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="http://www.xrths.fr"><img src="https://avatars.githubusercontent.com/u/40337934?v=4?s=100" width="100px;" alt=""/><br /><sub><b>xrths</b></sub></a><br /><a href="https://github.com/JagandeepBrar/LunaSea/commits?author=xrths" title="Documentation">📖</a></td>
|
||||
<td align="center"><a href="https://pythonexplainedto.me/"><img src="https://avatars.githubusercontent.com/u/41962737?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Patrik Hauguth</b></sub></a><br /><a href="#translation-Phaugt" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://liberapay.com/kingu/"><img src="https://avatars.githubusercontent.com/u/13802408?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan Nordhøy</b></sub></a><br /><a href="#translation-comradekingu" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/cpt-kuesel"><img src="https://avatars.githubusercontent.com/u/79487102?v=4?s=100" width="100px;" alt=""/><br /><sub><b>cpt-kuesel</b></sub></a><br /><a href="#translation-cpt-kuesel" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/KovalevArtem"><img src="https://avatars.githubusercontent.com/u/36500228?v=4?s=100" width="100px;" alt=""/><br /><sub><b>KovalevArtem</b></sub></a><br /><a href="#translation-KovalevArtem" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/iFelix18"><img src="https://avatars.githubusercontent.com/u/19800006?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Davide</b></sub></a><br /><a href="#translation-iFelix18" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://ersen.srht.site/"><img src="https://avatars.githubusercontent.com/u/88676873?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Oğuz Ersen</b></sub></a><br /><a href="#translation-ersen0" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/bittin"><img src="https://avatars.githubusercontent.com/u/43197?v=4?s=100" width="100px;" alt=""/><br /><sub><b>bittin</b></sub></a><br /><a href="#translation-bittin" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/almontegil"><img src="https://avatars.githubusercontent.com/u/68232356?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gil</b></sub></a><br /><a href="#translation-almontegil" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/TheSander562"><img src="https://avatars.githubusercontent.com/u/14059770?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sander Lambrechts</b></sub></a><br /><a href="#translation-TheSander562" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Guilhermerrrr"><img src="https://avatars.githubusercontent.com/u/92966143?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Guilhermerrrr</b></sub></a><br /><a href="#translation-Guilhermerrrr" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Ben-Wallner"><img src="https://avatars.githubusercontent.com/u/24373331?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ben Biber</b></sub></a><br /><a href="#translation-Ben-Wallner" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/Sytom"><img src="https://avatars.githubusercontent.com/u/30535521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sytom</b></sub></a><br /><a href="#translation-Sytom" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://xxzj990.top"><img src="https://avatars.githubusercontent.com/u/5134154?v=4?s=100" width="100px;" alt=""/><br /><sub><b>xxzj990</b></sub></a><br /><a href="#translation-xxzj990" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://www.openflixr.com"><img src="https://avatars.githubusercontent.com/u/3245077?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mark Frelink</b></sub></a><br /><a href="#translation-mfrelink" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/diemade"><img src="https://avatars.githubusercontent.com/u/174809?v=4?s=100" width="100px;" alt=""/><br /><sub><b>diemade</b></sub></a><br /><a href="#translation-diemade" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://feikojoosten.com"><img src="https://avatars.githubusercontent.com/u/10920052?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Feiko Joosten</b></sub></a><br /><a href="#translation-FeikoJoosten" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/TheMaxul"><img src="https://avatars.githubusercontent.com/u/2436527?v=4?s=100" width="100px;" alt=""/><br /><sub><b>TheMaxul</b></sub></a><br /><a href="#translation-TheMaxul" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://lisacintosh.itch.io"><img src="https://avatars.githubusercontent.com/u/6952213?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Maxime Leroy</b></sub></a><br /><a href="#translation-Lisapple" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/vc5"><img src="https://avatars.githubusercontent.com/u/13097192?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Vincent</b></sub></a><br /><a href="#translation-vc5" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/gmcinalli"><img src="https://avatars.githubusercontent.com/u/9024983?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gian Marco Cinalli</b></sub></a><br /><a href="#translation-gmcinalli" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://www.issacc.top/"><img src="https://avatars.githubusercontent.com/u/17275050?v=4?s=100" width="100px;" alt=""/><br /><sub><b>八月的蠢</b></sub></a><br /><a href="#translation-issaccv" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/neoestremi"><img src="https://avatars.githubusercontent.com/u/1340877?v=4?s=100" width="100px;" alt=""/><br /><sub><b>neoestremi</b></sub></a><br /><a href="#translation-neoestremi" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/marcosvdiasofc"><img src="https://avatars.githubusercontent.com/u/96720080?v=4?s=100" width="100px;" alt=""/><br /><sub><b>marcosvdiasofc</b></sub></a><br /><a href="#translation-marcosvdiasofc" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://liberapay.com/FSCorrupt/donate"><img src="https://avatars.githubusercontent.com/u/45659314?v=4?s=100" width="100px;" alt=""/><br /><sub><b>FSCorrupt</b></sub></a><br /><a href="#translation-fscorrupt" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/iHunterX"><img src="https://avatars.githubusercontent.com/u/16854718?v=4?s=100" width="100px;" alt=""/><br /><sub><b>iHunterX</b></sub></a><br /><a href="#translation-iHunterX" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/Brokeos"><img src="https://avatars.githubusercontent.com/u/8388746?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Brokeos</b></sub></a><br /><a href="#translation-Brokeos" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/punchy98"><img src="https://avatars.githubusercontent.com/u/12002902?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Maldonado</b></sub></a><br /><a href="#translation-punchy98" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/natiz"><img src="https://avatars.githubusercontent.com/u/3515888?v=4?s=100" width="100px;" alt=""/><br /><sub><b>natiz</b></sub></a><br /><a href="https://github.com/JagandeepBrar/LunaSea/commits?author=natiz" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/KevoM"><img src="https://avatars.githubusercontent.com/u/8274366?v=4?s=100" width="100px;" alt=""/><br /><sub><b>KevoM</b></sub></a><br /><a href="#translation-KevoM" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/rogeriomendes"><img src="https://avatars.githubusercontent.com/u/1494503?v=4?s=100" width="100px;" alt=""/><br /><sub><b>rogeriomendes</b></sub></a><br /><a href="#translation-rogeriomendes" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="http://www.paddez.com/"><img src="https://avatars.githubusercontent.com/u/587220?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David K</b></sub></a><br /><a href="#design-Irishsmurf" title="Design">🎨</a></td>
|
||||
<td align="center"><a href="https://github.com/Slam4uk"><img src="https://avatars.githubusercontent.com/u/78175288?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Slam4uk</b></sub></a><br /><a href="#translation-Slam4uk" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/timrettop"><img src="https://avatars.githubusercontent.com/u/434913?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tim Potter</b></sub></a><br /><a href="#translation-timrettop" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/carlesmu"><img src="https://avatars.githubusercontent.com/u/1310090?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Carles Muñoz Gorriz</b></sub></a><br /><a href="#translation-carlesmu" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/osjurso"><img src="https://avatars.githubusercontent.com/u/17827103?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Olav Markus Sjursø</b></sub></a><br /><a href="#translation-osjurso" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="https://github.com/fyu0h"><img src="https://avatars.githubusercontent.com/u/33602841?v=4?s=100" width="100px;" alt=""/><br /><sub><b>fyu0h</b></sub></a><br /><a href="#translation-fyu0h" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/johnflorin"><img src="https://avatars.githubusercontent.com/u/45756085?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Florin</b></sub></a><br /><a href="#translation-johnflorin" title="Translation">🌍</a></td>
|
||||
<td align="center"><a href="https://github.com/tuzumbear"><img src="https://avatars.githubusercontent.com/u/61370405?v=4?s=100" width="100px;" alt=""/><br /><sub><b>tuzumbear</b></sub></a><br /><a href="#translation-tuzumbear" title="Translation">🌍</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- markdownlint-restore -->
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
@@ -1,5 +1,5 @@
|
||||
# Build
|
||||
FROM debian:latest as build
|
||||
FROM --platform=$BUILDPLATFORM debian:latest as build
|
||||
|
||||
ENV PATH="/usr/local/flutter/bin:/usr/local/flutter/bin/cache/dart-sdk/bin:$PATH"
|
||||
RUN apt-get update
|
||||
@@ -16,6 +16,6 @@ WORKDIR /lunasea/
|
||||
RUN flutter build web
|
||||
|
||||
# Runtime
|
||||
FROM nginx:alpine
|
||||
LABEL org.opencontainers.image.source="https://github.com/JagandeepBrar/LunaSea"
|
||||
FROM --platform=$TARGETPLATFORM nginx:alpine
|
||||
LABEL org.opencontainers.image.source="https://github.com/JagandeepBrar/lunasea"
|
||||
COPY --from=build /lunasea/build/web /usr/share/nginx/html
|
||||
|
||||
@@ -18,7 +18,7 @@ LunaSea even comes with support for webhook-based push notifications, multiple i
|
||||
|
||||
## 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).
|
||||
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](https://docs.lunasea.app/releases/android)
|
||||
- [iOS](https://docs.lunasea.app/releases/ios)
|
||||
@@ -31,7 +31,7 @@ Interested in using prerelease build channels of LunaSea? Learn the differences
|
||||
|
||||
## Getting Started
|
||||
|
||||
- [Build Guide](https://github.com/JagandeepBrar/LunaSea/wiki/Build-Guide)
|
||||
- [Build Guide](https://github.com/JagandeepBrar/lunasea/wiki/Build-Guide)
|
||||
- [Documentation](https://www.lunasea.app/docs)
|
||||
- [Frequently Asked Questions](https://docs.lunasea.app/getting-started/frequently-asked-questions)
|
||||
|
||||
@@ -40,7 +40,7 @@ Interested in using prerelease build channels of LunaSea? Learn the differences
|
||||
[](https://www.lunasea.app/discord)
|
||||
[](https://www.lunasea.app/reddit)
|
||||
|
||||
**Please only create an issue on GitHub for bugs and software issues**. Post in the [discussions board](https://github.com/JagandeepBrar/LunaSea/discussions) or the [Discord forum](https://www.lunasea.app/discord) for requests and general feedback.
|
||||
**Please only create an issue on GitHub for bugs and software issues**. Post in the [discussions board](https://github.com/JagandeepBrar/lunasea/discussions) or the [Discord forum](https://www.lunasea.app/discord) for requests and general feedback.
|
||||
|
||||
- [Email](mailto:hello@lunasea.app)
|
||||
- [Reddit](https://www.lunasea.app/reddit)
|
||||
|
||||
@@ -3,22 +3,22 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.6)
|
||||
rexml
|
||||
addressable (2.8.1)
|
||||
addressable (2.8.4)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.731.0)
|
||||
aws-sdk-core (3.170.1)
|
||||
aws-partitions (1.781.0)
|
||||
aws-sdk-core (3.175.0)
|
||||
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.63.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (1.67.0)
|
||||
aws-sdk-core (~> 3, >= 3.174.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.119.1)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-s3 (1.126.0)
|
||||
aws-sdk-core (~> 3, >= 3.174.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.2)
|
||||
@@ -36,7 +36,7 @@ GEM
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.99.0)
|
||||
excon (0.100.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
@@ -65,8 +65,8 @@ GEM
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.212.1)
|
||||
fastimage (2.2.7)
|
||||
fastlane (2.213.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -90,7 +90,7 @@ GEM
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (~> 2.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (~> 0.1.1)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
@@ -106,7 +106,7 @@ GEM
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.37.0)
|
||||
google-apis-androidpublisher_v3 (0.44.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
@@ -137,7 +137,7 @@ GEM
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.3.0)
|
||||
googleauth (1.5.2)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -150,12 +150,12 @@ GEM
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.2)
|
||||
json (2.6.3)
|
||||
jwt (2.7.0)
|
||||
jwt (2.7.1)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
multipart-post (2.3.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
optparse (0.1.1)
|
||||
|
||||
@@ -1,46 +1,37 @@
|
||||
{
|
||||
"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.",
|
||||
"motd": "Welcome to LunaSea v10.2.5!\n\nThis releases adds support for multi-select actions on Sonarr episodes and fixes an issue preventing users from selecting a new active profile when triggering a download via search.",
|
||||
"feat": {
|
||||
"tautulli": [
|
||||
"web": [
|
||||
{
|
||||
"commit": "5cf1a06cec079aa66c77425c0ed8d4fa7897bbd3",
|
||||
"message": "add ability to open media in Plex"
|
||||
},
|
||||
{
|
||||
"commit": "6de806316efaa61c5ddbac1b8f5b214949f0bcf8",
|
||||
"message": "display audio language, subtitle language, and video dynamic range for activity"
|
||||
"commit": "89b0906eab883bddb860583cc6e4bf86efd2b115",
|
||||
"message": "build multi-platform Docker image for amd64 and arm64"
|
||||
}
|
||||
],
|
||||
"flutter": [
|
||||
"sonarr": [
|
||||
{
|
||||
"commit": "6241ee462989f1f65fa8f1e18378579e2e77197b",
|
||||
"message": "replace Skia with Impeller rendering engine"
|
||||
},
|
||||
{
|
||||
"commit": "f1b831a118e56c480aae72042ee4eb7013f954b2",
|
||||
"message": "upgrade to Flutter 3.7.7/1837b5be5f"
|
||||
"commit": "79d13889f2eb0668b1fbb4d29ea9b11b1d82d9bb",
|
||||
"message": "multi-select episodes and trigger bulk actions"
|
||||
}
|
||||
]
|
||||
},
|
||||
"fix": {
|
||||
"links": [
|
||||
"search": [
|
||||
{
|
||||
"commit": "596eab4bad1aa183e3c0dfc8d20a32c15ecdb78d",
|
||||
"message": "use platform default method to launch URLs"
|
||||
}
|
||||
],
|
||||
"http": [
|
||||
{
|
||||
"commit": "aca5d0eb826b38ebeec33e3495045bf21e8a49c7",
|
||||
"message": "correctly set content type for POST requests"
|
||||
}
|
||||
],
|
||||
"macos": [
|
||||
{
|
||||
"commit": "d612ae221cac741b3a36893d4bc7f05f5055c7b8",
|
||||
"message": "set minimum platform version to 10.15"
|
||||
"commit": "d81052d81783df6d93d9f41e2c543782299e7067",
|
||||
"message": "profile could not be changed on download prompt"
|
||||
}
|
||||
]
|
||||
},
|
||||
"refactor": {}
|
||||
"refactor": {
|
||||
"system": [
|
||||
{
|
||||
"commit": "f3fdf6d5f3583af14dd0046e09f9a84f8af2a972",
|
||||
"message": "update packages"
|
||||
},
|
||||
{
|
||||
"commit": "021a08e4e44009ffcfdd613a49d455855e7838bb",
|
||||
"message": "upgrade to Flutter 3.10.5/45f6e00911"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
118
assets/localization/el.json
Normal file
118
assets/localization/el.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"dashboard.Friday": "Παρασκευή",
|
||||
"dashboard.FutureDays": "Μελλοντικό χρόνο",
|
||||
"dashboard.OneMonth": "Ένας μήνας",
|
||||
"dashboard.Tuesday": "Τρίτη",
|
||||
"dashboard.MinimumOfOneDay": "1 ημέρα το ελάχιστο",
|
||||
"dashboard.Modules": "Ενότητες",
|
||||
"dashboard.Monday": "Δευτέρα",
|
||||
"dashboard.NoNewContent": "Τίποτα νέο",
|
||||
"dashboard.OneWeek": "Μία εβδομάδα",
|
||||
"dashboard.PastDays": "Παλαιότερες ημέρες",
|
||||
"dashboard.Saturday": "Σάββατο",
|
||||
"dashboard.Schedule": "Πρόγραμμα",
|
||||
"dashboard.Sunday": "Κυριακή",
|
||||
"dashboard.Thursday": "Πέμπτη",
|
||||
"dashboard.Calendar": "Ημερολόγιο",
|
||||
"dashboard.PastDaysDescription": "Τοποθετήσει τον αριθμό ημερών στο παρελθόν για εισαγωγή των εγγραφών του ημερολογίου.",
|
||||
"dashboard.TwoWeeks": "Δύο εβδομάδες",
|
||||
"dashboard.Wednesday": "Τετάρτη",
|
||||
"dashboard.FutureDaysDescription": "Τοποθετήσει τον αριθμό ημερών στο μέλλον για εισαγωγή των εγγραφών του ημερολογίου.",
|
||||
"lidarr.StartSearchForMissingAlbums": "Ξεκίνα αναζήτηση για άλμπουμ που λείπουν",
|
||||
"lidarr.StartSearchFor": "Ξεκίνα αναζήτηση…",
|
||||
"lunasea.Add": "Προσέθεσε",
|
||||
"lunasea.Alpha": "Πρώτη",
|
||||
"lunasea.AnErrorHasOccurred": "Κάποιο σφάλμα δημιουργήθηκε",
|
||||
"lunasea.Ascending": "Αύξουσα",
|
||||
"lunasea.BackUp": "Αντίγραφα ασφαλείας",
|
||||
"lunasea.Beta": "Δοκιμαστική",
|
||||
"lunasea.BlockView": "Εμφάνιση σε blocks",
|
||||
"lunasea.BuyMeABeer": "Κέρασε με μια μπύρα",
|
||||
"lunasea.BuyMeABurger": "Κέρασε με ένα burger",
|
||||
"lunasea.BuyMeACoffee": "Κέρασε με ένα καφέ",
|
||||
"lunasea.BuyMeASoda": "Κέρασε με ένα αναψυκτικό",
|
||||
"lunasea.Cancel": "Ακύρωση",
|
||||
"lunasea.Candidate": "Υποψήφιος",
|
||||
"lunasea.ChangeProfiles": "Αλλαγή προφίλ",
|
||||
"lunasea.Changelog": "Αλλαγές",
|
||||
"lunasea.CheckLogsMessage": "Δες τις καταγραφές για περισσότερες λεπτομέρειες",
|
||||
"lunasea.Chores": "Μικρό δουλειές",
|
||||
"lunasea.Clear": "Καθαρισμός",
|
||||
"lunasea.Close": "Κοντά",
|
||||
"lunasea.ComingSoon": "Έρχονται σύντομα",
|
||||
"lunasea.Copied": "Αντιγράφτηκε",
|
||||
"lunasea.Critical": "Κρίσιμο",
|
||||
"lunasea.Dashboard": "Ταμπλό",
|
||||
"lunasea.Days": "{} ημέρες",
|
||||
"lunasea.DaysAgo": "{} παλαιότερες ημέρες",
|
||||
"lunasea.Debug": "Εντοπισμός σφαλμάτων",
|
||||
"lunasea.Delete": "Διαγράφω",
|
||||
"lunasea.Descending": "Φθίνουσα",
|
||||
"lunasea.Develop": "Ανάπτυξη",
|
||||
"lunasea.Disable": "Απενεργοποιώ",
|
||||
"lunasea.Disabled": "Ανενεργός",
|
||||
"lunasea.Dismiss": "Απόρριψη",
|
||||
"lunasea.Docs": "Έγγραφα",
|
||||
"lunasea.DownloadClient": "Πρόγραμμα λήψης",
|
||||
"lunasea.Edge": "Χείλος",
|
||||
"lunasea.Error": "Σφάλμα",
|
||||
"lunasea.ExternalModules": "Εξωτερικές μονάδες",
|
||||
"lunasea.Features": "Χαρακτηριστικά",
|
||||
"lunasea.Fixes": "Επιδιορθώσεις",
|
||||
"lunasea.FullChangelog": "Πλήρες ημερολόγιο αλλαγών",
|
||||
"lunasea.GoBack": "Επιστροφή",
|
||||
"lunasea.GoToSettings": "Πήγαινε στις ρυθμίσεις",
|
||||
"lunasea.GridView": "Προβολή πλέγματος",
|
||||
"lunasea.Home": "Αρχική σελίδα",
|
||||
"lunasea.Hours": "{} ώρες",
|
||||
"lunasea.HoursAgo": "{} ώρες πριν",
|
||||
"lunasea.IncorrectEncryptionKey": "Λανθασμένο κλειδί κρυπτογράφησης",
|
||||
"lunasea.Internal": "Εσωτερικό",
|
||||
"lunasea.InvalidFileTypeSelected": "Επιλέχθηκε μη έγκυρος τύπος αρχείου",
|
||||
"lunasea.JustNow": "Αμέσως",
|
||||
"lunasea.Minutes": "{} Λεπτά",
|
||||
"lunasea.MinutesAgo": "{} λεπτά πριν",
|
||||
"lunasea.Module": "Μονάδα",
|
||||
"overseerr.Audio": "Ήχος",
|
||||
"overseerr.Approved": "Έγκριση",
|
||||
"overseerr.Available": "Διαθέσιμο",
|
||||
"overseerr.Declined": "Απορρίφθηκε",
|
||||
"overseerr.Issues": "Θέματα",
|
||||
"overseerr.NoIssues": "Κανένα Θέμα",
|
||||
"overseerr.NoIssuesFound": "Κανένα θέμα δεν βρέθηκε",
|
||||
"overseerr.NoRequests": "Χωρίς αιτήματα",
|
||||
"overseerr.NoRequestsFound": "Κανένα αίτημα δεν βρέθηκε",
|
||||
"overseerr.OneRequest": "1 Αίτημα",
|
||||
"overseerr.Open": "Ανοιχτό",
|
||||
"radarr.AddMovie": "Προσθήκη ταινίας",
|
||||
"radarr.AddMovieAndSearch": "Προσθήκη + αναζήτηση",
|
||||
"radarr.AddedTag": "Προσθήκη ετικέτας",
|
||||
"radarr.Age": "Ηλικία",
|
||||
"radarr.All": "Όλα",
|
||||
"sabnzbd.All": "Όλα",
|
||||
"sabnzbd.Ascending": "Αύξουσα",
|
||||
"sabnzbd.Age": "Ηλικία",
|
||||
"sabnzbd.CategoryDefault": "Προεπιλογή κατηγορίας",
|
||||
"search.AddIndexer": "Προσθήκη Indexer",
|
||||
"search.Age": "Ηλικία",
|
||||
"search.AllSubcategories": "Όλες οι υποκατηγορίες",
|
||||
"search.Alphabetical": "Αλφαβητικά",
|
||||
"search.Category": "Κατηγορία",
|
||||
"settings.AccountDeleted": "Διαγραφή λογαριασμού",
|
||||
"settings.AccountDescription": "Ο LunaSea λογαριασμός σου",
|
||||
"settings.AccountDeletedMessage": "Διαγραφή λογαριασμού LunaSea",
|
||||
"settings.Account": "Λογαριασμός",
|
||||
"sonarr.AddedSeries": "Προστέθηκε σειρά",
|
||||
"sonarr.AddedTag": "Προσθήκη ετικέτας",
|
||||
"sonarr.AddReleaseToBlocklist": "Προσθήκη έκδοσης στην λίστα αποκλεισμού",
|
||||
"sonarr.AddedOn": "Προστέθηκε στις",
|
||||
"sonarr.AddSeries": "Προσθήκη σειρών",
|
||||
"tautulli.Activity": "Δραστηριότητα",
|
||||
"tautulli.ActivityDetails": "Λεπτομέρειες δραστηριότητας",
|
||||
"tautulli.ActivityRefreshRate": "Ρυθμός ανανέωσης δραστηριότητας",
|
||||
"tautulli.Audio": "Ήχος",
|
||||
"tautulli.BackingUpConfiguration": "Δημιουργία αντιγράφων ασφαλείας διαμόρφωσης…",
|
||||
"wake_on_lan.MagicPacketSent": "Αποστολή Magic Packet",
|
||||
"wake_on_lan.MagicPacketSentMessage": "Το μηχάνημα πρέπει να εκκινεί!",
|
||||
"wake_on_lan.MagicPacketFailedToSend": "Αποτυχία αποστολής Magic Packet"
|
||||
}
|
||||
@@ -57,6 +57,8 @@
|
||||
"lunasea.DownloadClient": "Download Client",
|
||||
"lunasea.Edge": "Edge",
|
||||
"lunasea.Error": "Error",
|
||||
"lunasea.EverySecond": "Every Second",
|
||||
"lunasea.EverySeconds": "Every {} Seconds",
|
||||
"lunasea.ExternalModules": "External Modules",
|
||||
"lunasea.Features": "Features",
|
||||
"lunasea.Fixes": "Fixes",
|
||||
@@ -70,6 +72,7 @@
|
||||
"lunasea.IncorrectEncryptionKey": "Incorrect encryption key",
|
||||
"lunasea.Internal": "Internal",
|
||||
"lunasea.InvalidFileTypeSelected": "Invalid File Type Selected",
|
||||
"lunasea.Items": "{} Items",
|
||||
"lunasea.JustNow": "Just Now",
|
||||
"lunasea.Minutes": "{} Minutes",
|
||||
"lunasea.MinutesAgo": "{} Minutes Ago",
|
||||
@@ -85,6 +88,7 @@
|
||||
"lunasea.OneDayAgo": "1 Day Ago",
|
||||
"lunasea.OneHour": "1 Hour",
|
||||
"lunasea.OneHourAgo": "1 Hour Ago",
|
||||
"lunasea.OneItem": "1 Item",
|
||||
"lunasea.OneMinute": "1 Minute",
|
||||
"lunasea.OneMinuteAgo": "1 Minute Ago",
|
||||
"lunasea.OneMonth": "1 Month",
|
||||
@@ -113,6 +117,8 @@
|
||||
"lunasea.Settings": "Settings",
|
||||
"lunasea.Stable": "Stable",
|
||||
"lunasea.StartingView": "Starting View",
|
||||
"lunasea.ThankYou": "Thank You",
|
||||
"lunasea.ThankYouMessage": "Thank you for supporting the open-source community!",
|
||||
"lunasea.Today": "Today",
|
||||
"lunasea.TransactionFailure": "Transaction Failure",
|
||||
"lunasea.TryAgain": "Try Again",
|
||||
@@ -155,11 +161,11 @@
|
||||
"overseerr.UnknownUser": "Unknown User",
|
||||
"overseerr.Users": "Users",
|
||||
"overseerr.Video": "Video",
|
||||
"radarr.Age": "Age",
|
||||
"radarr.All": "All",
|
||||
"radarr.AddedTag": "Added Tag",
|
||||
"radarr.AddMovie": "Add Movie",
|
||||
"radarr.AddMovieAndSearch": "Add + Search",
|
||||
"radarr.AddedTag": "Added Tag",
|
||||
"radarr.Age": "Age",
|
||||
"radarr.All": "All",
|
||||
"radarr.Alphabetical": "Alphabetical",
|
||||
"radarr.Approved": "Approved",
|
||||
"radarr.Audio": "Audio",
|
||||
@@ -181,15 +187,17 @@
|
||||
"radarr.DigitalRelease": "Digital Release",
|
||||
"radarr.DirectoryNotFound": "Directory Not Found",
|
||||
"radarr.Discover": "Discover",
|
||||
"radarr.DiscoverSuggestions": "Discover Suggestions",
|
||||
"radarr.DiscoverSuggestionsDescription": "Add Suggested Releases in Discover",
|
||||
"radarr.Disks": "Disks",
|
||||
"radarr.DownloadFailed": "Download Failed",
|
||||
"radarr.DownloadIgnored": "Download Ignored",
|
||||
"radarr.DynamicRange": "Dynamic Range",
|
||||
"radarr.EditMovie": "Edit Movie",
|
||||
"radarr.FPS": "FPS",
|
||||
"radarr.FailedToAddTag": "Failed to Add Tag",
|
||||
"radarr.FileBrowser": "File Browser…",
|
||||
"radarr.FilterCatalogue": "Filter Catalogue",
|
||||
"radarr.FPS": "FPS",
|
||||
"radarr.GrabbedFrom": "Grabbed from {}",
|
||||
"radarr.History": "History",
|
||||
"radarr.HistoryDescription": "View Recent Activity",
|
||||
@@ -206,30 +214,31 @@
|
||||
"radarr.MinimumAvailability": "Minimum Availability",
|
||||
"radarr.Missing": "Missing",
|
||||
"radarr.Monitor": "Monitor",
|
||||
"radarr.MonitorMovie": "Monitor Movie",
|
||||
"radarr.Monitored": "Monitored",
|
||||
"radarr.MonitoredDescription": "Monitor for new releases",
|
||||
"radarr.MonitorMovie": "Monitor Movie",
|
||||
"radarr.More": "More",
|
||||
"radarr.Move": "Move",
|
||||
"radarr.MoveFiles": "Move Files",
|
||||
"radarr.MoveFilesDescription": "Would you like to move the files?",
|
||||
"radarr.MoveFull": "Move Files",
|
||||
"radarr.Movie": "Movie",
|
||||
"radarr.Movies": "Movies",
|
||||
"radarr.MovieDetails": "Movie Details",
|
||||
"radarr.MovieFileDeleted": "Movie File Deleted",
|
||||
"radarr.MovieFileRenamed": "Movie File Renamed",
|
||||
"radarr.MovieImported": "Movie Imported ({})",
|
||||
"radarr.MovieNotFound": "Movie Not Found",
|
||||
"radarr.MoviePath": "Movie Path",
|
||||
"radarr.Movies": "Movies",
|
||||
"radarr.NoDisksFound": "No Disks Found",
|
||||
"radarr.NoFilesFound": "No Files Found",
|
||||
"radarr.NoHistoryFound": "No History Found",
|
||||
"radarr.NoTagsFound": "No Tags Found",
|
||||
"radarr.NoMoviesFound": "No Movies Found",
|
||||
"radarr.NoResultsFound": "No Results Found",
|
||||
"radarr.NoRootFoldersFound": "No Root Folders Found",
|
||||
"radarr.NoSubdirectoriesFound": "No Subdirectories Found",
|
||||
"radarr.NoSummaryIsAvailable": "No summary is available.",
|
||||
"radarr.NoTagsFound": "No Tags Found",
|
||||
"radarr.Other": "Other",
|
||||
"radarr.ParentDirectory": "Parent Directory",
|
||||
"radarr.PhysicalRelease": "Physical Release",
|
||||
@@ -237,18 +246,19 @@
|
||||
"radarr.QualityProfile": "Quality Profile",
|
||||
"radarr.Queue": "Queue",
|
||||
"radarr.QueueDescription": "View Active & Queued Content",
|
||||
"radarr.QueueSize": "Queue Size",
|
||||
"radarr.Quick": "Quick",
|
||||
"radarr.RefreshMovie": "Refresh Movie",
|
||||
"radarr.Rejected": "Rejected",
|
||||
"radarr.Releases": "Releases",
|
||||
"radarr.Released": "Released",
|
||||
"radarr.ReleasedToday": "Released Today",
|
||||
"radarr.Releases": "Releases",
|
||||
"radarr.RemoveMovie": "Remove Movie",
|
||||
"radarr.Resolution": "Resolution",
|
||||
"radarr.RootFolder": "Root Folder",
|
||||
"radarr.RootFolders": "Root Folders",
|
||||
"radarr.Runtime": "Runtime",
|
||||
"radarr.RunRSSSync": "Run RSS Sync",
|
||||
"radarr.Runtime": "Runtime",
|
||||
"radarr.ScanType": "Scan Type",
|
||||
"radarr.Search": "Search",
|
||||
"radarr.SearchAllMissing": "Search All Missing",
|
||||
@@ -271,8 +281,8 @@
|
||||
"radarr.Type": "Type",
|
||||
"radarr.UnmappedFolder": "1 Unmapped Folder",
|
||||
"radarr.UnmappedFolders": "{} Unmapped Folders",
|
||||
"radarr.Unmonitored": "Unmonitored",
|
||||
"radarr.UnmonitorMovie": "Unmonitor Movie",
|
||||
"radarr.Unmonitored": "Unmonitored",
|
||||
"radarr.Unreleased": "Unreleased",
|
||||
"radarr.Upcoming": "Upcoming",
|
||||
"radarr.UpdateLibrary": "Update Library",
|
||||
@@ -306,25 +316,39 @@
|
||||
"sabnzbd.ShutdownSABnzbd": "Shutdown SABnzbd",
|
||||
"sabnzbd.StandbyPC": "Standby PC",
|
||||
"sabnzbd.Stop": "Stop",
|
||||
"search.AddIndexer": "Add Indexer",
|
||||
"search.Age": "Age",
|
||||
"search.AllSubcategories": "All Subcategories",
|
||||
"search.Alphabetical": "Alphabetical",
|
||||
"search.Category": "Category",
|
||||
"search.Categories": "Categories",
|
||||
"search.Comments": "Comments",
|
||||
"search.DeleteIndexer": "Delete Indexer",
|
||||
"search.Download": "Download",
|
||||
"search.Downloading": "Downloading…",
|
||||
"search.DownloadingNZBToDevice": "Downloading NZB to your device",
|
||||
"search.DownloadToDevice": "Download to Device",
|
||||
"search.EditIndexer": "Edit Indexer",
|
||||
"search.FailedToAddIndexer": "Failed to Add indexer",
|
||||
"search.FailedToDownloadNZB": "Failed to Download NZB",
|
||||
"search.FailedToSend": "Failed to Send",
|
||||
"search.HideAdultCategories": "Hide Adult Categories",
|
||||
"search.HideAdultCategoriesDescription": "Hide Adult Content",
|
||||
"search.IndexerAPIHost": "Indexer API Host",
|
||||
"search.IndexerAPIKey": "Indexer API Key",
|
||||
"search.IndexerAdded": "Indexer Added",
|
||||
"search.IndexerDeleted": "Indexer Deleted",
|
||||
"search.IndexerNotFound": "Indexer Not Found",
|
||||
"search.NoCategoriesFound": "No Categories Found",
|
||||
"search.NoIndexersFound": "No Indexers Found",
|
||||
"search.NoResultsFound": "No Results Found",
|
||||
"search.NoSubcategoriesFound": "No Subcategories Found",
|
||||
"search.Results": "Results",
|
||||
"search.Search": "Search",
|
||||
"search.SentNZBData": "Sent NZB Data",
|
||||
"search.SentTo": "Sent to {}",
|
||||
"search.ShowLinks": "Show Links",
|
||||
"search.ShowLinksDescription": "Show Download and Comments Links",
|
||||
"search.Size": "Size",
|
||||
"search.Subcategories": "Subcategories",
|
||||
"settings.Account": "Account",
|
||||
@@ -343,6 +367,8 @@
|
||||
"settings.AddProfileDescription": "Add a New Profile",
|
||||
"settings.AddedProfile": "Added Profile",
|
||||
"settings.AllFieldsAreRequired": "All fields are required",
|
||||
"settings.AllLogs": "All Logs",
|
||||
"settings.AllLogsDescription": "View Logs of All Types",
|
||||
"settings.AmoledTheme": "AMOLED Theme",
|
||||
"settings.AmoledThemeBorders": "AMOLED Theme Borders",
|
||||
"settings.AmoledThemeBordersDescription": "Add Subtle Borders Across the UI",
|
||||
@@ -381,25 +407,35 @@
|
||||
"settings.BuildChannels": "Build Channels",
|
||||
"settings.BuildChannelsDescription": "Learn About Additional Build Channels",
|
||||
"settings.CalendarSettings": "Calendar Settings",
|
||||
"settings.CalendarSettingsDescription": "Customize the Unified Calendar",
|
||||
"settings.ChangedProfile": "Changed Profile",
|
||||
"settings.Channel": "Channel",
|
||||
"settings.Class": "Class",
|
||||
"settings.CleanSlate": "Clean Slate",
|
||||
"settings.Clear": "Clear",
|
||||
"settings.ClearConfiguration": "Clear Configuration",
|
||||
"settings.ClearConfigurationHint1": "Are you sure you want to clear your configuration?",
|
||||
"settings.ClearConfigurationHint2": "You will be starting from a clean slate, please ensure you backup your current configuration first!",
|
||||
"settings.ClearConfigurationHint3": "If you are signed into a LunaSea account, you will be signed out.",
|
||||
"settings.ClearImageCache": "Clear Image Cache",
|
||||
"settings.ClearImageCacheDescription": "Clear Images From Persistent Storage",
|
||||
"settings.ClearImageCacheHint1": "Are you sure you want to clear all images from the cache?",
|
||||
"settings.ClearImageCacheHint2": "Redownloading images for a large library can consume a large amount of data.",
|
||||
"settings.ClearImageCacheHint2": "Re-downloading images for a large library can consume a large amount of data.",
|
||||
"settings.ClearLogs": "Clear Logs",
|
||||
"settings.ClearLogsHint1": "Are you sure you want to clear all recorded logs?\n\nLogs can be useful for bug reports and debugging.",
|
||||
"settings.ConfigureModule": "Configure {}",
|
||||
"settings.Configuration": "Configuration",
|
||||
"settings.ConfigurationCleared": "Configuration Cleared",
|
||||
"settings.ConfigurationClearedDescription": "Your configuration has been cleared",
|
||||
"settings.ConfigurationDescription": "Configure & Setup LunaSea",
|
||||
"settings.ConnectedSuccessfully": "Connected",
|
||||
"settings.ConnectedSuccessfullyMessage": "{} is ready to use with LunaSea!",
|
||||
"settings.ConnectionDetails": "Connection Details",
|
||||
"settings.ConnectionDetailsDescription": "Connection Details for {}",
|
||||
"settings.ConnectionTestFailed": "Connection Test Failed",
|
||||
"settings.CopiedURLFor": "Copied URL for {}",
|
||||
"settings.CopiedDeviceURL": "Copied your device-based URL to the clipboard",
|
||||
"settings.CopiedUserURL": "Copied your user-based URL to the clipboard",
|
||||
"settings.CurrentPassword": "Current Password",
|
||||
"settings.Custom": "Custom…",
|
||||
"settings.CustomHeader": "Custom Header",
|
||||
@@ -440,6 +476,7 @@
|
||||
"settings.DeleteModuleSuccess": "Module Deleted",
|
||||
"settings.DeleteProfile": "Delete Profile",
|
||||
"settings.DeleteProfileDescription": "Delete an Existing Profile",
|
||||
"settings.Device": "Device",
|
||||
"settings.DiscordDescription": "Request Features & Get Support",
|
||||
"settings.DismissBanners": "Dismiss Banners",
|
||||
"settings.DismissBannersHint1": "Are you sure you want to dismiss all tooltip banners?",
|
||||
@@ -463,6 +500,12 @@
|
||||
"settings.EnableModule": "Enable {}",
|
||||
"settings.EnabledProfile": "Enabled Profile",
|
||||
"settings.EncryptionKey": "Encryption Key",
|
||||
"settings.Exception": "Exception",
|
||||
"settings.Export": "Export",
|
||||
"settings.ExportedLogs": "Exported Logs",
|
||||
"settings.ExportedLogsMessage": "Logs have been successfully exported",
|
||||
"settings.FailedToClearImageCache": "Failed to Clear Image Cache",
|
||||
"settings.FailedToClearImageCacheDescription": "The image cache could not be cleared",
|
||||
"settings.FailedToDeleteAccount": "Failed to Delete Account",
|
||||
"settings.FailedToUpdateEmail": "Failed to Update Email",
|
||||
"settings.FailedToUpdatePassword": "Failed to Update Password",
|
||||
@@ -471,6 +514,8 @@
|
||||
"settings.FutureDays": "Future Days",
|
||||
"settings.General": "General",
|
||||
"settings.GeneralDescription": "Customize LunaSea",
|
||||
"settings.GettingStarted": "Getting Started",
|
||||
"settings.GettingStartedDescription": "Information & Setup Instructions",
|
||||
"settings.GitHubDescription": "View the Source Code",
|
||||
"settings.HeaderAdded": "Header Added",
|
||||
"settings.HeaderDeleted": "Header Deleted",
|
||||
@@ -491,6 +536,8 @@
|
||||
"settings.ImageBackgroundOpacity": "Image Background Opacity",
|
||||
"settings.ImageBackgroundOpacityHint1": "Set the opacity of background images.",
|
||||
"settings.ImageBackgroundOpacityHint2": "To completely disable fetching background images, set the value to 0.",
|
||||
"settings.ImageCacheCleared": "Image Cache Cleared",
|
||||
"settings.ImageCacheClearedDescription": "The image cache has been cleared",
|
||||
"settings.InvalidEmail": "Invalid Email Address",
|
||||
"settings.InvalidEmailMessage": "The email address is invalid",
|
||||
"settings.InvalidPassword": "Invalid Password",
|
||||
@@ -498,11 +545,16 @@
|
||||
"settings.Language": "Language",
|
||||
"settings.Localization": "Localization",
|
||||
"settings.LocalizationDescription": "Customize to your Locale",
|
||||
"settings.Logs": "Logs",
|
||||
"settings.LogsCleared": "Logs Cleared",
|
||||
"settings.LogsClearedDescription": "All recorded logs have been cleared",
|
||||
"settings.LogsDescription": "View, Export, and Clear Logs",
|
||||
"settings.Method": "Method",
|
||||
"settings.MACAddress": "MAC Address",
|
||||
"settings.MACAddressHint1": "This is the MAC address of the machine that you want to wake up",
|
||||
"settings.MACAddressHint2": "MAC addresses contain six two-digit hexidecimal nibbles (an octet)",
|
||||
"settings.MACAddressHint3": "Hexidecimal digits range from 0-9 and A-F",
|
||||
"settings.MACAddressHint4": "Each hexidecimal octet should be separated by a colon",
|
||||
"settings.MACAddressHint2": "MAC addresses contain six two-digit hexadecimal nibbles (an octet)",
|
||||
"settings.MACAddressHint3": "Hexadecimal digits range from 0-9 and A-F",
|
||||
"settings.MACAddressHint4": "Each hexadecimal octet should be separated by a colon",
|
||||
"settings.MACAddressValidation": "Invalid MAC Address",
|
||||
"settings.MinimumCharacters": "Minimum of {} characters",
|
||||
"settings.ModuleNotFound": "Module Not Found",
|
||||
@@ -510,12 +562,16 @@
|
||||
"settings.Network": "Network",
|
||||
"settings.NetworkDescription": "Customize Network Features",
|
||||
"settings.NewPassword": "New Password",
|
||||
"settings.NotAuthorized": "Not Authorized",
|
||||
"settings.NotAuthorizedMessage": "LunaSea is not authorized to show notifications. Please go to your device's settings to enable notifications.",
|
||||
"settings.NotAvailable": "Not Available",
|
||||
"settings.Notifications": "Notifications",
|
||||
"settings.NotificationsDescription": "Set up Webhooks for Push Notifications",
|
||||
"settings.NoAdditionalProfilesAdded": "No additional profiles have been added",
|
||||
"settings.NoBackupsFound": "No Backups Found",
|
||||
"settings.NoExternalModulesFound": "No External Modules Found",
|
||||
"settings.NoHeadersAdded": "No Headers Added",
|
||||
"settings.NoLogsFound": "No Logs Found",
|
||||
"settings.NoProfilesFound": "No Profiles Found",
|
||||
"settings.OpenDrawerOnBackAction": "Open Drawer on Back Action",
|
||||
"settings.OpenDrawerOnBackActionDescription": "Open the drawer instead of closing LunaSea",
|
||||
@@ -586,6 +642,7 @@
|
||||
"settings.UpToDate": "Up To Date",
|
||||
"settings.Use24HourTime": "Use 24 Hour Time",
|
||||
"settings.Use24HourTimeDescription": "Show Timestamps in 24 Hour Style",
|
||||
"settings.User": "User",
|
||||
"settings.Username": "Username",
|
||||
"settings.UsernameValidation": "Username Required",
|
||||
"settings.Version": "Version",
|
||||
@@ -646,14 +703,17 @@
|
||||
"sonarr.Episode": "Episode",
|
||||
"sonarr.Episodes": "Episodes",
|
||||
"sonarr.EpisodesAvailable": "Episodes Available",
|
||||
"sonarr.EpisodesCount": "{} Episodes",
|
||||
"sonarr.EpisodeFileDeleted": "Episode File Deleted",
|
||||
"sonarr.EpisodeFileRenamed": "Episode File Renamed",
|
||||
"sonarr.EpisodeFilesDeleted": "Episode Files Deleted",
|
||||
"sonarr.EpisodeImported": "Episode Imported ({})",
|
||||
"sonarr.EpisodeNumber": "Episode {}",
|
||||
"sonarr.FailedToAddSeries": "Failed to Add Series",
|
||||
"sonarr.FailedToAddTag": "Failed to Add Tag",
|
||||
"sonarr.FailedToBackupDatabase": "Failed to Backup Database",
|
||||
"sonarr.FailedToDeleteEpisodeFile": "Failed to Delete Episode File",
|
||||
"sonarr.FailedToDeleteEpisodeFiles": "Failed to Delete Episode Files",
|
||||
"sonarr.FailedToDownloadRelease": "Failed to Download Release",
|
||||
"sonarr.FailedToMonitorEpisode": "Failed to Monitor Episode",
|
||||
"sonarr.FailedToMonitorSeason": "Failed to Monitor Season",
|
||||
@@ -662,6 +722,7 @@
|
||||
"sonarr.FailedToRemoveFromQueue": "Failed to Remove From Queue",
|
||||
"sonarr.FailedToRemoveSeries": "Failed to Remove Series",
|
||||
"sonarr.FailedToRunRSSSync": "Failed to Run RSS Sync",
|
||||
"sonarr.FailedToSearchForEpisodes": "Failed to Search for Episodes",
|
||||
"sonarr.FailedToSearchForMonitoredEpisodes": "Failed to Search for Monitored Episodes",
|
||||
"sonarr.FailedToSeasonSearch": "Failed to Season Search",
|
||||
"sonarr.FailedToSearch": "Failed to Search",
|
||||
@@ -706,6 +767,8 @@
|
||||
"sonarr.More": "More",
|
||||
"sonarr.Name": "Name",
|
||||
"sonarr.NoEpisodesFound": "No Episodes Found",
|
||||
"sonarr.NoEpisodeFilesFound": "No Episode Files Found",
|
||||
"sonarr.NoEpisodeFilesFoundDeleteMessage": "No selected episodes have files to delete",
|
||||
"sonarr.NoHistoryFound": "No History Found",
|
||||
"sonarr.NoLongerMonitoring": "No Longer Monitoring",
|
||||
"sonarr.NoMessagesFound": "No Messages Found",
|
||||
@@ -715,6 +778,7 @@
|
||||
"sonarr.NoSeriesFound": "No Series Found",
|
||||
"sonarr.NoSummaryAvailable": "No Summary Available",
|
||||
"sonarr.NoTagsFound": "No Tags Found",
|
||||
"sonarr.OneEpisode": "1 Episode",
|
||||
"sonarr.OneSeason": "1 Season",
|
||||
"sonarr.Other": "Other",
|
||||
"sonarr.Overview": "Overview",
|
||||
@@ -728,6 +792,7 @@
|
||||
"sonarr.Queue": "Queue",
|
||||
"sonarr.Queued": "Queued",
|
||||
"sonarr.QueueDescription": "View Active & Queued Content",
|
||||
"sonarr.QueueSize": "Queue Size",
|
||||
"sonarr.Reason": "Reason",
|
||||
"sonarr.RefreshSeries": "Refresh Series",
|
||||
"sonarr.Rejected": "Rejected",
|
||||
@@ -750,6 +815,7 @@
|
||||
"sonarr.Search": "Search",
|
||||
"sonarr.Searching": "Searching{}",
|
||||
"sonarr.SearchingForEpisode": "Searching for Episode…",
|
||||
"sonarr.SearchingForEpisodes": "Searching for Episodes…",
|
||||
"sonarr.SearchingForSeason": "Searching for Season…",
|
||||
"sonarr.SearchingForMonitoredEpisodes": "Searching for Monitored Episodes…",
|
||||
"sonarr.SearchingDescription": "Searching for all missing episodes",
|
||||
@@ -807,6 +873,7 @@
|
||||
"sonarr.WordScore": "Word Score",
|
||||
"tautulli.Activity": "Activity",
|
||||
"tautulli.ActivityDetails": "Activity Details",
|
||||
"tautulli.ActivityRefreshRate": "Activity Refresh Rate",
|
||||
"tautulli.Audio": "Audio",
|
||||
"tautulli.BackingUpConfiguration": "Backing Up Configuration…",
|
||||
"tautulli.BackingUpConfigurationDescription": "Backing up your configuration in the background",
|
||||
@@ -821,6 +888,7 @@
|
||||
"tautulli.Converting": "Converting",
|
||||
"tautulli.Container": "Container",
|
||||
"tautulli.Copy": "Copy",
|
||||
"tautulli.DefaultTerminationMessage": "Default Termination Message",
|
||||
"tautulli.DeleteCache": "Delete Cache",
|
||||
"tautulli.DeleteImageCache": "Delete Image Cache",
|
||||
"tautulli.DeleteTemporarySessions": "Delete Temporary Sessions",
|
||||
@@ -840,9 +908,12 @@
|
||||
"tautulli.Duration": "Duration",
|
||||
"tautulli.Episode": "Episode {}",
|
||||
"tautulli.ETA": "ETA",
|
||||
"tautulli.Graphs": "Graphs",
|
||||
"tautulli.History": "History",
|
||||
"tautulli.Library": "Library",
|
||||
"tautulli.LibraryDetails": "Library Details",
|
||||
"tautulli.Location": "Location",
|
||||
"tautulli.MediaDetails": "Media Details",
|
||||
"tautulli.Metadata": "Metadata",
|
||||
"tautulli.More": "More",
|
||||
"tautulli.None": "None",
|
||||
@@ -857,6 +928,8 @@
|
||||
"tautulli.SessionsOne": "1 Session",
|
||||
"tautulli.SessionsMany": "{} Sessions",
|
||||
"tautulli.Speed": "Speed: {}x",
|
||||
"tautulli.Statistics": "Statistics",
|
||||
"tautulli.StatisticsItemCount": "Statistics Item Count",
|
||||
"tautulli.Stream": "Stream",
|
||||
"tautulli.Subtitle": "Subtitle",
|
||||
"tautulli.Terminate": "Terminate",
|
||||
@@ -872,6 +945,7 @@
|
||||
"tautulli.Transcodes": "Transcodes",
|
||||
"tautulli.User": "User",
|
||||
"tautulli.Users": "Users",
|
||||
"tautulli.UserDetails": "User Details",
|
||||
"tautulli.Video": "Video",
|
||||
"tautulli.ViewWebGUI": "View Web GUI",
|
||||
"tautulli.Year": "Year",
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
"lunasea.DownloadClient": "Client de téléchargement",
|
||||
"lunasea.Edge": "Limite",
|
||||
"lunasea.Error": "Erreur",
|
||||
"lunasea.EverySecond": "Chaque seconde",
|
||||
"lunasea.EverySeconds": "Toutes les {} secondes",
|
||||
"lunasea.ExternalModules": "Modules externes",
|
||||
"lunasea.Features": "Fonctionnalités",
|
||||
"lunasea.Fixes": "Corrections",
|
||||
@@ -70,6 +72,7 @@
|
||||
"lunasea.IncorrectEncryptionKey": "Clé de chiffrement incorrecte",
|
||||
"lunasea.Internal": "Interne",
|
||||
"lunasea.InvalidFileTypeSelected": "Type de fichier sélectionné invalide",
|
||||
"lunasea.Items": "{} article",
|
||||
"lunasea.JustNow": "À l'instant",
|
||||
"lunasea.Minutes": "{} Minutes",
|
||||
"lunasea.MinutesAgo": "Il y a {} minutes",
|
||||
@@ -85,6 +88,7 @@
|
||||
"lunasea.OneDayAgo": "Il y a 1 jour",
|
||||
"lunasea.OneHour": "1 Heure",
|
||||
"lunasea.OneHourAgo": "Il y a 1 heure",
|
||||
"lunasea.OneItem": "1 article",
|
||||
"lunasea.OneMinute": "1 Minute",
|
||||
"lunasea.OneMinuteAgo": "Il y a 1 minute",
|
||||
"lunasea.OneMonth": "1 mois",
|
||||
@@ -101,7 +105,7 @@
|
||||
"lunasea.Production": "Production",
|
||||
"lunasea.Refresh": "Actualiser",
|
||||
"lunasea.Refreshing": "Actualisation…",
|
||||
"lunasea.Remove": "Supprimer",
|
||||
"lunasea.Remove": "Retirer",
|
||||
"lunasea.Rename": "Renommer",
|
||||
"lunasea.Restore": "Restaurer",
|
||||
"lunasea.Retry": "Réessayer",
|
||||
@@ -113,6 +117,8 @@
|
||||
"lunasea.Settings": "Réglages",
|
||||
"lunasea.Stable": "Stable",
|
||||
"lunasea.StartingView": "Page d'accueil",
|
||||
"lunasea.ThankYou": "Merci",
|
||||
"lunasea.ThankYouMessage": "Merci de soutenir la communauté open-source !",
|
||||
"lunasea.Today": "Aujourd'hui",
|
||||
"lunasea.TransactionFailure": "Transaction échouée",
|
||||
"lunasea.TryAgain": "Réessayer",
|
||||
@@ -181,6 +187,8 @@
|
||||
"radarr.DigitalRelease": "Sortie numérique",
|
||||
"radarr.DirectoryNotFound": "Répertoire non trouvé",
|
||||
"radarr.Discover": "Découvrir",
|
||||
"radarr.DiscoverSuggestions": "Découvertes suggérées",
|
||||
"radarr.DiscoverSuggestionsDescription": "Ajouter les sorties suggérées dans découvertes",
|
||||
"radarr.Disks": "Disques",
|
||||
"radarr.DownloadFailed": "Échec du téléchargement",
|
||||
"radarr.DownloadIgnored": "Téléchargement ignoré",
|
||||
@@ -215,6 +223,7 @@
|
||||
"radarr.MoveFilesDescription": "Voulez-vous déplacer les fichiers ?",
|
||||
"radarr.MoveFull": "Déplacer les fichiers",
|
||||
"radarr.Movie": "Film",
|
||||
"radarr.MovieDetails": "Détails du film",
|
||||
"radarr.MovieFileDeleted": "Fichier vidéo supprimé",
|
||||
"radarr.MovieFileRenamed": "Fichier vidéo renommé",
|
||||
"radarr.MovieImported": "Film importé ({})",
|
||||
@@ -237,6 +246,7 @@
|
||||
"radarr.QualityProfile": "Profil de qualité",
|
||||
"radarr.Queue": "File d'attente",
|
||||
"radarr.QueueDescription": "Voir le contenu actif et en attente",
|
||||
"radarr.QueueSize": "Taille de la file d'attente",
|
||||
"radarr.Quick": "Rapide",
|
||||
"radarr.RefreshMovie": "Rafraichir le film",
|
||||
"radarr.Rejected": "Rejeté",
|
||||
@@ -327,6 +337,20 @@
|
||||
"search.Alphabetical": "Alphabétique",
|
||||
"search.AllSubcategories": "Toutes les sous-catégories",
|
||||
"search.Age": "Âge",
|
||||
"search.AddIndexer": "Ajouter un indexeur",
|
||||
"search.HideAdultCategories": "Masquer les catégories adultes",
|
||||
"search.ShowLinks": "Afficher les liens",
|
||||
"search.FailedToAddIndexer": "Échec de l'ajout de l'indexeur",
|
||||
"search.IndexerDeleted": "Indexeur supprimé",
|
||||
"search.DeleteIndexer": "Supprimer l'indexeur",
|
||||
"search.EditIndexer": "Modifier l'indexeur",
|
||||
"search.HideAdultCategoriesDescription": "Masquer le contenu pour adultes",
|
||||
"search.IndexerAdded": "Indexeur ajouté",
|
||||
"search.IndexerNotFound": "Indexeur introuvable",
|
||||
"search.NoIndexersFound": "Aucun indexeur trouvé",
|
||||
"search.IndexerAPIHost": "API Host de l’Indexer",
|
||||
"search.IndexerAPIKey": "Clé API de l’Indexer",
|
||||
"search.ShowLinksDescription": "Afficher les liens de téléchargements et commentaires",
|
||||
"settings.MustBeValueBetween": "Doit être une valeur entre {} et {}",
|
||||
"settings.UsernameValidation": "Nom d'utilisateur requis",
|
||||
"settings.Username": "Nom d'utilisateur",
|
||||
@@ -522,7 +546,7 @@
|
||||
"settings.SortDirection": "Direction du tri",
|
||||
"settings.ClearImageCache": "Effacer le cache d'image",
|
||||
"settings.ClearImageCacheHint1": "Êtes-vous sûr(e) de vouloir effacer toutes les images du cache ?",
|
||||
"settings.ClearImageCacheHint2": "Le retéléchargement d'images pour une grande bibliothèque peut consommer une grande quantité de données.",
|
||||
"settings.ClearImageCacheHint2": "Le re-téléchargement d'images pour une grande bibliothèque peut consommer une grande quantité de données.",
|
||||
"settings.Network": "Réseau",
|
||||
"settings.NetworkDescription": "Personnaliser les fonctionnalités du réseau",
|
||||
"settings.TLSCertificateValidation": "Validation du certificat TLS",
|
||||
@@ -596,6 +620,39 @@
|
||||
"settings.BootModule": "Module de démarrage",
|
||||
"settings.General": "Général",
|
||||
"settings.GeneralDescription": "Personnaliser LunsaSea",
|
||||
"settings.ExportedLogsMessage": "Les journaux (logs) ont été exportés avec succès",
|
||||
"settings.ImageCacheCleared": "Image cache effacée",
|
||||
"settings.NotAuthorizedMessage": "LunaSea n’est pas autorisé à afficher les notifications. Merci d’aller dans les réglages de votre appareil pour activer les notifications.",
|
||||
"settings.User": "Utilisateur",
|
||||
"settings.Logs": "Journaux (logs)",
|
||||
"settings.LogsDescription": "Voir, exporter et effacer les journaux (logs)",
|
||||
"settings.AllLogs": "Tous les journaux",
|
||||
"settings.AllLogsDescription": "Voir tous les types de journaux",
|
||||
"settings.CalendarSettingsDescription": "Personnaliser le calendrier commun",
|
||||
"settings.Class": "Classe",
|
||||
"settings.CleanSlate": "Repartir à zéro",
|
||||
"settings.Clear": "Effacer",
|
||||
"settings.ClearImageCacheDescription": "Effacer les images de la mémoire permanente",
|
||||
"settings.ConfigurationCleared": "Configuration annulée",
|
||||
"settings.ConfigurationClearedDescription": "Votre configuration a été effacée",
|
||||
"settings.CopiedURLFor": "Copier le lien pour {}",
|
||||
"settings.CopiedDeviceURL": "Copier le lien de votre appareil dans le presse-papiers",
|
||||
"settings.CopiedUserURL": "Copier votre lien utilisateur dans le presse-papiers",
|
||||
"settings.Device": "Appareil",
|
||||
"settings.Exception": "Exception",
|
||||
"settings.Export": "Exporter",
|
||||
"settings.ExportedLogs": "Journaux (logs) exportés",
|
||||
"settings.FailedToClearImageCache": "Impossible d’effacer l’image cache",
|
||||
"settings.FailedToClearImageCacheDescription": "L’image cache n’a pas pu être effacé",
|
||||
"settings.GettingStarted": "Débuter",
|
||||
"settings.GettingStartedDescription": "Information & instruction de configuration",
|
||||
"settings.ImageCacheClearedDescription": "L’image cache a été effacée",
|
||||
"settings.LogsCleared": "Journaux (logs) effacés",
|
||||
"settings.LogsClearedDescription": "L’ensemble des journaux (logs) ont été effacés",
|
||||
"settings.Method": "Méthode",
|
||||
"settings.NotAuthorized": "Non autorisé",
|
||||
"settings.NotAvailable": "Non disponible",
|
||||
"settings.NoLogsFound": "Aucun journaux (logs) trouvés",
|
||||
"sonarr.AddedOn": "Ajouté le",
|
||||
"sonarr.AddedSeries": "Série ajoutée",
|
||||
"sonarr.AddedTag": "Étiquette ajoutée",
|
||||
@@ -709,7 +766,7 @@
|
||||
"sonarr.FailedToUpdateLibrary": "Échec de la mise à jour de la bibliothèque",
|
||||
"sonarr.FailedToUpdateSeries": "Échec de la mise à jour des séries",
|
||||
"sonarr.FilterCatalogue": "Trier le catalogue",
|
||||
"sonarr.FilterReleases": "Trier les versions",
|
||||
"sonarr.FilterReleases": "Filtrer les versions",
|
||||
"sonarr.GrabbedFrom": "Récupéré depuis {}",
|
||||
"sonarr.HistoryDescription": "Afficher les activités récentes",
|
||||
"sonarr.InfoURL": "Infos de l'URL",
|
||||
@@ -807,14 +864,23 @@
|
||||
"sonarr.SearchingForMonitoredEpisodes": "Recherche d'épisodes suivis…",
|
||||
"sonarr.SearchMonitored": "Rechercher des suivis",
|
||||
"sonarr.FailedToSearchForMonitoredEpisodes": "Échec de la recherche des épisodes suivis",
|
||||
"sonarr.EpisodesCount": "{} épisodes",
|
||||
"sonarr.EpisodeFilesDeleted": "Fichiers d'épisodes supprimés",
|
||||
"sonarr.FailedToDeleteEpisodeFiles": "Échec de la suppression des fichiers d'épisode",
|
||||
"sonarr.FailedToSearchForEpisodes": "Échec de la recherche d'épisodes",
|
||||
"sonarr.NoEpisodeFilesFound": "Aucun fichier d'épisode trouvé",
|
||||
"sonarr.NoEpisodeFilesFoundDeleteMessage": "Aucun épisode sélectionné n'a de fichiers à supprimer",
|
||||
"sonarr.OneEpisode": "1 épisode",
|
||||
"sonarr.SearchingForEpisodes": "Recherche d'épisodes…",
|
||||
"sonarr.QueueSize": "Taille de la file d’attente",
|
||||
"tautulli.Burn": "Graver",
|
||||
"tautulli.Year": "Année",
|
||||
"tautulli.ViewWebGUI": "Afficher l'interface Web",
|
||||
"tautulli.Video": "Vidéo",
|
||||
"tautulli.Users": "Utilisateurs",
|
||||
"tautulli.User": "Utilisateur",
|
||||
"tautulli.Transcodes": "Conversions",
|
||||
"tautulli.Transcode": "Conversion",
|
||||
"tautulli.Transcodes": "Transcodés",
|
||||
"tautulli.Transcode": "Transcoder",
|
||||
"tautulli.Title": "Titre",
|
||||
"tautulli.Throttled": "Limité",
|
||||
"tautulli.TerminateSessionFailed": "Échec de la fin de la session",
|
||||
@@ -829,7 +895,7 @@
|
||||
"tautulli.SessionsMany": "{} Sessions",
|
||||
"tautulli.SessionsOne": "1 session",
|
||||
"tautulli.Sessions": "Sessions",
|
||||
"tautulli.SessionEnded": "Session terminée",
|
||||
"tautulli.SessionEnded": "Session cloturée",
|
||||
"tautulli.Season": "Saison {}",
|
||||
"tautulli.Quality": "Qualité",
|
||||
"tautulli.Product": "Produit",
|
||||
@@ -839,10 +905,10 @@
|
||||
"tautulli.None": "Aucun",
|
||||
"tautulli.More": "Plus",
|
||||
"tautulli.Metadata": "Métadonnées",
|
||||
"tautulli.Location": "Localisation",
|
||||
"tautulli.Location": "Emplacement",
|
||||
"tautulli.Library": "Bibliothèque",
|
||||
"tautulli.History": "Historique",
|
||||
"tautulli.ETA": "Temps restant",
|
||||
"tautulli.ETA": "Heure d'arrivée estimée",
|
||||
"tautulli.Episode": "Épisode {}",
|
||||
"tautulli.Duration": "Durée",
|
||||
"tautulli.DirectStreams": "Flux directs",
|
||||
@@ -877,6 +943,14 @@
|
||||
"tautulli.Activity": "Activité",
|
||||
"tautulli.Speed": "Vitesse : x{}",
|
||||
"tautulli.Converting": "Conversion",
|
||||
"tautulli.Statistics": "Statistiques",
|
||||
"tautulli.MediaDetails": "Détails des médias",
|
||||
"tautulli.UserDetails": "Détails de l'utilisateur",
|
||||
"tautulli.ActivityRefreshRate": "Temps d’actualisation de l’activité",
|
||||
"tautulli.DefaultTerminationMessage": "Message de clôture par défaut",
|
||||
"tautulli.Graphs": "Graphiques",
|
||||
"tautulli.LibraryDetails": "Détails de la librairie",
|
||||
"tautulli.StatisticsItemCount": "Nombre d’éléments statistiques",
|
||||
"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"
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
"lunasea.Edge": "Edge",
|
||||
"lunasea.Error": "Erro",
|
||||
"lunasea.ExternalModules": "Módulos Externos",
|
||||
"lunasea.Features": "Recursos",
|
||||
"lunasea.Fixes": "Correções",
|
||||
"lunasea.FullChangelog": "Registro de alterações completo",
|
||||
"lunasea.GoBack": "Voltar",
|
||||
"lunasea.GoToSettings": "Ir para as Definições",
|
||||
@@ -62,6 +64,7 @@
|
||||
"lunasea.IncorrectEncryptionKey": "Chave de encriptação incorreta",
|
||||
"lunasea.Internal": "Interno",
|
||||
"lunasea.InvalidFileTypeSelected": "Tipo de arquivo selecionado inválido",
|
||||
"lunasea.Items": "{} Itens",
|
||||
"lunasea.JustNow": "Agora mesmo",
|
||||
"lunasea.Minutes": "{} Minutos",
|
||||
"lunasea.MinutesAgo": "{} Minutos atrás",
|
||||
@@ -70,12 +73,14 @@
|
||||
"lunasea.Months": "{} Meses",
|
||||
"lunasea.MonthsAgo": "{} Meses atrás",
|
||||
"lunasea.New": "Novo",
|
||||
"lunasea.No": "Não",
|
||||
"lunasea.NoModulesEnabled": "Nenhum Módulo Ativado",
|
||||
"lunasea.NotSet": "Não Definido",
|
||||
"lunasea.OneDay": "1 Dia",
|
||||
"lunasea.OneDayAgo": "1 Dia atrás",
|
||||
"lunasea.OneHour": "1 Hora",
|
||||
"lunasea.OneHourAgo": "1 Hora atrás",
|
||||
"lunasea.OneItem": "1 Item",
|
||||
"lunasea.OneMinute": "1 Minuto",
|
||||
"lunasea.OneMinuteAgo": "1 Minuto atrás",
|
||||
"lunasea.OneMonth": "1 Mês",
|
||||
@@ -85,6 +90,7 @@
|
||||
"lunasea.OneYear": "1 Ano",
|
||||
"lunasea.OneYearAgo": "1 Ano atrás",
|
||||
"lunasea.Options": "Opções",
|
||||
"lunasea.Other": "Outro",
|
||||
"lunasea.Page": "Página",
|
||||
"lunasea.PlatformSpecific": "Específico da plataforma",
|
||||
"lunasea.PleaseTryAgain": "Por favor, tente novamente",
|
||||
@@ -102,6 +108,7 @@
|
||||
"lunasea.Set": "Definir",
|
||||
"lunasea.Settings": "Definições",
|
||||
"lunasea.Stable": "Estável",
|
||||
"lunasea.ThankYou": "Obrigado",
|
||||
"lunasea.Today": "Hoje",
|
||||
"lunasea.TransactionFailure": "Falha na transação",
|
||||
"lunasea.TryAgain": "Tente novamente",
|
||||
@@ -117,6 +124,7 @@
|
||||
"lunasea.Website": "Website",
|
||||
"lunasea.Years": "{} Anos",
|
||||
"lunasea.YearsAgo": "{} Anos atrás",
|
||||
"lunasea.Yes": "Sim",
|
||||
"overseerr.NoRequestsFound": "Nenhum Pedido Encontrado",
|
||||
"overseerr.Requests": "Pedidos",
|
||||
"overseerr.NoUsersFound": "Nenhum Usuário Encontrado",
|
||||
@@ -477,6 +485,15 @@
|
||||
"settings.TLSCertificateValidationDescription": "Validar certificados em conexões TLS",
|
||||
"settings.UpdateEmail": "Atualizar e-mail",
|
||||
"settings.UpdatePassword": "Atualizar senha",
|
||||
"settings.Clear": "Limpar",
|
||||
"settings.Device": "Dispositivo",
|
||||
"settings.Export": "Exportar",
|
||||
"settings.General": "Geral",
|
||||
"settings.NotAuthorized": "Não Autorizado",
|
||||
"settings.NotAvailable": "Não Disponível",
|
||||
"settings.User": "Usuário",
|
||||
"settings.AllLogs": "Todos os Registros",
|
||||
"settings.GeneralDescription": "Customizar LunaSea",
|
||||
"sonarr.AddedTag": "Tag Adicionada",
|
||||
"sonarr.AddSeries": "Adicionar Série",
|
||||
"sonarr.DeleteFile": "Apagar Ficheiro",
|
||||
|
||||
132
assets/localization/sk.json
Normal file
132
assets/localization/sk.json
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"dashboard.Calendar": "Kalendár",
|
||||
"dashboard.Friday": "Piatok",
|
||||
"dashboard.MinimumOfOneDay": "Minimálne 1 deň",
|
||||
"dashboard.Modules": "Moduly",
|
||||
"dashboard.Monday": "Pondelok",
|
||||
"dashboard.OneMonth": "Jeden mesiac",
|
||||
"dashboard.OneWeek": "Jeden týždeň",
|
||||
"dashboard.PastDays": "Uplynulé dni",
|
||||
"dashboard.PastDaysDescription": "Vyberte počet dní v minulosti, pre ktoré sa majú načítať záznamy z kalendára.",
|
||||
"dashboard.Saturday": "Sobota",
|
||||
"dashboard.Schedule": "Prehľad",
|
||||
"dashboard.Sunday": "Nedeľa",
|
||||
"dashboard.FutureDaysDescription": "Vyberte počet dní v budúcnosti, pre ktoré sa majú načítať záznamy z kalendára.",
|
||||
"dashboard.TwoWeeks": "Dva týždne",
|
||||
"dashboard.Wednesday": "Streda",
|
||||
"dashboard.FutureDays": "Budúce dni",
|
||||
"dashboard.Tuesday": "Utorok",
|
||||
"dashboard.NoNewContent": "Žiadny nový obsah",
|
||||
"dashboard.Thursday": "Štvrtok",
|
||||
"lidarr.StartSearchFor": "Začnite hľadať…",
|
||||
"lidarr.StartSearchForMissingAlbums": "Začnite hľadať chýbajúce albumy",
|
||||
"overseerr.Approved": "Schválené",
|
||||
"overseerr.Issues": "Problémy",
|
||||
"overseerr.NoIssues": "Žiadne problémy",
|
||||
"overseerr.NoIssuesFound": "Nenašli sa žiadne problémy",
|
||||
"overseerr.NoRequests": "Žiadne požiadavky",
|
||||
"overseerr.NoRequestsFound": "Nenašli sa žiadne požiadavky",
|
||||
"overseerr.OneRequest": "1 požiadavka",
|
||||
"overseerr.Open": "Otvorené",
|
||||
"overseerr.Other": "Iné",
|
||||
"overseerr.PartiallyAvailable": "Čiastočne dostupné",
|
||||
"overseerr.Pending": "Čakajúce",
|
||||
"overseerr.SomeRequests": "Požiadavky",
|
||||
"overseerr.Resolved": "Vyriešené",
|
||||
"overseerr.RequestedBy": "Vyžiadané {}",
|
||||
"overseerr.Requests": "Požiadavky",
|
||||
"overseerr.Subtitle": "Titulky",
|
||||
"overseerr.Users": "Používatelia",
|
||||
"overseerr.Video": "Video",
|
||||
"overseerr.Requested": "Vyžiadané",
|
||||
"overseerr.Declined": "Zamietnuté",
|
||||
"overseerr.OpenedBy": "Otvorené",
|
||||
"overseerr.Audio": "Audio",
|
||||
"overseerr.Processing": "Spracovávané",
|
||||
"overseerr.Available": "Dostupné",
|
||||
"overseerr.NoUsersFound": "Žiadni nájdení používatelia",
|
||||
"overseerr.UnknownUser": "Neznámy používateľ",
|
||||
"sabnzbd.All": "Všetky",
|
||||
"sabnzbd.Ascending": "Vzostupne",
|
||||
"sabnzbd.CategoryDefault": "Predvolená kategória",
|
||||
"sabnzbd.Completed": "Dokončené",
|
||||
"sabnzbd.Descending": "Zostupne",
|
||||
"sabnzbd.Duplicate": "Duplikát",
|
||||
"sabnzbd.Force": "Vynútiť",
|
||||
"sabnzbd.High": "Vysoká",
|
||||
"sabnzbd.Name": "Názov",
|
||||
"sabnzbd.Normal": "Normálna",
|
||||
"sabnzbd.Repair": "Opraviť",
|
||||
"sabnzbd.RepairUnpackDelete": "Opraviť/rozbaliť/vymazať",
|
||||
"sabnzbd.Size": "Veľkosť",
|
||||
"sabnzbd.StandbyPC": "Pohotovostný režim PC",
|
||||
"sabnzbd.Stop": "Stop",
|
||||
"sabnzbd.RepairUnpack": "Opraviť/rozbaliť",
|
||||
"sabnzbd.Low": "Nízka",
|
||||
"sabnzbd.None": "Žiadne",
|
||||
"sabnzbd.Age": "Vek",
|
||||
"sabnzbd.Failed": "Neúspešné",
|
||||
"sabnzbd.HibernatePC": "Hibernovať PC",
|
||||
"sabnzbd.Paused": "Pozastavené",
|
||||
"sabnzbd.ShutdownPC": "Vypnúť PC",
|
||||
"sabnzbd.ShutdownSABnzbd": "Vypnúť SABnzbd",
|
||||
"search.AllSubcategories": "Všetky podkategórie",
|
||||
"search.Category": "Kategória",
|
||||
"search.Download": "Stiahnuť",
|
||||
"search.Downloading": "Sťahovanie…",
|
||||
"search.DownloadingNZBToDevice": "Sťahuje sa NZB do zariadenia",
|
||||
"search.DownloadToDevice": "Stiahnuť do zariadenia",
|
||||
"search.FailedToDownloadNZB": "Nepodarilo sa stiahnuť NZB",
|
||||
"search.FailedToSend": "Nepodarilo sa odoslať",
|
||||
"search.NoSubcategoriesFound": "Nenašli sa žiadne podkategórie",
|
||||
"search.Results": "Výsledky",
|
||||
"search.Search": "Vyhľadávanie",
|
||||
"search.SentTo": "Odoslané {}",
|
||||
"search.Size": "Veľkosť",
|
||||
"search.Subcategories": "Podkategórie",
|
||||
"search.Age": "Vek",
|
||||
"search.Alphabetical": "Abecedné",
|
||||
"search.Categories": "Kategórie",
|
||||
"search.Comments": "Komentáre",
|
||||
"search.NoCategoriesFound": "Nenašli sa žiadne kategórie",
|
||||
"search.NoResultsFound": "Nenašli sa žiadne výsledky",
|
||||
"search.SentNZBData": "Odoslané NZB údaje",
|
||||
"settings.Account": "Účet",
|
||||
"settings.AccountDeleted": "Účet zmazaný",
|
||||
"settings.AccountDescription": "Váš účet LunaSea",
|
||||
"settings.AccountHelp": "Účet LunaSea",
|
||||
"settings.AccountSettings": "Nastavenia účtu",
|
||||
"settings.Add": "Pridať",
|
||||
"settings.AddHeader": "Pridať hlavičku",
|
||||
"settings.AddProfile": "Pridať profil",
|
||||
"settings.AddProfileDescription": "Pridať nový profil",
|
||||
"settings.AmoledTheme": "AMOLED téma",
|
||||
"settings.AmoledThemeBorders": "AMOLED Okraje témy",
|
||||
"settings.AmoledThemeBordersDescription": "Pridanie jemných hraníc v celom UI",
|
||||
"settings.ApiKey": "API kľúč",
|
||||
"settings.ApiKeyRequiredMessage": "API kľúč je potrebný na pripojenie k {}",
|
||||
"settings.AccountDeletedMessage": "Odstránený účet LunaSea",
|
||||
"settings.AccountHelpHint1": "LunaSea ponúka bezplatný účet na zálohovanie vašej konfigurácie do cloudu, pričom v budúcnosti pribudnú ďalšie funkcie!",
|
||||
"settings.AddModule": "Pridať modul",
|
||||
"settings.AddModuleFailed": "Nepodarilo sa pridať modul",
|
||||
"settings.AddModuleSuccess": "Modul pridaný",
|
||||
"settings.AddedProfile": "Pridaný profil",
|
||||
"settings.AllFieldsAreRequired": "Všetky polia sú povinné",
|
||||
"settings.AmoledThemeDescription": "Čisto čierna tmavá téma",
|
||||
"settings.ApiKeyRequired": "API kľúč požadovaný",
|
||||
"settings.AppearanceDescription": "Prispôsobenie vzhľadu a funkcií",
|
||||
"settings.Appearance": "Vzhľad",
|
||||
"tautulli.ActivityDetails": "Podrobnosti o aktivite",
|
||||
"tautulli.BackingUpConfiguration": "Zálohovanie konfigurácie…",
|
||||
"tautulli.BackingUpConfigurationDescription": "Zálohovanie konfigurácie na pozadí",
|
||||
"tautulli.BackingUpConfigurationFailed": "Zlyhalo zálohovanie konfigurácie",
|
||||
"tautulli.BackingUpDatabaseFailed": "Zlyhalo zálohovanie databázy",
|
||||
"tautulli.BackupConfiguration": "Konfigurácia zálohovania",
|
||||
"tautulli.Activity": "Aktivita",
|
||||
"tautulli.Audio": "Audio",
|
||||
"tautulli.BackingUpDatabase": "Zálohovanie databázy…",
|
||||
"tautulli.BackingUpDatabaseDescription": "Zálohovanie databázy na pozadí",
|
||||
"wake_on_lan.MagicPacketSent": "Odoslaný magický balík",
|
||||
"wake_on_lan.MagicPacketFailedToSend": "Nepodarilo sa odoslať magický balík",
|
||||
"wake_on_lan.MagicPacketSentMessage": "Váš počítač by sa mal prebúdzať!"
|
||||
}
|
||||
@@ -57,6 +57,8 @@
|
||||
"lunasea.DownloadClient": "İstemciyi İndir",
|
||||
"lunasea.Edge": "Kenar",
|
||||
"lunasea.Error": "Hata",
|
||||
"lunasea.EverySecond": "Her Saniye",
|
||||
"lunasea.EverySeconds": "Her {} Saniyede Bir",
|
||||
"lunasea.ExternalModules": "Harici Modüller",
|
||||
"lunasea.Features": "Özellikler",
|
||||
"lunasea.Fixes": "Düzeltmeler",
|
||||
@@ -70,6 +72,7 @@
|
||||
"lunasea.IncorrectEncryptionKey": "Yanlış şifreleme anahtarı",
|
||||
"lunasea.Internal": "Dahili",
|
||||
"lunasea.InvalidFileTypeSelected": "Geçersiz Dosya Türü Seçildi",
|
||||
"lunasea.Items": "{} Öge",
|
||||
"lunasea.JustNow": "Az Önce",
|
||||
"lunasea.Minutes": "{} Dakika",
|
||||
"lunasea.MinutesAgo": "{} Dakika Önce",
|
||||
@@ -85,6 +88,7 @@
|
||||
"lunasea.OneDayAgo": "1 Gün Önce",
|
||||
"lunasea.OneHour": "1 Saat",
|
||||
"lunasea.OneHourAgo": "1 Saat Önce",
|
||||
"lunasea.OneItem": "1 Öge",
|
||||
"lunasea.OneMinute": "1 Dakika",
|
||||
"lunasea.OneMinuteAgo": "1 Dakika Önce",
|
||||
"lunasea.OneMonth": "1 Ay",
|
||||
@@ -113,6 +117,8 @@
|
||||
"lunasea.Settings": "Ayarlar",
|
||||
"lunasea.Stable": "Kararlı",
|
||||
"lunasea.StartingView": "Başlangıç Görünümü",
|
||||
"lunasea.ThankYou": "Teşekkürler",
|
||||
"lunasea.ThankYouMessage": "Açık kaynak topluluğunu desteklediğiniz için teşekkür ederiz!",
|
||||
"lunasea.Today": "Bugün",
|
||||
"lunasea.TransactionFailure": "İşlem Hatası",
|
||||
"lunasea.TryAgain": "Tekrar Deneyin",
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
"lunasea.DownloadClient": "下载客户端",
|
||||
"lunasea.Edge": "边缘",
|
||||
"lunasea.Error": "错误",
|
||||
"lunasea.EverySecond": "每一秒",
|
||||
"lunasea.EverySeconds": "每{}秒",
|
||||
"lunasea.ExternalModules": "外部模块",
|
||||
"lunasea.Features": "特征",
|
||||
"lunasea.Fixes": "修复",
|
||||
@@ -70,6 +72,7 @@
|
||||
"lunasea.IncorrectEncryptionKey": "不正确的加密密匙",
|
||||
"lunasea.Internal": "内部的",
|
||||
"lunasea.InvalidFileTypeSelected": "不正确的文件类型",
|
||||
"lunasea.Items": "{}项目",
|
||||
"lunasea.JustNow": "刚才",
|
||||
"lunasea.Minutes": "{} 分钟",
|
||||
"lunasea.MinutesAgo": "{} 几分钟前",
|
||||
@@ -181,6 +184,8 @@
|
||||
"radarr.DigitalRelease": "数字发行",
|
||||
"radarr.DirectoryNotFound": "找不到目录",
|
||||
"radarr.Discover": "发现",
|
||||
"radarr.DiscoverSuggestions": "发现建议",
|
||||
"radarr.DiscoverSuggestionsDescription": "在发现中添加建议的版本",
|
||||
"radarr.Disks": "磁盘",
|
||||
"radarr.DownloadFailed": "下载失败",
|
||||
"radarr.DownloadIgnored": "下载被忽略",
|
||||
@@ -327,6 +332,20 @@
|
||||
"search.Subcategories": "子类别",
|
||||
"search.Age": "年龄",
|
||||
"search.Download": "下载",
|
||||
"search.AddIndexer": "添加索引器",
|
||||
"search.FailedToAddIndexer": "添加索引器失败",
|
||||
"search.HideAdultCategories": "隐藏成人类别",
|
||||
"search.DeleteIndexer": "删除索引器",
|
||||
"search.EditIndexer": "编辑索引器",
|
||||
"search.IndexerDeleted": "索引器已删除",
|
||||
"search.IndexerAdded": "添加索引器",
|
||||
"search.IndexerNotFound": "未找到索引器",
|
||||
"search.ShowLinks": "显示链接",
|
||||
"search.ShowLinksDescription": "显示下载和评论链接",
|
||||
"search.NoIndexersFound": "未找到索引器",
|
||||
"search.HideAdultCategoriesDescription": "隐藏成人内容",
|
||||
"search.IndexerAPIHost": "索引器API主机",
|
||||
"search.IndexerAPIKey": "索引器API键",
|
||||
"settings.AccountDescription": "账户描述",
|
||||
"settings.AccountHelp": "账户帮助",
|
||||
"settings.AddModule": "添加模块",
|
||||
@@ -596,6 +615,10 @@
|
||||
"settings.BootModule": "启动模块",
|
||||
"settings.OpenDrawerOnBackAction": "从背面打开抽屉",
|
||||
"settings.OpenDrawerOnBackActionDescription": "打开抽屉而不关闭LunaSea",
|
||||
"settings.AllLogs": "所有日志",
|
||||
"settings.AllLogsDescription": "查看所有类型的日志",
|
||||
"settings.CalendarSettingsDescription": "自定义统一日历",
|
||||
"settings.Class": "分类",
|
||||
"sonarr.AddSeries": "添加系列",
|
||||
"sonarr.AddedOn": "添加到",
|
||||
"sonarr.Age": "年龄",
|
||||
@@ -807,6 +830,8 @@
|
||||
"sonarr.SearchMonitored": "监视搜索",
|
||||
"sonarr.FailedToSearchForMonitoredEpisodes": "搜索监控剧集失败",
|
||||
"sonarr.SearchingForMonitoredEpisodes": "正在搜索受监控的剧集…",
|
||||
"sonarr.EpisodesCount": "{}剧集",
|
||||
"sonarr.EpisodeFilesDeleted": "剧集文件已删除",
|
||||
"tautulli.Activity": "活动",
|
||||
"tautulli.Audio": "音频",
|
||||
"tautulli.BackingUpConfiguration": "正在备份配置…",
|
||||
@@ -877,6 +902,13 @@
|
||||
"tautulli.TerminateSessionFailed": "终止会话失败",
|
||||
"tautulli.Converting": "转换",
|
||||
"tautulli.Speed": "倍速:{}x",
|
||||
"tautulli.ActivityRefreshRate": "活动刷新率",
|
||||
"tautulli.LibraryDetails": "库详细信息",
|
||||
"tautulli.DefaultTerminationMessage": "默认终止消息",
|
||||
"tautulli.Graphs": "曲线图",
|
||||
"tautulli.MediaDetails": "媒体详细信息",
|
||||
"tautulli.Statistics": "统计数据",
|
||||
"tautulli.StatisticsItemCount": "统计项目计数",
|
||||
"wake_on_lan.MagicPacketSent": "已发送幻包",
|
||||
"wake_on_lan.MagicPacketSentMessage": "您的机器正在唤醒!",
|
||||
"wake_on_lan.MagicPacketFailedToSend": "幻包发送失败"
|
||||
|
||||
@@ -16,5 +16,5 @@ targets:
|
||||
include_if_null: false
|
||||
|
||||
# Retrofit
|
||||
retrofit_generator|retrofit:
|
||||
retrofit_generator:
|
||||
enabled: true
|
||||
|
||||
@@ -3,12 +3,12 @@ GEM
|
||||
specs:
|
||||
CFPropertyList (3.0.6)
|
||||
rexml
|
||||
activesupport (7.0.4.3)
|
||||
activesupport (7.0.5)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
addressable (2.8.1)
|
||||
addressable (2.8.4)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
algoliasearch (1.27.5)
|
||||
httpclient (~> 2.8, >= 2.8.3)
|
||||
@@ -16,27 +16,27 @@ GEM
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.731.0)
|
||||
aws-sdk-core (3.170.1)
|
||||
aws-partitions (1.781.0)
|
||||
aws-sdk-core (3.175.0)
|
||||
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.63.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (1.67.0)
|
||||
aws-sdk-core (~> 3, >= 3.174.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.119.1)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-s3 (1.126.0)
|
||||
aws-sdk-core (~> 3, >= 3.174.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.2)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.1.0)
|
||||
cocoapods (1.12.0)
|
||||
cocoapods (1.12.1)
|
||||
addressable (~> 2.8)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
cocoapods-core (= 1.12.0)
|
||||
cocoapods-core (= 1.12.1)
|
||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
||||
cocoapods-downloader (>= 1.6.0, < 2.0)
|
||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||
@@ -51,7 +51,7 @@ GEM
|
||||
nap (~> 1.0)
|
||||
ruby-macho (>= 2.3.0, < 3.0)
|
||||
xcodeproj (>= 1.21.0, < 2.0)
|
||||
cocoapods-core (1.12.0)
|
||||
cocoapods-core (1.12.1)
|
||||
activesupport (>= 5.0, < 8)
|
||||
addressable (~> 2.8)
|
||||
algoliasearch (~> 1.0)
|
||||
@@ -85,7 +85,7 @@ GEM
|
||||
escape (0.0.4)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
excon (0.99.0)
|
||||
excon (0.100.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
@@ -114,8 +114,8 @@ GEM
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.212.1)
|
||||
fastimage (2.2.7)
|
||||
fastlane (2.213.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -139,7 +139,7 @@ GEM
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (~> 2.0.0)
|
||||
multipart-post (>= 2.0.0, < 3.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (~> 0.1.1)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
@@ -158,7 +158,7 @@ GEM
|
||||
fourflusher (2.3.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.37.0)
|
||||
google-apis-androidpublisher_v3 (0.44.0)
|
||||
google-apis-core (>= 0.11.0, < 2.a)
|
||||
google-apis-core (0.11.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
@@ -189,7 +189,7 @@ GEM
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.3.0)
|
||||
googleauth (1.5.2)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -200,18 +200,18 @@ GEM
|
||||
http-cookie (1.0.5)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.12.0)
|
||||
i18n (1.14.1)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jmespath (1.6.2)
|
||||
json (2.6.3)
|
||||
jwt (2.7.0)
|
||||
jwt (2.7.1)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
minitest (5.18.0)
|
||||
minitest (5.18.1)
|
||||
molinillo (0.8.0)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
multipart-post (2.3.0)
|
||||
nanaimo (0.3.0)
|
||||
nap (1.1.0)
|
||||
naturally (2.2.1)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
platform :ios, '11.0'
|
||||
$FirebaseSDKVersion = '10.5.0'
|
||||
$FirebaseSDKVersion = '10.10.0'
|
||||
|
||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||
|
||||
183
ios/Podfile.lock
183
ios/Podfile.lock
@@ -1,6 +1,6 @@
|
||||
PODS:
|
||||
- cloud_firestore (4.4.5):
|
||||
- Firebase/Firestore (= 10.5.0)
|
||||
- cloud_firestore (4.8.1):
|
||||
- Firebase/Firestore (= 10.10.0)
|
||||
- firebase_core
|
||||
- Flutter
|
||||
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||
@@ -38,64 +38,65 @@ PODS:
|
||||
- file_picker (0.0.1):
|
||||
- DKImagePickerController/PhotoGallery
|
||||
- Flutter
|
||||
- Firebase/Auth (10.5.0):
|
||||
- Firebase/Auth (10.10.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAuth (~> 10.5.0)
|
||||
- Firebase/CoreOnly (10.5.0):
|
||||
- FirebaseCore (= 10.5.0)
|
||||
- Firebase/Firestore (10.5.0):
|
||||
- FirebaseAuth (~> 10.10.0)
|
||||
- Firebase/CoreOnly (10.10.0):
|
||||
- FirebaseCore (= 10.10.0)
|
||||
- Firebase/Firestore (10.10.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseFirestore (~> 10.5.0)
|
||||
- Firebase/Messaging (10.5.0):
|
||||
- FirebaseFirestore (~> 10.10.0)
|
||||
- Firebase/Messaging (10.10.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseMessaging (~> 10.5.0)
|
||||
- Firebase/Storage (10.5.0):
|
||||
- FirebaseMessaging (~> 10.10.0)
|
||||
- Firebase/Storage (10.10.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseStorage (~> 10.5.0)
|
||||
- firebase_auth (4.3.0):
|
||||
- Firebase/Auth (= 10.5.0)
|
||||
- FirebaseStorage (~> 10.10.0)
|
||||
- firebase_auth (4.6.3):
|
||||
- Firebase/Auth (= 10.10.0)
|
||||
- firebase_core
|
||||
- Flutter
|
||||
- firebase_core (2.8.0):
|
||||
- Firebase/CoreOnly (= 10.5.0)
|
||||
- firebase_core (2.14.0):
|
||||
- Firebase/CoreOnly (= 10.10.0)
|
||||
- Flutter
|
||||
- firebase_messaging (14.3.0):
|
||||
- Firebase/Messaging (= 10.5.0)
|
||||
- firebase_messaging (14.6.3):
|
||||
- Firebase/Messaging (= 10.10.0)
|
||||
- firebase_core
|
||||
- Flutter
|
||||
- firebase_storage (11.0.16):
|
||||
- Firebase/Storage (= 10.5.0)
|
||||
- firebase_storage (11.2.3):
|
||||
- Firebase/Storage (= 10.10.0)
|
||||
- firebase_core
|
||||
- Flutter
|
||||
- FirebaseAppCheckInterop (10.7.0)
|
||||
- FirebaseAuth (10.5.0):
|
||||
- FirebaseAppCheckInterop (10.11.0)
|
||||
- FirebaseAuth (10.10.0):
|
||||
- FirebaseAppCheckInterop (~> 10.0)
|
||||
- FirebaseCore (~> 10.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
|
||||
- FirebaseAuthInterop (10.7.0)
|
||||
- FirebaseCore (10.5.0):
|
||||
- FirebaseAuthInterop (10.11.0)
|
||||
- FirebaseCore (10.10.0):
|
||||
- FirebaseCoreInternal (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
- GoogleUtilities/Logger (~> 7.8)
|
||||
- FirebaseCoreExtension (10.7.0):
|
||||
- FirebaseCoreExtension (10.11.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseCoreInternal (10.7.0):
|
||||
- FirebaseCoreInternal (10.11.0):
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||
- FirebaseFirestore (10.5.0):
|
||||
- FirebaseFirestore/AutodetectLeveldb (= 10.5.0)
|
||||
- FirebaseFirestore/AutodetectLeveldb (10.5.0):
|
||||
- FirebaseFirestore (10.10.0):
|
||||
- FirebaseFirestore/AutodetectLeveldb (= 10.10.0)
|
||||
- FirebaseFirestore/AutodetectLeveldb (10.10.0):
|
||||
- FirebaseFirestore/Base
|
||||
- FirebaseFirestore/WithLeveldb
|
||||
- FirebaseFirestore/Base (10.5.0)
|
||||
- FirebaseFirestore/WithLeveldb (10.5.0):
|
||||
- FirebaseFirestore/Base (10.10.0)
|
||||
- FirebaseFirestore/WithLeveldb (10.10.0):
|
||||
- FirebaseFirestore/Base
|
||||
- FirebaseInstallations (10.7.0):
|
||||
- FirebaseInstallations (10.11.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||
- PromisesObjC (~> 2.1)
|
||||
- FirebaseMessaging (10.5.0):
|
||||
- FirebaseMessaging (10.10.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleDataTransport (~> 9.2)
|
||||
@@ -104,7 +105,7 @@ PODS:
|
||||
- GoogleUtilities/Reachability (~> 7.8)
|
||||
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||
- FirebaseStorage (10.5.0):
|
||||
- FirebaseStorage (10.10.0):
|
||||
- FirebaseAppCheckInterop (~> 10.0)
|
||||
- FirebaseAuthInterop (~> 10.0)
|
||||
- FirebaseCore (~> 10.0)
|
||||
@@ -116,28 +117,28 @@ PODS:
|
||||
- FMDB (2.7.5):
|
||||
- FMDB/standard (= 2.7.5)
|
||||
- FMDB/standard (2.7.5)
|
||||
- GoogleDataTransport (9.2.1):
|
||||
- GoogleDataTransport (9.2.3):
|
||||
- GoogleUtilities/Environment (~> 7.7)
|
||||
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||
- PromisesObjC (< 3.0, >= 1.2)
|
||||
- GoogleUtilities/AppDelegateSwizzler (7.11.0):
|
||||
- GoogleUtilities/AppDelegateSwizzler (7.11.1):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network
|
||||
- GoogleUtilities/Environment (7.11.0):
|
||||
- GoogleUtilities/Environment (7.11.1):
|
||||
- PromisesObjC (< 3.0, >= 1.2)
|
||||
- GoogleUtilities/Logger (7.11.0):
|
||||
- GoogleUtilities/Logger (7.11.1):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Network (7.11.0):
|
||||
- GoogleUtilities/Network (7.11.1):
|
||||
- GoogleUtilities/Logger
|
||||
- "GoogleUtilities/NSData+zlib"
|
||||
- GoogleUtilities/Reachability
|
||||
- "GoogleUtilities/NSData+zlib (7.11.0)"
|
||||
- GoogleUtilities/Reachability (7.11.0):
|
||||
- "GoogleUtilities/NSData+zlib (7.11.1)"
|
||||
- GoogleUtilities/Reachability (7.11.1):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/UserDefaults (7.11.0):
|
||||
- GoogleUtilities/UserDefaults (7.11.1):
|
||||
- GoogleUtilities/Logger
|
||||
- GTMSessionFetcher/Core (3.1.0)
|
||||
- GTMSessionFetcher/Core (3.1.1)
|
||||
- in_app_purchase_storekit (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
@@ -154,22 +155,22 @@ PODS:
|
||||
- PromisesObjC (2.2.0)
|
||||
- quick_actions_ios (0.0.1):
|
||||
- Flutter
|
||||
- SDWebImage (5.15.5):
|
||||
- SDWebImage/Core (= 5.15.5)
|
||||
- SDWebImage/Core (5.15.5)
|
||||
- Sentry/HybridSDK (8.3.1):
|
||||
- SentryPrivate (= 8.3.1)
|
||||
- SDWebImage (5.16.0):
|
||||
- SDWebImage/Core (= 5.16.0)
|
||||
- SDWebImage/Core (5.16.0)
|
||||
- Sentry/HybridSDK (8.8.0):
|
||||
- SentryPrivate (= 8.8.0)
|
||||
- sentry_flutter (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- Sentry/HybridSDK (= 8.3.1)
|
||||
- SentryPrivate (8.3.1)
|
||||
- Sentry/HybridSDK (= 8.8.0)
|
||||
- SentryPrivate (8.8.0)
|
||||
- share_plus (0.0.1):
|
||||
- Flutter
|
||||
- shared_preferences_foundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- sqflite (0.0.2):
|
||||
- sqflite (0.0.3):
|
||||
- Flutter
|
||||
- FMDB (>= 2.7.5)
|
||||
- SwiftyGif (5.4.4)
|
||||
@@ -184,16 +185,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.5.0`)
|
||||
- FirebaseFirestore (from `https://github.com/invertase/firestore-ios-sdk-frameworks.git`, tag `10.10.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`)
|
||||
- in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`)
|
||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`)
|
||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||
- 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_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`)
|
||||
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
|
||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||
|
||||
@@ -237,17 +238,17 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/firebase_storage/ios"
|
||||
FirebaseFirestore:
|
||||
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
|
||||
:tag: 10.5.0
|
||||
:tag: 10.10.0
|
||||
Flutter:
|
||||
:path: Flutter
|
||||
flutter_native_splash:
|
||||
:path: ".symlinks/plugins/flutter_native_splash/ios"
|
||||
in_app_purchase_storekit:
|
||||
:path: ".symlinks/plugins/in_app_purchase_storekit/ios"
|
||||
:path: ".symlinks/plugins/in_app_purchase_storekit/darwin"
|
||||
package_info_plus:
|
||||
:path: ".symlinks/plugins/package_info_plus/ios"
|
||||
path_provider_foundation:
|
||||
:path: ".symlinks/plugins/path_provider_foundation/ios"
|
||||
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
||||
quick_actions_ios:
|
||||
:path: ".symlinks/plugins/quick_actions_ios/ios"
|
||||
sentry_flutter:
|
||||
@@ -255,7 +256,7 @@ EXTERNAL SOURCES:
|
||||
share_plus:
|
||||
:path: ".symlinks/plugins/share_plus/ios"
|
||||
shared_preferences_foundation:
|
||||
:path: ".symlinks/plugins/shared_preferences_foundation/ios"
|
||||
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
|
||||
sqflite:
|
||||
:path: ".symlinks/plugins/sqflite/ios"
|
||||
url_launcher_ios:
|
||||
@@ -264,50 +265,50 @@ EXTERNAL SOURCES:
|
||||
CHECKOUT OPTIONS:
|
||||
FirebaseFirestore:
|
||||
:git: https://github.com/invertase/firestore-ios-sdk-frameworks.git
|
||||
:tag: 10.5.0
|
||||
:tag: 10.10.0
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
cloud_firestore: 29dafcfe235974cd3907d6212400629838180a16
|
||||
cloud_firestore: eb6bea100a5957ac15e911a317a52738813e72ef
|
||||
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
|
||||
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
|
||||
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
|
||||
Firebase: facd334e557a979bd03a0b58d90fd56b52b8aba0
|
||||
firebase_auth: 9905bc3d82328b5050a8b7cb410a959f150b6549
|
||||
firebase_core: 85b6664038311940ad60584eaabc73103c61f5de
|
||||
firebase_messaging: db0dab2713aafcf69591a1dc4ee8af7d8bba2abd
|
||||
firebase_storage: 1fe4f5725285159f87dd30aca1a5825105a09dcd
|
||||
FirebaseAppCheckInterop: 255b6c0292fe5da995c8b2df0c02f6a3ca7f61b4
|
||||
FirebaseAuth: 5ddbe23ebc4e647469261f5c59cd12a04f37c8e6
|
||||
FirebaseAuthInterop: 44e34efef7145776a107b9e7f79ed44beb4738fa
|
||||
FirebaseCore: d027ff503d37edb78db98429b11f580a24a7df2a
|
||||
FirebaseCoreExtension: cacdad57fdb60e0b86dcbcac058ec78237946759
|
||||
FirebaseCoreInternal: 9e46c82a14a3b3a25be4e1e151ce6d21536b89c0
|
||||
FirebaseFirestore: b4b875bbcf4c2f7edac19064e5fc31bf814e963e
|
||||
FirebaseInstallations: 2a2c6859354cbec0a228a863d4daf6de7c74ced4
|
||||
FirebaseMessaging: 8a3b9a8b98ce72a42d22e69865cf662e38d2d6f5
|
||||
FirebaseStorage: a12297f786e81e653864d87723ec30381eb90220
|
||||
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||
GoogleDataTransport: ea169759df570f4e37bdee1623ec32a7e64e67c4
|
||||
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
|
||||
GTMSessionFetcher: c9e714f7eec91a55641e2bab9f45fd83a219b882
|
||||
GoogleDataTransport: f0308f5905a745f94fb91fea9c6cbaf3831cb1bd
|
||||
GoogleUtilities: 9aa0ad5a7bc171f8bae016300bfcfa3fb8425749
|
||||
GTMSessionFetcher: e8647203b65cee28c5f73d0f473d096653945e72
|
||||
in_app_purchase_storekit: 4fb7ee9e824b1f09107fbfbbce8c4b276366dc43
|
||||
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||
path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9
|
||||
package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7
|
||||
path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8
|
||||
PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
|
||||
quick_actions_ios: bb09d1c35b4a89f9dbb15487039fa1b983ca375e
|
||||
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
|
||||
Sentry: 316f997b2f89557014ae9919f0d0c71e6e43c01e
|
||||
sentry_flutter: f0e51fac01e46af2e16f0a7458e3014bbc131ff5
|
||||
SentryPrivate: 63dd9ee25187d20427ab7b5d03054df149912c23
|
||||
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
|
||||
shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
|
||||
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
|
||||
quick_actions_ios: 9e80dcfadfbc5d47d9cf8f47bcf428b11cf383d4
|
||||
SDWebImage: 2aea163b50bfcb569a2726b6a754c54a4506fcf6
|
||||
Sentry: 927dfb29d18a14d924229a59cc2ad149f43349f2
|
||||
sentry_flutter: cf7da03b65520b631330ecb498deb592aa7640be
|
||||
SentryPrivate: 4350d865f898224ab9fa02b37d6ee7fbb623f47e
|
||||
share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028
|
||||
shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c
|
||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
||||
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
|
||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
||||
|
||||
PODFILE CHECKSUM: e27cc29c7cdd07e9428874a7c32df1ab5677bbc7
|
||||
PODFILE CHECKSUM: 7d6f4079a4732744fb66360892b0f67dd3bc6b85
|
||||
|
||||
COCOAPODS: 1.12.0
|
||||
COCOAPODS: 1.12.1
|
||||
|
||||
@@ -7,9 +7,8 @@
|
||||
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 */; };
|
||||
1C9E766CFE5995EA84CF3A05 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58F09DEDC33DBF8717EC9CF7 /* Pods_Runner.framework */; };
|
||||
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
|
||||
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
|
||||
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
|
||||
@@ -18,6 +17,7 @@
|
||||
9C2991242453FE3100B93AB2 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C2991232453FE3100B93AB2 /* StoreKit.framework */; };
|
||||
9C7092B325E77E470056AE0B /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7092B225E77E470056AE0B /* NotificationService.m */; };
|
||||
9C7092B725E77E470056AE0B /* ImageNotification.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9C7092AF25E77E470056AE0B /* ImageNotification.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
B3E01A6E82278334590CFFB8 /* Pods_ImageNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E70C4E30E956CF2855F3EE4 /* Pods_ImageNotification.framework */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -55,14 +55,19 @@
|
||||
/* 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; };
|
||||
0518C562F1A93B6CFBC76CAB /* 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>"; };
|
||||
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>"; };
|
||||
1A61E842B29AA4C4DEE28EDE /* 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>"; };
|
||||
2B0EC9E113D3B567E7EB7A16 /* 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>"; };
|
||||
41C8A354026F2EAC476D0FF6 /* 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>"; };
|
||||
58F09DEDC33DBF8717EC9CF7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
8E70C4E30E956CF2855F3EE4 /* Pods_ImageNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ImageNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
949A157272F0977267339849 /* 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>"; };
|
||||
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; };
|
||||
@@ -78,12 +83,7 @@
|
||||
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>"; };
|
||||
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>"; };
|
||||
C5C41D15654448BC4DA2E895 /* 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>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -92,7 +92,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9C2991242453FE3100B93AB2 /* StoreKit.framework in Frameworks */,
|
||||
0076D3D6D60E83034A1E0D0E /* Pods_Runner.framework in Frameworks */,
|
||||
1C9E766CFE5995EA84CF3A05 /* Pods_Runner.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -100,7 +100,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
007DE1E782B48FF895CE4B6C /* Pods_ImageNotification.framework in Frameworks */,
|
||||
B3E01A6E82278334590CFFB8 /* Pods_ImageNotification.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -179,8 +179,8 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9C2991232453FE3100B93AB2 /* StoreKit.framework */,
|
||||
BD8A9D1D71899A3A89676B04 /* Pods_ImageNotification.framework */,
|
||||
09FE6EE3FA652F683E30D461 /* Pods_Runner.framework */,
|
||||
8E70C4E30E956CF2855F3EE4 /* Pods_ImageNotification.framework */,
|
||||
58F09DEDC33DBF8717EC9CF7 /* Pods_Runner.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
@@ -188,12 +188,12 @@
|
||||
F5D05D221249C73674C5DB0D /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
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 */,
|
||||
1A61E842B29AA4C4DEE28EDE /* Pods-ImageNotification.debug.xcconfig */,
|
||||
949A157272F0977267339849 /* Pods-ImageNotification.release.xcconfig */,
|
||||
0518C562F1A93B6CFBC76CAB /* Pods-ImageNotification.profile.xcconfig */,
|
||||
2B0EC9E113D3B567E7EB7A16 /* Pods-Runner.debug.xcconfig */,
|
||||
C5C41D15654448BC4DA2E895 /* Pods-Runner.release.xcconfig */,
|
||||
41C8A354026F2EAC476D0FF6 /* Pods-Runner.profile.xcconfig */,
|
||||
);
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
@@ -205,7 +205,7 @@
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||
buildPhases = (
|
||||
5AC1B074EBDF4B45CD073933 /* [CP] Check Pods Manifest.lock */,
|
||||
D670900334F678B67DC0DDC7 /* [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 */,
|
||||
E6A6BAA8A7CCB50967DD02A1 /* [CP] Embed Pods Frameworks */,
|
||||
8FC36251779B316E672E05BD /* [CP] Copy Pods Resources */,
|
||||
36E498A92AF6479A68EF7C46 /* [CP] Embed Pods Frameworks */,
|
||||
EE9DA6BBE28F03508CB05591 /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -230,7 +230,7 @@
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9C7092BC25E77E470056AE0B /* Build configuration list for PBXNativeTarget "ImageNotification" */;
|
||||
buildPhases = (
|
||||
1D89D7AEADC332B0D3E033A0 /* [CP] Check Pods Manifest.lock */,
|
||||
EE8210042C5635E7F97B098F /* [CP] Check Pods Manifest.lock */,
|
||||
9C7092AB25E77E470056AE0B /* Sources */,
|
||||
9C7092AC25E77E470056AE0B /* Frameworks */,
|
||||
9C7092AD25E77E470056AE0B /* Resources */,
|
||||
@@ -308,99 +308,7 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
1D89D7AEADC332B0D3E033A0 /* [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-ImageNotification-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;
|
||||
};
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Thin Binary";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
|
||||
};
|
||||
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 */ = {
|
||||
36E498A92AF6479A68EF7C46 /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@@ -480,6 +388,99 @@
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
|
||||
);
|
||||
name = "Thin Binary";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
|
||||
};
|
||||
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";
|
||||
};
|
||||
D670900334F678B67DC0DDC7 /* [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;
|
||||
};
|
||||
EE8210042C5635E7F97B098F /* [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-ImageNotification-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;
|
||||
};
|
||||
EE9DA6BBE28F03508CB05591 /* [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;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
@@ -765,9 +766,11 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = VPH33JQH4R;
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = VPH33JQH4R;
|
||||
ENABLE_BITCODE = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -786,6 +789,7 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = app.lunasea.lunasea;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore app.lunasea.lunasea";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
@@ -835,8 +839,10 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
DEVELOPMENT_TEAM = VPH33JQH4R;
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = VPH33JQH4R;
|
||||
ENABLE_BITCODE = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
INFOPLIST_FILE = ImageNotification/Info.plist;
|
||||
@@ -850,6 +856,7 @@
|
||||
PRODUCT_BUNDLE_IDENTIFIER = app.lunasea.lunasea.ImageNotification;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "match AppStore app.lunasea.lunasea.ImageNotification";
|
||||
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore app.lunasea.lunasea.ImageNotification";
|
||||
SKIP_INSTALL = YES;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
git_url("git@github.com:RoninComputer/fastlane-match-storage.git")
|
||||
git_url("git@github.com:JagandeepBrar/fastlane-match-storage.git")
|
||||
storage_mode("git")
|
||||
app_identifier(["app.lunasea.lunasea", "app.lunasea.lunasea.ImageNotification"])
|
||||
platform("ios")
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
part 'api.g.dart';
|
||||
|
||||
String _baseUrl(String host) {
|
||||
String base = host.endsWith('/') ? host.substring(0, host.length - 1) : host;
|
||||
return '$base/api/v3/';
|
||||
}
|
||||
|
||||
@RestApi()
|
||||
abstract class LidarrAPI {
|
||||
factory LidarrAPI({
|
||||
required String host,
|
||||
required String apiKey,
|
||||
Map<String, dynamic> headers = const {},
|
||||
}) {
|
||||
Dio dio = Dio(BaseOptions(
|
||||
headers: headers,
|
||||
followRedirects: true,
|
||||
maxRedirects: 5,
|
||||
queryParameters: {
|
||||
if (apiKey.isNotEmpty) 'apikey': apiKey,
|
||||
},
|
||||
contentType: Headers.jsonContentType,
|
||||
responseType: ResponseType.json,
|
||||
));
|
||||
return _LidarrAPI(dio, baseUrl: _baseUrl(host));
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ part 'controllers/command/series_search.dart';
|
||||
// Episode File
|
||||
part 'controllers/episode_file.dart';
|
||||
part 'controllers/episode_file/delete_episode_file.dart';
|
||||
part 'controllers/episode_file/delete_episode_files.dart';
|
||||
part 'controllers/episode_file/get_episode_file.dart';
|
||||
part 'controllers/episode_file/get_series_episode_files.dart';
|
||||
|
||||
|
||||
@@ -20,6 +20,12 @@ class SonarrControllerEpisodeFile {
|
||||
}) async =>
|
||||
_commandDeleteEpisodeFile(_client, episodeFileId: episodeFileId);
|
||||
|
||||
/// Delete the given episode files.
|
||||
Future<void> deleteBulk({
|
||||
required List<int> episodeFileIds,
|
||||
}) async =>
|
||||
_commandDeleteEpisodeFiles(_client, episodeFileIds: episodeFileIds);
|
||||
|
||||
/// Handler for [episodefile/{id}](https://github.com/Sonarr/Sonarr/wiki/EpisodeFile#get).
|
||||
///
|
||||
/// Returns the episode file with the matching episode ID.
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
part of sonarr_commands;
|
||||
|
||||
Future<void> _commandDeleteEpisodeFiles(
|
||||
Dio client, {
|
||||
required List<int> episodeFileIds,
|
||||
}) async {
|
||||
await client.delete('episodefile/bulk', data: {
|
||||
'episodeFileIds': episodeFileIds,
|
||||
});
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
/// This file is deprecated and should no longer be actively used.
|
||||
/// All imports should happen directly and canonical export files will not be used anymore.
|
||||
|
||||
export 'state/state.dart';
|
||||
export 'system/state.dart';
|
||||
export 'types/loading_state.dart';
|
||||
export 'database/box.dart';
|
||||
export 'database/models/profile.dart';
|
||||
|
||||
@@ -20,9 +20,10 @@ import 'package:lunasea/system/platform.dart';
|
||||
///
|
||||
/// Runs app in guarded zone to attempt to capture fatal (crashing) errors
|
||||
Future<void> main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
runZonedGuarded(
|
||||
() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
try {
|
||||
await bootstrap();
|
||||
runApp(const LunaBIOS());
|
||||
@@ -81,7 +82,6 @@ class LunaBIOS extends StatelessWidget {
|
||||
supportedLocales: context.supportedLocales,
|
||||
locale: context.locale,
|
||||
builder: DevicePreview.appBuilder,
|
||||
useInheritedMediaQuery: true,
|
||||
darkTheme: theme.activeTheme(),
|
||||
theme: theme.activeTheme(),
|
||||
title: 'LunaSea',
|
||||
|
||||
@@ -17,7 +17,7 @@ import 'package:lunasea/modules/sabnzbd.dart';
|
||||
import 'package:lunasea/modules/nzbget.dart';
|
||||
import 'package:lunasea/modules/tautulli.dart';
|
||||
|
||||
import 'package:lunasea/modules/dashboard/core/state.dart' as dashboard_state;
|
||||
import 'package:lunasea/modules/dashboard/core/state.dart';
|
||||
import 'package:lunasea/api/wake_on_lan/wake_on_lan.dart';
|
||||
import 'package:lunasea/system/flavor.dart';
|
||||
|
||||
@@ -436,6 +436,23 @@ extension LunaModuleWebhookExtension on LunaModule {
|
||||
}
|
||||
}
|
||||
|
||||
String? get webhookDocs {
|
||||
switch (this) {
|
||||
case LunaModule.LIDARR:
|
||||
return 'https://docs.lunasea.app/lunasea/notifications/lidarr';
|
||||
case LunaModule.RADARR:
|
||||
return 'https://docs.lunasea.app/lunasea/notifications/radarr';
|
||||
case LunaModule.SONARR:
|
||||
return 'https://docs.lunasea.app/lunasea/notifications/sonarr';
|
||||
case LunaModule.OVERSEERR:
|
||||
return 'https://docs.lunasea.app/lunasea/notifications/overseerr';
|
||||
case LunaModule.TAUTULLI:
|
||||
return 'https://docs.lunasea.app/lunasea/notifications/tautulli';
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> handleWebhook(Map<String, dynamic> data) async {
|
||||
switch (this) {
|
||||
case LunaModule.LIDARR:
|
||||
@@ -467,7 +484,7 @@ extension LunaModuleExtension on LunaModule {
|
||||
case LunaModule.WAKE_ON_LAN:
|
||||
return null;
|
||||
case LunaModule.DASHBOARD:
|
||||
return context.read<dashboard_state.ModuleState>();
|
||||
return context.read<DashboardState>();
|
||||
case LunaModule.SETTINGS:
|
||||
return context.read<SettingsState>();
|
||||
case LunaModule.SEARCH:
|
||||
|
||||
@@ -4,11 +4,11 @@ import 'package:lunasea/modules/dashboard/core/adapters/calendar_starting_size.d
|
||||
import 'package:lunasea/modules/dashboard/core/adapters/calendar_starting_type.dart';
|
||||
import 'package:lunasea/modules/dashboard/core/api/api.dart';
|
||||
import 'package:lunasea/modules/dashboard/core/api/data/abstract.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
|
||||
class ModuleState extends LunaModuleState {
|
||||
ModuleState() {
|
||||
class DashboardState extends LunaModuleState {
|
||||
DashboardState() {
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:lunasea/widgets/ui.dart';
|
||||
import 'package:lunasea/system/logger.dart';
|
||||
@@ -26,8 +25,8 @@ class _State extends State<CalendarPage>
|
||||
|
||||
@override
|
||||
Future<void> loadCallback() async {
|
||||
context.read<ModuleState>().resetToday();
|
||||
context.read<ModuleState>().resetUpcoming();
|
||||
context.read<DashboardState>().resetToday();
|
||||
context.read<DashboardState>().resetUpcoming();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -38,7 +37,7 @@ class _State extends State<CalendarPage>
|
||||
key: _refreshKey,
|
||||
onRefresh: loadCallback,
|
||||
child: FutureBuilder(
|
||||
future: context.watch<ModuleState>().upcoming,
|
||||
future: context.watch<DashboardState>().upcoming,
|
||||
builder: (
|
||||
BuildContext context,
|
||||
AsyncSnapshot<Map<DateTime, List<CalendarData>>> snapshot,
|
||||
@@ -55,7 +54,7 @@ class _State extends State<CalendarPage>
|
||||
if (snapshot.connectionState == ConnectionState.done &&
|
||||
snapshot.hasData) {
|
||||
final events = snapshot.data!;
|
||||
return Selector<ModuleState, CalendarStartingType>(
|
||||
return Selector<DashboardState, CalendarStartingType>(
|
||||
selector: (_, s) => s.calendarType,
|
||||
builder: (context, type, _) {
|
||||
if (type == CalendarStartingType.CALENDAR)
|
||||
|
||||
@@ -44,7 +44,7 @@ class _State extends State<CalendarView> {
|
||||
|
||||
void _onDaySelected(DateTime selected, DateTime focused) {
|
||||
HapticFeedback.selectionClick();
|
||||
context.read<ModuleState>().selected = selected.floor();
|
||||
context.read<DashboardState>().selected = selected.floor();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -108,10 +108,10 @@ class _State extends State<CalendarView> {
|
||||
DashboardDatabase.CALENDAR_STARTING_SIZE,
|
||||
],
|
||||
builder: (context, _) {
|
||||
DateTime firstDay = context.watch<ModuleState>().today.subtract(
|
||||
DateTime firstDay = context.watch<DashboardState>().today.subtract(
|
||||
Duration(days: DashboardDatabase.CALENDAR_DAYS_PAST.read()),
|
||||
);
|
||||
DateTime lastDay = context.watch<ModuleState>().today.add(
|
||||
DateTime lastDay = context.watch<DashboardState>().today.add(
|
||||
Duration(days: DashboardDatabase.CALENDAR_DAYS_FUTURE.read()),
|
||||
);
|
||||
return SafeArea(
|
||||
@@ -124,7 +124,7 @@ class _State extends State<CalendarView> {
|
||||
),
|
||||
rowHeight: 48.0,
|
||||
rangeSelectionMode: RangeSelectionMode.disabled,
|
||||
focusedDay: context.watch<ModuleState>().selected,
|
||||
focusedDay: context.watch<DashboardState>().selected,
|
||||
firstDay: firstDay,
|
||||
lastDay: lastDay,
|
||||
//events: widget.events,
|
||||
@@ -142,7 +142,8 @@ class _State extends State<CalendarView> {
|
||||
startingDayOfWeek:
|
||||
DashboardDatabase.CALENDAR_STARTING_DAY.read().data,
|
||||
selectedDayPredicate: (date) {
|
||||
return date.floor() == context.read<ModuleState>().selected;
|
||||
return date.floor() ==
|
||||
context.read<DashboardState>().selected;
|
||||
},
|
||||
calendarStyle: CalendarStyle(
|
||||
markersMaxCount: 1,
|
||||
@@ -170,7 +171,7 @@ class _State extends State<CalendarView> {
|
||||
todayTextStyle: dayStyle,
|
||||
),
|
||||
onFormatChanged: (format) {
|
||||
context.read<ModuleState>().calendarFormat = format;
|
||||
context.read<DashboardState>().calendarFormat = format;
|
||||
},
|
||||
daysOfWeekStyle: DaysOfWeekStyle(
|
||||
weekendStyle: weekdayStyle,
|
||||
@@ -180,7 +181,7 @@ class _State extends State<CalendarView> {
|
||||
if (widget.events.isEmpty) return [];
|
||||
return widget.events[date.floor()] ?? [];
|
||||
},
|
||||
calendarFormat: context.watch<ModuleState>().calendarFormat,
|
||||
calendarFormat: context.watch<DashboardState>().calendarFormat,
|
||||
availableCalendarFormats: const {
|
||||
CalendarFormat.month: 'Month',
|
||||
CalendarFormat.twoWeeks: '2 Weeks',
|
||||
@@ -228,7 +229,7 @@ class _State extends State<CalendarView> {
|
||||
}
|
||||
|
||||
Widget _calendarList() {
|
||||
final selected = context.read<ModuleState>().selected;
|
||||
final selected = context.read<DashboardState>().selected;
|
||||
final events = widget.events[selected.floor()] ?? [];
|
||||
if (events.isEmpty) {
|
||||
return Expanded(
|
||||
|
||||
@@ -62,7 +62,7 @@ class _State extends State<ScheduleView> {
|
||||
keys.sort();
|
||||
|
||||
for (final key in keys) {
|
||||
final selected = context.read<ModuleState>().selected;
|
||||
final selected = context.read<DashboardState>().selected;
|
||||
if (key.isBefore(selected) || key.isAtSameMomentAs(selected)) {
|
||||
offsetOfSelected = offset;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:lunasea/widgets/ui.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
@@ -44,14 +43,14 @@ class _State extends State<SwitchViewAction> with LunaLoadCallbackMixin {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Selector<ModuleState, CalendarStartingType>(
|
||||
return Selector<DashboardState, CalendarStartingType>(
|
||||
selector: (_, state) => state.calendarType,
|
||||
builder: (context, view, _) {
|
||||
if (_showButton) {
|
||||
return LunaIconButton.appBar(
|
||||
icon: view.icon,
|
||||
onPressed: () {
|
||||
final state = context.read<ModuleState>();
|
||||
final state = context.read<DashboardState>();
|
||||
if (view == CalendarStartingType.CALENDAR)
|
||||
state.calendarType = CalendarStartingType.SCHEDULE;
|
||||
else
|
||||
|
||||
@@ -66,7 +66,7 @@ class LidarrAPI {
|
||||
));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch artists', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -83,7 +83,7 @@ class LidarrAPI {
|
||||
_entries.add(entry['foreignArtistId'] ?? '');
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch artist IDs', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -102,7 +102,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to refresh artist ($artistID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -144,7 +144,7 @@ class LidarrAPI {
|
||||
? response.data['statistics']['sizeOnDisk'] ?? 0
|
||||
: 0,
|
||||
);
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch artist ($artistID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -162,7 +162,7 @@ class LidarrAPI {
|
||||
},
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to remove artist ($artistID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -192,7 +192,7 @@ class LidarrAPI {
|
||||
data: json.encode(artist),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to edit artist ($artistID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -228,7 +228,7 @@ class LidarrAPI {
|
||||
return b.releaseDateObject!.compareTo(a.releaseDateObject!);
|
||||
});
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch albums ($artistID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -257,7 +257,7 @@ class LidarrAPI {
|
||||
: response.data[0]['statistics']['percentOfTracks'] ?? 0,
|
||||
releaseDate: response.data[0]['releaseDate'] ?? '',
|
||||
);
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch album ($albumID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -286,7 +286,7 @@ class LidarrAPI {
|
||||
));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch album tracks ($albumID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -306,7 +306,7 @@ class LidarrAPI {
|
||||
);
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch quality profiles', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -326,7 +326,7 @@ class LidarrAPI {
|
||||
);
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch metadata profiles', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -347,7 +347,7 @@ class LidarrAPI {
|
||||
));
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch root folders', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -459,7 +459,7 @@ class LidarrAPI {
|
||||
}
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch history', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -492,7 +492,7 @@ class LidarrAPI {
|
||||
));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch missing albums', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -511,7 +511,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError(
|
||||
'Failed to search for albums (${albums.toString()})', error, stack);
|
||||
return Future.error(error);
|
||||
@@ -533,7 +533,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to search for all missing albums', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -551,7 +551,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to update library', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -569,7 +569,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to trigger RSS sync', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -587,7 +587,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to backup database', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -606,7 +606,7 @@ class LidarrAPI {
|
||||
data: json.encode(body),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError(
|
||||
'Failed to toggle artist monitored status ($artistID)', error, stack);
|
||||
return Future.error(error);
|
||||
@@ -629,7 +629,7 @@ class LidarrAPI {
|
||||
data: json.encode(body),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError(
|
||||
'Failed to toggle album monitored status ($albumID)', error, stack);
|
||||
return Future.error(error);
|
||||
@@ -661,7 +661,7 @@ class LidarrAPI {
|
||||
));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to search ($search)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -695,7 +695,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return response.data['id'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to add artist (${entry.title})', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -732,7 +732,7 @@ class LidarrAPI {
|
||||
));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch releases ($albumID)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -751,7 +751,7 @@ class LidarrAPI {
|
||||
}),
|
||||
);
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to download release ($guid)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
|
||||
@@ -30,7 +30,11 @@ class _State extends State<LidarrCatalogue>
|
||||
Future<void> loadCallback() async {
|
||||
if (mounted) setState(() => _results = []);
|
||||
final _api = LidarrAPI.from(LunaProfile.current);
|
||||
if (mounted) setState(() => {_future = _api.getAllArtists()});
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_future = _api.getAllArtists();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void _refreshState() => setState(() {});
|
||||
|
||||
@@ -46,7 +46,11 @@ class _State extends State<ArtistEditRoute> with LunaScrollControllerMixin {
|
||||
bottomNavigationBar: _bottomActionBar(),
|
||||
);
|
||||
|
||||
Future<void> _refresh() async => setState(() => {_future = _fetch()});
|
||||
Future<void> _refresh() async {
|
||||
setState(() {
|
||||
_future = _fetch();
|
||||
});
|
||||
}
|
||||
|
||||
Future<bool> _fetch() async {
|
||||
final _api = LidarrAPI.from(LunaProfile.current);
|
||||
|
||||
@@ -27,7 +27,9 @@ class _State extends State<ArtistAlbumReleasesRoute>
|
||||
Future<void> loadCallback() async {
|
||||
if (mounted) setState(() => _results = []);
|
||||
final _api = LidarrAPI.from(LunaProfile.current);
|
||||
setState(() => {_future = _api.getReleases(widget.albumId)});
|
||||
setState(() {
|
||||
_future = _api.getReleases(widget.albumId);
|
||||
});
|
||||
//Clear the search filter using a microtask
|
||||
Future.microtask(
|
||||
() => context.read<LidarrState>().searchReleasesFilter = '');
|
||||
|
||||
@@ -78,7 +78,7 @@ class NZBGetAPI {
|
||||
postPaused: response.data['result']['PostPaused'] ?? true,
|
||||
scanPaused: response.data['result']['ScanPaused'] ?? true,
|
||||
);
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch statistics', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -109,7 +109,7 @@ class NZBGetAPI {
|
||||
));
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch logs ($amount)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -143,7 +143,7 @@ class NZBGetAPI {
|
||||
_entries.add(_entry);
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch queue', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -177,7 +177,7 @@ class NZBGetAPI {
|
||||
));
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch history', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -195,7 +195,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to pause queue', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -217,7 +217,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to pause queue for $minutes minutes', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -235,7 +235,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to resume queue', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -257,7 +257,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to move queue entry ($id, $offset)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -279,7 +279,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to pause job ($id)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -301,7 +301,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to resume job ($id)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -323,7 +323,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to delete job ($id)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -345,7 +345,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to rename job ($id, $name)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -367,7 +367,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError(
|
||||
'Failed to set job priority ($id, ${priority.name})', error, stack);
|
||||
return Future.error(error, stack);
|
||||
@@ -391,7 +391,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError(
|
||||
'Failed to set job category ($id, ${category.name})', error, stack);
|
||||
return Future.error(error, stack);
|
||||
@@ -415,7 +415,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set job password ($id, $password)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -437,7 +437,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to delete history entry ($id, $hide)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -459,7 +459,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to retry history entry ($id)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -485,7 +485,7 @@ class NZBGetAPI {
|
||||
));
|
||||
}
|
||||
return _entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch categories', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -507,7 +507,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to sort queue (${sort.name})', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -539,7 +539,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] > 0)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to add NZB by URL ($url)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -572,7 +572,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] > 0)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to add NZB by file ($name)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
@@ -593,7 +593,7 @@ class NZBGetAPI {
|
||||
if (response.data['result'] != null && response.data['result'] == true)
|
||||
return true;
|
||||
throw (Error());
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set speed limit ($limit)', error, stack);
|
||||
return Future.error(error, stack);
|
||||
} catch (error, stack) {
|
||||
|
||||
@@ -40,11 +40,15 @@ class _State extends State<StatisticsRoute> with LunaScrollControllerMixin {
|
||||
}
|
||||
|
||||
Future<void> _fetchStatistics(NZBGetAPI api) async {
|
||||
return await api.getStatistics().then((stats) => {_statistics = stats});
|
||||
return await api.getStatistics().then((stats) {
|
||||
_statistics = stats;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _fetchLogs(NZBGetAPI api) async {
|
||||
return await api.getLogs().then((logs) => {_logs = logs});
|
||||
return await api.getLogs().then((logs) {
|
||||
_logs = logs;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -72,7 +72,7 @@ class SABnzbdAPI {
|
||||
monthlyUsage: statistics.data['month'] ?? 0,
|
||||
totalUsage: statistics.data['total'] ?? 0,
|
||||
);
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch statistics', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -90,7 +90,7 @@ class SABnzbdAPI {
|
||||
},
|
||||
);
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to pause queue', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -107,7 +107,7 @@ class SABnzbdAPI {
|
||||
'value': minutes,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to pause queue for $minutes minutes', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -122,7 +122,7 @@ class SABnzbdAPI {
|
||||
'mode': 'resume',
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to resume queue', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -139,7 +139,7 @@ class SABnzbdAPI {
|
||||
'value': nzoId,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to pause job ($nzoId)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -156,7 +156,7 @@ class SABnzbdAPI {
|
||||
'value': nzoId,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to resume job ($nzoId)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -177,7 +177,7 @@ class SABnzbdAPI {
|
||||
},
|
||||
);
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to delete job ($nzoId)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -195,7 +195,7 @@ class SABnzbdAPI {
|
||||
'value2': name,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to rename job ($nzoId, $name)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -215,7 +215,7 @@ class SABnzbdAPI {
|
||||
'value3': password,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set job password ($nzoId, $password)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -233,7 +233,7 @@ class SABnzbdAPI {
|
||||
'value2': priority,
|
||||
});
|
||||
return true;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set job priority ($nzoId, $priority)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -251,7 +251,7 @@ class SABnzbdAPI {
|
||||
'value': nzoId,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to delete history entry ($nzoId)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -292,7 +292,7 @@ class SABnzbdAPI {
|
||||
status,
|
||||
queue,
|
||||
];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch status and queue', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -324,7 +324,7 @@ class SABnzbdAPI {
|
||||
));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch history', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -342,7 +342,7 @@ class SABnzbdAPI {
|
||||
});
|
||||
return response.data['result'] != null &&
|
||||
response.data['result']['position'] != null;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to move queue entry ($nzoId, $index)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -360,7 +360,7 @@ class SABnzbdAPI {
|
||||
'dir': dir,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to sort queue ($sort, $dir)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -380,7 +380,7 @@ class SABnzbdAPI {
|
||||
SABnzbdCategoryData(category: entry == '*' ? 'Default' : entry));
|
||||
}
|
||||
return entries;
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to fetch categories', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -397,7 +397,7 @@ class SABnzbdAPI {
|
||||
'value2': category,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set category ($nzoId, $category)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -414,7 +414,7 @@ class SABnzbdAPI {
|
||||
'value': limit,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set speed limit ($limit)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -430,7 +430,7 @@ class SABnzbdAPI {
|
||||
'name': url,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to upload NZB by URL ($url)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -451,7 +451,7 @@ class SABnzbdAPI {
|
||||
}),
|
||||
);
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to upload nzb file ($name)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -471,7 +471,7 @@ class SABnzbdAPI {
|
||||
},
|
||||
);
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to set on-complete action ($action)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -489,7 +489,7 @@ class SABnzbdAPI {
|
||||
if (delete) 'del_files': 1,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to clear history ($action, $delete)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -508,7 +508,7 @@ class SABnzbdAPI {
|
||||
},
|
||||
);
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to retry job ($nzoId)', error, stack);
|
||||
return Future.error(error);
|
||||
} catch (error, stack) {
|
||||
@@ -525,7 +525,7 @@ class SABnzbdAPI {
|
||||
'password': password,
|
||||
});
|
||||
return response.data['status'] != null && response.data['status'];
|
||||
} on DioError catch (error, stack) {
|
||||
} on DioException catch (error, stack) {
|
||||
logError('Failed to retry job with new password ($nzoId, $password)',
|
||||
error, stack);
|
||||
return Future.error(error);
|
||||
|
||||
@@ -59,12 +59,11 @@ class SearchDialogs {
|
||||
},
|
||||
itemBuilder: (context) {
|
||||
return <PopupMenuEntry<String>>[
|
||||
for (String? profile
|
||||
in LunaBox.profiles.keys as Iterable<String?>)
|
||||
for (final profile in LunaBox.profiles.keys.cast<String>())
|
||||
PopupMenuItem<String>(
|
||||
value: profile,
|
||||
child: Text(
|
||||
profile!,
|
||||
profile,
|
||||
style: TextStyle(
|
||||
fontSize: LunaUI.FONT_SIZE_H3,
|
||||
color: LunaSeaDatabase.ENABLED_PROFILE.read() ==
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import 'package:email_validator/email_validator.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lunasea/database/tables/lunasea.dart';
|
||||
import 'package:lunasea/firebase/types.dart';
|
||||
import 'package:lunasea/modules.dart';
|
||||
import 'package:lunasea/modules/settings/core/types/header.dart';
|
||||
import 'package:lunasea/state/state.dart';
|
||||
import 'package:lunasea/system/state.dart';
|
||||
import 'package:lunasea/system/localization.dart';
|
||||
import 'package:lunasea/utils/validator.dart';
|
||||
import 'package:lunasea/vendor.dart';
|
||||
import 'package:lunasea/widgets/ui.dart';
|
||||
import 'package:lunasea/modules/dashboard/core/adapters/calendar_starting_day.dart';
|
||||
@@ -591,7 +591,7 @@ class SettingsDialogs {
|
||||
title: 'settings.Email'.tr(),
|
||||
onSubmitted: (_) => _setValues(true),
|
||||
validator: (value) {
|
||||
return EmailValidator.validate(value ?? '')
|
||||
return LunaValidator().email(value ?? '')
|
||||
? null
|
||||
: 'settings.EmailValidation'.tr();
|
||||
},
|
||||
|
||||
@@ -125,9 +125,9 @@ class _State extends State<SettingsHeaderRoute> with LunaScrollControllerMixin {
|
||||
Future<void> _resetState() async {
|
||||
switch (widget.module) {
|
||||
case LunaModule.DASHBOARD:
|
||||
throw Exception('Dashboard does not have a headers page');
|
||||
throw Exception('Dashboard does not have a global state');
|
||||
case LunaModule.EXTERNAL_MODULES:
|
||||
throw Exception('External modules do not have a headers page');
|
||||
throw Exception('External modules do not have a global state');
|
||||
case LunaModule.LIDARR:
|
||||
return;
|
||||
case LunaModule.RADARR:
|
||||
@@ -139,11 +139,11 @@ class _State extends State<SettingsHeaderRoute> with LunaScrollControllerMixin {
|
||||
case LunaModule.NZBGET:
|
||||
return;
|
||||
case LunaModule.SEARCH:
|
||||
throw Exception('Search does not have a headers page');
|
||||
throw Exception('Search does not have a global state');
|
||||
case LunaModule.SETTINGS:
|
||||
throw Exception('Settings does not have a headers page');
|
||||
throw Exception('Settings does not have a global state');
|
||||
case LunaModule.WAKE_ON_LAN:
|
||||
throw Exception('Wake on LAN does not have a headers page');
|
||||
throw Exception('Wake on LAN does not have a global state');
|
||||
case LunaModule.TAUTULLI:
|
||||
return context.read<TautulliState>().reset();
|
||||
case LunaModule.OVERSEERR:
|
||||
|
||||
@@ -45,9 +45,7 @@ class HeaderUtility {
|
||||
await _genericHeader(context, headers, indexer);
|
||||
break;
|
||||
default:
|
||||
LunaLogger().warning(
|
||||
'Unknown case: ${result.item2}',
|
||||
);
|
||||
LunaLogger().warning('Unknown case: ${result.item2}');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:lunasea/core.dart';
|
||||
import 'package:lunasea/firebase/auth.dart';
|
||||
import 'package:lunasea/utils/validator.dart';
|
||||
|
||||
class AccountPasswordResetRoute extends ConsumerStatefulWidget {
|
||||
class AccountPasswordResetRoute extends StatefulWidget {
|
||||
const AccountPasswordResetRoute({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
@@ -12,7 +12,7 @@ class AccountPasswordResetRoute extends ConsumerStatefulWidget {
|
||||
_State createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends ConsumerState<AccountPasswordResetRoute>
|
||||
class _State extends State<AccountPasswordResetRoute>
|
||||
with LunaScrollControllerMixin {
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
final TextEditingController _emailController = TextEditingController();
|
||||
@@ -99,7 +99,7 @@ class _State extends ConsumerState<AccountPasswordResetRoute>
|
||||
}
|
||||
|
||||
bool _validateEmailAddress({bool showSnackBarOnFailure = true}) {
|
||||
if (!ref.watch(validatorProvider).email(_emailController.text)) {
|
||||
if (!LunaValidator().email(_emailController.text)) {
|
||||
if (showSnackBarOnFailure) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'settings.InvalidEmail'.tr(),
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:lunasea/firebase/auth.dart';
|
||||
import 'package:lunasea/router/routes/settings.dart';
|
||||
import 'package:lunasea/utils/validator.dart';
|
||||
|
||||
class SettingsAccountSignedOutPage extends ConsumerStatefulWidget {
|
||||
class SettingsAccountSignedOutPage extends StatefulWidget {
|
||||
final ScrollController scrollController;
|
||||
|
||||
const SettingsAccountSignedOutPage({
|
||||
@@ -16,7 +16,7 @@ class SettingsAccountSignedOutPage extends ConsumerStatefulWidget {
|
||||
_State createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends ConsumerState<SettingsAccountSignedOutPage> {
|
||||
class _State extends State<SettingsAccountSignedOutPage> {
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
final TextEditingController _emailController = TextEditingController();
|
||||
final TextEditingController _passwordController = TextEditingController();
|
||||
@@ -124,7 +124,7 @@ class _State extends ConsumerState<SettingsAccountSignedOutPage> {
|
||||
}
|
||||
|
||||
bool _validateEmailAddress({bool showSnackBarOnFailure = true}) {
|
||||
if (!ref.watch(validatorProvider).email(_emailController.text)) {
|
||||
if (!LunaValidator().email(_emailController.text)) {
|
||||
if (showSnackBarOnFailure)
|
||||
showLunaErrorSnackBar(
|
||||
title: 'settings.InvalidEmail'.tr(),
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'package:lunasea/modules/settings.dart';
|
||||
import 'package:lunasea/utils/encryption.dart';
|
||||
import 'package:lunasea/utils/uuid.dart';
|
||||
|
||||
class SettingsAccountBackupConfigurationTile extends ConsumerStatefulWidget {
|
||||
class SettingsAccountBackupConfigurationTile extends StatefulWidget {
|
||||
const SettingsAccountBackupConfigurationTile({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
@@ -16,7 +16,7 @@ class SettingsAccountBackupConfigurationTile extends ConsumerStatefulWidget {
|
||||
_State createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends ConsumerState<SettingsAccountBackupConfigurationTile> {
|
||||
class _State extends State<SettingsAccountBackupConfigurationTile> {
|
||||
LunaLoadingState _loadingState = LunaLoadingState.INACTIVE;
|
||||
|
||||
void updateState(LunaLoadingState state) {
|
||||
@@ -44,12 +44,10 @@ class _State extends ConsumerState<SettingsAccountBackupConfigurationTile> {
|
||||
Tuple2<bool, String> _values =
|
||||
await SettingsDialogs().backupConfiguration(context);
|
||||
if (_values.item1) {
|
||||
final encryption = ref.watch(encryptionProvider);
|
||||
|
||||
String decrypted = LunaConfig().export();
|
||||
String encrypted = encryption.encrypt(_values.item2, decrypted);
|
||||
String encrypted = LunaEncryption().encrypt(_values.item2, decrypted);
|
||||
int timestamp = DateTime.now().millisecondsSinceEpoch;
|
||||
String id = ref.watch(uuidProvider).generate();
|
||||
String id = LunaUUID().generate();
|
||||
String format = 'MMMM dd, yyyy\nhh:mm:ss a';
|
||||
String title = DateFormat(format).format(DateTime.now());
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'package:lunasea/firebase/storage.dart';
|
||||
import 'package:lunasea/modules/settings.dart';
|
||||
import 'package:lunasea/utils/encryption.dart';
|
||||
|
||||
class SettingsAccountRestoreConfigurationTile extends ConsumerStatefulWidget {
|
||||
class SettingsAccountRestoreConfigurationTile extends StatefulWidget {
|
||||
const SettingsAccountRestoreConfigurationTile({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
@@ -15,7 +15,7 @@ class SettingsAccountRestoreConfigurationTile extends ConsumerStatefulWidget {
|
||||
_State createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends ConsumerState<SettingsAccountRestoreConfigurationTile> {
|
||||
class _State extends State<SettingsAccountRestoreConfigurationTile> {
|
||||
LunaLoadingState _loadingState = LunaLoadingState.INACTIVE;
|
||||
|
||||
void updateState(LunaLoadingState state) {
|
||||
@@ -61,8 +61,7 @@ class _State extends ConsumerState<SettingsAccountRestoreConfigurationTile> {
|
||||
Tuple2<bool, String> _key = await SettingsDialogs().decryptBackup(context);
|
||||
if (_key.item1) {
|
||||
try {
|
||||
final encryption = ref.watch(encryptionProvider);
|
||||
String decrypted = encryption.decrypt(_key.item2, encrypted);
|
||||
String decrypted = LunaEncryption().decrypt(_key.item2, encrypted);
|
||||
await LunaConfig().import(context, decrypted);
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'settings.RestoreFromCloudSuccess'.tr(),
|
||||
|
||||
@@ -52,8 +52,8 @@ class _State extends State<ConfigurationDashboardRoute>
|
||||
|
||||
Widget _calendarSettingsPage() {
|
||||
return LunaBlock(
|
||||
title: 'Calendar Settings',
|
||||
body: const [TextSpan(text: 'Customize the Unified Calendar')],
|
||||
title: 'settings.CalendarSettings'.tr(),
|
||||
body: [TextSpan(text: 'settings.CalendarSettingsDescription'.tr())],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: SettingsRoutes.CONFIGURATION_DASHBOARD_CALENDAR.go,
|
||||
);
|
||||
|
||||
@@ -46,7 +46,7 @@ class _State extends State<ConfigurationOverseerrRoute>
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.OVERSEERR.title}',
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.OVERSEERR.title]),
|
||||
trailing: LunaSwitch(
|
||||
value: LunaProfile.current.overseerrEnabled,
|
||||
onChanged: (value) {
|
||||
|
||||
@@ -66,7 +66,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX_MOVIE_DETAILS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Movie Details',
|
||||
title: 'radarr.MovieDetails'.tr(),
|
||||
body: [
|
||||
TextSpan(text: RadarrMovieDetailsNavigationBar.titles[_db.read()]),
|
||||
],
|
||||
@@ -89,7 +89,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX_ADD_MOVIE;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Add Movie',
|
||||
title: 'radarr.AddMovie'.tr(),
|
||||
body: [TextSpan(text: RadarrAddMovieNavigationBar.titles[_db.read()])],
|
||||
trailing:
|
||||
LunaIconButton(icon: RadarrAddMovieNavigationBar.icons[_db.read()]),
|
||||
@@ -109,7 +109,7 @@ class _State extends State<ConfigurationRadarrDefaultPagesRoute>
|
||||
const _db = RadarrDatabase.NAVIGATION_INDEX_SYSTEM_STATUS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'System Status',
|
||||
title: 'radarr.SystemStatus'.tr(),
|
||||
body: [
|
||||
TextSpan(text: RadarrSystemStatusNavigationBar.titles[_db.read()]),
|
||||
],
|
||||
|
||||
@@ -27,7 +27,7 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Radarr',
|
||||
title: LunaModule.RADARR.title,
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -51,7 +51,7 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.RADARR.title}',
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.RADARR.title]),
|
||||
trailing: LunaSwitch(
|
||||
value: LunaProfile.current.radarrEnabled,
|
||||
onChanged: (value) {
|
||||
@@ -66,8 +66,14 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
|
||||
Widget _connectionDetailsPage() {
|
||||
return LunaBlock(
|
||||
title: 'Connection Details',
|
||||
body: const [TextSpan(text: 'Connection Details for Radarr')],
|
||||
title: 'settings.ConnectionDetails'.tr(),
|
||||
body: [
|
||||
TextSpan(
|
||||
text: 'settings.ConnectionDetailsDescription'.tr(
|
||||
args: [LunaModule.RADARR.title],
|
||||
),
|
||||
),
|
||||
],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: SettingsRoutes.CONFIGURATION_RADARR_CONNECTION_DETAILS.go,
|
||||
);
|
||||
@@ -84,8 +90,8 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
|
||||
Widget _defaultPagesPage() {
|
||||
return LunaBlock(
|
||||
title: 'Default Pages',
|
||||
body: const [TextSpan(text: 'Set Default Landing Pages')],
|
||||
title: 'settings.DefaultPages'.tr(),
|
||||
body: [TextSpan(text: 'settings.DefaultPagesDescription'.tr())],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: SettingsRoutes.CONFIGURATION_RADARR_DEFAULT_PAGES.go,
|
||||
);
|
||||
@@ -95,8 +101,8 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
const _db = RadarrDatabase.ADD_DISCOVER_USE_SUGGESTIONS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Discover Suggestions',
|
||||
body: const [TextSpan(text: 'Add Suggested Releases in Discover')],
|
||||
title: 'radarr.DiscoverSuggestions'.tr(),
|
||||
body: [TextSpan(text: 'radarr.DiscoverSuggestionsDescription'.tr())],
|
||||
trailing: LunaSwitch(
|
||||
value: _db.read(),
|
||||
onChanged: (value) => _db.update(value),
|
||||
@@ -109,9 +115,13 @@ class _State extends State<ConfigurationRadarrRoute>
|
||||
const _db = RadarrDatabase.QUEUE_PAGE_SIZE;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Queue Size',
|
||||
title: 'radarr.QueueSize'.tr(),
|
||||
body: [
|
||||
TextSpan(text: _db.read() == 1 ? '1 Item' : '${_db.read()} Items')
|
||||
TextSpan(
|
||||
text: _db.read() == 1
|
||||
? 'lunasea.OneItem'.tr()
|
||||
: 'lunasea.Items'.tr(args: [_db.read().toString()]),
|
||||
),
|
||||
],
|
||||
trailing: const LunaIconButton(icon: Icons.queue_play_next_rounded),
|
||||
onTap: () async {
|
||||
|
||||
@@ -29,7 +29,7 @@ class _State extends State<ConfigurationSABnzbdConnectionDetailsRoute>
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Connection Details',
|
||||
title: 'settings.ConnectionDetails'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -104,34 +104,37 @@ class _State extends State<ConfigurationSABnzbdConnectionDetailsRoute>
|
||||
|
||||
Widget _testConnection() {
|
||||
return LunaButton.text(
|
||||
text: 'Test Connection',
|
||||
text: 'settings.TestConnection'.tr(),
|
||||
icon: Icons.wifi_tethering_rounded,
|
||||
onTap: () async {
|
||||
LunaProfile _profile = LunaProfile.current;
|
||||
if (_profile.sabnzbdHost.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Host Required',
|
||||
message: 'Host is required to connect to SABnzbd',
|
||||
title: 'settings.HostRequired'.tr(),
|
||||
message: 'settings.HostRequiredMessage'
|
||||
.tr(args: [LunaModule.SABNZBD.title]),
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (_profile.sabnzbdKey.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'API Key Required',
|
||||
message: 'API key is required to connect to SABnzbd',
|
||||
title: 'settings.ApiKeyRequired'.tr(),
|
||||
message: 'settings.ApiKeyRequiredMessage'
|
||||
.tr(args: [LunaModule.SABNZBD.title]),
|
||||
);
|
||||
return;
|
||||
}
|
||||
SABnzbdAPI.from(LunaProfile.current)
|
||||
.testConnection()
|
||||
.then((_) => showLunaSuccessSnackBar(
|
||||
title: 'Connected Successfully',
|
||||
message: 'SABnzbd is ready to use with LunaSea',
|
||||
title: 'settings.ConnectedSuccessfully'.tr(),
|
||||
message: 'settings.ConnectedSuccessfullyMessage'
|
||||
.tr(args: [LunaModule.SABNZBD.title]),
|
||||
))
|
||||
.catchError((error, trace) {
|
||||
LunaLogger().error('Connection Test Failed', error, trace);
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Connection Test Failed',
|
||||
title: 'settings.ConnectionTestFailed'.tr(),
|
||||
error: error,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ class _State extends State<ConfigurationSABnzbdRoute>
|
||||
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'SABnzbd',
|
||||
title: LunaModule.SABNZBD.title,
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -49,7 +49,7 @@ class _State extends State<ConfigurationSABnzbdRoute>
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.SABNZBD.title}',
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.SABNZBD.title]),
|
||||
trailing: LunaSwitch(
|
||||
value: LunaProfile.current.sabnzbdEnabled,
|
||||
onChanged: (value) {
|
||||
|
||||
@@ -29,7 +29,7 @@ class _State extends State<ConfigurationSearchAddIndexerRoute>
|
||||
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Add Indexer',
|
||||
title: 'search.AddIndexer'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -38,20 +38,20 @@ class _State extends State<ConfigurationSearchAddIndexerRoute>
|
||||
return LunaBottomActionBar(
|
||||
actions: [
|
||||
LunaButton.text(
|
||||
text: 'Add Indexer',
|
||||
text: 'search.AddIndexer'.tr(),
|
||||
icon: Icons.add_rounded,
|
||||
onTap: () async {
|
||||
if (_indexer.displayName.isEmpty ||
|
||||
_indexer.host.isEmpty ||
|
||||
_indexer.apiKey.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Failed to Add Indexer',
|
||||
message: 'All fields are required',
|
||||
title: 'search.FailedToAddIndexer'.tr(),
|
||||
message: 'settings.AllFieldsAreRequired'.tr(),
|
||||
);
|
||||
} else {
|
||||
LunaBox.indexers.create(_indexer);
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'Indexer Added',
|
||||
title: 'search.IndexerAdded'.tr(),
|
||||
message: _indexer.displayName,
|
||||
);
|
||||
Navigator.of(context).pop();
|
||||
@@ -77,13 +77,13 @@ class _State extends State<ConfigurationSearchAddIndexerRoute>
|
||||
Widget _displayName() {
|
||||
String _name = _indexer.displayName;
|
||||
return LunaBlock(
|
||||
title: 'Display Name',
|
||||
title: 'settings.DisplayName'.tr(),
|
||||
body: [TextSpan(text: _name.isEmpty ? 'lunasea.NotSet'.tr() : _name)],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> values = await LunaDialogs().editText(
|
||||
context,
|
||||
'Display Name',
|
||||
'settings.DisplayName'.tr(),
|
||||
prefill: _name,
|
||||
);
|
||||
if (values.item1 && mounted) {
|
||||
@@ -96,13 +96,13 @@ class _State extends State<ConfigurationSearchAddIndexerRoute>
|
||||
Widget _apiURL() {
|
||||
String _host = _indexer.host;
|
||||
return LunaBlock(
|
||||
title: 'Indexer API Host',
|
||||
title: 'search.IndexerAPIHost'.tr(),
|
||||
body: [TextSpan(text: _host.isEmpty ? 'lunasea.NotSet'.tr() : _host)],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> values = await LunaDialogs().editText(
|
||||
context,
|
||||
'Indexer API Host',
|
||||
'search.IndexerAPIHost'.tr(),
|
||||
prefill: _host,
|
||||
);
|
||||
if (values.item1 && mounted) {
|
||||
@@ -115,13 +115,13 @@ class _State extends State<ConfigurationSearchAddIndexerRoute>
|
||||
Widget _apiKey() {
|
||||
String _key = _indexer.apiKey;
|
||||
return LunaBlock(
|
||||
title: 'Indexer API Key',
|
||||
title: 'search.IndexerAPIKey'.tr(),
|
||||
body: [TextSpan(text: _key.isEmpty ? 'lunasea.NotSet'.tr() : _key)],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> values = await LunaDialogs().editText(
|
||||
context,
|
||||
'Indexer API Key',
|
||||
'search.IndexerAPIKey'.tr(),
|
||||
prefill: _key,
|
||||
);
|
||||
if (values.item1 && mounted) {
|
||||
|
||||
@@ -24,8 +24,8 @@ class _State extends State<ConfigurationSearchAddIndexerHeadersRoute>
|
||||
Widget build(BuildContext context) {
|
||||
if (widget.indexer == null) {
|
||||
return InvalidRoutePage(
|
||||
title: 'Custom Headers',
|
||||
message: 'Indexer Not Found',
|
||||
title: 'settings.CustomHeaders'.tr(),
|
||||
message: 'search.IndexerNotFound'.tr(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ class _State extends State<ConfigurationSearchAddIndexerHeadersRoute>
|
||||
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Custom Headers',
|
||||
title: 'settings.CustomHeaders'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -48,7 +48,7 @@ class _State extends State<ConfigurationSearchAddIndexerHeadersRoute>
|
||||
return LunaBottomActionBar(
|
||||
actions: [
|
||||
LunaButton.text(
|
||||
text: 'Add Header',
|
||||
text: 'settings.AddHeader'.tr(),
|
||||
icon: Icons.add_rounded,
|
||||
onTap: () async {
|
||||
await HeaderUtility()
|
||||
@@ -65,7 +65,7 @@ class _State extends State<ConfigurationSearchAddIndexerHeadersRoute>
|
||||
controller: scrollController,
|
||||
children: [
|
||||
if (widget.indexer!.headers.isEmpty)
|
||||
LunaMessage.inList(text: 'No Headers Added'),
|
||||
LunaMessage.inList(text: 'settings.NoHeadersAdded'.tr()),
|
||||
..._list(),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -24,23 +24,24 @@ class _State extends State<ConfigurationSearchEditIndexerRoute>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (widget.id < 0)
|
||||
if (widget.id < 0 || !LunaBox.indexers.contains(widget.id)) {
|
||||
return InvalidRoutePage(
|
||||
title: 'Edit Indexer', message: 'Indexer Not Found');
|
||||
if (!LunaBox.indexers.contains(widget.id))
|
||||
return InvalidRoutePage(
|
||||
title: 'Edit Indexer', message: 'Indexer Not Found');
|
||||
title: 'search.EditIndexer'.tr(),
|
||||
message: 'search.IndexerNotFound'.tr(),
|
||||
);
|
||||
}
|
||||
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
bottomNavigationBar: _bottomActionBar(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Edit Indexer',
|
||||
title: 'search.EditIndexer'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -49,14 +50,16 @@ class _State extends State<ConfigurationSearchEditIndexerRoute>
|
||||
return LunaBottomActionBar(
|
||||
actions: [
|
||||
LunaButton.text(
|
||||
text: 'Delete Indexer',
|
||||
text: 'search.DeleteIndexer'.tr(),
|
||||
icon: Icons.delete_rounded,
|
||||
color: LunaColours.red,
|
||||
onTap: () async {
|
||||
bool result = await SettingsDialogs().deleteIndexer(context);
|
||||
if (result) {
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'Indexer Deleted', message: _indexer!.displayName);
|
||||
title: 'search.IndexerDeleted'.tr(),
|
||||
message: _indexer!.displayName,
|
||||
);
|
||||
_indexer!.delete();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
@@ -86,56 +89,60 @@ class _State extends State<ConfigurationSearchEditIndexerRoute>
|
||||
}
|
||||
|
||||
Widget _displayName() {
|
||||
String _name = _indexer!.displayName;
|
||||
return LunaBlock(
|
||||
title: 'Display Name',
|
||||
body: [
|
||||
TextSpan(
|
||||
text: _indexer?.displayName.isEmpty ?? true
|
||||
? 'Not Set'
|
||||
: _indexer!.displayName,
|
||||
),
|
||||
],
|
||||
title: 'settings.DisplayName'.tr(),
|
||||
body: [TextSpan(text: _name.isEmpty ? 'lunasea.NotSet'.tr() : _name)],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> values = await LunaDialogs()
|
||||
.editText(context, 'Display Name', prefill: _indexer!.displayName);
|
||||
if (values.item1) _indexer!.displayName = values.item2;
|
||||
Tuple2<bool, String> values = await LunaDialogs().editText(
|
||||
context,
|
||||
'settings.DisplayName'.tr(),
|
||||
prefill: _indexer!.displayName,
|
||||
);
|
||||
if (values.item1) {
|
||||
_indexer!.displayName = values.item2;
|
||||
}
|
||||
_indexer!.save();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _apiURL() {
|
||||
String _host = _indexer!.host;
|
||||
return LunaBlock(
|
||||
title: 'Indexer API Host',
|
||||
body: [
|
||||
TextSpan(
|
||||
text: _indexer?.host.isEmpty ?? true ? 'Not Set' : _indexer!.host,
|
||||
),
|
||||
],
|
||||
title: 'search.IndexerAPIHost'.tr(),
|
||||
body: [TextSpan(text: _host.isEmpty ? 'lunasea.NotSet'.tr() : _host)],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> values = await LunaDialogs()
|
||||
.editText(context, 'Indexer API Host', prefill: _indexer!.host);
|
||||
if (values.item1) _indexer!.host = values.item2;
|
||||
Tuple2<bool, String> values = await LunaDialogs().editText(
|
||||
context,
|
||||
'search.IndexerAPIHost'.tr(),
|
||||
prefill: _host,
|
||||
);
|
||||
if (values.item1 && mounted) {
|
||||
_indexer!.host = values.item2;
|
||||
}
|
||||
_indexer!.save();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _apiKey() {
|
||||
String _key = _indexer!.apiKey;
|
||||
return LunaBlock(
|
||||
title: 'Indexer API Key',
|
||||
body: [
|
||||
TextSpan(
|
||||
text: _indexer?.apiKey.isEmpty ?? true ? 'Not Set' : _indexer!.apiKey,
|
||||
),
|
||||
],
|
||||
title: 'search.IndexerAPIKey'.tr(),
|
||||
body: [TextSpan(text: _key.isEmpty ? 'lunasea.NotSet'.tr() : _key)],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> values = await LunaDialogs()
|
||||
.editText(context, 'Indexer API Key', prefill: _indexer!.apiKey);
|
||||
if (values.item1) _indexer!.apiKey = values.item2;
|
||||
Tuple2<bool, String> values = await LunaDialogs().editText(
|
||||
context,
|
||||
'search.IndexerAPIKey'.tr(),
|
||||
prefill: _key,
|
||||
);
|
||||
if (values.item1) {
|
||||
_indexer!.apiKey = values.item2;
|
||||
}
|
||||
_indexer!.save();
|
||||
},
|
||||
);
|
||||
|
||||
@@ -25,8 +25,8 @@ class _State extends State<ConfigurationSearchEditIndexerHeadersRoute>
|
||||
Widget build(BuildContext context) {
|
||||
if (widget.id < 0 || !LunaBox.indexers.contains(widget.id)) {
|
||||
return InvalidRoutePage(
|
||||
title: 'Custom Headers',
|
||||
message: 'Indexer Not Found',
|
||||
title: 'settings.CustomHeaders'.tr(),
|
||||
message: 'search.IndexerNotFound'.tr(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ class _State extends State<ConfigurationSearchEditIndexerHeadersRoute>
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Custom Headers',
|
||||
title: 'settings.CustomHeaders'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -49,7 +49,7 @@ class _State extends State<ConfigurationSearchEditIndexerHeadersRoute>
|
||||
return LunaBottomActionBar(
|
||||
actions: [
|
||||
LunaButton.text(
|
||||
text: 'Add Header',
|
||||
text: 'settings.AddHeader'.tr(),
|
||||
icon: Icons.add_rounded,
|
||||
onTap: () async => HeaderUtility().addHeader(context,
|
||||
headers: _indexer!.headers, indexer: _indexer),
|
||||
@@ -68,7 +68,7 @@ class _State extends State<ConfigurationSearchEditIndexerHeadersRoute>
|
||||
controller: scrollController,
|
||||
children: [
|
||||
if (_indexer!.headers.isEmpty)
|
||||
LunaMessage.inList(text: 'No Headers Added'),
|
||||
LunaMessage.inList(text: 'settings.NoHeadersAdded'.tr()),
|
||||
..._list(),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -21,15 +21,15 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
bottomNavigationBar: _bottomNavigationBar(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Search',
|
||||
title: 'search.Search'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -38,7 +38,7 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
return LunaBottomActionBar(
|
||||
actions: [
|
||||
LunaButton.text(
|
||||
text: 'Add Indexer',
|
||||
text: 'search.AddIndexer'.tr(),
|
||||
icon: Icons.add_rounded,
|
||||
onTap: SettingsRoutes.CONFIGURATION_SEARCH_ADD_INDEXER.go,
|
||||
),
|
||||
@@ -61,7 +61,7 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
|
||||
List<Widget> _indexerSection() {
|
||||
if (LunaBox.indexers.isEmpty) {
|
||||
return [const LunaMessage(text: 'No Indexers Found')];
|
||||
return [LunaMessage(text: 'search.NoIndexersFound'.tr())];
|
||||
}
|
||||
return _indexers;
|
||||
}
|
||||
@@ -103,8 +103,8 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
const _db = SearchDatabase.HIDE_XXX;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Hide Adult Categories',
|
||||
body: const [TextSpan(text: 'Hide Adult Content')],
|
||||
title: 'search.HideAdultCategories'.tr(),
|
||||
body: [TextSpan(text: 'search.HideAdultCategoriesDescription'.tr())],
|
||||
trailing: LunaSwitch(
|
||||
value: _db.read(),
|
||||
onChanged: _db.update,
|
||||
@@ -117,8 +117,8 @@ class _State extends State<ConfigurationSearchRoute>
|
||||
const _db = SearchDatabase.SHOW_LINKS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Show Links',
|
||||
body: const [TextSpan(text: 'Show Download and Comments Links')],
|
||||
title: 'search.ShowLinks'.tr(),
|
||||
body: [TextSpan(text: 'search.ShowLinksDescription'.tr())],
|
||||
trailing: LunaSwitch(
|
||||
value: _db.read(),
|
||||
onChanged: _db.update,
|
||||
|
||||
@@ -29,7 +29,7 @@ class _State extends State<ConfigurationSonarrConnectionDetailsRoute>
|
||||
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Connection Details',
|
||||
title: 'settings.ConnectionDetails'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -110,15 +110,17 @@ class _State extends State<ConfigurationSonarrConnectionDetailsRoute>
|
||||
LunaProfile _profile = LunaProfile.current;
|
||||
if (_profile.sonarrHost.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Host Required',
|
||||
message: 'Host is required to connect to Sonarr',
|
||||
title: 'settings.HostRequired'.tr(),
|
||||
message: 'settings.HostRequiredMessage'
|
||||
.tr(args: [LunaModule.SONARR.title]),
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (_profile.sonarrKey.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'API Key Required',
|
||||
message: 'API key is required to connect to Sonarr',
|
||||
title: 'settings.ApiKeyRequired'.tr(),
|
||||
message: 'settings.ApiKeyRequiredMessage'
|
||||
.tr(args: [LunaModule.SONARR.title]),
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -130,8 +132,9 @@ class _State extends State<ConfigurationSonarrConnectionDetailsRoute>
|
||||
),
|
||||
).system.getStatus().then((_) {
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'Connected Successfully',
|
||||
message: 'Sonarr is ready to use with LunaSea',
|
||||
title: 'settings.ConnectedSuccessfully'.tr(),
|
||||
message: 'settings.ConnectedSuccessfullyMessage'
|
||||
.tr(args: [LunaModule.SONARR.title]),
|
||||
);
|
||||
}).catchError((error, trace) {
|
||||
LunaLogger().error(
|
||||
@@ -140,7 +143,7 @@ class _State extends State<ConfigurationSonarrConnectionDetailsRoute>
|
||||
trace,
|
||||
);
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Connection Test Failed',
|
||||
title: 'settings.ConnectionTestFailed'.tr(),
|
||||
error: error,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -21,12 +21,12 @@ class _State extends State<ConfigurationSonarrDefaultOptionsRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'settings.DefaultOptions'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
|
||||
@@ -19,12 +19,12 @@ class _State extends State<ConfigurationSonarrDefaultPagesRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'settings.DefaultPages'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
|
||||
@@ -20,14 +20,14 @@ class _State extends State<ConfigurationSonarrRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Sonarr',
|
||||
title: LunaModule.SONARR.title,
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -50,7 +50,7 @@ class _State extends State<ConfigurationSonarrRoute>
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.SONARR.title}',
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.SONARR.title]),
|
||||
trailing: LunaSwitch(
|
||||
value: LunaProfile.current.sonarrEnabled,
|
||||
onChanged: (value) {
|
||||
@@ -102,9 +102,13 @@ class _State extends State<ConfigurationSonarrRoute>
|
||||
const _db = SonarrDatabase.QUEUE_PAGE_SIZE;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Queue Size',
|
||||
title: 'sonarr.QueueSize'.tr(),
|
||||
body: [
|
||||
TextSpan(text: _db.read() == 1 ? '1 Item' : '${_db.read()} Items')
|
||||
TextSpan(
|
||||
text: _db.read() == 1
|
||||
? 'lunasea.OneItem'.tr()
|
||||
: 'lunasea.Items'.tr(args: [_db.read().toString()]),
|
||||
),
|
||||
],
|
||||
trailing: const LunaIconButton(icon: Icons.queue_play_next_rounded),
|
||||
onTap: () async {
|
||||
|
||||
@@ -21,15 +21,15 @@ class _State extends State<ConfigurationTautulliConnectionDetailsRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
bottomNavigationBar: _bottomActionBar(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Connection Details',
|
||||
title: 'settings.ConnectionDetails'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -110,15 +110,17 @@ class _State extends State<ConfigurationTautulliConnectionDetailsRoute>
|
||||
LunaProfile _profile = LunaProfile.current;
|
||||
if (_profile.tautulliHost.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Host Required',
|
||||
message: 'Host is required to connect to Tautulli',
|
||||
title: 'settings.HostRequired'.tr(),
|
||||
message: 'settings.HostRequiredMessage'
|
||||
.tr(args: [LunaModule.TAUTULLI.title]),
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (_profile.tautulliKey.isEmpty) {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'API Key Required',
|
||||
message: 'API key is required to connect to Tautulli',
|
||||
title: 'settings.ApiKeyRequired'.tr(),
|
||||
message: 'settings.ApiKeyRequiredMessage'
|
||||
.tr(args: [LunaModule.TAUTULLI.title]),
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -129,13 +131,14 @@ class _State extends State<ConfigurationTautulliConnectionDetailsRoute>
|
||||
.miscellaneous
|
||||
.arnold()
|
||||
.then((_) => showLunaSuccessSnackBar(
|
||||
title: 'Connected Successfully',
|
||||
message: 'Tautulli is ready to use with LunaSea',
|
||||
title: 'settings.ConnectedSuccessfully'.tr(),
|
||||
message: 'settings.ConnectedSuccessfullyMessage'
|
||||
.tr(args: [LunaModule.TAUTULLI.title]),
|
||||
))
|
||||
.catchError((error, trace) {
|
||||
LunaLogger().error('Connection Test Failed', error, trace);
|
||||
showLunaErrorSnackBar(
|
||||
title: 'Connection Test Failed',
|
||||
title: 'settings.ConnectionTestFailed'.tr(),
|
||||
error: error,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -26,7 +26,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Default Pages',
|
||||
title: 'settings.DefaultPages'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -67,7 +67,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_GRAPHS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Graphs',
|
||||
title: 'tautulli.Graphs'.tr(),
|
||||
body: [TextSpan(text: TautulliGraphsNavigationBar.titles[_db.read()])],
|
||||
trailing:
|
||||
LunaIconButton(icon: TautulliGraphsNavigationBar.icons[_db.read()]),
|
||||
@@ -87,7 +87,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_LIBRARIES_DETAILS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Library Details',
|
||||
title: 'tautulli.LibraryDetails'.tr(),
|
||||
body: [
|
||||
TextSpan(
|
||||
text: TautulliLibrariesDetailsNavigationBar.titles[_db.read()])
|
||||
@@ -110,7 +110,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_MEDIA_DETAILS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Media Details',
|
||||
title: 'tautulli.MediaDetails'.tr(),
|
||||
body: [
|
||||
TextSpan(text: TautulliMediaDetailsNavigationBar.titles[_db.read()]),
|
||||
],
|
||||
@@ -132,7 +132,7 @@ class _State extends State<ConfigurationTautulliDefaultPagesRoute>
|
||||
const _db = TautulliDatabase.NAVIGATION_INDEX_USER_DETAILS;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'User Details',
|
||||
title: 'tautulli.UserDetails'.tr(),
|
||||
body: [
|
||||
TextSpan(text: TautulliUserDetailsNavigationBar.titles[_db.read()]),
|
||||
],
|
||||
|
||||
@@ -20,14 +20,14 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Tautulli',
|
||||
title: LunaModule.TAUTULLI.title,
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -51,7 +51,7 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
Widget _enabledToggle() {
|
||||
return LunaBox.profiles.listenableBuilder(
|
||||
builder: (context, _) => LunaBlock(
|
||||
title: 'Enable ${LunaModule.TAUTULLI.title}',
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.TAUTULLI.title]),
|
||||
trailing: LunaSwitch(
|
||||
value: LunaProfile.current.tautulliEnabled,
|
||||
onChanged: (value) {
|
||||
@@ -66,9 +66,13 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
|
||||
Widget _connectionDetailsPage() {
|
||||
return LunaBlock(
|
||||
title: 'Connection Details',
|
||||
body: const [
|
||||
TextSpan(text: 'Connection Details for Tautulli'),
|
||||
title: 'settings.ConnectionDetails'.tr(),
|
||||
body: [
|
||||
TextSpan(
|
||||
text: 'settings.ConnectionDetailsDescription'.tr(
|
||||
args: [LunaModule.TAUTULLI.title],
|
||||
),
|
||||
),
|
||||
],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: SettingsRoutes.CONFIGURATION_TAUTULLI_CONNECTION_DETAILS.go,
|
||||
@@ -77,8 +81,8 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
|
||||
Widget _defaultPagesPage() {
|
||||
return LunaBlock(
|
||||
title: 'Default Pages',
|
||||
body: const [TextSpan(text: 'Set Default Landing Pages')],
|
||||
title: 'settings.DefaultPages'.tr(),
|
||||
body: [TextSpan(text: 'settings.DefaultPagesDescription'.tr())],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: SettingsRoutes.CONFIGURATION_TAUTULLI_DEFAULT_PAGES.go,
|
||||
);
|
||||
@@ -90,8 +94,10 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
builder: (context, _) {
|
||||
String message = _db.read();
|
||||
return LunaBlock(
|
||||
title: 'Default Termination Message',
|
||||
body: [TextSpan(text: message.isEmpty ? 'Not Set' : message)],
|
||||
title: 'tautulli.DefaultTerminationMessage'.tr(),
|
||||
body: [
|
||||
TextSpan(text: message.isEmpty ? 'lunasea.NotSet'.tr() : message),
|
||||
],
|
||||
trailing: const LunaIconButton(icon: Icons.videocam_off_rounded),
|
||||
onTap: () async {
|
||||
Tuple2<bool, String> result =
|
||||
@@ -106,11 +112,11 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
Widget _activityRefreshRate() {
|
||||
const _db = TautulliDatabase.REFRESH_RATE;
|
||||
return _db.listenableBuilder(builder: (context, _) {
|
||||
String? refreshRate;
|
||||
if (_db.read() == 1) refreshRate = 'Every Second';
|
||||
if (_db.read() != 1) refreshRate = 'Every ${_db.read()} Seconds';
|
||||
String refreshRate = _db.read() == 1
|
||||
? 'lunasea.EverySecond'.tr()
|
||||
: 'lunasea.EverySeconds'.tr(args: [_db.read().toString()]);
|
||||
return LunaBlock(
|
||||
title: 'Activity Refresh Rate',
|
||||
title: 'tautulli.ActivityRefreshRate'.tr(),
|
||||
body: [TextSpan(text: refreshRate)],
|
||||
trailing: const LunaIconButton(icon: LunaIcons.REFRESH),
|
||||
onTap: () async {
|
||||
@@ -125,11 +131,11 @@ class _State extends State<ConfigurationTautulliRoute>
|
||||
const _db = TautulliDatabase.STATISTICS_STATS_COUNT;
|
||||
return _db.listenableBuilder(
|
||||
builder: (context, _) {
|
||||
String? statisticsItems;
|
||||
if (_db.read() == 1) statisticsItems = '1 Item';
|
||||
if (_db.read() != 1) statisticsItems = '${_db.read()} Items';
|
||||
String statisticsItems = _db.read() == 1
|
||||
? 'lunasea.OneItem'.tr()
|
||||
: 'lunasea.Items'.tr(args: [_db.read().toString()]);
|
||||
return LunaBlock(
|
||||
title: 'Statistics Item Count',
|
||||
title: 'tautulli.StatisticsItemCount'.tr(),
|
||||
body: [TextSpan(text: statisticsItems)],
|
||||
trailing: const LunaIconButton(icon: Icons.format_list_numbered),
|
||||
onTap: () async {
|
||||
|
||||
@@ -27,7 +27,7 @@ class _State extends State<ConfigurationWakeOnLANRoute>
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
scrollControllers: [scrollController],
|
||||
title: 'Wake on LAN',
|
||||
title: LunaModule.WAKE_ON_LAN.title,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ class _State extends State<ConfigurationWakeOnLANRoute>
|
||||
|
||||
Widget _enabledToggle() {
|
||||
return LunaBlock(
|
||||
title: 'Enable Wake on LAN',
|
||||
title: 'settings.EnableModule'.tr(args: [LunaModule.WAKE_ON_LAN.title]),
|
||||
trailing: LunaSwitch(
|
||||
value: LunaProfile.current.wakeOnLANEnabled,
|
||||
onChanged: (value) {
|
||||
@@ -63,7 +63,10 @@ class _State extends State<ConfigurationWakeOnLANRoute>
|
||||
return LunaBlock(
|
||||
title: 'settings.BroadcastAddress'.tr(),
|
||||
body: [
|
||||
TextSpan(text: broadcastAddress == '' ? 'Not Set' : broadcastAddress),
|
||||
TextSpan(
|
||||
text:
|
||||
broadcastAddress == '' ? 'lunasea.NotSet'.tr() : broadcastAddress,
|
||||
),
|
||||
],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
@@ -85,7 +88,7 @@ class _State extends State<ConfigurationWakeOnLANRoute>
|
||||
return LunaBlock(
|
||||
title: 'settings.MACAddress'.tr(),
|
||||
body: [
|
||||
TextSpan(text: macAddress == '' ? 'Not Set' : macAddress),
|
||||
TextSpan(text: macAddress == '' ? 'lunasea.NotSet'.tr() : macAddress),
|
||||
],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: () async {
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export 'pages/ui.dart';
|
||||
@@ -1,240 +0,0 @@
|
||||
import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:lunasea/core.dart';
|
||||
import 'package:lunasea/modules/tautulli.dart';
|
||||
import 'package:lunasea/utils/links.dart';
|
||||
|
||||
class DebugMenuUIRoute extends StatefulWidget {
|
||||
const DebugMenuUIRoute({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<DebugMenuUIRoute> createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends State<DebugMenuUIRoute>
|
||||
with LunaScrollControllerMixin, TickerProviderStateMixin {
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
late AnimationController _iconController;
|
||||
late AnimationController _hideController;
|
||||
bool _isFabVisible = true;
|
||||
bool _isFabPaused = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_setupIconController();
|
||||
_setupHideController();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_iconController.dispose();
|
||||
_hideController.dispose();
|
||||
scrollController.removeListener(scrollControllerListener);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void scrollControllerListener() {
|
||||
if (!scrollController.hasClients) return;
|
||||
switch (scrollController.position.userScrollDirection) {
|
||||
case ScrollDirection.forward:
|
||||
if (!_isFabVisible) {
|
||||
_hideController.forward();
|
||||
_isFabVisible = true;
|
||||
}
|
||||
break;
|
||||
case ScrollDirection.reverse:
|
||||
if (_isFabVisible) {
|
||||
_hideController.reverse();
|
||||
_isFabVisible = false;
|
||||
}
|
||||
break;
|
||||
case ScrollDirection.idle:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void _setupIconController() {
|
||||
_iconController = AnimationController(
|
||||
vsync: this,
|
||||
duration: const Duration(milliseconds: LunaUI.ANIMATION_SPEED),
|
||||
);
|
||||
}
|
||||
|
||||
void _setupHideController() {
|
||||
_hideController = AnimationController(
|
||||
vsync: this,
|
||||
duration: const Duration(milliseconds: LunaUI.ANIMATION_SPEED),
|
||||
);
|
||||
_hideController.forward();
|
||||
scrollController.addListener(scrollControllerListener);
|
||||
}
|
||||
|
||||
Future<void> _toggle(BuildContext context) async {
|
||||
HapticFeedback.lightImpact();
|
||||
_isFabPaused ? _iconController.reverse() : _iconController.forward();
|
||||
setState(() => _isFabPaused = !_isFabPaused);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
body: _body(),
|
||||
floatingActionButton: _floatingActionButton(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'settings.DebugMenu'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _floatingActionButton() {
|
||||
return ScaleTransition(
|
||||
scale: _hideController,
|
||||
child: InkWell(
|
||||
child: LunaFloatingActionButtonAnimated(
|
||||
controller: _iconController,
|
||||
icon: AnimatedIcons.pause_play,
|
||||
onPressed: () => _toggle(context),
|
||||
),
|
||||
borderRadius: BorderRadius.circular(28.0),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
..._lunaBlock(),
|
||||
..._tableContents(),
|
||||
..._graphs(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
List<TextSpan> _generateBody(int l) =>
|
||||
List.generate(l, (i) => TextSpan(text: 'Body ${i + 1}'));
|
||||
|
||||
List<LunaTableContent> _generateTableContent(int l) => List.generate(l,
|
||||
(i) => LunaTableContent(title: 'Title ${i + 1}', body: 'Body ${i + 1}'));
|
||||
|
||||
List<Widget> _tableContents() {
|
||||
return [
|
||||
LunaExpandableListTile(
|
||||
title: 'Expandable 1',
|
||||
collapsedSubtitles: _generateBody(2),
|
||||
expandedTableContent: _generateTableContent(4),
|
||||
collapsedTrailing: const LunaIconButton(icon: LunaIcons.ARROW_RIGHT),
|
||||
),
|
||||
LunaTableCard(content: _generateTableContent(4)),
|
||||
];
|
||||
}
|
||||
|
||||
List<Widget> _lunaBlock() {
|
||||
return [
|
||||
LunaBlock(
|
||||
title: 'Title 1',
|
||||
body: _generateBody(1),
|
||||
bodyLeadingIcons: const [LunaIcons.DOWNLOAD],
|
||||
leading: const LunaIconButton(icon: LunaIcons.ARROW_RIGHT),
|
||||
trailing: const LunaIconButton(icon: LunaIcons.ARROW_RIGHT),
|
||||
),
|
||||
LunaBlock(
|
||||
disabled: true,
|
||||
title: 'Title 1',
|
||||
body: _generateBody(1),
|
||||
bodyLeadingIcons: const [LunaIcons.DOWNLOAD],
|
||||
leading: const LunaIconButton(icon: LunaIcons.ARROW_RIGHT),
|
||||
trailing: const LunaIconButton(icon: LunaIcons.ARROW_RIGHT),
|
||||
),
|
||||
const LunaBlock(
|
||||
skeletonEnabled: true,
|
||||
skeletonPoster: true,
|
||||
skeletonSubtitles: 2,
|
||||
),
|
||||
LunaBlock(
|
||||
title: 'Title 1',
|
||||
body: _generateBody(2),
|
||||
posterPlaceholderIcon: LunaIcons.VIDEO_CAM,
|
||||
posterUrl: LunaLinkedContent.theMovieDB(
|
||||
'/qLX91FhHWCVrxDVsw0g2UD5c3Zk.jpg',
|
||||
LinkedContentType.IMAGE_POSTER,
|
||||
),
|
||||
backgroundUrl: LunaLinkedContent.theMovieDB(
|
||||
'/wR3ZbCWM55qbJBcIO7rHm0MB68j.jpg',
|
||||
LinkedContentType.IMAGE_BACKDROP,
|
||||
),
|
||||
onTap: () {},
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
List<Widget> _graphs() {
|
||||
TautulliGraphData data = TautulliGraphData.fromJson(json.decode(
|
||||
'{"categories":["2022-02-05","2022-02-06","2022-02-07","2022-02-08","2022-02-09","2022-02-10","2022-02-11","2022-02-12","2022-02-13","2022-02-14","2022-02-15","2022-02-16","2022-02-17","2022-02-18"],"series":[{"name":"Direct Play","data":[65,27,38,33,31,48,60,33,32,33,20,22,28,68]},{"name":"Direct Stream","data":[0,0,0,0,0,2,0,4,0,0,2,1,0,2]},{"name":"Transcode","data":[9,12,23,12,20,20,9,7,8,5,21,19,23,33]}]}',
|
||||
));
|
||||
return [
|
||||
LunaCard(
|
||||
context: context,
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
height: TautulliGraphHelper.GRAPH_HEIGHT,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Padding(
|
||||
child: LineChart(
|
||||
LineChartData(
|
||||
gridData: TautulliGraphHelper().gridData(),
|
||||
titlesData: TautulliLineGraphHelper.titlesData(data),
|
||||
borderData: TautulliGraphHelper().borderData(),
|
||||
lineBarsData: TautulliLineGraphHelper.lineBarsData(data),
|
||||
lineTouchData:
|
||||
TautulliLineGraphHelper.lineTouchData(context, data),
|
||||
),
|
||||
),
|
||||
padding: LunaUI.MARGIN_DEFAULT,
|
||||
),
|
||||
),
|
||||
TautulliGraphHelper().createLegend(data.series!),
|
||||
],
|
||||
),
|
||||
),
|
||||
LunaCard(
|
||||
context: context,
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
height: TautulliGraphHelper.GRAPH_HEIGHT,
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: Padding(
|
||||
child: BarChart(
|
||||
BarChartData(
|
||||
alignment: TautulliGraphHelper().chartAlignment(),
|
||||
gridData: TautulliGraphHelper().gridData(),
|
||||
titlesData: TautulliGraphHelper().titlesData(data),
|
||||
borderData: TautulliGraphHelper().borderData(),
|
||||
barGroups: TautulliBarGraphHelper.barGroups(context, data),
|
||||
barTouchData:
|
||||
TautulliBarGraphHelper.barTouchData(context, data),
|
||||
),
|
||||
),
|
||||
padding: LunaUI.MARGIN_DEFAULT,
|
||||
),
|
||||
),
|
||||
TautulliGraphHelper().createLegend(data.series!),
|
||||
],
|
||||
),
|
||||
),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:lunasea/core.dart';
|
||||
import 'package:lunasea/router/routes/settings.dart';
|
||||
|
||||
class DebugMenuRoute extends StatefulWidget {
|
||||
const DebugMenuRoute({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<DebugMenuRoute> createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends State<DebugMenuRoute> with LunaScrollControllerMixin {
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'settings.DebugMenu'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _body() {
|
||||
return LunaListView(
|
||||
controller: scrollController,
|
||||
children: [
|
||||
LunaBlock(
|
||||
title: 'UI',
|
||||
trailing: const LunaIconButton(icon: LunaIcons.ARROW_RIGHT),
|
||||
onTap: SettingsRoutes.DEBUG_MENU_UI.go,
|
||||
),
|
||||
const LunaHeader(text: 'Boxes'),
|
||||
LunaBlock(
|
||||
title: 'Clear Alerts Box',
|
||||
onTap: () async {
|
||||
await LunaBox.alerts.clear();
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'Cleared',
|
||||
message: 'Cleared Alerts Box',
|
||||
);
|
||||
},
|
||||
),
|
||||
const LunaHeader(text: 'Toasts'),
|
||||
LunaBlock(
|
||||
title: 'Info',
|
||||
onTap: () async => showLunaInfoSnackBar(
|
||||
title: 'Info',
|
||||
message: null,
|
||||
),
|
||||
),
|
||||
LunaBlock(
|
||||
title: 'Success',
|
||||
onTap: () async => showLunaSuccessSnackBar(
|
||||
title: 'Success',
|
||||
message: null,
|
||||
),
|
||||
),
|
||||
LunaBlock(
|
||||
title: 'Error',
|
||||
onTap: () async => showLunaErrorSnackBar(
|
||||
title: 'Error',
|
||||
message: null,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -18,14 +18,14 @@ class _State extends State<DonationsThankYouRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Donations',
|
||||
title: 'settings.Donations'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -35,11 +35,8 @@ class _State extends State<DonationsThankYouRoute>
|
||||
controller: scrollController,
|
||||
children: [
|
||||
LunaHeader(
|
||||
text: 'Thank You',
|
||||
subtitle: [
|
||||
"Thank you for supporting the open-source community!",
|
||||
"Donations are never expected or assumed, so thank you for giving back and helping LunaSea remain free, forever!",
|
||||
].join("\n\n"),
|
||||
text: 'lunasea.ThankYou'.tr(),
|
||||
subtitle: 'lunasea.ThankYouMessage'.tr(),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -27,7 +27,7 @@ class _State extends State<DonationsRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Donations',
|
||||
title: 'settings.Donations'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -45,7 +45,7 @@ class _State extends State<DonationsRoute> with LunaScrollControllerMixin {
|
||||
} else {
|
||||
return LunaMessage.goBack(
|
||||
context: context,
|
||||
text: 'Not Available',
|
||||
text: 'settings.NotAvailable'.tr(),
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -28,7 +28,7 @@ class _State extends State<NotificationsRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'Notifications',
|
||||
title: 'settings.Notifications'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -41,10 +41,9 @@ class _State extends State<NotificationsRoute> with LunaScrollControllerMixin {
|
||||
future: LunaFirebaseMessaging().areNotificationsAllowed(),
|
||||
builder: (context, AsyncSnapshot<bool> snapshot) {
|
||||
if (snapshot.hasData && !snapshot.data!)
|
||||
return const LunaBanner(
|
||||
headerText: 'Not Authorized',
|
||||
bodyText:
|
||||
'LunaSea is not authorized to show notifications. Please go to your device\'s settings to enable notifications.',
|
||||
return LunaBanner(
|
||||
headerText: 'settings.NotAuthorized'.tr(),
|
||||
bodyText: 'settings.NotAuthorizedMessage'.tr(),
|
||||
icon: Icons.error_outline_rounded,
|
||||
iconColor: LunaColours.red,
|
||||
);
|
||||
@@ -53,8 +52,8 @@ class _State extends State<NotificationsRoute> with LunaScrollControllerMixin {
|
||||
),
|
||||
SettingsBanners.NOTIFICATIONS_MODULE_SUPPORT.banner(),
|
||||
LunaBlock(
|
||||
title: 'Getting Started',
|
||||
body: const [TextSpan(text: 'Information & Setup Instructions')],
|
||||
title: 'settings.GettingStarted'.tr(),
|
||||
body: [TextSpan(text: 'settings.GettingStartedDescription'.tr())],
|
||||
trailing: const LunaIconButton.arrow(),
|
||||
onTap: LunaLinkedContent.NOTIFICATIONS_DOC.launch,
|
||||
),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:lunasea/core.dart';
|
||||
import 'package:lunasea/extensions/string/links.dart';
|
||||
import 'package:lunasea/firebase/auth.dart';
|
||||
import 'package:lunasea/firebase/messaging.dart';
|
||||
import 'package:lunasea/system/webhooks.dart';
|
||||
@@ -21,9 +22,22 @@ class SettingsNotificationsModuleTile extends StatelessWidget {
|
||||
iconColor: module.color,
|
||||
bodyText: module.information,
|
||||
buttons: [
|
||||
LunaButton.text(
|
||||
text: 'settings.Device'.tr(),
|
||||
icon: Icons.devices_rounded,
|
||||
onTap: () async {
|
||||
String deviceId = (await LunaFirebaseMessaging().token)!;
|
||||
await Clipboard.setData(ClipboardData(
|
||||
text: LunaWebhooks.buildDeviceTokenURL(deviceId, module)));
|
||||
showLunaInfoSnackBar(
|
||||
title: 'settings.CopiedURLFor'.tr(args: [module.title]),
|
||||
message: 'settings.CopiedDeviceURL'.tr(),
|
||||
);
|
||||
},
|
||||
),
|
||||
if (LunaFirebaseAuth().isSignedIn)
|
||||
LunaButton.text(
|
||||
text: 'User',
|
||||
text: 'settings.User'.tr(),
|
||||
icon: Icons.person_rounded,
|
||||
onTap: () async {
|
||||
if (!LunaFirebaseAuth().isSignedIn) return;
|
||||
@@ -31,23 +45,16 @@ class SettingsNotificationsModuleTile extends StatelessWidget {
|
||||
await Clipboard.setData(ClipboardData(
|
||||
text: LunaWebhooks.buildUserTokenURL(userId, module)));
|
||||
showLunaInfoSnackBar(
|
||||
title: 'Copied URL for ${module.title}',
|
||||
message: 'Copied your user-based URL to the clipboard',
|
||||
title: 'settings.CopiedURLFor'.tr(args: [module.title]),
|
||||
message: 'settings.CopiedUserURL'.tr(),
|
||||
);
|
||||
},
|
||||
),
|
||||
LunaButton.text(
|
||||
text: 'Device',
|
||||
icon: Icons.devices_rounded,
|
||||
onTap: () async {
|
||||
String deviceId = (await LunaFirebaseMessaging().token)!;
|
||||
await Clipboard.setData(ClipboardData(
|
||||
text: LunaWebhooks.buildDeviceTokenURL(deviceId, module)));
|
||||
showLunaInfoSnackBar(
|
||||
title: 'Copied URL for ${module.title}',
|
||||
message: 'Copied your device-based URL to the clipboard',
|
||||
);
|
||||
},
|
||||
text: 'settings.Documentation'.tr(),
|
||||
icon: LunaIcons.DOCUMENTATION,
|
||||
color: LunaColours.blue,
|
||||
onTap: module.webhookDocs!.openLink,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -3,7 +3,6 @@ import 'package:lunasea/core.dart';
|
||||
import 'package:lunasea/firebase/core.dart';
|
||||
import 'package:lunasea/firebase/messaging.dart';
|
||||
import 'package:lunasea/router/routes/settings.dart';
|
||||
import 'package:lunasea/system/flavor.dart';
|
||||
import 'package:lunasea/system/in_app_purchase/in_app_purchase.dart';
|
||||
|
||||
class SettingsRoute extends StatefulWidget {
|
||||
@@ -22,7 +21,7 @@ class _State extends State<SettingsRoute> with LunaScrollControllerMixin {
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
drawer: _drawer(),
|
||||
body: _body(),
|
||||
);
|
||||
@@ -30,7 +29,7 @@ class _State extends State<SettingsRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _drawer() => LunaDrawer(page: LunaModule.SETTINGS.key);
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
useDrawer: true,
|
||||
scrollControllers: [scrollController],
|
||||
@@ -88,13 +87,6 @@ class _State extends State<SettingsRoute> with LunaScrollControllerMixin {
|
||||
trailing: const LunaIconButton(icon: Icons.settings_rounded),
|
||||
onTap: SettingsRoutes.SYSTEM.go,
|
||||
),
|
||||
if (LunaFlavor.CANDIDATE.isRunningFlavor())
|
||||
LunaBlock(
|
||||
title: 'settings.DebugMenu'.tr(),
|
||||
body: [TextSpan(text: 'settings.DebugMenuDescription'.tr())],
|
||||
trailing: const LunaIconButton(icon: Icons.bug_report_rounded),
|
||||
onTap: SettingsRoutes.DEBUG_MENU.go,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -26,14 +26,14 @@ class _State extends State<SystemRoute> with LunaScrollControllerMixin {
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: 'System',
|
||||
title: 'settings.System'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -48,7 +48,7 @@ class _State extends State<SystemRoute> with LunaScrollControllerMixin {
|
||||
const SettingsSystemBackupRestoreRestoreTile(),
|
||||
LunaDivider(),
|
||||
_logs(),
|
||||
if (LunaImageCache.isSupported) _clearImageCache(),
|
||||
_clearImageCache(),
|
||||
_clearConfiguration(),
|
||||
],
|
||||
);
|
||||
@@ -56,8 +56,8 @@ class _State extends State<SystemRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _logs() {
|
||||
return LunaBlock(
|
||||
title: 'Logs',
|
||||
body: const [TextSpan(text: 'View, Export, and Clear Logs')],
|
||||
title: 'settings.Logs'.tr(),
|
||||
body: [TextSpan(text: 'settings.LogsDescription'.tr())],
|
||||
trailing: const LunaIconButton(icon: Icons.developer_mode_rounded),
|
||||
onTap: SettingsRoutes.SYSTEM_LOGS.go,
|
||||
);
|
||||
@@ -65,17 +65,24 @@ class _State extends State<SystemRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _clearImageCache() {
|
||||
return LunaBlock(
|
||||
title: 'Clear Image Cache',
|
||||
body: const [TextSpan(text: 'Clear Cached Images From the Disk')],
|
||||
title: 'settings.ClearImageCache'.tr(),
|
||||
body: [TextSpan(text: 'settings.ClearImageCacheDescription'.tr())],
|
||||
trailing: const LunaIconButton(icon: Icons.image_not_supported_rounded),
|
||||
onTap: () async {
|
||||
bool result = await SettingsDialogs().clearImageCache(context);
|
||||
if (result) {
|
||||
LunaImageCache().clear();
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'Image Cache Cleared',
|
||||
message: 'Your image cache has been cleared',
|
||||
);
|
||||
result = await LunaImageCache().clear();
|
||||
if (result) {
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'settings.ImageCacheCleared'.tr(),
|
||||
message: 'settings.ImageCacheClearedDescription'.tr(),
|
||||
);
|
||||
} else {
|
||||
showLunaErrorSnackBar(
|
||||
title: 'settings.FailedToClearImageCache'.tr(),
|
||||
message: 'settings.FailedToClearImageCacheDescription'.tr(),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
@@ -83,8 +90,8 @@ class _State extends State<SystemRoute> with LunaScrollControllerMixin {
|
||||
|
||||
Widget _clearConfiguration() {
|
||||
return LunaBlock(
|
||||
title: 'Clear Configuration',
|
||||
body: const [TextSpan(text: 'Clean Slate')],
|
||||
title: 'settings.ClearConfiguration'.tr(),
|
||||
body: [TextSpan(text: 'settings.CleanSlate'.tr())],
|
||||
trailing: const LunaIconButton(icon: Icons.delete_sweep_rounded),
|
||||
onTap: () async {
|
||||
bool result = await SettingsDialogs().clearConfiguration(context);
|
||||
@@ -93,8 +100,8 @@ class _State extends State<SystemRoute> with LunaScrollControllerMixin {
|
||||
if (LunaFirebase.isSupported) LunaFirebaseAuth().signOut();
|
||||
LunaState.reset(context);
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'Configuration Cleared',
|
||||
message: 'Your configuration has been cleared',
|
||||
title: 'settings.ConfigurationCleared'.tr(),
|
||||
message: 'settings.ConfigurationClearedDescription'.tr(),
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
@@ -5,28 +5,27 @@ import 'package:lunasea/modules/settings.dart';
|
||||
import 'package:lunasea/system/filesystem/filesystem.dart';
|
||||
import 'package:lunasea/utils/encryption.dart';
|
||||
|
||||
class SettingsSystemBackupRestoreBackupTile extends ConsumerWidget {
|
||||
class SettingsSystemBackupRestoreBackupTile extends StatelessWidget {
|
||||
const SettingsSystemBackupRestoreBackupTile({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
Widget build(BuildContext context) {
|
||||
return LunaBlock(
|
||||
title: 'settings.BackupToDevice'.tr(),
|
||||
body: [TextSpan(text: 'settings.BackupToDeviceDescription'.tr())],
|
||||
trailing: const LunaIconButton(icon: Icons.upload_rounded),
|
||||
onTap: () async => _backup(context, ref),
|
||||
onTap: () async => _backup(context),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _backup(BuildContext context, WidgetRef ref) async {
|
||||
Future<void> _backup(BuildContext context) async {
|
||||
try {
|
||||
final _values = await SettingsDialogs().backupConfiguration(context);
|
||||
if (_values.item1) {
|
||||
final encryption = ref.watch(encryptionProvider);
|
||||
String data = LunaConfig().export();
|
||||
String encrypted = encryption.encrypt(_values.item2, data);
|
||||
String encrypted = LunaEncryption().encrypt(_values.item2, data);
|
||||
String name = DateFormat('y-MM-dd kk-mm-ss').format(DateTime.now());
|
||||
bool result = await LunaFileSystem().save(
|
||||
context,
|
||||
|
||||
@@ -8,14 +8,14 @@ import 'package:lunasea/vendor.dart';
|
||||
import 'package:lunasea/widgets/sheets/changelog/sheet.dart';
|
||||
import 'package:lunasea/widgets/ui.dart';
|
||||
|
||||
class BuildDetails extends ConsumerStatefulWidget {
|
||||
class BuildDetails extends StatefulWidget {
|
||||
const BuildDetails({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
ConsumerState<BuildDetails> createState() => _State();
|
||||
State<BuildDetails> createState() => _State();
|
||||
}
|
||||
|
||||
class _State extends ConsumerState<BuildDetails> {
|
||||
class _State extends State<BuildDetails> {
|
||||
Future<PackageInfo> packageInfo = PackageInfo.fromPlatform();
|
||||
Future<Tuple2<bool, int?>> checkUpdates = LunaBuild().isLatestBuildNumber();
|
||||
|
||||
@@ -69,7 +69,7 @@ class _State extends ConsumerState<BuildDetails> {
|
||||
if (updates.hasError) {
|
||||
return LunaButton.text(
|
||||
icon: LunaIcons.ERROR,
|
||||
text: 'Error',
|
||||
text: 'lunasea.Error'.tr(),
|
||||
);
|
||||
}
|
||||
if (updates.connectionState == ConnectionState.done && updates.hasData) {
|
||||
|
||||
@@ -6,25 +6,25 @@ import 'package:lunasea/system/filesystem/file.dart';
|
||||
import 'package:lunasea/system/filesystem/filesystem.dart';
|
||||
import 'package:lunasea/utils/encryption.dart';
|
||||
|
||||
class SettingsSystemBackupRestoreRestoreTile extends ConsumerWidget {
|
||||
class SettingsSystemBackupRestoreRestoreTile extends StatelessWidget {
|
||||
const SettingsSystemBackupRestoreRestoreTile({
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
Widget build(BuildContext context) {
|
||||
return LunaBlock(
|
||||
title: 'settings.RestoreFromDevice'.tr(),
|
||||
body: [TextSpan(text: 'settings.RestoreFromDeviceDescription'.tr())],
|
||||
trailing: const LunaIconButton(icon: Icons.download_rounded),
|
||||
onTap: () async => _restore(context, ref),
|
||||
onTap: () async => _restore(context),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _restore(BuildContext context, WidgetRef ref) async {
|
||||
Future<void> _restore(BuildContext context) async {
|
||||
try {
|
||||
LunaFile? file = await LunaFileSystem().read(context, ['lunasea']);
|
||||
if (file != null) await _decryptBackup(context, ref, file);
|
||||
if (file != null) await _decryptBackup(context, file);
|
||||
} catch (error, stack) {
|
||||
LunaLogger().error('Failed to restore device backup', error, stack);
|
||||
showLunaErrorSnackBar(
|
||||
@@ -36,15 +36,13 @@ class SettingsSystemBackupRestoreRestoreTile extends ConsumerWidget {
|
||||
|
||||
Future<void> _decryptBackup(
|
||||
BuildContext context,
|
||||
WidgetRef ref,
|
||||
LunaFile file,
|
||||
) async {
|
||||
Tuple2<bool, String> _key = await SettingsDialogs().decryptBackup(context);
|
||||
if (_key.item1) {
|
||||
final encryption = ref.watch(encryptionProvider);
|
||||
String encrypted = String.fromCharCodes(file.data);
|
||||
try {
|
||||
String decrypted = encryption.decrypt(_key.item2, encrypted);
|
||||
String decrypted = LunaEncryption().decrypt(_key.item2, encrypted);
|
||||
await LunaConfig().import(context, decrypted);
|
||||
showLunaSuccessSnackBar(
|
||||
title: 'settings.RestoreFromCloudSuccess'.tr(),
|
||||
@@ -56,7 +54,7 @@ class SettingsSystemBackupRestoreRestoreTile extends ConsumerWidget {
|
||||
message: 'lunasea.IncorrectEncryptionKey'.tr(),
|
||||
showButton: true,
|
||||
buttonText: 'lunasea.Retry'.tr(),
|
||||
buttonOnPressed: () async => _decryptBackup(context, ref, file),
|
||||
buttonOnPressed: () async => _decryptBackup(context, file),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,14 +24,14 @@ class _State extends State<SystemLogsDetailsRoute>
|
||||
Widget build(BuildContext context) {
|
||||
return LunaScaffold(
|
||||
scaffoldKey: _scaffoldKey,
|
||||
appBar: _appBar() as PreferredSizeWidget?,
|
||||
appBar: _appBar(),
|
||||
body: _body(),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _appBar() {
|
||||
PreferredSizeWidget _appBar() {
|
||||
return LunaAppBar(
|
||||
title: '${widget.type?.title ?? 'All'} Logs',
|
||||
title: 'settings.Logs'.tr(),
|
||||
scrollControllers: [scrollController],
|
||||
);
|
||||
}
|
||||
@@ -42,7 +42,7 @@ class _State extends State<SystemLogsDetailsRoute>
|
||||
if (logs.isEmpty) {
|
||||
return LunaMessage.goBack(
|
||||
context: context,
|
||||
text: 'No Logs Found',
|
||||
text: 'settings.NoLogsFound'.tr(),
|
||||
);
|
||||
}
|
||||
return LunaListViewBuilder(
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user