Git Product home page Git Product logo

nekome's Introduction

Nekome

Master Build Status codecov

Nekome is an Android application that helps with tracking your anime and manga watch lists. Watch list data is handled by Kitsu.

Download from F-Droid Download from Google Play

list detail

Features

  • Track Anime and Manga series progress
  • Quickly update progress on series
  • Search for new series to follow
  • Light and Dark themes

Tech Stack

  • Support for Android 5.0+ (SDK 21+)
  • Fully Kotlin
  • Uses Kitsu to store information, all accessed through their API
  • MVVM for the architecture
  • Compose for the UI layer
  • Material3 support for dynamic themes using Material 3
  • Hilt for dependency injection
  • Retrofit to aid with API communicaton
  • Moshi for parsing JSON
  • Coroutines to perform async tasks
  • Coil for async image loading
  • Detekt & ktlint are used for static analysis

Contribution

For contributing to the project, please feel free to create an issue or submit a pull request.

License

Copyright (C) 2023 Troy Rijkaard

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.

nekome's People

Contributors

brian6932 avatar chesire avatar dependabot-preview[bot] avatar dependabot[bot] avatar imgbot[bot] avatar itnerd7 avatar kuragehimekurara1 avatar poussinou avatar renovate-bot avatar renovate[bot] avatar shalva97 avatar subbramanil avatar thedroiddiv avatar tlaporte avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

nekome's Issues

Ability to add custom links to specific anime

Okay so currently the flow I have is like this:

  • Go to the websites where I like to watch animu
  • Go back to the app and press +1

There are few problems with that, the one I wish to solve right now is ability to add links to the items on home page, so instead of memorizing the websites, I could just save them inside the app.

For example, on the bottom sheet there could be a new Button named "add link", this button would open a new dialog with EditText, where user will paste the link. Then on the home page next to +1 a new button will show up and pressing it will open the website

Bottom Sheet Home Page
Screenshot_20220419-182223_Nekome Screenshot_20220419-184117_Nekome Screenshot_20220419-182230_Nekome Screenshot_20220419-184113_Nekome

Extract the Avatar from the Activity

The avatar is currently set from the Activity, it would be nice if it was its own Fragment that gets included and put into the navigation drawer.
Could be its own module that gets pulled into the app module.

Add widget

Create a widget to use with the application. It should be able to talk to the account module to get and send information.

Update detekt to run on test files

Currently detekt only looks at the src/main/java directory, it should be changed to look at src/ instead, and all of the issues that have risen up in tests should be fixed, or the config updated to ignore those issues.

Display info to user when they get force logged out

When the application force logs a user out due to an invalid auth/refresh token it just kicks them back to the login screen, with no information. A snackbar or notification or something should appear to notify the user that they were logged out.

Support for alternate services?

This is the sole recorder of literature and videography that I have located available via F-Droid. Consequently, although I would be very pleased if this were to become able to record more generic information โ€“ not solely Japanese.

Consequently, all that I shall propose is management of alternate trackers of Japanese media, 2 of which are https://anilist.co and https://myanimelist.net. I utilize primarily https://anilist.co, so addition of that website would allow me to easily synchronize it with or transfer the data of it to https://kitsu.io (which I have estimated is probably your favourite).

I am thankful for any consideration.

Full screen login flow

The login flow currently has a white background, with the bar visible at the top of the screen. It would probably look better if the bar was made white to match the background, with black icons so they are still visible.

These would be visible only on the login module screens, then disappear once back on the main application screens.

Split up the Core classes

In order to keep the "Core" module smaller, some of the classes could be extracted into their own modules, or put in other modules where it makes sense.

Split up the Library API into management and retrieveal

The LibraryAPI currently deals with all retrieval and management of the library, it could be split up so one API is used for retrieval of all the series (can also then deal with a singular series), and one for managing the API itself.

F-Droid support

Have the developers considered getting this app included on F-Droid?

Given that Fastlane is already used here, all that's left is to submit metadata and wait for approval.

[Feature Request] Material You Support

Please consider updating the interface to material you,
Material You allow for better UI consistency across devices, it makes them easier to use, and it adapts to user color scheme preferences.

Refactor usage of the Resource class

