Compare commits

...

645 commits
ios ... main

Author SHA1 Message Date
tapframe
4daab74e27 added contributors page 2025-10-24 02:14:50 +05:30
tapframe
a7fbd567fd Added collections ection 2025-10-23 17:31:49 +05:30
tapframe
f90752bdb7 Streamscreen new changes update 2025-10-23 14:51:41 +05:30
tapframe
c5590639b1 revert 2025-10-23 13:44:08 +05:30
tapframe
098ab73ba1 anim changes ios ksplayer 2025-10-23 13:26:43 +05:30
tapframe
060b0b927b episode poster fix 2025-10-23 13:26:31 +05:30
tapframe
786e06b27f episodes not fetching backdrop fix tablet layout 2025-10-23 01:57:04 +05:30
tapframe
ef1c34a9c0 improved animations 2025-10-23 00:38:45 +05:30
tapframe
b97481f2d9 refactor streamscreen 2025-10-23 00:34:08 +05:30
tapframe
8d74b7e7ce changes 2025-10-22 23:55:45 +05:30
tapframe
635c97b1ad more improvements 2025-10-22 23:46:50 +05:30
tapframe
673c96c917 new streamscreen layout for tabs init 2025-10-22 23:36:37 +05:30
tapframe
15fc49d84d cleanup repo 2025-10-22 22:24:27 +05:30
tapframe
54cfd194f1 added yml for sponsoring 2025-10-22 22:22:18 +05:30
tapframe
be561c6d9f adjusted android bottom tab height 2025-10-22 17:25:12 +05:30
tapframe
dc8c27dfc4 trailer service improvements 2025-10-22 17:17:20 +05:30
tapframe
ce7f92b540 Custom TTL for Stream cache 2025-10-21 23:34:35 +05:30
tapframe
f0271cd395 orientation fix 2025-10-21 23:14:51 +05:30
tapframe
2a4c076854 fixed subtitle not fetching on cahced strream link 2025-10-21 22:17:42 +05:30
tapframe
c852c56231 orientation optimization 2025-10-21 17:49:49 +05:30
tapframe
614ffc12c0 1.2.6 21 2025-10-21 16:55:53 +05:30
tapframe
d9b2545cdd streamscreen UI fix 2025-10-21 16:30:39 +05:30
tapframe
1ae6b4f108 continue watching changes 2025-10-21 16:09:35 +05:30
tapframe
373efa0564 Implemented caching stream links for faster playback. 2025-10-21 14:53:01 +05:30
tapframe
6c464abdd4 cleanup 2025-10-21 14:18:24 +05:30
tapframe
5d5d77ae1b sizing fix for playercontrols. 2025-10-21 14:12:20 +05:30
tapframe
b2cfc19e96
Merge pull request #202 from qarqun/main
Responsive Video Player Controls with animations
2025-10-21 13:58:23 +05:30
tapframe
e40e8bb7c5
Merge branch 'main' into main 2025-10-21 13:58:00 +05:30
tapframe
a3158be2bd icon change, and cinemeta removal fix 2025-10-21 13:29:17 +05:30
Qarqun
e305dee777 feat: Add responsive video player controls with animations
- Implement responsive sizing for all controls based on screen width (phone/tablet support)
- Add smooth crossfade animation for play/pause button transitions
- Add arc sweep and slide animations for seek buttons (+10/-10s)
- Add touch feedback with semi-transparent circle flash on tap
2025-10-20 19:13:46 +08:00
tapframe
415efd4e03 asepct ratio fix 2025-10-20 14:45:48 +05:30
tapframe
f027788266 ksplayer subtitle init 2025-10-20 14:08:23 +05:30
qarqun
23acda3167
Merge branch 'tapframe:main' into main 2025-10-20 15:35:59 +08:00
tapframe
a8b4dc5a01 airplay ios 2025-10-20 02:26:42 +05:30
tapframe
fd4efe6c7f catalogscreen layout fix 2025-10-19 20:42:41 +05:30
tapframe
68340eac9e update morelikethis sizing 2025-10-19 20:34:37 +05:30
tapframe
175d47f71f adaptive sizing for playercontrols,seriescontent,and commentsection 2025-10-19 20:30:24 +05:30
tapframe
0b764412b2 homescreen imrpovements for tablet screens 2025-10-19 20:08:08 +05:30
tapframe
f7c0c670d7 metadatascreen tablet layout overhaul 2025-10-19 20:08:08 +05:30
tapframe
18bd6ff3ca macos fullscreen player issue fix 2025-10-19 20:08:08 +05:30
tapframe
ac5326ba3f hero Ui changes 2025-10-19 20:08:08 +05:30
tapframe
c5af56537b
Merge pull request #197 from aazz180/main 2025-10-19 18:03:59 +05:30
aazz180
17cdd503e9
Fix the live container 2025-10-19 13:26:55 +01:00
tapframe
688950d0c2 changes 2025-10-19 15:41:02 +05:30
tapframe
eb3082cddb ui updates trakt 2025-10-19 15:37:30 +05:30
tapframe
32bec08f30 ui changes 2025-10-19 15:19:08 +05:30
tapframe
a7f850d577 trakt wathclist integration test 2025-10-19 14:20:38 +05:30
tapframe
08f356cfa4 trakt scrobble optimization 2025-10-19 13:59:40 +05:30
qarqun
6e975ffe26
Merge branch 'tapframe:main' into main 2025-10-19 15:42:24 +08:00
tapframe
64981dd110 clean 2025-10-19 12:51:07 +05:30
tapframe
b5156bcc69 cleanup 2025-10-19 12:50:14 +05:30
tapframe
9ab99a1225 ios homescreen layout shift fix 2025-10-19 12:49:10 +05:30
tapframe
d5edec025c Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-10-19 12:20:56 +05:30
tapframe
ef43463b99 calender screen fix 2025-10-19 12:19:28 +05:30
qarqun
ca2e95e6f4
Merge branch 'tapframe:main' into main 2025-10-19 12:04:34 +08:00
tapframe
559c50fa87
Merge pull request #193 from aazz180/main 2025-10-19 08:54:45 +05:30
aazz180
2ca0a05636
Add Infuse Livecontainer player option 2025-10-18 21:37:11 +01:00
aazz180
363de47313
Update StreamsScreen.tsx 2025-10-18 21:36:25 +01:00
aazz180
bdb2803371
Update StreamsScreen.tsx 2025-10-18 21:35:59 +01:00
aazz180
6eae438300
Update useSettings.ts 2025-10-18 21:35:28 +01:00
tapframe
707ceb711a layout anim 2025-10-18 23:34:43 +05:30
tapframe
024646579e animate catalogsec 2025-10-18 23:32:57 +05:30
Qarqun
f895428e3d Merge branch 'main' of https://github.com/qarqun/NuvioStreaming 2025-10-19 01:21:48 +08:00
Qarqun
698456c205 refactor(player): enhance video controls with modern streaming style
- Moved inline styles to playerStyles.ts for better maintainability
- Redesigned player controls for better user experience:
  - Enhanced skip buttons with rotate animations and semi-transparent backgrounds
  - Enlarged center play/pause button with improved visibility
  - Optimized touch targets and spacing for better interaction
  - Standardized button dimensions and layout

