Merge remote-tracking branch 'origin/main' into feature/pure-black-oled

This commit is contained in:
skalthoff
2025-10-28 21:49:06 -07:00
29 changed files with 177 additions and 127 deletions

View File

@@ -8,31 +8,28 @@ assignees: anultravioletaurora
---
**Describe the bug**
A clear and concise description of what the bug is.
_A clear and concise description of what the bug is._
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**How did this happen?**
_Steps to reproduce the behavior_
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**What should have happened?**
_A clear and concise description of what you expected to happen._
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
**Screenshots / Recordings**
_A picture is worth a thousand words_
**What Device do you have?**
- Device: [e.g. iPhone 15 Pro]
- OS: [e.g. iOS26]
- Version [e.g. 0.19.1]
**Anything else we should know?**
_Add any other context about the problem here._
**Relevant Links**
_Links from Discord, TestFlight, etc_

View File

@@ -1,4 +1,6 @@
<img alt='Jellify logo' src='assets/transparent-banner.png' width="600" height="300" /><br/>
<p align="center">
<img alt='Jellify logo' src='assets/transparent-banner.png' width="600" height="300" />
</p>
[![Latest Version](https://img.shields.io/github/package-json/version/anultravioletaurora/jellify?label=Latest%20Version&color=indigo)](https://github.com/anultravioletaurora/Jellify/releases)
[![publish-beta](https://github.com/anultravioletaurora/Jellify/actions/workflows/publish-beta.yml/badge.svg?branch=main)](https://github.com/anultravioletaurora/Jellify/actions/workflows/publish-beta.yml) [![Publish Over-the-Air Update](https://github.com/Jellify-Music/App/actions/workflows/publish-ota-update.yml/badge.svg)](https://github.com/Jellify-Music/App/actions/workflows/publish-ota-update.yml)
@@ -6,24 +8,24 @@
[![Sponsors](https://img.shields.io/github/sponsors/anultravioletaurora?label=Project%20Sponsors&color=magenta)](https://github.com/sponsors/anultravioletaurora) [![Patreon](https://img.shields.io/badge/Patreon-F96854?logo=patreon&logoColor=white)](https://patreon.com/anultravioletaurora?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink)
## 🔗 Quick Links
## Quick Links
[TestFlight](https://testflight.apple.com/join/etVSc7ZQ)
[![Discord Server](https://dcbadge.limes.pink/api/server/https://discord.gg/yf8fBatktn)](https://discord.gg/yf8fBatktn)
## 📄 Contents
## Contents
- [Info](#-info)
- [Downloading](#-downloading)
- [Screenshots](#-screenshots)
- [Features](#-features)
- [Built with](#-built-with-good-stuff)
- [Support](#-support-the-project)
- [Special Thanks](#-special-thanks-to)
- [Info](#info)
- [Downloading](#downloading)
- [Screenshots](#screenshots)
- [Features](#features)
- [Built with](#built-with-good-stuff)
- [Support](#support-the-project)
- [Special Thanks](#special-thanks)
## Info
## Info
> **jellify** (verb) - _to make gelatinous_ <br>
> [see also](https://www.merriam-webster.com/dictionary/jellify)
@@ -34,11 +36,11 @@ _Jellify_ is a free and open source music player for the [Jellyfin Media Server]
Showcasing the artwork of your library, it has a user interface congruent to what _the big guys_ do. _Jellify_ also provides algorithmic curation of your music (not that you have to use _Jellify_ that way). It's designed to be lightweight, and scale to even the largest of music libraries (...like 100K tracks large).
### 😇 Background
### Background
This app was designed with me and my dad in mind. I wanted us to have a sleek, one stop shop for live recordings of bands we like (read: the Grateful Dead). The UI was designed so that we'd find it instantly familiar and useful. CarPlay / Android Auto support was also a must for us, as we both use CarPlay religiously.
### ⚙️ Recommended Additions
### Recommended Additions
These projects are **not** required to use _Jellify_, but are recommended by us to enrich your Jellyfin music experience!
@@ -59,7 +61,7 @@ These projects are **not** required to use _Jellify_, but are recommended by us
- [Jellyfin-RPC](https://github.com/Radiicall/jellyfin-rpc)
- Displays the content you're currently playing on Discord
## ⬇️ Downloading
## Downloading
### Android
@@ -82,13 +84,13 @@ Head to [releases](https://github.com/Jellify-Music/App/releases) to download th
Install via [Altstore](https://altstore.io) or your favorite sideloading utility
## 📱 Screenshots
## Screenshots
*Screenshots taken on iPhone 15 Pro Max*
---
### 🏠 Home
### Home
<p align="center">
<img src="screenshots/home.png" alt="Jellify Home" width="275" height="600">
@@ -96,7 +98,7 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
---
### 🎵 Library
### Library
**Artists**
@@ -139,7 +141,7 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
---
### 🔍 Search
### Search
<p align="center">
<img src="screenshots/search.png" alt="Search" width="275" height="600">
@@ -147,7 +149,7 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
---
### ▶️ Player
### Player
<p align="center">
<img src="screenshots/player.png" alt="Player" width="275" height="600">
@@ -156,7 +158,7 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
---
### 🚗 CarPlay
### CarPlay
<p align="center">
<img src="screenshots/carplay.gif" alt="CarPlay" width="400" height="250">
@@ -164,16 +166,10 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
---
### 🖥️ On the Server
<p align="center">
<img src="https://github.com/user-attachments/assets/741884a2-b9b7-4081-b3a0-6655d08071dc" alt="Playback Tracking" width="300" height="200">
</p>
## Features
## 💡 Features
### ✨ Current
### Current
- Available via Testflight and Android APK
- APKs are associated with each [release](https://github.com/anultravioletaurora/Jellify/releases)
@@ -191,7 +187,7 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
- Switching Music Libraries
- Google Cast Support
### 🛠 Roadmap (in order of priority)
### Roadmap (in order of priority)
- ["Smart Shuffle"](https://github.com/anultravioletaurora/Jellify/issues/57)
- [CarPlay / Android Auto Support](https://github.com/anultravioletaurora/Jellify/issues/5)
@@ -202,11 +198,11 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
- [Watch (Apple Watch / WearOS) Support](https://github.com/anultravioletaurora/Jellify/issues/61)
- [TV (Android, Apple, Samsung) Support](https://github.com/anultravioletaurora/Jellify/issues/85)
## 🏗 Built with Good Stuff
## Built with Good Stuff
[![Made with React](https://img.shields.io/badge/React-19-blue?logo=react)](https://reactjs.org) [![React Native](https://img.shields.io/badge/React-Native-079?logo=react)](https://reactnative.dev) [![Made with TypeScript](https://img.shields.io/badge/TypeScript-5-blue?logo=typescript&logoColor=white)](https://typescriptlang.org) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![GitHub License](https://img.shields.io/github/license/anultravioletaurora/jellify?color=indigo)](https://github.com/anultravioletaurora/jellify/blob/main/LICENSE)
### 🎨 Frontend
### Frontend
[Tamagui](https://tamagui.dev/)\
[Figtree](https://github.com/erikdkennedy/figtree)\
@@ -221,7 +217,7 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
- Specifically using [Material Community Icons](https://oblador.github.io/react-native-vector-icons/#MaterialCommunityIcons)
### 🎛️ Backend
### Backend
[Jellyfin SDK](https://typescript-sdk.jellyfin.org/)\
[Tanstack Query](https://tanstack.com/query/latest/docs/framework/react/react-native)\
@@ -229,34 +225,34 @@ Install via [Altstore](https://altstore.io) or your favorite sideloading utility
[React Native File Access](https://github.com/alpha0010/react-native-file-access)\
[React Native Google Cast](https://github.com/react-native-google-cast/react-native-google-cast)\
[React Native MMKV](https://github.com/mrousavy/react-native-mmkv)\
[React Native OTA Hot Update](https://github.com/vantuan88291/react-native-ota-hot-update)\
[React Native Nitro OTA](https://github.com/riteshshukla04/react-native-nitro-ota)\
[React Native Track Player](https://github.com/doublesymmetry/react-native-track-player)\
[React Native URL Polyfill](https://github.com/charpeni/react-native-url-polyfill)\
[Zustand](https://github.com/pmndrs/zustand)
### 👩‍💻 Opt-In Monitoring
### Opt-In Monitoring
All logging and metrics gathering is _opt-in_ __by default__. This is merely here to help us make _Jellify_ better.
All logs and metrics are completely anonymized. No data can be traced back to you.
[GlitchTip](https://glitchtip.com/)
- [See logging statements](https://github.com/search?q=repo%3AJellify-Music%2FApp+console.&type=code&p=1)
[TelemetryDeck](https://telemetrydeck.com)
### 💜 Love from Wisconsin 🧀
### Love from Wisconsin 🧀
This is undoubtedly a passion project of [mine](https://github.com/anultravioletaurora), and I've learned a lot from working on it (and the many failed attempts before it). I hope you enjoy using it! Feature requests and bug reports are welcome :)
## 🙏 Support the Project
## Support the Project
You can support _Jellify_ development via [Patreon](https://patreon.com/anultravioletaurora?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink) or [GitHub Sponsors](https://github.com/sponsors/anultravioletaurora) starting at $1.
This allows me to prioritize specific features, acquire additional hardware for testing and development, and helps cover operational costs like Apple Developer Licenses.
Paid supporters will be recognized by having their name displayed within the Settings.
## 🙏 Special Thanks To
## Special Thanks
- The [Jellyfin Team](https://jellyfin.org/) for making this possible with their software, SDKs, and unequivocal helpfulness.
- Extra thanks to [Niels](https://github.com/nielsvanvelzen) and [Bill](https://github.com/thornbill)
@@ -292,6 +288,6 @@ This allows me to prioritize specific features, acquire additional hardware for
- Youve been instrumental in shaping its user experience, my rock during development, and an overall inspiration in my life
## ⭐️ Star History
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=anultravioletaurora/Jellify,Jellify-Music/App&type=Date)](https://www.star-history.com/#anultravioletaurora/Jellify&Jellify-Music/App&Date)

View File

@@ -92,7 +92,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 133
versionName "0.19.0"
versionName "0.19.1"
}
signingConfigs {
debug {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -2,24 +2,20 @@
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="300"
android:viewportHeight="300">
android:viewportWidth="1024"
android:viewportHeight="1024">
<group android:scaleX="0.6"
android:scaleY="0.6"
android:translateX="60"
android:translateY="60">
android:translateX="204.8"
android:translateY="204.8">
<path
android:pathData="M139.33,45.77C126.88,45.71 95.33,48.24 71.29,73.2 61.84,83.02 47.31,102.05 44.66,128.33c-6.62,65.67 47.19,92.93 65.1,71 -32.61,12.45 -59.63,-25.85 -53.37,-68.86 3.11,-21.35 15.93,-37.94 25.19,-47.44 5.43,-5.57 22.89,-21.54 47.6,-25.07 35.98,-5.14 81.37,11.69 69.5,52.88 21.4,-17.16 -0.15,-64.77 -59.37,-65.07zM169.4,70.51c-0.14,0.78 15.72,4.18 18.13,20.06 1.84,12.01 -1.96,24.5 -4.15,30.38 -4.38,11.76 -12.18,24.62 -24.35,36.76 -12.17,12.14 -24.86,20.3 -37.63,24.94 -5.87,2.13 -18.25,5.77 -30.19,3.83 -15.56,-2.49 -19,-17.81 -20.18,-17.6 -1.19,0.21 1.4,18.53 18.94,23.25 13.32,3.6 27.52,0.17 34,-1.85 3.24,-1.01 6.47,-2.24 9.68,-3.68 2.94,3.22 11.67,9.66 25.83,3.23 0.52,2.28 1.5,5.27 2.31,8.73 1.73,10.68 2.13,19.22 8.92,28.34 4.94,5.4 8.5,11.66 11.61,18.22 3.08,6.49 4.05,16.71 0.01,25.21 -2.49,5.23 5.36,8.96 7.84,3.73 5.34,-11.23 4.63,-23.96 -0.45,-33.54 -2.82,-7.44 -7.36,-11.58 -11.89,-20.46 -5.93,-7.95 -4.21,-14.06 -4.92,-23.05 -0.4,-5.97 -1.96,-10.85 -3.63,-13.2 0.17,-0.13 0.35,-0.27 0.52,-0.41 1.74,2.53 4.9,5.86 8.05,9.26 6.76,7.51 13.02,15.63 16.52,25.21 1.36,4.15 2.1,8.6 3.46,13.13 0.99,3.3 3.28,9.41 7.59,13.55 6.38,6.14 15.92,7.81 24.12,4.23 4.94,-2.2 1.71,-9.61 -3.27,-7.49 -4.67,2.04 -10.78,1.38 -15.15,-2.72 -2.94,-2.77 -4.87,-7.35 -5.8,-10 -1.47,-4.17 -2.53,-8.67 -4.26,-13.12 -3.34,-8.95 -8.87,-16.22 -17.56,-27.44 -2.8,-3.83 -5.52,-7.67 -7.7,-9.83 1.21,-1.16 2.48,-2.44 3.67,-3.71 1.71,0.9 4.05,1.87 6.36,3.58 4.31,3.42 7.17,8.23 10.2,12.74 9.02,13.82 16.25,18.39 20.72,20.64 5.78,2.91 11.83,4.03 16.24,7.17 3.07,2.4 5.62,6.1 6.59,9.93 1.25,5.55 9.57,3.68 8.33,-1.87 -1.74,-5.75 -5.17,-11.39 -10.04,-14.97 -5.64,-3.96 -12.1,-5.09 -17.38,-7.72 -9.23,-4.59 -14.69,-13.77 -16.95,-17.76 -2.99,-5.82 -5.94,-11.73 -10.74,-16.3 -1.59,-1.49 -3.04,-2.48 -4.33,-3.11 3.47,0.41 8.54,0.89 14.18,2.65 6.76,2.95 9.45,3.32 25,19.96 2.65,3.43 7.37,7.44 11.24,11.2 5.87,5.86 13.05,10.37 21.14,12.26 6.28,1.48 8.51,-7.93 2.24,-9.43 -3.36,-0.8 -11.8,-3.19 -18.54,-8.32 -3.71,-2.93 -6.98,-6.58 -9.85,-9.95 -2.87,-3.37 -5.99,-7.75 -10.07,-11.91 -5.42,-5.37 -11.81,-9.34 -18.42,-11.8 -6.9,-2.57 -11.79,-3.01 -14.9,-2.58 2.51,-5.49 6.1,-17.19 -3.46,-25.9 1.43,-3.25 2.62,-6.47 3.57,-9.62 1.97,-6.51 5.23,-20.59 1.54,-33.81C187.56,73.17 170.99,69.81 169.4,70.51ZM131.44,75.82C119.85,80.45 108.53,88.22 98.6,98.16 88.68,108.1 80.76,119.31 76.34,130.92c-7.23,19 -6.32,68.18 46.43,44.7 -34.35,3.57 -40.66,-19.79 -32.15,-43.81 3.11,-8.78 9.12,-17.34 16.75,-24.96 7.62,-7.62 16.27,-13.4 24.96,-16.75 31.64,-11.64 46.58,-3.83 43.81,32.15C201.59,61.66 144.74,70.52 131.44,75.82ZM147.51,115.49c-7.36,-0.22 -16.22,5.64 -22.99,13.28 -9.03,10.19 -14.35,23.55 -7.5,29.86 6.85,6.31 20.14,-0.7 29.72,-10.87 9.58,-10.17 15.46,-23.51 7.5,-29.86 -1.99,-1.59 -4.28,-2.34 -6.73,-2.41z"
android:strokeWidth="5.66499"
android:strokeColor="#00000000"
android:fillType="nonZero"
android:strokeLineCap="round">
android:pathData="M452.6,76C405.6,75.7 286.3,85.3 195.5,179.7C159.7,216.8 104.8,288.7 94.8,388C69.8,636.2 273.2,739.3 340.9,656.4C217.6,703.4 115.5,558.7 139.1,396.1C150.9,315.4 199.4,252.7 234.4,216.8C254.9,195.8 320.9,135.4 414.3,122.1C550.3,102.6 721.8,166.2 677,321.9C757.9,257.1 676.4,77.1 452.6,76ZM566.2,169.5C565.7,172.4 625.6,185.3 634.8,245.3C641.7,290.7 627.4,337.9 619.1,360.1C602.5,404.6 573,453.2 527,499.1C481,545 433.1,575.8 384.8,593.3C362.6,601.4 315.9,615.1 270.7,607.8C211.9,598.4 198.9,540.5 194.4,541.3C189.9,542.1 199.7,611.3 266,629.2C316.4,642.8 370,629.8 394.5,622.2C406.7,618.3 419,613.7 431.1,608.3C442.2,620.4 475.2,644.8 528.7,620.5C530.7,629.1 534.4,640.4 537.4,653.4C544,693.8 545.5,726.1 571.2,760.5C589.8,780.9 603.3,804.6 615,829.4C626.7,853.9 630.3,892.6 615.1,924.7C605.7,944.4 635.3,958.5 644.7,938.8C664.9,896.3 662.2,848.2 643,812C632.4,783.9 615.2,768.2 598.1,734.7C575.7,704.6 582.2,681.5 579.5,647.5C578,625 572.1,606.5 565.8,597.7C566.4,597.2 567.1,596.7 567.7,596.1C574.3,605.7 586.3,618.3 598.1,631.1C623.7,659.5 647.3,690.2 660.6,726.4C665.7,742.1 668.5,758.9 673.6,776.1C677.4,788.5 686,811.6 702.3,827.3C726.4,850.5 762.5,856.8 793.5,843.3C812.1,834.9 799.9,806.9 781.1,814.9C763.5,822.6 740.4,820.2 723.8,804.7C712.8,794.2 705.4,776.9 701.9,766.9C696.3,751.1 692.4,734.1 685.8,717.3C673.2,683.5 652.3,656 619.5,613.6C608.9,599.1 598.6,584.6 590.4,576.4C594.9,572.1 599.7,567.2 604.2,562.4C610.7,565.8 619.6,569.5 628.3,575.9C644.6,588.9 655.4,607.1 666.8,624.1C700.9,676.3 728.2,693.6 745.1,702.1C767,713.1 789.9,717.3 806.5,729.2C818.1,738.3 827.8,752.3 831.4,766.7C836.2,787.7 867.6,780.6 862.9,759.6C856.3,737.9 843.4,716.6 825,703C803.7,688.1 779.2,683.8 759.3,673.9C724.4,656.5 703.7,621.9 695.2,606.8C683.9,584.8 672.7,562.4 654.6,545.2C648.6,539.6 643.1,535.8 638.2,533.4C651.4,535 670.5,536.8 691.8,543.4C717.4,554.6 727.5,556 786.3,618.9C796.3,631.8 814.2,647 828.8,661.2C851,683.3 878.1,700.4 908.7,707.5C932.5,713.1 940.9,677.6 917.2,671.9C904.5,668.9 872.6,659.9 847.1,640.5C833.1,629.4 820.7,615.6 809.9,602.9C799.1,590.1 787.3,573.6 771.8,557.9C751.4,537.6 727.2,522.6 702.2,513.3C676.1,503.6 657.6,501.9 645.9,503.5C655.4,482.8 669,438.5 632.8,405.6C638.2,393.3 642.7,381.2 646.3,369.3C653.8,344.7 666.1,291.5 652.1,241.5C634.9,179.5 572.3,166.9 566.2,169.5ZM422.8,189.6C379,207.1 336.2,236.4 298.7,274C261.2,311.6 231.2,353.9 214.5,397.8C187.2,469.6 190.7,655.5 390,566.8C260.2,580.3 236.4,492 268.5,401.2C280.3,368 303,335.6 331.8,306.8C360.6,278 393.3,256.2 426.2,243.5C545.8,199.6 602.2,229.1 591.8,365C687.9,136 473,169.5 422.8,189.6ZM483.5,339.5C455.7,338.7 422.2,360.8 396.6,389.7C362.5,428.2 342.4,478.7 368.3,502.6C394.2,526.4 444.4,499.9 480.6,461.5C516.8,423 539.1,372.6 509,348.6C501.4,342.6 492.8,339.8 483.5,339.5Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="76.6"
android:startY="82.72"
android:endX="233.49"
android:endY="239.61"
<gradient
android:startX="215.5"
android:startY="215.6"
android:endX="808.5"
android:endY="808.6"
android:type="linear">
<item android:offset="0" android:color="#FF00DBB9"/>
<item android:offset="1" android:color="#FF7317FF"/>

View File

@@ -2,5 +2,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -2,5 +2,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#111014</color>
<color name="ic_launcher_background">#0D0E19</color>
</resources>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="300mm"
height="300mm"
viewBox="0 0 300 300"
version="1.1"
id="svg1"
xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><path
id="path6"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6.33371;stroke-linecap:round"
d="M 132.42608,20.981312 C 118.51246,20.911283 83.233511,23.746074 56.360365,51.654305 45.796,62.625558 29.55089,83.905814 26.58811,113.29033 c -7.40294,73.42144 52.764147,103.89842 72.788054,79.38036 -36.463868,13.92446 -66.671402,-28.89748 -59.6722,-76.99187 3.473754,-23.869592 17.814027,-42.416674 28.164335,-53.036571 6.067777,-6.225821 25.589544,-24.085966 53.223751,-28.03376 40.2294,-5.747136 90.97538,13.064823 77.70773,59.122749 23.93052,-19.1854 -0.16561,-72.416675 -66.3737,-72.749926 z m 33.61844,27.660523 c -0.15637,0.873109 17.57063,4.677552 20.26801,22.43059 2.06149,13.422789 -2.18647,27.390333 -4.63596,33.964525 -4.8986,13.14736 -13.61719,27.52365 -27.22475,41.0988 -13.60757,13.57515 -27.791,22.7016 -42.0741,27.88703 -6.56165,2.38218 -20.400716,6.449 -33.757671,4.28356 -17.395471,-2.78877 -21.23873,-19.91698 -22.558854,-19.68101 -1.335432,0.23968 1.561315,20.72272 21.171639,25.99425 14.891942,4.02256 30.768266,0.18731 38.009456,-2.07186 3.62148,-1.12988 7.23511,-2.50103 10.82155,-4.11196 3.28495,3.59755 13.04938,10.79723 28.88307,3.60756 0.58109,2.54687 1.67998,5.8919 2.57742,9.75615 1.93279,11.93762 2.38159,21.49289 9.97511,31.68005 5.5257,6.03215 9.50278,13.04102 12.97768,20.37001 3.44066,7.25698 4.53197,18.68518 0.0145,28.1854 -2.77917,5.84432 5.98727,10.01289 8.76645,4.16857 5.97041,-12.55594 5.17179,-26.78287 -0.5015,-37.49929 -3.14998,-8.32268 -8.2272,-12.94231 -13.28804,-22.87489 -6.63164,-8.89346 -4.70435,-15.72057 -5.5061,-25.77123 -0.44898,-6.67531 -2.19296,-12.13481 -4.06054,-14.75266 0.19433,-0.14943 0.38902,-0.30124 0.58471,-0.45471 1.94031,2.828 5.48286,6.55225 8.99522,10.35414 7.5628,8.40093 14.55322,17.47623 18.46481,28.18628 1.518,4.63827 2.34922,9.61912 3.86468,14.68334 1.10607,3.69475 3.66449,10.51609 8.48217,15.14497 7.13321,6.86804 17.79854,8.73118 26.96605,4.73364 5.52038,-2.45974 1.90681,-10.74731 -3.65205,-8.37588 -5.2181,2.27539 -12.0543,1.54567 -16.93836,-3.04193 -3.28244,-3.09429 -5.44418,-8.22123 -6.4883,-11.17515 -1.64816,-4.66496 -2.82379,-9.69781 -4.76079,-14.66484 -3.7344,-10.0023 -9.91217,-18.14002 -19.62958,-30.68165 -3.13054,-4.28151 -6.1771,-8.57628 -8.6116,-10.99431 1.35116,-1.29249 2.77537,-2.72541 4.10849,-4.14373 1.91368,1.00791 4.53363,2.08915 7.10652,4.00276 4.82027,3.82167 8.01938,9.20222 11.40914,14.23845 10.08919,15.44711 18.1641,20.56112 23.16435,23.07769 6.45911,3.25828 13.22974,4.50847 18.15975,8.01303 3.4288,2.68495 6.28676,6.8256 7.36535,11.09888 1.39967,6.19967 10.69763,4.11044 9.31069,-2.09209 -1.94969,-6.42602 -5.77756,-12.73634 -11.22309,-16.73845 -6.30294,-4.42247 -13.52343,-5.69332 -19.43373,-8.62604 -10.31999,-5.13635 -16.42496,-15.39067 -18.9484,-19.85606 -3.34284,-6.50737 -6.64541,-13.11375 -12.00827,-18.21925 -1.78269,-1.66064 -3.39523,-2.77163 -4.84457,-3.47873 3.88041,0.45662 9.55226,0.99509 15.85042,2.96162 7.55765,3.29282 10.5626,3.71024 27.95346,22.32139 2.96137,3.83614 8.24352,8.31628 12.57159,12.51787 6.5578,6.54831 14.58539,11.59384 23.63927,13.70922 7.01883,1.65857 9.51992,-8.86135 2.50578,-10.5396 -3.75877,-0.89381 -13.19573,-3.56655 -20.73312,-9.29971 -4.14644,-3.27043 -7.80617,-7.35297 -11.01163,-11.12083 -3.20553,-3.76786 -6.69155,-8.66951 -11.25314,-13.31172 -6.05619,-5.99911 -13.20575,-10.43792 -20.5985,-13.19385 -7.71091,-2.87457 -13.18338,-3.36271 -16.65987,-2.88594 2.80508,-6.13646 6.82252,-19.22387 -3.87276,-28.95935 1.60309,-3.63734 2.92801,-7.23174 3.99583,-10.75048 2.20765,-7.27471 5.84933,-23.021753 1.71828,-37.800883 -5.09913,-18.326582 -23.61986,-22.082312 -25.4062,-21.301692 z m -42.4311,5.940061 C 110.65172,59.753012 97.989474,68.444707 86.893063,79.556601 75.796648,90.668498 66.949595,103.19833 62.007446,116.18441 53.923889,137.42491 54.944325,192.4134 113.91851,166.16575 75.517716,170.15678 68.460798,144.04326 77.97804,117.18106 81.454571,107.36863 88.179713,97.792328 96.699944,89.272088 105.2202,80.751833 114.89444,74.29118 124.60891,70.549601 159.9886,57.537934 176.68266,66.263104 173.59418,106.49009 202.03524,38.745967 138.47627,48.6523 123.61342,54.581896 Z m 17.95926,44.352112 c -8.23301,-0.24878 -18.1321,6.306662 -25.70189,14.852052 -10.09307,11.39384 -16.044796,26.32531 -8.38453,33.38155 7.66026,7.05625 22.51622,-0.78205 33.23133,-12.15734 10.71512,-11.37531 17.28889,-26.28767 8.38453,-33.38098 -2.22609,-1.773332 -4.7851,-2.612352 -7.52944,-2.695282 z" /></svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -552,7 +552,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 0.19.0;
MARKETING_VERSION = 0.19.1;
NEW_SETTING = "";
OTHER_LDFLAGS = (
"$(inherited)",
@@ -593,7 +593,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 0.19.0;
MARKETING_VERSION = 0.19.1;
NEW_SETTING = "";
OTHER_LDFLAGS = (
"$(inherited)",

View File

@@ -3,6 +3,9 @@ import { JellifyProvider, useJellifyContext } from '../../src/providers'
import { Text, View } from 'react-native'
import { MMKVStorageKeys } from '../../src/enums/mmkv-storage-keys'
import { storage } from '../../src/constants/storage'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
const queryClient = new QueryClient()
const JellifyConsumer = () => {
const { server, user, library } = useJellifyContext()
@@ -39,9 +42,12 @@ test(`${JellifyProvider.name} renders correctly`, async () => {
)
render(
<JellifyProvider>
<JellifyConsumer />
</JellifyProvider>,
<QueryClientProvider client={queryClient}>
<JellifyProvider>
<JellifyConsumer />
</JellifyProvider>
,
</QueryClientProvider>,
)
const apiBasePath = screen.getByTestId('api-base-path')

View File

@@ -1,6 +1,6 @@
{
"name": "jellify",
"version": "0.19.0",
"version": "0.19.1",
"private": true,
"scripts": {
"init-android": "yarn install --network-concurrency 1",
@@ -36,15 +36,15 @@
"postinstall": "patch-package"
},
"dependencies": {
"@jellyfin/sdk": "^0.12.0",
"@jellyfin/sdk": "0.13.0",
"@react-native-community/cli": "20.0.0",
"@react-native-community/netinfo": "^11.4.1",
"@react-native-masked-view/masked-view": "^0.3.2",
"@react-native-vector-icons/material-design-icons": "^12.3.0",
"@react-navigation/bottom-tabs": "7.5.0",
"@react-navigation/material-top-tabs": "7.3.9",
"@react-navigation/native": "7.1.18",
"@react-navigation/native-stack": "7.5.1",
"@react-navigation/bottom-tabs": "7.6.0",
"@react-navigation/material-top-tabs": "7.4.0",
"@react-navigation/native": "7.1.19",
"@react-navigation/native-stack": "7.6.0",
"@sentry/react-native": "7.1.0",
"@shopify/flash-list": "^2.1.0",
"@tamagui/config": "1.135.4",

View File

@@ -0,0 +1,24 @@
import { useMutation } from '@tanstack/react-query'
import useStreamingDeviceProfile from '../../../stores/device-profile'
import { Api } from '@jellyfin/sdk'
import { getSessionApi } from '@jellyfin/sdk/lib/utils/api'
import { MONOCHROME_ICON_URL } from '../../../configs/config'
const usePostFullCapabilities = () => {
const streamingDeviceProfile = useStreamingDeviceProfile()
return useMutation({
mutationFn: async (api: Api | undefined) => {
if (!api) return
return getSessionApi(api).postFullCapabilities({
clientCapabilitiesDto: {
IconUrl: MONOCHROME_ICON_URL,
DeviceProfile: streamingDeviceProfile,
},
})
},
})
}
export default usePostFullCapabilities

View File

@@ -10,7 +10,10 @@ const usePatronsQuery = () => {
return useQuery({
queryKey: [QueryKeys.Patrons],
queryFn: () => fetchPatrons(api),
select: (patrons) => patrons.sort((a, b) => a.fullName.localeCompare(b.fullName)),
staleTime: ONE_DAY,
refetchOnMount: 'always',
refetchOnWindowFocus: 'always',
})
}

View File

@@ -75,8 +75,8 @@ export default function InfoTab() {
{
title: 'Powered by listeners like you',
subTitle: 'Sponsor on GitHub or Patreon',
iconName: 'heart',
iconColor: '$secondary',
iconName: 'hand-heart',
iconColor: '$success',
children: (
<XStack justifyContent='flex-start' gap={'$4'} marginVertical={'$2'}>
<XStack
@@ -103,9 +103,9 @@ export default function InfoTab() {
),
},
{
title: 'Patreon Wall of Fame',
title: 'Wall of Fame',
subTitle: 'Thank you to these paid members',
iconName: 'patreon',
iconName: 'heart',
iconColor: '$secondary',
children: (
<FlashList

View File

@@ -4,3 +4,6 @@ const OTA_UPDATE_ENABLED = Config.OTA_UPDATE_ENABLED === 'true'
const IS_MAESTRO_BUILD = Config.IS_MAESTRO_BUILD === 'true'
export { OTA_UPDATE_ENABLED, IS_MAESTRO_BUILD }
export const MONOCHROME_ICON_URL =
'https://raw.githubusercontent.com/Jellify-Music/App/refs/heads/main/assets/monochrome-logo.svg'

View File

@@ -17,6 +17,8 @@ import { Api } from '@jellyfin/sdk/lib/api'
import { JellyfinInfo } from '../api/info'
import { queryClient } from '../constants/query-client'
import AXIOS_INSTANCE from '../configs/axios.config'
import useAppActive from '../hooks/use-app-active'
import usePostFullCapabilities from '../api/mutations/session'
/**
* The context for the Jellify provider.
@@ -75,6 +77,8 @@ const JellifyContextInitializer = () => {
const libraryJson = storage.getString(MMKVStorageKeys.Library)
const apiJson = storage.getString(MMKVStorageKeys.Api)
const appIsActive = useAppActive()
const [api, setApi] = useState<Api | undefined>(apiJson ? JSON.parse(apiJson) : undefined)
const [server, setServer] = useState<JellifyServer | undefined>(
serverJson ? JSON.parse(serverJson) : undefined,
@@ -88,6 +92,8 @@ const JellifyContextInitializer = () => {
const [loggedIn, setLoggedIn] = useState<boolean>(false)
const postFullCapabilities = usePostFullCapabilities()
const signOut = () => {
setServer(undefined)
setUser(undefined)
@@ -128,6 +134,10 @@ const JellifyContextInitializer = () => {
else storage.delete(MMKVStorageKeys.Library)
}, [library])
useEffect(() => {
if (appIsActive) postFullCapabilities.mutate(api)
}, [appIsActive, api])
return {
loggedIn,
api,

View File

@@ -1293,10 +1293,10 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
"@jellyfin/sdk@^0.12.0":
version "0.12.0"
resolved "https://registry.yarnpkg.com/@jellyfin/sdk/-/sdk-0.12.0.tgz#39f44caae7271a6320160c46d5626f17ad5217c6"
integrity sha512-do3cks7TD316Qw27lBMHZQ7ufaS1MC8HMsQF5rFv5/DUInuwEOqWthqVyHl3sIjThOThF1zxQyE6OdpUl0dNUg==
"@jellyfin/sdk@0.13.0":
version "0.13.0"
resolved "https://registry.yarnpkg.com/@jellyfin/sdk/-/sdk-0.13.0.tgz#8e5fe68fe6df22b287af2c65c5353cd1b7f2ced4"
integrity sha512-oiBAOXH6s+dKdReSsYgNktBDzbxtg4JVWhEzIxZSxKcWMdSKmBtK41MhXRO7IWAC40DguKUm3nU/Z493qPAlWA==
"@jest/console@30.0.5":
version "30.0.5"
@@ -2128,61 +2128,62 @@
invariant "^2.2.4"
nullthrows "^1.1.1"
"@react-navigation/bottom-tabs@7.5.0":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-7.5.0.tgz#2a851cd9e7c202f90107368612658baebbcd4a32"
integrity sha512-JY9yQDQTv7avXqXdrToyn6ogcBqY2gTXg7C1J6OWZGz7QhlnPZQm375T4nYBWqVWsODVNeNagkCPptZGOxI1rg==
"@react-navigation/bottom-tabs@7.6.0":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-7.6.0.tgz#99e7c2b94faca687a291fc2cb733d663f17037ba"
integrity sha512-5qnicy9SdgnCjEj6wNiJiKgxHtP7gtLi8+owxRy1HatgNknQyIS00dFWlzxHLiRnU5zuIUtX2/9DZoDLrLyrTQ==
dependencies:
"@react-navigation/elements" "^2.7.0"
"@react-navigation/elements" "^2.7.1"
color "^4.2.3"
"@react-navigation/core@^7.12.4":
version "7.12.4"
resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-7.12.4.tgz#73cc4c0989455c93bf21d7aeecc89d3a7006ccde"
integrity sha512-xLFho76FA7v500XID5z/8YfGTvjQPw7/fXsq4BIrVSqetNe/o/v+KAocEw4ots6kyv3XvSTyiWKh2g3pN6xZ9Q==
"@react-navigation/core@^7.13.0":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-7.13.0.tgz#71577637cc32626e208fa994fc13e77394b17932"
integrity sha512-Fc/SO23HnlGnkou/z8JQUzwEMvhxuUhr4rdPTIZp/c8q1atq3k632Nfh8fEiGtk+MP1wtIvXdN2a5hBIWpLq3g==
dependencies:
"@react-navigation/routers" "^7.5.1"
escape-string-regexp "^4.0.0"
fast-deep-equal "^3.1.3"
nanoid "^3.3.11"
query-string "^7.1.3"
react-is "^19.1.0"
use-latest-callback "^0.2.4"
use-sync-external-store "^1.5.0"
"@react-navigation/elements@^2.7.0":
version "2.7.0"
resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-2.7.0.tgz#1d340b8815f9cea48cd48a9a0f079662fb0db943"
integrity sha512-lqlUUTqzKJrm3WYmiy901DSpa5wW8DWSmqNqWlRFWDVjx6SSjOUThQpdMnVXhydPtrTo74yVUPB27oe/jrvo4Q==
"@react-navigation/elements@^2.7.1":
version "2.7.1"
resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-2.7.1.tgz#1b5fc5127762ee7257322b093c08a9da1d2056f2"
integrity sha512-IZO8lx8+ftfbBdaL79FB4mo8PuaMLHnGt4iPLx0TRocIaHHUaPcb4R1ble1DGKeRuyeBbFHu2uLTD1YRDE0lsg==
dependencies:
color "^4.2.3"
use-latest-callback "^0.2.4"
use-sync-external-store "^1.5.0"
"@react-navigation/material-top-tabs@7.3.9":
version "7.3.9"
resolved "https://registry.yarnpkg.com/@react-navigation/material-top-tabs/-/material-top-tabs-7.3.9.tgz#c090c4f48f3162bc6738e794bd32b1616125f80e"
integrity sha512-wWldiNNwH/0gq3fesaUNmCxY/oMKPRkJf2pRp3ZkGtgWguvNSOTQ9HRfQRctugDnMtM1NhlBjBEl3MApd41ORQ==
"@react-navigation/material-top-tabs@7.4.0":
version "7.4.0"
resolved "https://registry.yarnpkg.com/@react-navigation/material-top-tabs/-/material-top-tabs-7.4.0.tgz#db87df9e33af1a7f4214a048063a291813923387"
integrity sha512-7VMRDMsLcvCLR5xGKyM2pggIgkRAXwdrbWP9BiV9YWiHqjBsce+IcOfFp5aWpkjk7fI0tVejjqdq8GEOaZq/Rw==
dependencies:
"@react-navigation/elements" "^2.7.0"
"@react-navigation/elements" "^2.7.1"
color "^4.2.3"
react-native-tab-view "^4.2.0"
"@react-navigation/native-stack@7.5.1":
version "7.5.1"
resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-7.5.1.tgz#8b184a65c49bcd21d859ac06ae9c033e0df319b7"
integrity sha512-OTn+thYqa5z43j8CyVsi/pTAAZHj27ly/fsd9zz8l8ypxoGhYz7Ro0+Gb9MsL+9Yw1QJTXzJ8dk41+Ay1MafKg==
"@react-navigation/native-stack@7.6.0":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-7.6.0.tgz#ee4609aa99e0c82077d578c169fc47e67d249c79"
integrity sha512-LgHUzGayQTuzmGxP/Y8W/cM4RDnWOrb2hjl+bVzTiMZwhGTsr+m32nyyBMdhw4crAgeHpG0muXtgN7VvVK2DJA==
dependencies:
"@react-navigation/elements" "^2.7.0"
"@react-navigation/elements" "^2.7.1"
color "^4.2.3"
sf-symbols-typescript "^2.1.0"
warn-once "^0.1.1"
"@react-navigation/native@7.1.18":
version "7.1.18"
resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-7.1.18.tgz#dc768403c5dfef13b0791fd546eaa213e0d879a5"
integrity sha512-DZgd6860dxcq3YX7UzIXeBr6m3UgXvo9acxp5jiJyIZXdR00Br9JwVkO7e0bUeTA2d3Z8dsmtAR84Y86NnH64Q==
"@react-navigation/native@7.1.19":
version "7.1.19"
resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-7.1.19.tgz#f147e412a9f4a5c5eed85b4bde25171d0ce0297b"
integrity sha512-fM7q8di4Q8sp2WUhiUWOe7bEDRyRhbzsKQOd5N2k+lHeCx3UncsRYuw4Q/KN0EovM3wWKqMMmhy/YWuEO04kgw==
dependencies:
"@react-navigation/core" "^7.12.4"
"@react-navigation/core" "^7.13.0"
escape-string-regexp "^4.0.0"
fast-deep-equal "^3.1.3"
nanoid "^3.3.11"