Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thomaskioko/tv-maniac
Tv-Maniac is a personalized entertainment tracking and recommendation Multiplatform app (Android & iOS) for tracking TV Shows using TMDB API.
https://github.com/thomaskioko/tv-maniac
android clean-architecture ios jetpack-compose kmm kmp koin kotlin kotlin-coroutines kotlin-multiplatform kotlin-serialization ktor ktor-client mvi-clean-architecture swiftui tmdb-api tmdb-client
Last synced: about 2 months ago
JSON representation
Tv-Maniac is a personalized entertainment tracking and recommendation Multiplatform app (Android & iOS) for tracking TV Shows using TMDB API.
- Host: GitHub
- URL: https://github.com/thomaskioko/tv-maniac
- Owner: thomaskioko
- License: apache-2.0
- Created: 2021-04-25T10:07:21.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-07-03T09:17:17.000Z (7 months ago)
- Last Synced: 2024-07-03T23:16:13.260Z (7 months ago)
- Topics: android, clean-architecture, ios, jetpack-compose, kmm, kmp, koin, kotlin, kotlin-coroutines, kotlin-multiplatform, kotlin-serialization, ktor, ktor-client, mvi-clean-architecture, swiftui, tmdb-api, tmdb-client
- Language: Kotlin
- Homepage:
- Size: 65.6 MB
- Stars: 228
- Watchers: 6
- Forks: 25
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - thomaskioko/tv-maniac - Tv-Maniac is a personalized entertainment tracking and recommendation Multiplatform app (Android & iOS) for tracking TV Shows using TMDB API. (Kotlin)
README
TvManiac
-------------------------
![Check](https://github.com/c0de-wizard/tv-maniac/actions/workflows/build.yml/badge.svg)
![android](http://img.shields.io/badge/platform-android-6EDB8D.svg?style=flat) ![ios](http://img.shields.io/badge/platform-ios-CDCDCD.svg?style=flat)
[![TvManiac Debug](https://img.shields.io/badge/Debug--Apk-download-green?style=for-the-badge&logo=android)](https://github.com/c0de-wizard/tv-maniac/releases/latest/download/app-debug.apk)**TvManiac** is a personalized entertainment tracking and recommendation Multiplatform app. By utilizing
[TMDB](https://developer.themoviedb.org/docs), we can view shows, create a watchlist get statistics, and much more. This project aims to demonstrate KMP development capabilities. This is currently running on:
- Android: Compose
- iOS: SwiftUI## 🚧 Under Heavy Development 🚧
This is my playground for learning Kotlin Multiplatform. With that said, I'm sure it's filled with bugs crawling everywhere, and I'm probably doing a couple of things wrong. So a lot is changing, but that shouldn't stop you from checking it out.| Android | iOS |
| -- | -- |
| | |> [!IMPORTANT]
> To fetch data, you will need to [create a TMDB API app](https://www.themoviedb.org/settings/api) and generate an API key if you don't have one. Once you have your keys, add them to `config.yaml`. If the file is unavailable, navigate to the root dir and create a symlink.
> `$ ln -s core/util/src/commonMain/resources/config.yaml config.yaml`, then add the API keys.## 🖥 Project Setup & Environment
#### Requirements
- [Zulu Java 21](https://www.azul.com/downloads/?package=jdk#zulu)
- You require the latest [Android Studio](https://developer.android.com/studio/preview) release to be able to build the app.
- Install KMM Plugin. Checkout [this setup guide](https://kotlinlang.org/docs/multiplatform-mobile-setup.html).### Opening iOS Project
- Navigate to the ios directory & open `.xcodeproj`## Architecture Overview
- [ ] TODO: Add detail architecture![TvManiac Architecture](https://github.com/thomaskioko/tv-maniac/assets/841885/84e314fc-71a5-40e5-b034-213e6b546f9a)
### Android Screenshots
### 🔆 iOS Screenshots
## Libraries Used
### Android
* [Accompanist](https://github.com/google/accompanist)
* [Insets](https://google.github.io/accompanist/insets/)
* [Pager Layouts](https://google.github.io/accompanist/pager/)
* [Android-youtube-player](https://github.com/PierfrancescoSoffritti/android-youtube-player) - Youtube Player
* [AppAuth](https://openid.github.io/AppAuth-Android/) - AppAuth for Android is a client SDK for communicating with OAuth 2.0 and OpenID Connect providers.
* [Compose Lints](https://slackhq.github.io/compose-lints/) - Custom lint checks for Jetpack Compose.
* [Jetpack Compose](https://developer.android.com/jetpack/compose)
* [Coil](https://coil-kt.github.io/coil/compose/) - Image loading
* [KenBurnsView](https://github.com/flavioarfaria/KenBurnsView) - Immersive image.
* [Leakcanary](https://github.com/square/leakcanary) - Memory leak detection.### Kmp - Common
* [Coroutines](https://github.com/Kotlin/kotlinx.coroutines#multiplatform) - Concurrency & Threading
* [DataStore Preferences](https://android-developers.googleblog.com/2022/10/announcing-experimental-preview-of-jetpack-multiplatform-libraries.html) - Data storage
* [DateTime](https://github.com/Kotlin/kotlinx-datetime) - Date & Time
* [Decompose](https://arkivanov.github.io/Decompose/) - Kotlin Multiplatform library for breaking down your code into lifecycle-aware business logic components (aka BLoC).
* [Kermit](https://kermit.touchlab.co/) - Logging
* [kotlin-inject](https://github.com/evant/kotlin-inject) - Injection library.
* [Kotlinx Serialization](https://ktor.io/docs/kotlin-serialization.html) - De/Serializing JSON
* [Ktor](https://ktor.io/) - Networking
* [Kotest Assertions](https://kotest.io/docs/assertions/assertions.html) - Testing
* [Multiplatform Paging](https://github.com/cashapp/multiplatform-paging) A library that adds additional Kotlin/Multiplatform targets to AndroidX Paging, and provides UI components to use Paging on iOS.
* [SQLDelight](https://github.com/cashapp/sqldelight/) - Local storage
- [Coroutines Extensions](https://cashapp.github.io/sqldelight/js_sqlite/coroutines/) Consume queries as Flow### iOS
* [SDWebImage](https://github.com/SDWebImage/SDWebImage) - Async image downloader.
* [OAuthSwift](https://github.com/OAuthSwift/OAuthSwift) Swift-based OAuth library for iOS and macOS.
* [Youtube PlayerKit](https://github.com/SvenTiigi/YouTubePlayerKit) - Swift Youtube Player## Roadmap
Android
- [x] Implement Watchlist
- [x] Add `More` screen. Shows GridView
- [x] Recommended Shows
- [x] Implement pagination.
- [x] Add Settings panel.
- Dynamic theme change.
- [x] Add Seasons UI
- [x] Implement trakt auth & sign in
- [x] Migrate to Material3
- [x] Implement Paging
- [x] Implement Search
- [ ] Add Episode detail screen
- [ ] Add WatchlistiOS
- [x] Add HomeScreen: Tabs & Empty UI
- [x] Implement Discover UI
- [x] Show Detail Screen
- [x] Add Settings panel.
- [x] Implement trakt auth & sign in
- [x] Update show detail UI
- [x] Add Seasons Detail UI
- [x] Implement Paging
- [x] Implement Search
- [ ] Add Episode detail screen
- [ ] Add WatchlistShared
- [x] Use SQLDelight extensions to consume queries as Flow
- [x] Refactor interactor implementation.
- [x] Use koin for injection
- [x] Modularize `shared` module
- [x] Try out [Flow-Redux](https://github.com/freeletics/FlowRedux)
- [x] Fix paging
- [x] Add test cases.
- [ ] Improve error handling.### References & Inspiration
- [Design Inspiration](https://dribbble.com/shots/7591814-HBO-Max-Companion-App-Animation)
- [Code Snippets](https://github.com/android/compose-samples)
- [Touchlab KaMPKit project](https://github.com/touchlab/KaMPKit)
- [Tivi](https://github.com/chrisbanes/tivi)## License
```
Copyright 2021 Thomas KiokoLicensed 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 athttps://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.
```