Files changed:
- src/components/player/controls/PlayerControls.tsx
- src/components/player/utils/playerStyles.ts
2025-10-19 01:11:08 +08:00
tapframe
43cf907a2e icon update 2025-10-18 20:53:42 +05:30
tapframe
0a04ba5743 cache changes 2025-10-18 14:58:22 +05:30
tapframe
8b1a40d2e2 ui changes 2025-10-18 13:22:34 +05:30
tapframe
51ae0784cf flashlist update 2025-10-18 12:09:22 +05:30
tapframe
efa5d3f629 fastimage api bug fix 2025-10-18 00:41:32 +05:30
tapframe
fd5861026d floating header logo fetch fix 2025-10-17 23:41:27 +05:30
tapframe
1535ef9aac trailer improvements 2025-10-17 23:19:55 +05:30
tapframe
bb6f1f32a0 anim changes 2025-10-17 22:18:17 +05:30
tapframe
3effdee5c0 optimzed perf 2025-10-17 22:09:42 +05:30
tapframe
bf15c5fb45 ui change 2025-10-17 22:04:28 +05:30
tapframe
5c3ba9e0d8 parallax on hero 2025-10-17 21:54:02 +05:30
tapframe
ce0b39d48b hero carousal anim changes 2025-10-17 21:44:24 +05:30
tapframe
71e3498876 ui fix 2025-10-17 21:29:15 +05:30
tapframe
e8ec05bd51 rn video init for trailers 2025-10-17 20:35:48 +05:30
tapframe
2303c32940 ui changes 2025-10-17 20:32:46 +05:30
tapframe
e9d54bf0d6 trailer section init 2025-10-17 20:18:34 +05:30
tapframe
e435a68aea UI changes 2025-10-17 15:00:36 +05:30
tapframe
d55143e6fb changes 2025-10-16 12:21:05 +05:30
tapframe
e2719c373d improved vlc behaviour 2025-10-16 01:53:30 +05:30
tapframe
b1e9f9b3f8 ui fix 2025-10-15 23:43:06 +05:30
tapframe
2d512053a8 1.2.5 20 2025-10-15 23:27:59 +05:30
tapframe
6cfddb68bb ksplayer changes 2025-10-15 23:16:14 +05:30
tapframe
12d04e84d8 icon changes 2025-10-15 22:33:41 +05:30
tapframe
829e569ccd ui changes 2025-10-15 21:54:02 +05:30
tapframe
7e300e8789 changes 2025-10-15 19:56:01 +05:30
tapframe
6a6a93aec4 glassview init 2025-10-15 16:12:55 +05:30
tapframe
13cba764cc updated readme 2025-10-15 13:25:24 +05:30
tapframe
5263005e92 update readme 2025-10-15 13:23:04 +05:30
tapframe
1a12a6c10c update readme 2025-10-15 13:21:34 +05:30
tapframe
0b134f9266 update readme 2025-10-15 13:18:34 +05:30
tapframe
07233ba9ae update expo sdk to 54 2025-10-15 02:24:20 +05:30
tapframe
92aaae40f6 test 2025-10-15 01:51:57 +05:30
tapframe
faeeaf5ecf test 2025-10-14 22:34:20 +05:30
tapframe
edfbc2d937 icon updates 2025-10-14 14:27:00 +05:30
tapframe
ab8f870e73 UI changes 2025-10-14 13:50:22 +05:30
tapframe
2a5798c107 ui fix streamscreen 2025-10-14 12:16:15 +05:30
tapframe
92441110bf ui changes 2025-10-14 02:52:07 +05:30
tapframe
1a9d59e804 UI changes 2025-10-14 02:43:21 +05:30
tapframe
9e7b9c5fe4 improved downloads 2025-10-14 01:15:37 +05:30
tapframe
615172d29c changes 2025-10-14 00:51:03 +05:30
tapframe
5671323bc1 changes 2025-10-14 00:41:43 +05:30
tapframe
c0263eb3c3 changes 2025-10-14 00:20:54 +05:30
tapframe
a5a5358f7b UI changes tmdb logo 2025-10-13 16:04:25 +05:30
tapframe
2599fd85d7 UI fix 2025-10-13 14:51:04 +05:30
tapframe
84a308e5dc UI changes 2025-10-13 14:01:05 +05:30
tapframe
569d50f25b ui changes 2025-10-13 13:52:25 +05:30
tapframe
93221b9760 added backdrop to set as default hero thumbnail 2025-10-13 13:45:40 +05:30
tapframe
81a7f63782 added backdrop gallery 2025-10-13 13:36:50 +05:30
tapframe
1c7fd533c7 added more details for tvshows/movies 2025-10-13 13:23:19 +05:30
tapframe
a0d9420be2 network logic 2025-10-13 13:16:38 +05:30
tapframe
544dc8b639 import update 2025-10-13 12:28:36 +05:30
tapframe
68f02bbc80 import update 2025-10-13 12:28:24 +05:30
tapframe
1660b0a75b clear 2025-10-13 12:15:59 +05:30
tapframe
d691189973 fixed backdrop zoom in laoding overlay. 2025-10-13 12:15:26 +05:30
tapframe
03da6c9a0c push 2025-10-13 01:48:15 +05:30
tapframe
46b0ed44bd sub timing adjust 2025-10-12 12:05:22 +05:30
tapframe
362000d6df sub default changes 2025-10-12 11:21:51 +05:30
tapframe
fb8b65e61b trailerplayer stuck after finishing fix 2025-10-12 10:44:13 +05:30
tapframe
03bded3775 1.2.4 2025-10-12 03:09:30 +05:30
tapframe
f605dd3d49 changes CP 2025-10-12 03:02:27 +05:30
tapframe
303c4c909e update dependencies 2025-10-12 00:32:18 +05:30
tapframe
8178dfc215 removed aggressive cache cleaning 2025-10-12 00:27:30 +05:30
tapframe
714226b6a5 push 2025-10-12 00:09:24 +05:30
tapframe
383ac95e90 migration from expo-image to RN Fast-image 2025-10-12 00:09:07 +05:30
tapframe
67232f5a8e ratingscreen UI fix 2025-10-11 23:34:45 +05:30
tapframe
d399c8f774 dynamic type detection 2025-10-11 01:25:43 +05:30
tapframe
4e3c9c208f type:tv addon detection fix 2025-10-11 01:20:26 +05:30
tapframe
fb316d9f37 added langauge filtering for plugnins 2025-10-11 01:06:37 +05:30
tapframe
0c14d8641d some UI fix 2025-10-11 00:16:07 +05:30
tapframe
7dceb23e3d some addon improvements 2025-10-10 23:42:28 +05:30
tapframe
704c642a8f tablet padding changes 2025-10-09 16:16:26 +05:30
tapframe
230afd7414 update image caching 2025-10-09 12:40:19 +05:30
tapframe
f146f6a312 update aimodel 2025-10-09 11:12:49 +05:30
tapframe
69d9885e30 changes 2025-10-08 17:37:46 +05:30
tapframe
ea3fe35790 fixes 2025-10-08 17:24:14 +05:30
tapframe
a67c34f8f6 fixes 2025-10-08 16:57:31 +05:30
tapframe
b5b61d05f8 ui changes 2025-10-08 16:53:56 +05:30
tapframe
581e912d4c multiple addon seach func 2025-10-08 16:31:07 +05:30
tapframe
f31942efdf UI fix 2025-10-08 13:47:56 +05:30
tapframe
238f08192f some tmdb logo fetching logic changes 2025-10-08 13:39:49 +05:30
tapframe
42c236e235 removed harcorded metahub 2025-10-08 12:50:32 +05:30
tapframe
14163513e3 some changes 2025-10-08 11:53:12 +05:30
tapframe
563208689b some addon id prefix detection improvemets 2025-10-08 11:39:40 +05:30
tapframe
106461b2b2 ui fix 2025-10-06 20:34:59 +05:30
tapframe
0f5fbdf296 trakt improvements 2025-10-06 20:32:18 +05:30
tapframe
cfa6bb8689 dropped globalcache 2025-10-05 23:49:04 +05:30
tapframe
ec23dcc3cb ui changes 2025-10-05 23:45:30 +05:30
tapframe
13d72338a5 trakt scrobble imrpovements 2025-10-05 22:59:40 +05:30
tapframe
25988bdb7b UI changes - removed VIA [provider] from player loading overlay 2025-10-05 22:45:27 +05:30
tapframe
0a840b1cb0 UI changes 2025-10-05 20:33:51 +05:30
tapframe
ce292ce9d3 UI changes 2025-10-05 20:28:04 +05:30
tapframe
90ab5e6577 fixed scrollview comment modal 2025-10-05 20:23:21 +05:30
tapframe
b15b569fce ui changes 2025-10-05 20:00:22 +05:30
tapframe
15ab70b524 UI changes 2025-10-05 19:58:24 +05:30
tapframe
6db159e944 update trakt comment 2025-10-05 19:44:16 +05:30
tapframe
35d3096ce4 streamscreen fetch issue fix 2025-10-05 18:51:13 +05:30
tapframe
cc2e0308d7 trakt comment added 2025-10-05 18:40:06 +05:30
tapframe
ca52a81141 some ui changes 2025-10-05 17:44:31 +05:30
tapframe
4f1b8103d0 1.2.3 18 2025-10-05 00:20:26 +05:30
tapframe
71487fce59 trakt list sorting order fix 2025-10-04 23:58:24 +05:30
tapframe
ff1b406c48 update app v 2025-10-04 22:06:56 +05:30
tapframe
61418186b2 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-10-04 22:06:28 +05:30
tapframe
9d54ec44e4
Merge pull request #164 from CrissZollo/feature-playback-speed
Feature playback speed
2025-10-04 22:06:19 +05:30
tapframe
60e27da57d local backup improvements 2025-10-04 21:27:52 +05:30
CrissZollo
5668d40bc1 Added current speed indicator 2025-10-04 17:48:05 +02:00
CrissZollo
33720c5079 Added functionality to set playbackspeed in exoPlayer 2025-10-04 17:48:05 +02:00
tapframe
88313e6d06 changes 2025-10-04 21:01:02 +05:30
tapframe
6d4edabb46
Merge pull request #163 from CrissZollo/fix-timeline-time
Timeline corrections
2025-10-04 20:29:29 +05:30
tapframe
bfacc4a1ee local backup restore feature 2025-10-04 20:29:05 +05:30
Christoffer Kronblad
f72404e22a
Merge branch 'tapframe:main' into fix-timeline-time 2025-10-04 16:22:21 +02:00
CrissZollo
340d109e72 Increasing gap for metadata by 50% 2025-10-04 16:21:37 +02:00
tapframe
87aa913f5f update pluginscreen UI 2025-10-04 17:16:16 +05:30
tapframe
5a22ab54fb improved caching behaviour 2025-10-04 17:07:30 +05:30
tapframe
90f99985a0 localscrapers caching 2025-10-04 16:51:51 +05:30
CrissZollo
6c8502d8fe removed comment 2025-10-04 12:57:53 +02:00
CrissZollo
64c2129b1d Fixes some logic to runtime calculations format 2025-10-04 12:52:02 +02:00
tapframe
7a64851256 dedup fix streamscreen 2025-10-03 17:17:17 +05:30
tapframe
c358c794ec dedup fix localscraper 2025-10-03 16:56:58 +05:30
tapframe
028c6d2823 increased streamscreen link fetching timeout 2025-10-01 19:31:59 +05:30
tapframe
96da369f62 improved url encodng logic for ios 2025-10-01 12:09:44 +05:30
tapframe
43d4db022c
Merge pull request #157 from CrissZollo/fix-timeline-time
Small fixes to timeline time
2025-10-01 01:31:10 +05:30
tapframe
221794026e some UI changes 2025-10-01 01:28:13 +05:30
tapframe
16c460cdc2 new toast library 2025-10-01 01:13:27 +05:30
CrissZollo
89416bd714 Small fixes to timeline time 2025-09-30 21:32:00 +02:00
tapframe
56654e1ced
Merge pull request #156 from CrissZollo/fix-action-menu
Action menu fixes and utilisation
2025-10-01 00:57:09 +05:30
tapframe
7de8a86869 UI changes 2025-10-01 00:52:03 +05:30
tapframe
3220e91f1c Added TMDB Multilang Support 2025-10-01 00:41:34 +05:30
CrissZollo
2da663ecd1 Hid the 'Add to playlist' for action menu. 2025-09-30 20:51:59 +02:00
tapframe
2a89695b0b Added option to enable/disable tmdb enriched metadata for addons 2025-09-30 23:55:43 +05:30
CrissZollo
7ca74b3b0d Adding packages and updates 2025-09-30 19:29:42 +02:00
tapframe
b0b309b0f1
Merge pull request #155 from tapframe/revert-153-main
Revert "Fix trakt scrobbling algorithm"
2025-09-30 22:02:42 +05:30
tapframe
5e22f3b0da
Revert "Fix trakt scrobbling algorithm" 2025-09-30 22:01:00 +05:30
tapframe
9d32c483eb
Merge pull request #153 from aayushrautela/main
Fix trakt scrobbling algorithm
2025-09-30 18:42:47 +05:30
tapframe
78130a54aa
Merge pull request #149 from CrissZollo/feature-length-time
Feature: Changed the time to display in H:MIN instead of only MIN.
2025-09-30 18:41:18 +05:30
tapframe
1f49de9b27 TV Show stream fetching fixed 2025-09-30 18:35:15 +05:30
tapframe
1f085604ee 1.2.2 17 2025-09-30 18:00:12 +05:30
tapframe
4f593459b1 1.2.1 2025-09-30 17:17:48 +05:30
tapframe
b8d3d68b65 Added ExoPlayer FFmpeg Extension for better Codec Support 2025-09-30 17:10:59 +05:30
tapframe
004ee178a4 some VLCPLayer fixes 2025-09-30 16:03:39 +05:30
tapframe
07eab50848 addon stream fetching imrpovements 2025-09-30 15:32:29 +05:30
CrissZollo
b3b6bdee4e Added long press on search items. 2025-09-29 23:06:57 +02:00
Aayush Rautela
eea003c170
Delete .github/workflows/ci.yml 2025-09-29 23:03:28 +02:00
Aayush Rautela
1ca8813e58 C/I 2025-09-29 22:59:14 +02:00
Aayush Rautela
64c9919e28 Enhance ContinueWatchingSection to fetch and handle both watched movies and shows from Trakt, improving filtering logic for displayed content. 2025-09-29 22:56:12 +02:00
CrissZollo
04f6a0b6be Fixes for adding/removing watched/library from library/home 2025-09-29 22:35:54 +02:00
CrissZollo
35ace0214a Added the longpress menu for the library menu 2025-09-29 22:10:03 +02:00
tapframe
bbbc22f30f Pluginscreen UI changes 2025-09-30 01:39:00 +05:30
tapframe
9ae0a7010c showbox support 2025-09-30 01:21:10 +05:30
CrissZollo
7fa4d20da0 Fix for mark as watched disappearing on restart 2025-09-29 21:16:05 +02:00
CrissZollo
b49514f52b Update npm packages 2025-09-29 20:36:41 +02:00
tapframe
92973c1c7b changes 2025-09-29 16:53:10 +05:30
tapframe
271126b665 downloading feature initial commit 2025-09-29 16:02:53 +05:30
tapframe
ebb7d4cec6 Stability improvement on catalogsection 2025-09-29 14:55:22 +05:30
tapframe
f86e6256a7 small UI changes 2025-09-29 14:25:51 +05:30
CrissZollo
ebf2ea50ed Feature: Changed the time to display in H:MIN instead of only MIN. Runtimes less than 60 still shows only MIN 2025-09-28 22:38:13 +02:00
tapframe
a877f5ac13 push 2025-09-28 20:56:52 +05:30
tapframe
cbd2283bf8 Audio Lang display fix 2025-09-28 20:53:00 +05:30
tapframe
fca3c46372 perf opt for homesreen 2025-09-28 12:33:58 +05:30
tapframe
b43957e6f9 some UI optimization 2025-09-28 11:44:32 +05:30
tapframe
57036aaffb app opening glitch fix 2025-09-28 10:43:35 +05:30
tapframe
999a33f82b 1.2.1 16 2025-09-26 23:06:53 +05:30
tapframe
09256f89e5 push 2025-09-26 22:52:25 +05:30
tapframe
198828af16 UI changes 2025-09-26 22:02:46 +05:30
tapframe
a7d3a8acc7 some fixes 2025-09-26 21:58:24 +05:30
tapframe
838f74caa2 added back ksplayer files 2025-09-26 21:17:47 +05:30
tapframe
88a1399c3b push 2025-09-26 00:11:19 +05:30
tapframe
8bb6657c6b 1.2.1 16 2025-09-25 23:26:22 +05:30
tapframe
a663f58502 account loading.. fix 2025-09-25 23:13:09 +05:30
tapframe
e9659ee305 auto lock player fix 2025-09-25 23:00:07 +05:30
tapframe
0b7bcb52da addon sync fix 2025-09-25 22:26:33 +05:30
tapframe
a25ede1284 trakt fix test 2025-09-25 22:17:39 +05:30
tapframe
3d9d0f297c push 2025-09-25 21:21:34 +05:30
tapframe
fcdd13a307 push 2025-09-25 21:12:45 +05:30
tapframe
d1fbb7e90b update readme 2025-09-25 21:09:35 +05:30
tapframe
97c400130c Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-09-23 18:38:37 +05:30
tapframe
534823843b changes 2025-09-23 18:23:46 +05:30
tapframe
1e9c8b07ac
Merge pull request #122 from CrissZollo/url
Adding addons with stremio:// URL
2025-09-23 00:31:35 +05:30
CrissZollo
1673dfaa7a Update gradlew file permissions to make it executable 2025-09-22 20:17:12 +02:00
tapframe
8453619067 some changes 2025-09-22 23:34:15 +05:30
tapframe
cdec19db1f some changes 2025-09-22 23:02:01 +05:30
tapframe
c91546dc1e build num fix 2025-09-22 21:38:48 +05:30
tapframe
4afadccb24 1.2.0 2025-09-22 21:17:48 +05:30
CrissZollo
04d22e0eca Changing stremio addon URL to correct wanted format 2025-09-22 17:28:56 +02:00
tapframe
c067b3f7fb changes 2025-09-22 20:13:22 +05:30
tapframe
e66bd2df83 VLC import fix for iOS 2025-09-22 19:03:45 +05:30
tapframe
00937f37ec Merge remote-tracking branch 'origin/main' 2025-09-22 18:47:33 +05:30
tapframe
8461d7f8b7 VLC Complete 2025-09-22 18:46:52 +05:30
tapframe
5764825c1d vlc fix 2025-09-22 18:04:02 +05:30
tapframe
37ece44b9b vlcplayer init 2025-09-22 17:14:50 +05:30
tapframe
89669f4016
Merge pull request #117 from CrissZollo/customConfirmation
New custom confirmation popup
2025-09-22 16:16:10 +05:30
tapframe
83c3bdbdde some fix 2025-09-21 22:20:14 +05:30
Christoffer Kronblad
5d2fdbdde1
Merge branch 'tapframe:main' into customConfirmation 2025-09-21 18:41:18 +02:00
tapframe
30b148d783 some changes on ios player 2025-09-21 22:02:58 +05:30
CrissZollo
46b8173b41 Updated all Alert.alert to the new custom one 2025-09-21 18:17:43 +02:00
CrissZollo
8d60bff989 Updated confirmation popup to be more custom and uses the current selected theme 2025-09-21 17:19:56 +02:00
tapframe
53b439f1fd small fix 2025-09-21 17:00:30 +05:30
tapframe
0b3a36c76f catalogscreen optimziation 2025-09-21 16:39:08 +05:30
tapframe
c1503f0614 homescreen optimization 2025-09-21 16:35:36 +05:30
tapframe
52740c26de AI fix,. changes model to - x-ai/grok-4-fast:free 2025-09-21 14:00:37 +05:30
tapframe
f961e5ac3f HeroSection Image jumping fix 2025-09-21 13:56:41 +05:30
tapframe
47dfaa26c0 kitsu bug fix 2025-09-21 13:44:55 +05:30
tapframe
a0d33be096 KITSU id prefix fix 2025-09-21 13:34:10 +05:30
tapframe
4367be97f8 sidestore release 2025-09-21 06:46:57 +05:30
tapframe
11b4e7889e 1.1.1 14 2025-09-20 16:36:45 +05:30
tapframe
f1ba70db89 updated android to disable OTA check on start 2025-09-20 16:33:17 +05:30
tapframe
8159cfeadb Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-09-20 16:26:52 +05:30
tapframe
c619484657
Merge pull request #107 from CrissZollo/notifications 2025-09-20 15:33:40 +05:30
tapframe
d1fafe64da rename 2025-09-20 12:55:45 +05:30
CrissZollo
3e55dff542 Fixed mark/unmark as watched (long press) and adding/removing from library (long press) 2025-09-20 09:21:04 +02:00
tapframe
718868f7b5 Addon sync fix 2025-09-20 12:45:32 +05:30
tapframe
32591b2710 sync fix addon 2025-09-20 12:38:32 +05:30
CrissZollo
045e37a0d3 Updated so scheduled notifications does not cancel on test and are added and removed by saving to library 2025-09-20 09:02:28 +02:00
CrissZollo
02ef82a804 Updated test notification text 2025-09-20 08:36:11 +02:00
CrissZollo
c6a2c52365 Fixed test notification and is now instant 2025-09-20 08:32:53 +02:00
tapframe
0011079199 ksp test 2025-09-20 09:35:48 +05:30
tapframe
eb3615acc6 Player fixes 2025-09-20 09:27:22 +05:30
tapframe
f76df498f2 small cahnges 2025-09-19 17:39:31 +05:30
tapframe
de6c74bee9 bug fix 2025-09-19 15:05:37 +05:30
tapframe
7379a81f01 TRAKT TEST 2025-09-19 15:00:18 +05:30
tapframe
5a6d5a66b0 Streamscreen UI changes 2025-09-19 14:54:41 +05:30
tapframe
c710a173f2 videoplayer fix 2025-09-19 14:46:24 +05:30
tapframe
877a4c5dc6 android freeze fix 2025-09-19 13:38:46 +05:30
tapframe
0fcc4edde1 Quality sorting fix 2025-09-18 23:29:38 +05:30
tapframe
7ed39d3926 small UI changes 2025-09-18 22:57:40 +05:30
tapframe
6273696b59 release 1.1.0 2025-09-18 17:09:36 +05:30
tapframe
6070ed1dce player switch logic fix ios 2025-09-18 16:26:43 +05:30
tapframe
abfccd0e36 Sync behaviour improvments 2025-09-18 15:32:05 +05:30
tapframe
62defd4773 version update 2025-09-18 15:01:57 +05:30
tapframe
ff4b8f9bbc subtitle size reset fix 2025-09-18 14:59:53 +05:30
tapframe
532d6fb8a0 Sensitivity adjustments for videoplayers 2025-09-18 14:47:20 +05:30
tapframe
73b56bad4b cast modal fix 2025-09-18 14:14:30 +05:30
tapframe
e98012862c subtitle fix 2025-09-18 13:48:09 +05:30
tapframe
83136ea659 small bug fixes. 2025-09-18 02:16:45 +05:30
tapframe
688ea2b9d3 cleaned VLC 2025-09-18 02:09:34 +05:30
tapframe
18815b8233 KSPlayre AUdio track selection fix 2025-09-18 01:56:05 +05:30
tapframe
e9e16ed05a KSPlayer first init 2025-09-18 01:01:47 +05:30
tapframe
5372513142 COMMIT TEST 2025-09-17 23:22:01 +05:30
tapframe
c767de12aa VideoPlayer code cleanup 2025-09-17 20:23:46 +05:30
tapframe
d0719fabec bug fixes 2025-09-17 19:37:08 +05:30
tapframe
b21efa0df0 fixed catalogscreen infinite loop 2025-09-17 16:05:41 +05:30
tapframe
502a683ba2 Streamscreen UI Truncation fix 2025-09-17 15:20:19 +05:30
tapframe
59c0b6ba1b Homescreen layout and visual glithches optimization. 2025-09-17 13:36:05 +05:30
tapframe
a0626e8f8a CastModal Back gesture fix 2025-09-17 13:12:09 +05:30
tapframe
5143917117 UI changes for pluginscreen 2025-09-17 13:07:10 +05:30
tapframe
8d488298cf Audio selection bug fixes 2025-09-17 12:30:47 +05:30
tapframe
2dd2b7fc0b TEST 2025-09-17 03:49:22 +05:30
tapframe
f44c0df168 fix TEST CP 2025-09-17 03:02:31 +05:30
tapframe
1ee1a0c3f7 changes 2025-09-17 00:25:05 +05:30
tapframe
3c839c5ea1 some videoplayer enhancemnets 2025-09-16 02:42:18 +05:30
tapframe
680a1b1ea6 fixes 2025-09-16 01:34:38 +05:30
tapframe
2b3069a988 authscreen fix 2025-09-15 23:32:16 +05:30
tapframe
8ff8869f05 update 2025-09-15 22:51:28 +05:30
tapframe
699a0e96ed Stable 1.0.0 2025-09-15 22:45:11 +05:30
tapframe
830a1a3437 changes 2025-09-15 22:00:53 +05:30
tapframe
0ff28a2c7b changes 2025-09-15 21:42:28 +05:30
tapframe
c18f984eac ui changes 2025-09-15 20:38:37 +05:30
tapframe
3138f33fee changes 2025-09-15 18:09:20 +05:30
tapframe
cbd37ac8d8 repo cleanup 2025-09-15 17:53:23 +05:30
tapframe
ed2b2c9818 update readme 2025-09-15 17:50:42 +05:30
tapframe
2f784e3b22 update readme 2025-09-15 17:47:49 +05:30
tapframe
2d4be20f72 update Readme 2025-09-15 17:45:27 +05:30
tapframe
3b460ec63f trakt update 2025-09-15 17:40:50 +05:30
tapframe
22a118c383 subtitle fix 2025-09-15 14:09:26 +05:30
tapframe
3ea069926b Z-Index fix 2025-09-15 12:07:26 +05:30
tapframe
a5dc2c4d66 ripple fix 2025-09-15 02:32:08 +05:30
tapframe
dc181905e9 improved player detection logic ios 2025-09-15 02:18:23 +05:30
tapframe
a241de97f6 push 2025-09-15 01:20:11 +05:30
tapframe
3ce0db9d2a small changes 2025-09-14 16:44:42 +05:30
tapframe
6b4391e954 Fixed Webstreamer addon support issue 2025-09-14 16:16:48 +05:30
tapframe
f111514090 double encoded url fix 2025-09-14 16:14:18 +05:30
tapframe
2bf7dcd635 animation fix 2025-09-14 16:01:33 +05:30
tapframe
74858bff23 rotation fix 2025-09-14 15:52:09 +05:30
tapframe
e430dced9f changes 2025-09-13 17:39:50 +05:30
tapframe
fe483ea7aa trailer server test. 2025-09-13 17:02:11 +05:30
tapframe
b03f550765 support for moviebox 2025-09-13 16:13:54 +05:30
tapframe
591bdfeb77 bug fixes 2025-09-13 15:16:04 +05:30
tapframe
2c2f28ddd2 small fix 2025-09-13 13:41:08 +05:30
tapframe
f3a8cb751d some fix 2025-09-13 13:25:08 +05:30
tapframe
263da30f17 trakt continue watching removal fix 2025-09-13 13:21:43 +05:30
tapframe
a5d2756854 seriescontent optimziation 2025-09-13 12:18:19 +05:30
tapframe
4667357a25 push 2025-09-13 02:45:58 +05:30
tapframe
48de270557 Beta 11 2025-09-13 02:39:56 +05:30
tapframe
bd69cd2128 changes 2025-09-13 02:13:36 +05:30
tapframe
37baa6f928 changes 2025-09-13 02:07:06 +05:30
tapframe
adafa5cc36 fix 2025-09-13 01:50:00 +05:30
tapframe
81dab0e82d fix 2025-09-13 01:31:53 +05:30
tapframe
6a0295b94e test 2025-09-13 01:17:29 +05:30
tapframe
1cb4b5f2ec added brightness and volume control 2025-09-13 00:50:09 +05:30
tapframe
2a3c504c67 test 2025-09-12 23:45:42 +05:30
tapframe
67648ea6db imrpoved android videoplayer logic 2025-09-12 23:09:38 +05:30
tapframe
fa03d4455f fixed audio selection issue 2025-09-12 22:48:26 +05:30
tapframe
fa7352f4fa AIChatScreen optimziation 2025-09-11 20:09:24 +05:30
tapframe
9410b18962 ai bug fix 2025-09-11 19:31:28 +05:30
tapframe
6162c86347 UI Changes 2025-09-11 17:43:47 +05:30
tapframe
0290b9318e ui changes 2025-09-11 17:27:51 +05:30
tapframe
9ba14f2f33 fix 2025-09-11 17:06:32 +05:30
tapframe
e0ca614893 AI initial commit 2025-09-11 16:32:25 +05:30
tapframe
0a853e7460 Improved playback logic 2025-09-11 14:08:06 +05:30
tapframe
bc4bf5a963 Fixed an issue with Container Parsing on AndroidVideoPlayer 2025-09-11 13:41:26 +05:30
tapframe
dce3e5c200 fixed slider behaviour 2025-09-11 13:26:49 +05:30
tapframe
b516fe74d3 fix 2025-09-11 13:21:36 +05:30
tapframe
0ce7df60cc fix 2025-09-11 13:20:27 +05:30
tapframe
8996301e83 some change 2025-09-11 13:09:35 +05:30
tapframe
400a4313d9 bug fix 2025-09-11 12:54:00 +05:30
tapframe
65845c6e10 Added proper subtitle outline support 2025-09-11 12:21:47 +05:30
tapframe
2a118a17d4 Calender screen optimziation which caused OOM. 2025-09-11 11:43:28 +05:30
tapframe
bc2a15f81f potential heat fix 2025-09-10 21:38:43 +05:30
tapframe
097073fcd3 homescreen optomziation 2025-09-10 15:16:05 +05:30
tapframe
ccde944bfa usemetadata maximum depth limit reached potential fix 2025-09-10 15:06:40 +05:30
tapframe
43f6f056c0 fixed some issues on streamscreen related to reanimated. 2025-09-10 14:53:52 +05:30
tapframe
abe1947ba2 change 2025-09-09 23:34:14 +05:30
tapframe
b1694be4a2 changes 2025-09-09 23:31:46 +05:30
tapframe
97ba1ef42b Removed extensive logging from production build 2025-09-09 21:01:27 +05:30
tapframe
86cfca4c96 trailer fix test 2025-09-09 20:08:14 +05:30
tapframe
c92dfb149c many major fixes 2025-09-09 00:33:30 +05:30
tapframe
6bb4d927ed heating optimization 2025-09-08 22:38:03 +05:30
tapframe
02bfd85b5a perfomnce optimziations 2025-09-08 17:28:10 +05:30
tapframe
6560f5a6a7 change 2025-09-08 03:09:34 +05:30
tapframe
fe0db66534 beta 10 2025-09-08 02:44:53 +05:30
tapframe
28752791ae update beta 10 2025-09-08 02:32:28 +05:30
tapframe
950e38a20b changes 2025-09-07 20:38:14 +05:30
tapframe
754dec3946 updates UI now support release notes 2025-09-07 20:37:47 +05:30
tapframe
837e3735a2 fixed videoplayer control for android 2025-09-07 19:04:26 +05:30
tapframe
b1494e8a1d changes 2025-09-06 23:42:27 +05:30
tapframe
019f99c956 Add xavia-ota submodule configuration 2025-09-06 20:47:33 +05:30
tapframe
b55a090284 beta release 9 2025-09-06 20:39:46 +05:30
tapframe
bf0fe2d5a1 major additions 2025-09-06 19:58:38 +05:30
tapframe
e4bc0d3896 added OTA support 2025-09-06 17:50:04 +05:30
tapframe
5ddf26af34 small fix 2025-09-06 02:39:54 +05:30
tapframe
a30ace14c9 ui overhaul for plugnscreen 2025-09-06 01:57:28 +05:30
tapframe
c9ea142dfb ui changes 2025-09-06 01:39:07 +05:30
tapframe
95e9e36723 release beta 8 2025-09-04 20:03:29 +05:30
tapframe
f642f3f9b5 some customizations added 2025-09-04 19:49:40 +05:30
tapframe
3653879596 Fixed trailer keeps Playing issue even after opening Streamscreen 2025-09-04 19:20:02 +05:30
tapframe
9c533e3c52 some UI changes for ContinueWatching 2025-09-04 18:00:37 +05:30
tapframe
afaca6467f herocarousal optimizations 2025-09-04 17:48:13 +05:30
tapframe
058ee84a2a some minor fixes 2025-09-04 17:26:21 +05:30
tapframe
e8d7eab2e4 potential fix 2025-09-04 17:07:31 +05:30
tapframe
a562e45ffd perfomance optimziations 2025-09-03 17:17:20 +05:30
tapframe
27b52a5a45 major bug fix 2025-09-03 17:03:41 +05:30
tapframe
3608493518 cleaning repo 2025-09-03 16:29:15 +05:30
tapframe
5dcdfebddb release 2025-09-03 16:27:26 +05:30
tapframe
aaa32f9d88 ui change 2025-09-03 16:02:57 +05:30
tapframe
8adbfc5a85 minor ui fixes 2025-09-03 16:00:30 +05:30
tapframe
e3b86bcc90 UI fixes 2025-09-03 15:46:24 +05:30
tapframe
213fbbbb4e some minor UI fixes 2025-09-03 15:30:52 +05:30
tapframe
9fcb6a34b7 changed default hero to carousal 2025-09-03 15:06:05 +05:30
tapframe
56b4e60ecb change 2025-09-03 14:19:30 +05:30
tapframe
412d25c458 UI changes on herocarousal 2025-09-03 14:17:12 +05:30
tapframe
8700b10843 ui changes on new herocarousal 2025-09-03 13:46:20 +05:30
tapframe
de36ec8186 new hero section option 2025-09-03 13:29:00 +05:30
tapframe
dfb856f441 critical bug fixes 2025-09-02 21:50:34 +05:30
tapframe
ed82ef2ad1 ui fix 2025-09-02 20:49:35 +05:30
tapframe
26c914b934 update readme 2025-09-02 20:43:29 +05:30
tapframe
91a5dcdcdf UI update 2025-09-02 20:42:11 +05:30
tapframe
76fde372ff android Trailer Fix 2025-09-02 20:28:40 +05:30
tapframe
de5dc55ce0 update index.html 2025-09-02 01:14:02 +05:30
tapframe
01661572af update 2025-09-02 01:12:31 +05:30
tapframe
69e80f5c3f update readme 2025-09-02 01:03:15 +05:30
tapframe
1d65bccf0e test 2025-09-02 00:59:50 +05:30
tapframe
52196e9d81 test 2025-09-02 00:57:27 +05:30
tapframe
858e8f9c75 update readme 2025-09-02 00:56:40 +05:30
tapframe
12b462376c update readme 2025-09-02 00:55:44 +05:30
tapframe
418a10e25f update readme 2025-09-02 00:54:38 +05:30
tapframe
015dafbda2 added - website 2025-09-02 00:49:29 +05:30
tapframe
a3f90be476 update 2025-09-02 00:47:00 +05:30
tapframe
df7cecd2e3 update index.html 2025-09-02 00:35:16 +05:30
tapframe
79f9a9e1ec update ss 2025-09-02 00:26:16 +05:30
tapframe
1fe3bbc002 update json 2025-09-02 00:18:58 +05:30
tapframe
4a1cba0ab5 update version number 2025-09-02 00:10:52 +05:30
tapframe
dfbee206a9 beta 6 update 2025-09-02 00:07:52 +05:30
tapframe
5d4f651481 removed patreon 2025-09-02 00:00:21 +05:30
tapframe
320e91d52d test 2025-09-01 23:58:02 +05:30
tapframe
a353eeb1a2 test 2025-09-01 23:55:44 +05:30
tapframe
a2384ddb85 test 2025-09-01 23:52:58 +05:30
tapframe
faecc83b3c test 2025-09-01 23:49:50 +05:30
tapframe
dfe1eec11e test alt 2025-09-01 23:43:16 +05:30
tapframe
74ebec9b03 some changes 2025-09-01 23:38:39 +05:30
tapframe
a63168e06d page update 2025-09-01 23:33:40 +05:30
tapframe
2fd2839e18 some changes 2025-09-01 23:08:01 +05:30
tapframe
0f37b236a4 update README 2025-09-01 21:35:51 +05:30
tapframe
46cdf95cd4 small bug fixes 2025-09-01 19:41:55 +05:30
tapframe
9b1368e7c6 some UI changes 2025-09-01 18:17:08 +05:30
tapframe
c1bae1d7f3 minor UI changes 2025-09-01 17:58:42 +05:30
tapframe
5c7ac3dcae minor UI changes 2025-08-31 17:59:00 +05:30
tapframe
7ce3fb849a potential codec fix exoplayer 2025-08-31 17:45:28 +05:30
tapframe
220fc6aa21 improved trailer playback logic 2025-08-31 16:01:38 +05:30
tapframe
6f24275ff0 some fixes 2025-08-31 15:34:18 +05:30
tapframe
99424d37be some ui changes 2025-08-31 14:12:38 +05:30
tapframe
3a182b5982 added smooth transition between thumbnail and trailers 2025-08-31 13:48:48 +05:30
tapframe
b5d92e5887 soem ui changes 2025-08-31 13:05:39 +05:30
tapframe
face30c163 trailer ininital addition 2025-08-31 12:53:32 +05:30
tapframe
5b71ccc56c test 2025-08-30 16:35:21 +05:30
tapframe
4a129b1c32 test 2025-08-30 16:26:54 +05:30
tapframe
2cd254b1cf test 2025-08-30 02:37:22 +05:30
tapframe
b18ba25164 test altstore 2025-08-30 02:17:32 +05:30
tapframe
6d09add277 some ui changes to metadascreen 2025-08-30 01:42:01 +05:30
tapframe
ec364f60ff minor ui changes 2025-08-30 00:35:33 +05:30
tapframe
d914e01346 fixed tmdb ratings 2025-08-29 19:54:56 +05:30
tapframe
12c591216e fixed herosection loading issue 2025-08-29 19:34:28 +05:30
tapframe
9eea58ef98 some ui changes 2025-08-29 12:31:10 +05:30
tapframe
955640f856 metadata selector added 2025-08-29 12:05:44 +05:30
tapframe
87455ff573 test fix poster loading 2025-08-29 11:51:04 +05:30
tapframe
292d00af84 Update AltStore source with comprehensive structure and featured apps 2025-08-27 22:16:10 +05:30
tapframe
3071aeb29f Add nuvio-providers as submodule 2025-08-27 21:55:06 +05:30
tapframe
1266e482da Fix submodule issue and add AltStore source configuration 2025-08-27 21:50:17 +05:30
tapframe
0b495f992a test 2025-08-27 21:38:20 +05:30
tapframe
81acf58e7b ss 2025-08-27 21:24:08 +05:30
tapframe
4542635cc0 ss 2025-08-27 21:16:58 +05:30
tapframe
d553be3ec5 improved tablet alyout 2025-08-27 20:03:56 +05:30
tapframe
575289f654 tablet layout fix 2025-08-27 19:44:05 +05:30
tapframe
ea5b1572b8 update readme 2025-08-27 19:22:31 +05:30
tapframe
a8fb2a848e fixed weird horizontal card glitch on entrance 2025-08-27 13:35:00 +05:30
tapframe
b7bd700bf9 Ui changes 2025-08-27 13:30:19 +05:30
tapframe
bfa0eeb2af set default episode layout to vertical 2025-08-26 15:01:32 +05:30
tapframe
8c7563590b minor ui changes 2025-08-26 14:49:23 +05:30
tapframe
cabfedad23 Imrpoved logic and UI of cast details 2025-08-17 21:30:29 +05:30
tapframe
9446aced3c improved cast section with filmographies 2025-08-17 21:00:05 +05:30
tapframe
8e1511bb96 added cast details to pasue overlay on videoplayers 2025-08-17 20:08:33 +05:30
tapframe
3886f615c9 some UI changes to metadat overlay on videoplayers 2025-08-17 18:57:06 +05:30
tapframe
9ae1a32989 posthog first test 2025-08-15 22:09:03 +05:30
tapframe
a7846a2dab small fix 2025-08-15 18:11:47 +05:30
tapframe
da82321781 some changes 2025-08-14 13:18:54 +05:30
tapframe
8b7109a529 fix. 2025-08-14 13:04:16 +05:30
tapframe
f3f68c0ff6 faster homescreen loading of catalogs as they arrive. 2025-08-14 12:00:41 +05:30
tapframe
ba56975881 fix 2025-08-14 11:58:27 +05:30
tapframe
2f404d7c99 fixed addon reorder issue 2025-08-14 11:58:03 +05:30
tapframe
a32fb39743 somechanges 2025-08-14 11:32:41 +05:30
tapframe
71a9042dc4 homescreen entrance animation improvement 2025-08-13 15:11:36 +05:30
tapframe
ebf9a71430 vlc fix for ios 2025-08-13 14:17:58 +05:30
tapframe
3f1def52bd test 2025-08-13 14:09:55 +05:30
tapframe
340ba19176 chip now shows next episode soruce 2025-08-13 14:03:07 +05:30
tapframe
ac504b99c8 ui changes for next episode 2025-08-13 13:56:45 +05:30
tapframe
a9bb8c1131 some imrpovements after exiting player 2025-08-13 13:31:39 +05:30
tapframe
49d56d5b7a next episode test 2025-08-13 13:14:57 +05:30
tapframe
beb9b83ff5 small ui changes for player 2025-08-13 12:56:37 +05:30
tapframe
7a172f03d4 some ui changes for player, and improved orientation afetr player closes for ios 2025-08-13 12:25:23 +05:30
tapframe
77029294aa added loading animations 2025-08-13 03:06:42 +05:30
tapframe
facffe0f19 fixed continue watching 2025-08-13 02:32:36 +05:30
tapframe
375ea61b37 user can now customzie rows in of catalogscreen. 2025-08-13 02:16:47 +05:30
tapframe
408b1cb366 mkv fix 2025-08-13 01:49:05 +05:30
tapframe
876f77019e mkv fix for ios 2025-08-13 01:48:40 +05:30
tapframe
af286339f6 update readme 2025-08-11 16:38:31 +05:30
tapframe
acb4252e53 update license 2025-08-11 16:33:55 +05:30
tapframe
5ccd52d1e5 some ui changes 2025-08-11 16:23:14 +05:30
tapframe
70fb186ad8 improved layout changes for tablets 2025-08-11 16:17:58 +05:30
tapframe
9246b26493 some changes 2025-08-11 16:04:50 +05:30
tapframe
501bded9ee Improved homescreen layout for tablets 2025-08-11 15:01:18 +05:30
tapframe
63c673bfae improved layout for tablets 2025-08-11 14:15:05 +05:30
tapframe
69e5141c58 added supprot for catalog renaming. fixed epside layout revertion during app restart 2025-08-11 13:49:13 +05:30
tapframe
cc6c3d9d29 minor changes 2025-08-10 14:12:28 +05:30
tapframe
a9fdf4dbc3 fixes. 2025-08-10 13:47:56 +05:30
tapframe
a0714193be some ui changes 2025-08-10 13:46:05 +05:30
tapframe
3f57a19ea2 made some changes to streamscreen 2025-08-10 13:43:15 +05:30
tapframe
b6916dcafd fixed autoresume issue 2025-08-10 13:23:04 +05:30
tapframe
0b6a17c2f6 made some fixes on localscrapers not firing, 2025-08-10 12:41:49 +05:30
tapframe
b6ed69d541 continue watching fix 2025-08-10 11:53:02 +05:30
tapframe
91f4d4ff0a removed lcoalscraper fetching from accountsync 2025-08-09 18:29:42 +05:30
tapframe
81373a2bb2 fixed xprime initial loading issue 2025-08-09 18:20:58 +05:30
tapframe
675e3c24a4 replaced flatlist with flashlist for catalogscreen and libraryscreen 2025-08-09 17:37:03 +05:30
tapframe
a48cc0f2be improved homescreen using flashlist 2025-08-09 17:25:51 +05:30
tapframe
2feec37eb3 some removes 2025-08-09 01:27:34 +05:30
tapframe
a49c2c5a56 removed some unnecessary animations 2025-08-09 01:24:40 +05:30
tapframe
b2ef847720 imrpoved toast. 2025-08-09 01:13:07 +05:30
tapframe
d4af07938b some ui changes 2025-08-09 01:02:03 +05:30
tapframe
a8fa2183ee minor Ui fixes. 2025-08-09 00:51:12 +05:30
tapframe
86f0fde656 added account support, Initial Commit 2025-08-09 00:07:10 +05:30
tapframe
b1afaa3d53 somne fixed to ios subtitle menu 2025-08-08 19:20:36 +05:30
tapframe
79cf375b60 removed communtiy blur from android 2025-08-08 19:05:30 +05:30
tapframe
2a320e5a00 small ui fix 2025-08-08 18:57:16 +05:30
tapframe
f43d113f56 some ui changes 2025-08-08 18:35:16 +05:30
tapframe
d8950caf04 some fixes 2025-08-08 18:22:55 +05:30
tapframe
dff3a66d7b imrpoved subtitles UI 2025-08-08 17:55:23 +05:30
tapframe
51550316ec added sub customize support 2025-08-08 16:41:33 +05:30
tapframe
7d9f8fba86 added subtitle addon support 2025-08-08 15:49:29 +05:30
tapframe
583db67853 some change in players 2025-08-08 01:00:04 +05:30
tapframe
ad2e1816dc some ui changes 2025-08-08 00:15:10 +05:30
tapframe
e0835ddbad some ui chanegs for metadascreen 2025-08-07 01:36:24 +05:30
tapframe
cc494bdf17 perfomance optimziations 2025-08-06 21:41:23 +05:30
tapframe
62a2ed0046 test 2025-08-06 20:45:51 +05:30
tapframe
b21f13c283 testing 2025-08-03 12:42:23 +05:30
tapframe
2d3ece7dc4 test 2025-07-30 22:47:53 +05:30
tapframe
6aeb4d56b7 test 2025-07-30 22:07:32 +05:30
tapframe
9619f6b0b0 Merge branch 'recovered-ui-changes' 2025-07-30 14:02:02 +05:30
tapframe
42eead9e44 m 2025-07-30 13:54:15 +05:30
tapframe
f209b538f3 some ui changes 2025-07-30 13:49:04 +05:30
tapframe
8cf3508e22 videoplayer fix 2025-07-30 01:18:56 +05:30
tapframe
7bae3be975 better error handling 2025-07-30 01:13:20 +05:30
tapframe
f4b50f6dfb ui changes 2025-07-30 01:06:44 +05:30
tapframe
f8192f53ab added sorting 2025-07-30 00:58:54 +05:30
tapframe
a7e7c86f18 made some chanegs for xprime support 2025-07-30 00:45:58 +05:30
tapframe
6547d38c0e some fixes 2025-07-30 00:29:11 +05:30
tapframe
93ddb029a0 test 2025-07-30 00:09:25 +05:30
tapframe
9431f659d7 reposnive layout for vetical episodes 2025-07-29 15:02:15 +05:30
tapframe
17339d82a6 slider change 2025-07-29 14:39:49 +05:30
tapframe
6405fd2c71 Improved trakt. 2025-07-29 14:28:52 +05:30
tapframe
df89c16246 fixed cinemeta preinstalled 2025-07-29 01:46:57 +05:30
tapframe
84689a9ba7 added option to exclude qualities 2025-07-29 01:26:57 +05:30
tapframe
ebcbced142 fixes 2025-07-29 01:13:34 +05:30
tapframe
494b35b1c0 major ui changes 2025-07-29 00:09:16 +05:30
tapframe
9c12f9fc08 critical videoplayer bug fix 2025-07-28 22:36:12 +05:30
tapframe
7213766bb0 Merge branch 'appstore' 2025-07-28 18:46:34 +05:30
tapframe
4ea13b5d6c fix 2025-07-28 17:43:01 +05:30
tapframe
d605383720 test 2025-07-28 17:40:37 +05:30
tapframe
c21f279aa3 continue watching fix 2025-07-28 12:05:26 +05:30
tapframe
980e6d9484 fixes 2025-07-28 09:27:07 +05:30
tapframe
e41e6cfb46 some fixes 2025-07-28 08:45:08 +05:30
tapframe
1683c915b9 streamscreen UI changes 2025-07-28 08:21:59 +05:30
tapframe
f43ff3a086 added animation to streamscreen chips 2025-07-27 23:05:54 +05:30
tapframe
4feb60f0a2 Ui changes to show fetching providers 2025-07-27 23:02:23 +05:30
tapframe
4c1ac848c7 changes 2025-07-27 20:50:33 +05:30
tapframe
49e9b213bc ffixes 2025-07-27 19:10:22 +05:30
tapframe
2180453a16 ui changes 2025-07-27 18:38:48 +05:30
tapframe
ae66ec1c23 ui fixes 2025-07-27 18:27:58 +05:30
tapframe
5bb3aa7e3b some changes 2025-07-27 17:57:22 +05:30
tapframe
de07a4620b some major changes 2025-07-27 17:48:33 +05:30
tapframe
f36a9a9780 crucial changes 2025-07-27 16:14:30 +05:30
tapframe
9006d312b8 test 2025-07-21 00:42:13 +05:30
tapframe
da0a69ab0e TESTBIG 2025-07-20 13:37:57 +05:30
tapframe
19b6e6b3d5 fixes to videoplayer 2025-07-17 14:18:40 +05:30
tapframe
42daa4decc some fixes with updating notifications 2025-07-17 13:41:29 +05:30
tapframe
d66764471f Remove SkiaProgressSlider from PlayerControls and refactor progress handling for improved touch interaction. Update AndroidVideoPlayer and VideoPlayer components to eliminate seekToTime prop and adjust subtitle handling. 2025-07-08 17:19:21 +05:30
tapframe
6433acac77 Integrate SkiaProgressSlider into PlayerControls for enhanced progress tracking and user interaction. Update AndroidVideoPlayer and VideoPlayer components to support seekToTime functionality. 2025-07-08 16:55:22 +05:30
tapframe
6004d9d3d1 Add progress thumb to PlayerControls and increase touch area height for better usability 2025-07-08 16:32:21 +05:30
tapframe
0ad0445a63 Remove unused quality extraction function and simplify stream sorting in StreamsScreen component. 2025-07-08 16:14:22 +05:30
tapframe
65ece6a32a Update SubtitleModals to conditionally display font size and background toggle sections based on custom subtitles setting. Adjust custom subtitle container position for better alignment. 2025-07-08 15:54:48 +05:30
tapframe
897294fdfc Add subtitle background toggle functionality in AndroidVideoPlayer and SubtitleModals, enhancing user control over subtitle appearance. Update CustomSubtitles to reflect background setting. 2025-07-08 15:51:51 +05:30
tapframe
4ad6f37449 Refactor ContinueWatchingSection and AndroidVideoPlayer for improved UI and performance, including layout adjustments and more frequent time updates for subtitle synchronization. 2025-07-08 15:42:56 +05:30
tapframe
e714637da2 Enhance UI consistency in AudioTrackModal, SourcesModal, and SubtitleModals by updating border radii, padding, and background colors for improved aesthetics and user experience. 2025-07-08 14:57:07 +05:30
tapframe
e85a3c31d4 some fixes to player 2025-07-08 14:34:10 +05:30
tapframe
e94d04ae1b Refactor AudioTrackModal and SourcesModal for improved UI and performance, including updated animations, streamlined layout, and removal of unused components. 2025-07-08 14:25:06 +05:30
tapframe
f331d2becb Refactor SubtitleModals for improved UI and functionality, including enhanced subtitle menu, updated animations, and removal of unused components. 2025-07-08 14:09:53 +05:30
tapframe
82bd88f33d Add subtitle fetching and UI enhancements in SubtitleModals 2025-07-08 13:37:01 +05:30
tapframe
7a16d67a74 simple ui fxes 2025-07-08 13:23:19 +05:30
tapframe
eec96b09d2 header alignment changes for trakt collections 2025-07-07 19:32:29 +05:30
tapframe
af0fbb740d fixed calender screen rendering on android 2025-07-07 19:27:31 +05:30
tapframe
fcc7d3963e minor ui changes 2025-07-07 19:13:16 +05:30
tapframe
6493432099 CP, changes to calenderscreen 2025-07-07 19:04:19 +05:30
tapframe
fe8489fa18 CP, calender changes 2025-07-07 18:41:13 +05:30
tapframe
93e80d9720 Refactor play button styles in HeroSection to differentiate between watched movies and other content. Remove unused progress percentage badge styles for cleaner code. 2025-07-07 18:17:18 +05:30
tapframe
90a09ac5a2 cast modal update 2025-07-07 17:13:24 +05:30
tapframe
08cc9397e5 implemented cast details modal 2025-07-07 16:59:29 +05:30
tapframe
cf750c9da2 CP. OK 2025-07-07 16:50:35 +05:30
tapframe
fde8904c3b CP!!! Some changes top trakt 2025-07-07 16:27:21 +05:30
tapframe
6d661f6c85 checkpoint, made some fixes on continuewatchng 2025-07-07 16:00:44 +05:30
tapframe
379bcc7507 imporved behaviour of videoplayer and added a nice loading screen 2025-07-07 13:36:32 +05:30
tapframe
ab7134bd3a Refactor catalog loading logic in HomeScreen to ensure loading state is accurately represented. Update placeholder rendering with animations and improve layout for better user experience during content loading. 2025-07-05 20:39:52 +05:30
tapframe
e2403ecd71 Refactor loading state logic in HomeScreen to improve data display handling. Update isLoading calculation to show full-screen loader only when no data is available, enhancing user experience during content loading. 2025-07-05 20:20:11 +05:30
tapframe
8481bb5609 Update styles in SearchScreen and SettingsScreen for improved layout; adjust easing function in AppNavigator for smoother animations. Modify .gitignore to include android directory. 2025-07-05 20:16:35 +05:30
tapframe
d8fd9a5684 icon changes 2025-07-05 19:55:02 +05:30
tapframe
a32a2074a7 claudesome nice animation on tab change 2025-07-05 19:34:32 +05:30
tapframe
2487ef892c Enhance video player components by adding zoom scale support and updating aspect ratio options. Introduce online subtitles section in SubtitleModals for improved subtitle management. 2025-07-05 13:35:36 +05:30
tapframe
11fcacc9a7 Add community addons feature to AddonsScreen, including loading state and error handling. Integrate TraktService to remove playback from the queue when content is deleted in ContinueWatchingSection. Enhance TraktService with methods for deleting playback items. 2025-07-05 13:10:19 +05:30
tapframe
bbc0a273fd Refactor StreamsScreen loading state management and remove "Sync pending" label from HeroSection 2025-07-05 12:39:47 +05:30
tapframe
da4e4031bf remove unecessary blur on adnroid 2025-07-05 12:34:18 +05:30
tapframe
9a446f5a45 Update react-native-reanimated to version 3.18.0 and add react-native-is-edge-to-edge dependency in package.json and package-lock.json 2025-07-05 11:54:02 +05:30
tapframe
6b86f314ba Update app.json to change icon paths for consistency with new asset naming 2025-07-04 23:47:54 +05:30
tapframe
f96c45f831 Update app.json icon path and downgrade @shopify/react-native-skia version in package.json for compatibility 2025-07-04 23:46:15 +05:30
tapframe
804e38824d skia 2025-07-04 22:34:57 +05:30
tapframe
03b744c13c trakt fixes 2025-07-04 19:39:35 +05:30
tapframe
a42ce3bdfa improvements on trakt 2025-07-04 19:24:50 +05:30
tapframe
2feba6f6eb soem fixes for trakt 2025-07-04 18:16:13 +05:30
tapframe
af82eee3f1 minor fixes 2025-07-04 17:33:47 +05:30
tapframe
709cbcef5e Update navigation in StreamsScreen to redirect to Addons instead of Settings 2025-07-04 17:19:00 +05:30
tapframe
df8ac7352d Add episodeThumbnail parameter to navigation and enhance StreamsScreen image handling
This update introduces the episodeThumbnail parameter in the navigation between MetadataScreen and StreamsScreen, allowing for improved image handling. The StreamsScreen now utilizes the episodeThumbnail for displaying images, with additional checks for URL validity, enhancing the user experience and ensuring more reliable image rendering.
2025-07-04 17:15:32 +05:30
tapframe
c4f5c9e374 Update app.json icon, remove unused image, and refactor CatalogSection and StreamsScreen components for improved layout and performance
This commit updates the app.json to change the icon path, deletes an unused image file, and refactors the CatalogSection and StreamsScreen components. The CatalogSection now includes a title with a maximum line limit, while the StreamsScreen optimizes stream information handling and adjusts rendering parameters for better performance.
2025-07-04 16:25:53 +05:30
tapframe
01d86198ba Add Cinemeta addon to AddonsScreen and improve community addons loading logic
This update introduces the Cinemeta addon with its details and ensures it is added to the community addons list while preventing duplication. Additionally, the loading logic has been adjusted to display Cinemeta even if the community addons fail to load, enhancing user experience and reliability.
2025-06-30 19:40:51 +05:30
tapframe
0e9426b6c6 Refactor ContentItem and MetadataScreen for improved loading handling and UI consistency
This update removes unnecessary state management for image loading in the ContentItem component, streamlining the image display logic. In the MetadataScreen, loading states are now handled more effectively, ensuring a loading screen is shown when metadata is not ready. The overall structure has been simplified for better readability and maintainability.
2025-06-30 19:28:28 +05:30
tapframe
8cbda5c902 Enhance SeriesContent and useMetadata hooks for improved image handling and cast fetching
This update modifies the SeriesContent component to check if the episode still_path is a full URL before attempting to fetch it from TMDB, improving image loading efficiency. Additionally, the useMetadata hook has been enhanced to include caching for cast data, better error handling, and improved logging for debugging purposes. The logic for handling TMDB and IMDb IDs has been streamlined, ensuring a more robust data fetching process.
2025-06-30 15:55:41 +05:30
tapframe
4b64dc64ee Refactor ContentItem component to improve layout and add title display
This update modifies the ContentItem component by introducing a new itemContainer style for better layout management. A title Text element has been added below the image, enhancing the user interface by displaying the item's name. The overall structure has been adjusted for improved readability and maintainability.
2025-06-30 15:32:07 +05:30
tapframe
d32e4d3ad0 Remove autoFocus from SearchScreen input and eliminate discover data source state management from SettingsScreen to streamline functionality and improve code clarity. 2025-06-30 14:58:04 +05:30
tapframe
e529ab388b Remove Discover-related components and constants to streamline the application structure. This includes the deletion of CatalogSection, CatalogsList, CategorySelector, GenreSelector, ContentItem, and the DiscoverScreen, along with associated constants. The AppNavigator has been updated to reflect these changes, removing references to the Discover screen and adjusting navigation parameters accordingly. 2025-06-30 14:29:16 +05:30
tapframe
929ed9cc9e Refactor CatalogSection and HomeScreen for improved rendering performance and update MDBListSettingsScreen to default to disabled state
This update modifies the initial rendering parameters in CatalogSection and HomeScreen components to optimize performance by reducing the number of items rendered initially and adjusting batch sizes. Additionally, the MDBListSettingsScreen now defaults to a disabled state for the MDBList feature, enhancing user clarity regarding its status. Other minor adjustments include improved layout handling and visual consistency across settings components.
2025-06-30 13:48:20 +05:30
tapframe
12c7d8f860 added onboarding 2025-06-30 13:13:08 +05:30
tapframe
ba94a515c8 feat: Prepare for App Store submission
BREAKING CHANGE: Removes all internal providers, torrenting functionality, and default addons to comply with App Store guidelines. The app now starts with a clean slate, requiring users to manually install addons.
2025-06-30 12:52:10 +05:30
tapframe
68a347d808
Merge pull request #14 from tapframe/ios
Ios
2025-06-20 19:24:29 +05:30
tapframe
19ed2aa1a5
Merge pull request #5 from tapframe/ios
Ios
2025-05-04 03:27:32 +05:30
tapframe
0303a41bf2
Merge pull request #4 from tapframe/ios
Ios
2025-05-03 15:47:18 +05:30
tapframe
364c242f50
Merge pull request #3 from tapframe/ios
Ios
2025-05-02 17:26:30 +05:30
tapframe
f4d60a060c
Merge pull request #2 from tapframe/ios
Ios
2025-04-22 18:38:14 +05:30
Nayif Noushad
20d0fbc00b
Merge pull request #1 from nayifleo1/ios
Ios
2025-04-22 15:51:01 +05:30
472 changed files with 87236 additions and 20138 deletions