Currently Resource is used across the application for all API calls. This currently resides within the core module so changing it means recompiling everything.
An idea would be to change from using Resource to instead have a different sealed class per functional area. This means that using it would be a bit cleaner, and hold the correct data.

The Search library could for example return

sealed class SearchResult {
    data class Success(items: List<SearchDomain>): SearchResult
    object AuthFailure(): SearchResult
    object EmptyResultFailure(): SearchResult
    ...
}

Which means further down the chain we already have the result parsed out, and have no need to check the error code, instead we can check against the SearchResult.

Change how we handle invalid refresh token handling

Currently all requests that require and authenticated API report the failure down to the viewmodel, which then executes a log out of the application. It would be better if there was some global handler for this behaviour, since we always want to execute a log out when the refresh token is invalid.

Worker to update the refresh token isn't working

Having the application sitting around unused for awhile (untested amount of time) looks like the auth token becomes invalid, and the refresh token also becomes invalid and doesn't update.
Need to investigate if the worker isn't running or if it isn't updating the auth token internally.

Add way to refresh series

Series currently refresh in the background, but there is no way to manually force a refresh. Could use pull to refresh, or a refresh button in the app bar.

Add 'Activity' module

Add a module that will show a users activity.
Can show it as a list of times initially (you watched x at y), but later on this should probably be a graph so its a bit easier to see how many shows were seen on which day etc.

Change to use the AboutLibraries plugin

Using the AboutLibraries plugin seems to make a lot of the libraries disappear from the licenses list, this is likely due to it being a multi-module project.
Need to find out how to fix this and use the new plugin instead of using the AboutLibraries definitions dependency.

Clean up some of the DTO

Some of the DTO contain fields that aren't being used, such as in the Auth module where only a couple of fields are stored or used. Some of this data could be removed to clean up the DTOs, this would also improve coverage in those areas since the unused code isn't tested.

Add title preference setting

For some reason I see "Attack on Titan" in my list. I usually have romaji titles displayed and would strongly prefer that here. It's a bit disorienting not having them, because I sort by title, and so things actually aren't where I expect this way. (A section vs S section in this case)

Add 'Profile' module

Add a module to show information about the user.
Information that would be displayed are minor stats such as the total series in each state, the total anime series, the total manga series, estimated time spent watching series etc. Some of this information can be pulled from the API.

Workers sometimes don't seem to run

Running the app on my tablet (Samsung Tab A 10.1), it looks like it never seems to update in the background, so the auth token will eventually expire regardless.

This could be something to do with the worker that starts up not being in the foreground so it gets killed before it can execute. Or it could be that the service is just never started up again.

Either way need to investigate into this.

Code coverage isn't reporting correctly

It looks like the code coverage across the modules isn't being reported correctly, since the UI tests are all in the app module it looks like it isn't working for coverage across the fragments in other modules.

Might need to have custom jacoco settings for each module, which reflect that the tests are in the app layer?

Settings option for default starting screen

Add an option into settings that allows the user to choose their default starting screen. Currently it defaults to "Anime", but some users may only use the app to track their manga usage so it would be nice to allow them to default to Manga.

Can't refresh if one of the lists is empty

I only have manga added to my library, on the first login it was able to successfully sync the data, but after I tried updating an entry on the website and refreshed the list on the app, it failed to sync the contents.

I was able to successfully refresh the list if at least one anime entry was in my library, otherwise the sync fails.
So I'm assuming that the code assumes both the lists must have some entries.
Hope it gets fixed, Thanks for the app.

screenshot

Add way to navigate to search from the series list

There should be some sort of way to navigate straight to search from the series list, to make it a bit easier to show how new series can be tracked. This could be a FAB on the series list itself that links into the search flow.

Japanese translation

I would like to translate Nekome into Japanese. Does Nekome support the translation?

Add Black/AMOLED theme

I would like a darker dark theme, both for aesthetic reasons and because it saves battery life on most modern phone screens. It could be a separate theme choice or a checkbox to change the dark theme's look. I have seen it both ways in other apps.

Change the avatar view subtitle

The subtitle for the avatar view is currently hardcoded to Kitsu. Find something more interesting to map it to. Maybe number of series tracked or something.

Refactor the UserModel to store as a UserEntity instead

