chesire / nekome Goto Github PK
View Code? Open in Web Editor NEWNekome is an Android application to manage tracked Anime and Manga lists.
License: Apache License 2.0
Nekome is an Android application to manage tracked Anime and Manga lists.
License: Apache License 2.0
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.
Update to include screenshots for dark mode.
Is it possible to add support to other services like MyAnimeList?
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)
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.
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?
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.
Hilt is a new component of Dagger, it should replace dagger-android. https://developer.android.com/training/dependency-injection/hilt-android
Create a widget to use with the application. It should be able to talk to the account module to get and send information.
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.
I would like to translate Nekome into Japanese. Does Nekome support the translation?
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.
Does it support anilist too or only Kitsu? Since it appeared in the advanced github search so idk
Change the text from saying "????-??-??" to instead say "Ongoing", as it reads nicer to the user
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.
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.
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.
Currently all the UI tests mock out the APIs to communicate with the server, it might be more beneficial to instead use a mock server, so the whole framework is tested against.
In the KitsuLibrary reflection is used to call suspending functions, it could be removed to not need to use reflection.
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.
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.
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.
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.
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.
The account manager would be cool to play around with, so see if it can be integrated in.
Instead of just saying "Results" on the results page, it should instead have the text that was searched for
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.
Currently an error occurs and the user is forced to manually log out, we need to check the return code and if its a failure for invalid token we need to force the log out.
This occurs from within the series list.
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.
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.
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
.
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.
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.
Okay so currently the flow I have is like this:
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 |
---|---|
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.
Currently the auth token is stored from within the Auth module, it might be cleaner to extract this out into its own 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?
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?
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.
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.
Leak canary is throwing up some issues while interacting with the application, try to find fixes to them.
The main leak seems to be when navigating to the settings screen.
In various parts of the application Domain objects are converted into a SeriesModel which is used for display to the user, these instances should be changed to models specific to that view so its easier to change.
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.
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.
The login screens currently exist within the main app module, but they should sit in their own module named app-login
.
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.
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.
Instead of needing to spin an emulator up to run the tests, would be nicer to just run them using Robolectic.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
io.mockk:mockk-android
, io.mockk:mockk
)com.mikepenz.aboutlibraries.plugin
, com.mikepenz:aboutlibraries-compose
)com.google.dagger.hilt.android
, com.google.dagger:hilt-android-testing
, com.google.dagger:hilt-android-compiler
, com.google.dagger:hilt-android
)com.google.accompanist:accompanist-systemuicontroller
, com.google.accompanist:accompanist-flowlayout
)androidx.test.espresso:espresso-intents
, androidx.test.espresso:espresso-core
)androidx.glance:glance-material3
, androidx.glance:glance-appwidget
)androidx.navigation:navigation-ui-ktx
, androidx.navigation:navigation-fragment-ktx
, androidx.navigation:navigation-compose
)io.coil-kt:coil-compose
, io.coil-kt:coil
)com.squareup.retrofit2:converter-moshi
, com.squareup.retrofit2:retrofit
)These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
io.gitlab.arturbosch.detekt
, io.gitlab.arturbosch.detekt:detekt-formatting
)org.jetbrains.kotlinx:kotlinx-coroutines-test
, org.jetbrains.kotlinx:kotlinx-coroutines-core
, org.jetbrains.kotlinx:kotlinx-coroutines-android
)com.android.library
, com.android.application
)Gemfile
danger "> 0"
danger-android_lint "> 0"
danger-checkstyle_format "> 0"
.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.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.properties
gradle 8.6
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.