13
.env.example Normal file
View file

@ -0,0 +1,13 @@
# Supabase Configuration
# Get these values from your Supabase project settings
EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# MovieBox (MoviesMod) Keys
EXPO_PUBLIC_MOVIEBOX_PRIMARY_KEY=your_moviebox_primary_key
EXPO_PUBLIC_MOVIEBOX_TMDB_API_KEY=your_tmdb_api_key_for_moviebox
# Trakt
EXPO_PUBLIC_TRAKT_CLIENT_ID=your_trakt_client_id
EXPO_PUBLIC_TRAKT_CLIENT_SECRET=your_trakt_client_secret
EXPO_PUBLIC_TRAKT_REDIRECT_URI=stremioexpo://auth/trakt

1
.env.sentry-build-plugin Normal file
View file

@ -0,0 +1 @@
SENTRY_ALLOW_FAILURE=true

4
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,4 @@
# These are supported funding model platforms
github: [tapframe]
ko_fi: tapframe

36
.gitignore vendored
View file

@ -2,6 +2,7 @@
# dependencies
node_modules/
!node_modules/react-native-video/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java
# Expo
.expo/
@ -16,8 +17,6 @@ expo-env.d.ts
*.p12
*.key
*.mobileprovision
android/
ios/
# Metro
.metro-health-check*
@ -32,6 +31,7 @@ yarn-error.*
*.pem
# local env files
.env
.env*.local
# typescript
@ -41,3 +41,35 @@ release_announcement.md
ALPHA_BUILD_2_ANNOUNCEMENT.md
CHANGELOG.md
.env.local
# Android build artifacts (but keep source files)
android/app/build/
android/build/
android/.gradle/
android/app/libs/*.aar
!android/app/libs/lib-decoder-ffmpeg-release.aar
HEATING_OPTIMIZATIONS.md
# sliderreadme.md
.cursor/mcp.json
local-scrapers-repo
worki.json
VERSION_UPDATE_README.md
hackintosh-emulator-fix.sh
/ota-builds
src/screens/xavio.md
/nuvio-providers
/KSPlayer
/exobase
# ffmpegreadme.md
toast.md
ffmpegreadme.md
sliderreadme.md
bottomsheet.md
fastimage.md
# Backup directories
backup_sdk54_upgrade/
SDK54_UPGRADE_SUMMARY.md
SDK54_UPGRADE_SUMMARY.md
build-and-publish-app-releases.sh
bottomnav.md
/TrailerServices

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "local-scrapers-repo"]
path = local-scrapers-repo
url = https://github.com/tapframe/nuvio-providers.git
[submodule "xavia-ota"]
path = xavia-ota
url = https://github.com/tapframe/NuvioOTA.git

3
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,3 @@
{
"java.compile.nullAnalysis.mode": "automatic"
}

150
App.tsx
View file

@ -5,10 +5,13 @@
* @format
*/
import React, { useState } from 'react';
import React, { useState, useEffect } from 'react';
import {
View,
StyleSheet
StyleSheet,
I18nManager,
Platform,
LogBox
} from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
@ -24,8 +27,20 @@ import { CatalogProvider } from './src/contexts/CatalogContext';
import { GenreProvider } from './src/contexts/GenreContext';
import { TraktProvider } from './src/contexts/TraktContext';
import { ThemeProvider, useTheme } from './src/contexts/ThemeContext';
import { TrailerProvider } from './src/contexts/TrailerContext';
import { DownloadsProvider } from './src/contexts/DownloadsContext';
import SplashScreen from './src/components/SplashScreen';
import UpdatePopup from './src/components/UpdatePopup';
import MajorUpdateOverlay from './src/components/MajorUpdateOverlay';
import { useGithubMajorUpdate } from './src/hooks/useGithubMajorUpdate';
import { useUpdatePopup } from './src/hooks/useUpdatePopup';
import AsyncStorage from '@react-native-async-storage/async-storage';
import * as Sentry from '@sentry/react-native';
import UpdateService from './src/services/updateService';
import { memoryMonitorService } from './src/services/memoryMonitorService';
import { aiService } from './src/services/aiService';
import { AccountProvider, useAccount } from './src/contexts/AccountContext';
import { ToastProvider } from './src/contexts/ToastContext';
Sentry.init({
dsn: 'https://1a58bf436454d346e5852b7bfd3c95e8@o4509536317276160.ingest.de.sentry.io/4509536317734992',
@ -34,22 +49,86 @@ Sentry.init({
// For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
sendDefaultPii: true,
// Configure Session Replay
replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1,
integrations: [Sentry.mobileReplayIntegration(), Sentry.feedbackIntegration()],
// Configure Session Replay conservatively to avoid startup overhead in production
replaysSessionSampleRate: __DEV__ ? 0.1 : 0,
replaysOnErrorSampleRate: __DEV__ ? 1 : 0,
integrations: [Sentry.feedbackIntegration()],
// uncomment the line below to enable Spotlight (https://spotlightjs.com)
// spotlight: __DEV__,
});
// Force LTR layout to prevent RTL issues when Arabic is set as system language
// This ensures posters and UI elements remain visible and properly positioned
I18nManager.allowRTL(false);
I18nManager.forceRTL(false);
// Suppress duplicate key warnings app-wide
LogBox.ignoreLogs([
'Warning: Encountered two children with the same key',
'Keys should be unique so that components maintain their identity across updates'
]);
// This fixes many navigation layout issues by using native screen containers
enableScreens(true);
// Inner app component that uses the theme context
const ThemedApp = () => {
// Log JS engine once at startup
useEffect(() => {
try {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const engine = (global as any).HermesInternal ? 'Hermes' : 'JSC';
console.log('JS Engine:', engine);
} catch {}
}, []);
const { currentTheme } = useTheme();
const [isAppReady, setIsAppReady] = useState(false);
const [hasCompletedOnboarding, setHasCompletedOnboarding] = useState<boolean | null>(null);
// Update popup functionality
const {
showUpdatePopup,
updateInfo,
isInstalling,
handleUpdateNow,
handleUpdateLater,
handleDismiss,
} = useUpdatePopup();
// GitHub major/minor release overlay
const githubUpdate = useGithubMajorUpdate();
// Check onboarding status and initialize services
useEffect(() => {
const initializeApp = async () => {
try {
// Check onboarding status
const onboardingCompleted = await AsyncStorage.getItem('hasCompletedOnboarding');
setHasCompletedOnboarding(onboardingCompleted === 'true');
// Initialize update service (skip on Android to prevent update checks)
if (Platform.OS !== 'android') {
await UpdateService.initialize();
}
// Initialize memory monitoring service to prevent OutOfMemoryError
memoryMonitorService; // Just accessing it starts the monitoring
console.log('Memory monitoring service initialized');
// Initialize AI service
await aiService.initialize();
console.log('AI service initialized');
} catch (error) {
console.error('Error initializing app:', error);
// Default to showing onboarding if we can't check
setHasCompletedOnboarding(false);
}
};
initializeApp();
}, []);
// Create custom themes based on current theme
const customDarkTheme = {
@ -75,22 +154,45 @@ const ThemedApp = () => {
setIsAppReady(true);
};
// Don't render anything until we know the onboarding status
const shouldShowApp = isAppReady && hasCompletedOnboarding !== null;
const initialRouteName = hasCompletedOnboarding ? 'MainTabs' : 'Onboarding';
return (
<PaperProvider theme={customDarkTheme}>
<NavigationContainer
theme={customNavigationTheme}
// Disable automatic linking which can cause layout issues
linking={undefined}
>
<View style={[styles.container, { backgroundColor: currentTheme.colors.darkBackground }]}>
<StatusBar
style="light"
/>
{!isAppReady && <SplashScreen onFinish={handleSplashComplete} />}
{isAppReady && <AppNavigator />}
</View>
</NavigationContainer>
</PaperProvider>
<AccountProvider>
<PaperProvider theme={customDarkTheme}>
<NavigationContainer
theme={customNavigationTheme}
linking={undefined}
>
<DownloadsProvider>
<View style={[styles.container, { backgroundColor: currentTheme.colors.darkBackground }]}>
<StatusBar style="light" />
{!isAppReady && <SplashScreen onFinish={handleSplashComplete} />}
{shouldShowApp && <AppNavigator initialRouteName={initialRouteName} />}
{Platform.OS === 'ios' && (
<UpdatePopup
visible={showUpdatePopup}
updateInfo={updateInfo}
onUpdateNow={handleUpdateNow}
onUpdateLater={handleUpdateLater}
onDismiss={handleDismiss}
isInstalling={isInstalling}
/>
)}
<MajorUpdateOverlay
visible={githubUpdate.visible}
latestTag={githubUpdate.latestTag}
releaseNotes={githubUpdate.releaseNotes}
releaseUrl={githubUpdate.releaseUrl}
onDismiss={githubUpdate.onDismiss}
onLater={githubUpdate.onLater}
/>
</View>
</DownloadsProvider>
</NavigationContainer>
</PaperProvider>
</AccountProvider>
);
}
@ -101,7 +203,11 @@ function App(): React.JSX.Element {
<CatalogProvider>
<TraktProvider>
<ThemeProvider>
<ThemedApp />
<TrailerProvider>
<ToastProvider>
<ThemedApp />
</ToastProvider>
</TrailerProvider>
</ThemeProvider>
</TraktProvider>
</CatalogProvider>

687
LICENSE
View file

@ -1,21 +1,674 @@
MIT License
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (c) [Year] [Copyright Holder Name]
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Preamble
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

256
README.md
View file

@ -1,134 +1,184 @@
# Nuvio Streaming App
<!-- Improved compatibility of back to top link -->
<a id="readme-top"></a>
<p align="center">
<img src="assets/titlelogo.png" alt="Nuvio Logo" width="300"/>
</p>
<!-- PROJECT SHIELDS -->
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![License][license-shield]][license-url]
<p align="center">
A modern streaming app built with React Native and Expo, featuring Stremio addon integration, Trakt synchronization, and a beautiful user interface.
</p>
<!-- PROJECT LOGO -->
<br />
<div align="center">
<img src="assets/titlelogo.png" alt="Nuvio Logo" width="120" />
<h1 align="center">🎬 Nuvio Media Hub</h1>
<p align="center">
A modern media hub built with React Native and Expo
<br />
Stremio Addon ecosystem • Crossplatform • Offline metadata & sync
<br />
<br />
<a href="#getting-started"><strong>Get Started »</strong></a>
<br />
<br />
<a href="#demo">View Screenshots</a>
·
<a href="https://github.com/tapframe/NuvioStreaming/issues/new?labels=bug&template=bug_report.md">Report Bug</a>
·
<a href="https://github.com/tapframe/NuvioStreaming/issues/new?labels=enhancement&template=feature_request.md">Request Feature</a>
</p>
</div>
## ⚠️ Alpha Testing
This app is currently in alpha testing. Please report any bugs or issues you encounter.
<!-- TABLE OF CONTENTS -->
<details>
<summary>Table of Contents</summary>
<ol>
<li>
<a href="#about-the-project">About The Project</a>
</li>
<li><a href="#demo">Screenshots</a></li>
<li>
<a href="#getting-started">Getting Started</a>
<ul>
<li><a href="#installation">Installation</a></li>
<li><a href="#build">Build</a></li>
</ul>
</li>
<li><a href="#contributing">Contributing</a></li>
<li><a href="#support">Support</a></li>
<li><a href="#license">License</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#acknowledgments">Acknowledgments</a></li>
<li><a href="#built-with">Built With</a></li>
</ol>
</details>
[Download Latest Release](https://github.com/tapframe/NuvioStreaming/releases/latest)
<!-- ABOUT THE PROJECT -->
## About The Project
## ✨ Key Features
Nuvio Media Hub is a crossplatform app for managing, discovering, and streaming your media via a flexible addon ecosystem. Built with React Native + Expo, it integrates providers and sync services while keeping a simple, fast UI.
### Content & Discovery
- **Smart Home Screen:** Personalized content recommendations and continue watching
- **Discover Section:** Browse trending and popular movies & TV shows
- **Rich Metadata:** Detailed information, cast, ratings, and similar content
- **Powerful Search:** Find content quickly with instant results
### Streaming & Playback
- **Advanced Video Player:**
- Built-in player with gesture controls
- External player support
- Auto-quality selection
- Subtitle customization
- **Smart Stream Selection:** Automatically finds the best available streams
- **Auto-Play:** Seamless playback of next episodes
- **Continue Watching:** Resume from where you left off
<!-- DEMO / SCREENSHOTS -->
## Demo
<a id="demo"></a>
### Integration & Sync
- **Trakt Integration:**
- Account synchronization
- Watch history tracking
- Library management
- Progress syncing
- **Stremio Addons:**
- Compatible with Stremio addon system
- Easy addon management
- Multiple source support
| Home | Details |
|:----:|:-------:|
| ![Home](screenshots/Simulator%20Screenshot%20-%20iPhone%2016%20Pro%20-%202025-08-27%20at%2021.08.32-portrait.png) | ![Details](screenshots/WhatsApp%20Image%202025-09-02%20at%2000.24.31-portrait.png) |
### User Experience
- **Modern UI/UX:** Clean, intuitive interface with smooth animations
- **Performance:** Optimized for smooth scrolling and quick loading
- **Customization:** Theme options and display preferences
- **Cross-Platform:** Works on both iOS and Android
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## 📸 Screenshots
<!-- GETTING STARTED -->
## Getting Started
| Home & Continue Watching | Discover & Browse | Search & Details |
|:-----------------------:|:-----------------:|:----------------:|
| ![Home](src/assets/home.jpg) | ![Discover](src/assets/discover.jpg) | ![Search](src/assets/search.jpg) |
| **Content Details** | **Episodes & Seasons** | **Ratings & Info** |
| ![Metadata](src/assets/metadascreen.jpg) | ![Seasons](src/assets/seasonandepisode.jpg) | ![Rating](src/assets/ratingscreen.jpg) |
Follow the steps below to run the app locally.
## 🚀 Getting Started
### Installation
### Prerequisites
- Node.js 18 or newer
- npm or yarn
- Expo Go app (for development)
- Android Studio (for Android builds)
- Xcode (for iOS builds)
```bash
git clone https://github.com/tapframe/NuvioStreaming.git
cd NuvioStreaming
npm install
# If you hit peer dependency conflicts:
# npm install --legacy-peer-deps
npx expo start
```
### Development Setup
1. Clone the repository:
```bash
git clone https://github.com/tapframe/NuvioStreaming.git
cd NuvioStreaming
```
### Build
2. Install dependencies:
```bash
npm install
# or
yarn install
```
```bash
npx expo prebuild
npx expo run:android # Android
npx expo run:ios # iOS
```
3. Start the development server:
```bash
npx expo start
```
<details>
<summary>Alternative iOS Installation</summary>
4. Run on device/simulator:
- Scan QR code with Expo Go app
- Or run native builds:
```bash
npx expo run:android
# or
npx expo run:ios
```
### AltStore
<img src="https://upload.wikimedia.org/wikipedia/commons/2/20/AltStore_logo.png" width="24" height="24" align="left"> [![Add to AltStore](https://img.shields.io/badge/Add%20to-AltStore-blue?style=for-the-badge)](https://tinyurl.com/NuvioAltstore)
## 🤝 Contributing
### SideStore
<img src="https://github.com/SideStore/assets/blob/main/icon.png?raw=true" width="24" height="24" align="left"> [![Add to SideStore](https://img.shields.io/badge/Add%20to-SideStore-green?style=for-the-badge)](https://tinyurl.com/NuvioSidestore)
We welcome contributions! Here's how you can help:
**Manual URL:** `https://raw.githubusercontent.com/tapframe/NuvioStreaming/main/nuvio-source.json`
1. Fork the repository
2. Create your feature branch
3. Commit your changes
4. Push to the branch
</details>
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## Contributing
Contributions make the opensource community amazing! Any contributions are greatly appreciated.
1. Fork the project
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
## 🐛 Bug Reports & Feature Requests
<p align="right">(<a href="#readme-top">back to top</a>)</p>
Found a bug or have an idea? Please open an [issue](https://github.com/tapframe/NuvioStreaming/issues) with:
- Clear description of the problem/suggestion
- Steps to reproduce (for bugs)
- Expected behavior
- Screenshots if applicable
## Support
## 📝 Changelog
If you find Nuvio helpful, consider supporting development:
See [CHANGELOG.md](CHANGELOG.md) for release history and changes.
* **KoFi** `https://ko-fi.com/tapframe`
* **GitHub Star** Star the repo to show support
* **Share** Tell others about the project
## 📄 License
<p align="right">(<a href="#readme-top">back to top</a>)</p>
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## License
## 🙏 Acknowledgments
Distributed under the GNU GPLv3 License. See `LICENSE` for more information.
Built with help from the amazing communities behind:
- React Native & Expo
- TMDB API
- Trakt.tv
- Stremio
<p align="right">(<a href="#readme-top">back to top</a>)</p>
---
## Contact
<p align="center">
<em>Happy Streaming! 🎬</em>
</p>
**Project Links:**
* GitHub: `https://github.com/tapframe`
* Issues: `https://github.com/tapframe/NuvioStreaming/issues`
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## Acknowledgments
* [React Native](https://reactnative.dev/)
* [Expo](https://expo.dev/)
* [TypeScript](https://www.typescriptlang.org/)
* Community contributors and testers
**Disclaimer:** This application functions as a media hub with addon/plugin support. It does not contain any builtin content or host media content. Content access is only available through userinstalled plugins and addons. Any legal concerns should be directed to the specific websites providing the content.
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## Built With
<p align="left">
<a href="https://skillicons.dev">
<img src="https://skillicons.dev/icons?i=react,typescript,nodejs,expo,github,githubactions&theme=light&perline=6" />
</a>
<br/>
React Native • Expo • TypeScript
</p>
<p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- MARKDOWN LINKS & IMAGES -->
[contributors-shield]: https://img.shields.io/github/contributors/tapframe/NuvioStreaming.svg?style=for-the-badge
[contributors-url]: https://github.com/tapframe/NuvioStreaming/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/tapframe/NuvioStreaming.svg?style=for-the-badge
[forks-url]: https://github.com/tapframe/NuvioStreaming/network/members
[stars-shield]: https://img.shields.io/github/stars/tapframe/NuvioStreaming.svg?style=for-the-badge
[stars-url]: https://github.com/tapframe/NuvioStreaming/stargazers
[issues-shield]: https://img.shields.io/github/issues/tapframe/NuvioStreaming.svg?style=for-the-badge
[issues-url]: https://github.com/tapframe/NuvioStreaming/issues
[license-shield]: https://img.shields.io/github/license/tapframe/NuvioStreaming.svg?style=for-the-badge
[license-url]: http://www.gnu.org/licenses/gpl-3.0.en.html

16
android/.gitignore vendored Normal file
View file

@ -0,0 +1,16 @@
# OSX
#
.DS_Store
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof
.cxx/
# Bundle artifacts
*.jsbundle

217
android/app/build.gradle Normal file
View file

@ -0,0 +1,217 @@
apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()
/**
* This is the configuration block to customize your React Native Android app.
* By default you don't need to apply any configuration, just uncomment the lines you need.
*/
react {
entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim())
reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc"
codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()
// Use Expo CLI to bundle the app, this ensures the Metro config
// works correctly with Expo projects.
cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim())
bundleCommand = "export:embed"
/* Folders */
// The root of your project, i.e. where "package.json" lives. Default is '../..'
// root = file("../../")
// The folder where the react-native NPM package is. Default is ../../node_modules/react-native
// reactNativeDir = file("../../node_modules/react-native")
// The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen
// codegenDir = file("../../node_modules/@react-native/codegen")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
// If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
// debuggableVariants = ["liteDebug", "prodDebug"]
/* Bundling */
// A list containing the node command and its flags. Default is just 'node'.
// nodeExecutableAndArgs = ["node"]
//
// The path to the CLI configuration file. Default is empty.
// bundleConfig = file(../rn-cli.config.js)
//
// The name of the generated asset file containing your JS bundle
// bundleAssetName = "MyApplication.android.bundle"
//
// The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
// entryFile = file("../js/MyApplication.android.js")
//
// A list of extra flags to pass to the 'bundle' commands.
// See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
// extraPackagerArgs = []
/* Hermes Commands */
// The hermes compiler command to run. By default it is 'hermesc'
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
/* Autolinking */
autolinkLibrariesWithApp()
}
/**
* Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).
*/
def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()
/**
* The preferred build flavor of JavaScriptCore (JSC)
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'
// apply from: new File(["node", "--print", "require('path').dirname(require.resolve('@sentry/react-native/package.json'))"].execute().text.trim(), "sentry.gradle")
android {
ndkVersion rootProject.ext.ndkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
compileSdk rootProject.ext.compileSdkVersion
namespace 'com.nuvio.app'
defaultConfig {
applicationId 'com.nuvio.app'
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 21
versionName "1.2.6"
buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\""
}
// Split APKs by architecture only for smaller downloads
splits {
abi {
enable true
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}
density {
enable false
}
}
// Generate unique version codes for each split APK
def abiVersionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseVersionCode = 21 // Current versionCode 21 from defaultConfig
def abiName = output.getFilter(com.android.build.OutputFile.ABI)
def versionCode = baseVersionCode * 100 // Base multiplier
if (abiName != null) {
versionCode += abiVersionCodes.get(abiName)
}
output.versionCodeOverride = versionCode
}
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'
shrinkResources enableShrinkResources.toBoolean()
minifyEnabled enableMinifyInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'
crunchPngs enablePngCrunchInRelease.toBoolean()
}
}
packagingOptions {
jniLibs {
def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'
useLegacyPackaging enableLegacyPackaging.toBoolean()
}
}
androidResources {
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'
}
}
// Apply static values from `gradle.properties` to the `android.packagingOptions`
// Accepts values in comma delimited lists, example:
// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini
["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop ->
// Split option: 'foo,bar' -> ['foo', 'bar']
def options = (findProperty("android.packagingOptions.$prop") ?: "").split(",");
// Trim all elements in place.
for (i in 0..<options.size()) options[i] = options[i].trim();
// `[] - ""` is essentially `[""].filter(Boolean)` removing all empty strings.
options -= ""
if (options.length > 0) {
println "android.packagingOptions.$prop += $options ($options.length)"
// Ex: android.packagingOptions.pickFirsts += '**/SCCS/**'
options.each {
android.packagingOptions[prop] += it
}
}
}
dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";
if (isGifEnabled) {
// For animated gif support
implementation("com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}")
}
if (isWebpEnabled) {
// For webp support
implementation("com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}")
if (isWebpAnimatedEnabled) {
// Animated webp support
implementation("com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}")
}
}
if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
} else {
implementation jscFlavor
}
// Include only FFmpeg decoder AAR to avoid duplicates with Maven Media3
implementation files("libs/lib-decoder-ffmpeg-release.aar")
}

BIN
android/app/debug.keystore Normal file

Binary file not shown.

Binary file not shown.

28
android/app/proguard-rules.pro vendored Normal file
View file

@ -0,0 +1,28 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# react-native-reanimated
-keep class com.swmansion.reanimated.** { *; }
-keep class com.facebook.react.turbomodule.** { *; }
# Add any project specific keep options here:
# Media3 / ExoPlayer keep (extensions and reflection)
-keep class androidx.media3.** { *; }
-dontwarn androidx.media3.**
# FastImage / Glide ProGuard rules
-keep public class com.dylanvann.fastimage.* {*;}
-keep public class com.dylanvann.fastimage.** {*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}

View file

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" tools:replace="android:usesCleartextTraffic" />
</manifest>

View file

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" tools:replace="android:usesCleartextTraffic" />
</manifest>

View file

@ -0,0 +1,36 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<queries>
<intent>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https"/>
</intent>
</queries>
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:supportsRtl="true" android:enableOnBackInvokedCallback="false">
<meta-data android:name="expo.modules.updates.ENABLED" android:value="true"/>
<meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="@string/expo_runtime_version"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ERROR_RECOVERY_ONLY"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="30000"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://grim-reyna-tapframe-69970143.koyeb.app/api/manifest"/>
<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode|locale|layoutDirection" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:exported="true" android:screenOrientation="unspecified">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="nuvio"/>
<data android:scheme="exp+nuvio"/>
</intent-filter>
</activity>
</application>
</manifest>

View file

@ -0,0 +1,61 @@
package com.nuvio.app
import android.os.Build
import android.os.Bundle
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
import com.facebook.react.defaults.DefaultReactActivityDelegate
import expo.modules.ReactActivityDelegateWrapper
class MainActivity : ReactActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Set the theme to AppTheme BEFORE onCreate to support
// coloring the background, status bar, and navigation bar.
// This is required for expo-splash-screen.
setTheme(R.style.AppTheme);
super.onCreate(null)
}
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
override fun getMainComponentName(): String = "main"
/**
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
*/
override fun createReactActivityDelegate(): ReactActivityDelegate {
return ReactActivityDelegateWrapper(
this,
BuildConfig.IS_NEW_ARCHITECTURE_ENABLED,
object : DefaultReactActivityDelegate(
this,
mainComponentName,
fabricEnabled
){})
}
/**
* Align the back button behavior with Android S
* where moving root activities to background instead of finishing activities.
* @see <a href="https://developer.android.com/reference/android/app/Activity#onBackPressed()">onBackPressed</a>
*/
override fun invokeDefaultOnBackPressed() {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) {
if (!moveTaskToBack(false)) {
// For non-root activities, use the default implementation to finish them.
super.invokeDefaultOnBackPressed()
}
return
}
// Use the default back button implementation on Android S
// because it's doing more than [Activity.moveTaskToBack] in fact.
super.invokeDefaultOnBackPressed()
}
}

View file

@ -0,0 +1,56 @@
package com.nuvio.app
import android.app.Application
import android.content.res.Configuration
import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative
import com.facebook.react.ReactNativeHost
import com.facebook.react.ReactPackage
import com.facebook.react.ReactHost
import com.facebook.react.common.ReleaseLevel
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint
import com.facebook.react.defaults.DefaultReactNativeHost
import expo.modules.ApplicationLifecycleDispatcher
import expo.modules.ReactNativeHostWrapper
class MainApplication : Application(), ReactApplication {
override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(
this,
object : DefaultReactNativeHost(this) {
override fun getPackages(): List<ReactPackage> =
PackageList(this).packages.apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
// add(MyReactNativePackage())
}
override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry"
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
}
)
override val reactHost: ReactHost
get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost)
override fun onCreate() {
super.onCreate()
DefaultNewArchitectureEntryPoint.releaseLevel = try {
ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())
} catch (e: IllegalArgumentException) {
ReleaseLevel.STABLE
}
loadReactNative(this)
ApplicationLifecycleDispatcher.onApplicationCreate(this)
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

View file

@ -0,0 +1,6 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/splashscreen_background"/>
<item>
<bitmap android:gravity="center" android:src="@drawable/splashscreen_logo"/>
</item>
</layer-list>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"
>
<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -0,0 +1 @@
<resources/>

View file

@ -0,0 +1,7 @@
<resources>
<color name="splashscreen_background">#020404</color>
<color name="iconBackground">#020404</color>
<color name="colorPrimary">#023c69</color>
<color name="colorPrimaryDark">#020404</color>
<color name="activityBackground">#020404</color>
</resources>

View file

@ -0,0 +1,7 @@
<resources>
<string name="app_name">Nuvio</string>
<string name="expo_splash_screen_resize_mode" translatable="false">contain</string>
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
<string name="expo_system_ui_user_interface_style" translatable="false">dark</string>
<string name="expo_runtime_version">1.2.6</string>
</resources>

View file

@ -0,0 +1,12 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:enforceNavigationBarContrast" tools:targetApi="29">true</item>
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="android:statusBarColor">#020404</item>
<item name="android:windowBackground">@color/activityBackground</item>
</style>
<style name="Theme.App.SplashScreen" parent="AppTheme">
<item name="android:windowBackground">@drawable/ic_launcher_background</item>
</style>
</resources>

24
android/build.gradle Normal file
View file

@ -0,0 +1,24 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath('com.android.tools.build:gradle')
classpath('com.facebook.react:react-native-gradle-plugin')
classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')
}
}
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://www.jitpack.io' }
}
}
apply plugin: "expo-root-project"
apply plugin: "com.facebook.react.rootproject"

65
android/gradle.properties Normal file
View file

@ -0,0 +1,65 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Enable AAPT2 PNG crunching
android.enablePngCrunchInReleaseBuilds=true
# Use this property to specify which architecture you want to build.
# You can also override it from the CLI using
# ./gradlew <task> -PreactNativeArchitectures=x86_64
reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
# Use this property to enable support to the new architecture.
# This will allow you to use TurboModules and the Fabric render in
# your application. You should enable this flag either if you want
# to write custom TurboModules/Fabric components OR use libraries that
# are providing them.
newArchEnabled=true
# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=true
# Use this property to enable edge-to-edge display support.
# This allows your app to draw behind system bars for an immersive UI.
# Note: Only works with ReactActivity and should not be used with custom Activity.
edgeToEdgeEnabled=true
# Enable GIF support in React Native images (~200 B increase)
expo.gif.enabled=true
# Enable webp support in React Native images (~85 KB increase)
expo.webp.enabled=true
# Enable animated webp support (~3.4 MB increase)
# Disabled by default because iOS doesn't support animated webp
expo.webp.animated=false
# Enable network inspector
EX_DEV_CLIENT_NETWORK_INSPECTOR=true
# Use legacy packaging to compress native libraries in the resulting APK.
expo.useLegacyPackaging=false
# Specifies whether the app is configured to use edge-to-edge via the app config or plugin
# WARNING: This property has been deprecated and will be removed in Expo SDK 55. Use `edgeToEdgeEnabled` or `react.edgeToEdgeEnabled` to determine whether the project is using edge-to-edge.
expo.edgeToEdgeEnabled=true

Binary file not shown.

View file

@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

251
android/gradlew vendored Executable file
View file

@ -0,0 +1,251 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

94
android/gradlew.bat vendored Normal file
View file

@ -0,0 +1,94 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View file

@ -0,0 +1,4 @@
defaults.url=https://sentry.io/
defaults.org=tapframe
defaults.project=react-native
# Using SENTRY_AUTH_TOKEN environment variable

39
android/settings.gradle Normal file
View file

@ -0,0 +1,39 @@
pluginManagement {
def reactNativeGradlePlugin = new File(
providers.exec {
workingDir(rootDir)
commandLine("node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })")
}.standardOutput.asText.get().trim()
).getParentFile().absolutePath
includeBuild(reactNativeGradlePlugin)
def expoPluginsPath = new File(
providers.exec {
workingDir(rootDir)
commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })")
}.standardOutput.asText.get().trim(),
"../android/expo-gradle-plugin"
).absolutePath
includeBuild(expoPluginsPath)
}
plugins {
id("com.facebook.react.settings")
id("expo-autolinking-settings")
}
extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->
if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {
ex.autolinkLibrariesFromCommand()
} else {
ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)
}
}
expoAutolinking.useExpoModules()
rootProject.name = 'Nuvio'
expoAutolinking.useExpoVersionCatalog()
include ':app'
includeBuild(expoAutolinking.reactNativeGradlePlugin)