Change from using a UserModel to store in the database and move around the application, instead convert to a UserEntity to store in the database, then convert to something such as a UserDomain for use in the application.

Can skip login details screen

If activity recreation occurs while sitting on the login details screen, then the user will be taken to the anime/manga list without being logged in.
The reason for this is likely that when the activity is recreated

        if (savedInstanceState == null && !viewModel.userLoggedIn) {

is used in the onCreate which on recreation is skipped because savedInstanceState is not null so the nav graph goes straight to the anime/manga list.
Should be a case of making sure it doesn't default to anime/manga and instead doing it manually.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • chore(deps): update dependency fastlane to v2.220.0
  • chore(deps): update dependency gradle to v8.7
  • fix(deps): update dependency androidx.browser:browser to v1.8.0
  • fix(deps): update dependency androidx.core:core-ktx to v1.13.1
  • fix(deps): update dependency androidx.datastore:datastore-preferences to v1.1.1
  • fix(deps): update dependency androidx.fragment:fragment-ktx to v1.7.0
  • fix(deps): update dependency com.google.android.material:material to v1.12.0
  • fix(deps): update dependency com.squareup.leakcanary:leakcanary-android to v2.14
  • fix(deps): update dependency org.robolectric:robolectric to v4.12.1
  • fix(deps): update retrofit to v2.11.0 (com.squareup.retrofit2:converter-moshi, com.squareup.retrofit2:retrofit)
  • fix(deps): update dependency com.michael-bull.kotlin-result:kotlin-result to v2
  • ๐Ÿ” Create all rate-limited PRs at once ๐Ÿ”

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

bundler
Gemfile
  • fastlane "> 0"
  • danger "> 0"
  • danger-android_lint "> 0"
  • danger-checkstyle_format "> 0"
github-actions
.github/workflows/master.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
  • codecov/codecov-action v4
.github/workflows/pre-merge.yml
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
  • codecov/codecov-action v4
  • EnricoMi/publish-unit-test-result-action v2
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
  • actions/checkout v4
  • actions/setup-java v4
  • gradle/actions v3
  • ruby/setup-ruby v1
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
app/build.gradle.kts
core/compose/build.gradle.kts
core/preferences/build.gradle.kts
core/resources/build.gradle.kts
features/login/build.gradle.kts
features/search/build.gradle.kts
features/series/build.gradle.kts
features/serieswidget/build.gradle.kts
features/settings/build.gradle.kts
gradle/libs.versions.toml
  • com.mikepenz:aboutlibraries-compose 11.1.4
  • com.adevinta.android:barista 4.3.0
  • androidx.appcompat:appcompat 1.6.1
  • androidx.arch.core:core-testing 2.2.0
  • androidx.browser:browser 1.7.0
  • androidx.compose:compose-bom 2024.02.01
  • androidx.compose.material3:material3 1.2.0
  • androidx.compose.ui:ui-test-junit4 1.6.7
  • androidx.constraintlayout:constraintlayout 2.1.4
  • androidx.core:core-ktx 1.12.0
  • androidx.datastore:datastore-preferences 1.0.0
  • androidx.fragment:fragment-ktx 1.6.2
  • androidx.glance:glance-appwidget 1.0.0
  • androidx.glance:glance-material3 1.0.0
  • androidx.hilt:hilt-compiler 1.2.0
  • androidx.hilt:hilt-navigation-compose 1.2.0
  • androidx.hilt:hilt-work 1.2.0
  • androidx.lifecycle:lifecycle-extensions 2.2.0
  • androidx.lifecycle:lifecycle-viewmodel-ktx 2.7.0
  • androidx.navigation:navigation-compose 2.7.7
  • androidx.navigation:navigation-fragment-ktx 2.7.7
  • androidx.navigation:navigation-ui-ktx 2.7.7
  • androidx.preference:preference-ktx 1.2.1
  • androidx.room:room-ktx 2.6.1
  • androidx.room:room-compiler 2.6.1
  • androidx.room:room-runtime 2.6.1
  • androidx.room:room-testing 2.6.1
  • androidx.security:security-crypto 1.1.0-alpha06
  • androidx.swiperefreshlayout:swiperefreshlayout 1.1.0
  • androidx.test.espresso:espresso-core 3.5.1
  • androidx.test.espresso:espresso-intents 3.5.1
  • androidx.test.ext:junit 1.1.5
  • androidx.test:rules 1.5.0
  • androidx.work:work-runtime-ktx 2.9.0
  • io.coil-kt:coil 2.6.0
  • io.coil-kt:coil-compose 2.6.0
  • io.nlopez.compose.rules:detekt 0.3.11
  • io.gitlab.arturbosch.detekt:detekt-formatting 1.23.5
  • com.braisgabin.detekt:kotlin-compiler-wrapper 0.0.4
  • com.google.accompanist:accompanist-flowlayout 0.34.0
  • com.google.accompanist:accompanist-systemuicontroller 0.34.0
  • com.google.dagger:hilt-android 2.51.1
  • com.google.dagger:hilt-android-compiler 2.51.1
  • com.google.dagger:hilt-android-testing 2.51.1
  • com.google.android.material:material 1.11.0
  • junit:junit 4.13.2
  • org.jetbrains.kotlinx:kotlinx-coroutines-android 1.8.0
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.8.0
  • org.jetbrains.kotlinx:kotlinx-coroutines-test 1.8.0
  • com.michael-bull.kotlin-result:kotlin-result 1.1.21
  • com.github.chesire:lifecyklelog 3.1.1
  • io.mockk:mockk 1.13.10
  • io.mockk:mockk-android 1.13.10
  • org.robolectric:robolectric 4.11.1
  • com.squareup.leakcanary:leakcanary-android 2.13
  • com.squareup.moshi:moshi 1.15.1
  • com.squareup.moshi:moshi-kotlin-codegen 1.15.1
  • com.squareup.okhttp3:okhttp 4.12.0
  • com.squareup.okhttp3:logging-interceptor 4.12.0
  • com.squareup.retrofit2:retrofit 2.9.0
  • com.squareup.retrofit2:converter-moshi 2.9.0
  • com.jakewharton.timber:timber 5.0.1
  • com.mikepenz.aboutlibraries.plugin 11.1.4
  • com.android.application 8.2.2
  • com.android.library 8.2.2
  • io.gitlab.arturbosch.detekt 1.23.5
  • com.google.dagger.hilt.android 2.51.1
  • com.google.devtools.ksp 1.9.22-1.0.17
  • org.jetbrains.kotlin.android 1.9.22
  • org.jetbrains.kotlinx.kover 0.7.6
  • org.jlleitschuh.gradle.ktlint 11.6.1
libraries/core/build.gradle.kts
libraries/database/build.gradle.kts
libraries/datasource/activity/build.gradle.kts
libraries/datasource/auth/build.gradle.kts
libraries/datasource/search/build.gradle.kts
libraries/datasource/series/build.gradle.kts
libraries/datasource/trending/build.gradle.kts
libraries/datasource/user/build.gradle.kts
libraries/kitsu/build.gradle.kts
libraries/kitsu/activity/build.gradle.kts
libraries/kitsu/auth/build.gradle.kts
libraries/kitsu/library/build.gradle.kts
libraries/kitsu/search/build.gradle.kts
libraries/kitsu/trending/build.gradle.kts
libraries/kitsu/user/build.gradle.kts
testing/build.gradle.kts
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6

  • Check this box to trigger a request for Renovate to run again on this repository

Add better sorting window

Currently pressing sort on the series list shows a list of possible sort options. It would be nicer if more options could be added and with an ascending/descending option.
This could pop up as a bottom sheet instead of a dialog.

question about modules

Based on what did you structure the modules? I also want to do similar way on my project and wanted to know what led you to the current state of feature and libraries structure...

I am trying to build a Jellyfin client, it will be something like Plex or Emby. There was other articles too, and many reddit posts, but I posted this question here because... there is a whole project as an example :D

So what was the pros and cons of this modular aproach you used?

Tracker

Does it support anilist too or only Kitsu? Since it appeared in the advanced github search so idk

Add 'Upcoming' module

Add a new application module that will be used to show upcoming shows. Will need some UI to show the current day and what will be shown on the upcoming days, probably limited to the next 7 days, or next 4 weeks?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.