View file

@ -2,19 +2,22 @@
"expo": {
"name": "Nuvio",
"slug": "nuvio",
"version": "1.0.0",
"version": "1.2.6",
"orientation": "default",
"icon": "./assets/icon.png",
"backgroundColor": "#020404",
"icon": "./assets/ios/AppIcon.appiconset/Icon-App-60x60@3x.png",
"userInterfaceStyle": "dark",
"scheme": "stremioexpo",
"scheme": "nuvio",
"newArchEnabled": true,
"splash": {
"image": "./assets/splash-icon.png",
"image": "./src/assets/splash-icon-new.png",
"resizeMode": "contain",
"backgroundColor": "#020404"
},
"ios": {
"supportsTablet": true,
"icon": "./assets/ios/AppIcon.appiconset/Icon-App-60x60@3x.png",
"buildNumber": "21",
"infoPlist": {
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true
@ -32,40 +35,29 @@
},
"bundleIdentifier": "com.nuvio.app",
"associatedDomains": [],
"documentTypes": [
{
"name": "Matroska Video",
"role": "viewer",
"utis": [
"org.matroska.mkv"
],
"extensions": [
"mkv"
]
}
]
"jsEngine": "hermes"
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/icon.png",
"backgroundColor": "#020404",
"monochromeImage": "./assets/icon.png"
"foregroundImage": "./assets/android/mipmap-xxxhdpi/ic_launcher_foreground.png",
"backgroundColor": "#020404"
},
"icon": "./assets/android/mipmap-xxxhdpi/ic_launcher.png",
"permissions": [
"INTERNET",
"WAKE_LOCK"
],
"package": "com.nuvio.app",
"enableSplitAPKs": true,
"versionCode": 1,
"enableProguardInReleaseBuilds": true,
"enableHermes": true,
"enableSeparateBuildPerCPUArchitecture": true,
"enableVectorDrawables": true
},
"web": {
"favicon": "./assets/favicon.png"
"versionCode": 21,
"architectures": [
"arm64-v8a",
"armeabi-v7a",
"x86",
"x86_64"
],
"jsEngine": "hermes"
},
"extra": {
"eas": {
"projectId": "909107b8-fe61-45ce-b02f-b02510d306a6"
@ -80,7 +72,29 @@
"project": "react-native",
"organization": "tapframe"
}
]
]
],
"expo-localization",
[
"expo-updates",
{
"username": "nayifleo"
}
],
[
"expo-libvlc-player",
{
"localNetworkPermission": "Allow $(PRODUCT_NAME) to access your local network",
"supportsBackgroundPlayback": true
}
],
"react-native-bottom-tabs"
],
"updates": {
"enabled": true,
"checkAutomatically": "ON_ERROR_RECOVERY",
"fallbackToCacheTimeout": 30000,
"url": "https://grim-reyna-tapframe-69970143.koyeb.app/api/manifest"
},
"runtimeVersion": "1.2.6"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

View file

@ -0,0 +1 @@
{"version":"1","generator":"@dotlottie/dotlottie-js@1.2.0","author":"@dotlottie/dotlottie-js@1.2.0","animations":[{"id":"7e326d80-25fe-4203-94a1-718eb3177efe","playMode":"normal"}]}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController modalTransitionStyle="crossDissolve" id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" autoresizesSubviews="NO" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView autoresizesSubviews="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" image="BootSplashLogo-7d142f" translatesAutoresizingMaskIntoConstraints="NO" id="3lX-Ut-9ad">
<rect key="frame" x="127.5" y="273.5" width="120" height="120"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
</accessibility>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
<color key="backgroundColor" name="BootSplashBackground-7d142f"/>
<constraints>
<constraint firstItem="3lX-Ut-9ad" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="Fh9-Fy-1nT"/>
<constraint firstItem="3lX-Ut-9ad" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="nvB-Ic-PnI"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="0.0" y="0.0"/>
</scene>
</scenes>
<resources>
<image name="BootSplashLogo-7d142f" width="120" height="120"/>
<namedColor name="BootSplashBackground-7d142f">
<color red="0.00784313725490196" green="0.0156862745098039" blue="0.0156862745098039" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
</resources>
</document>

View file

@ -0,0 +1,20 @@
{
"colors": [
{
"idiom": "universal",
"color": {
"color-space": "srgb",
"components": {
"blue": "0.0156862745098039",
"green": "0.0156862745098039",
"red": "0.00784313725490196",
"alpha": "1.000"
}
}
}
],
"info": {
"author": "xcode",
"version": 1
}
}

View file

@ -0,0 +1,23 @@
{
"images": [
{
"idiom": "universal",
"filename": "logo-7d142f.png",
"scale": "1x"
},
{
"idiom": "universal",
"filename": "logo-7d142f@2x.png",
"scale": "2x"
},
{
"idiom": "universal",
"filename": "logo-7d142f@3x.png",
"scale": "3x"
}
],
"info": {
"author": "xcode",
"version": 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
assets/dog-running.zip Normal file

Binary file not shown.

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