Giter Club home page Giter Club logo

ryot's Introduction

Greetings ๐Ÿ‘‹, I am Diptesh

I love to solve problems with code. I am based in New Delhi, India. You can find out more about me on my website.

Socials

My presence in the FOSS community

IgnisDa GitHub Stats IgnisDa GitHub Stats

Donations

If you like my projects and want to support their development, consider sponsoring me. Every single donation will be appreciated and will boost my motivation to keep on coding in open source ๐Ÿ™ƒ.

Please don't forget to leave me some kind of message (with the donation or as a separate e-mail) to let me know which specific project the donations is for, what you like about it and what I can do to improve it further ๐Ÿ™‚.

ryot's People

Contributors

aktaboot avatar asymtode712 avatar azukaar avatar bonukai avatar bretthysuik avatar ellsclytn avatar fafnor avatar felixonmars avatar ignisda avatar psyko-gh avatar sa-so avatar sirmartin avatar vnghia 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  avatar  avatar

ryot's Issues

[Login] Login Failing - Docker

I have pulled the docker container as per the deployment instructions. The container runs and i can access the WebGUI. When i register/create an account i get a "user created successfully" and then am redirected back to the login page. When i use my account name and password i get "Autorisation Error, you are not logged in"

Have i missed a step?

[Enhancement] Quicker way to add search result item to watchlist collection

Right now a lot of clicks are required to add, for example a game, to a collection. Preferably this could be done directly from the search results page instead of clicking into the game and then "Add to collection", clicking on the dropdown and then on the "Set" button.

Maybe have a "..." button top right of the cover that opens a menu to "Add to collection" or even "Add to watchlist".

[Feature request] Music tracker

Hi there,
It would be cool to have also a music tracker, so that you can see which albums you've already listened to and see when new albums get released :D

Importing from MediaTracker fails

Hi, I'm a fan of MediaTracker and I wanted to give your project a try.
After some struggling with login #23 (even on 0.0.20 it didn't work without setting insecure_cookie to true, maybe add a note to readme?) I'm now stuck on importing.
I get a "Success" notification, but that's about as far as it goes. (one interesting thing is that "Success" is shown even if API key is incorrect, maybe different wording would help to avoid confusion? something like "Successfully accessed the URL / instance").

logs (portainer with timestamps):

2023-05-13T17:52:10.523496Z  INFO ryot: Using database backend: "SQLite"

2023-05-13T17:52:11.840217Z  INFO ryot: Listening on 0.0.0.0:8000

2023-05-13T17:52:41.860520Z  INFO ryot::background: Importing media

2023-05-13T17:52:41.869641Z  INFO ryot::misc::resolver: Started import job with id = 4

thread 'tokio-runtime-worker' panicked at 'called `Result::unwrap()` on an `Err` value: ()', apps/backend/src/importer/media_tracker.rs:134:14

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Allow searching user's media

On this list page, a user is not allowed to search for media when they are under the "My books" section. This should be fixed.

Cannot add any media, error when clicking on any media tab

After running the container with podman run --rm -p 8000:8000 ghcr.io/ignisda/ryot:latest, I can register a new user and get to the main menu. When clicking on any tabs, I get the following error:

Application error: a client-side exception has occurred (see the browser console for more information).

Adding volumes containing the configuration or data does not fix the issue.

framework-19f3649580393c10.js:9 TypeError: Cannot read properties of undefined (reading 'trim')
    at list-4ba8436c47a79ba7.js:1:9286
    at uI (framework-19f3649580393c10.js:9:84128)
    at oU (framework-19f3649580393c10.js:9:113199)
    at oC (framework-19f3649580393c10.js:9:96012)
    at r4 (framework-19f3649580393c10.js:9:44776)
    at framework-19f3649580393c10.js:9:111639
    at oI (framework-19f3649580393c10.js:9:111645)
    at oS (framework-19f3649580393c10.js:9:95015)
    at x (framework-19f3649580393c10.js:33:1373)
    at MessagePort.T (framework-19f3649580393c10.js:33:1903)
a5 @ framework-19f3649580393c10.js:9
main-54379c1fb512e6dc.js:1 TypeError: Cannot read properties of undefined (reading 'trim')
    at list-4ba8436c47a79ba7.js:1:9286
    at uI (framework-19f3649580393c10.js:9:84128)
    at oU (framework-19f3649580393c10.js:9:113199)
    at oC (framework-19f3649580393c10.js:9:96012)
    at r4 (framework-19f3649580393c10.js:9:44776)
    at framework-19f3649580393c10.js:9:111639
    at oI (framework-19f3649580393c10.js:9:111645)
    at oS (framework-19f3649580393c10.js:9:95015)
    at x (framework-19f3649580393c10.js:33:1373)
    at MessagePort.T (framework-19f3649580393c10.js:33:1903)
K @ main-54379c1fb512e6dc.js:1
main-54379c1fb512e6dc.js:1 A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred

The console logs are as follow:

2023-05-25T13:52:02.758091Z  INFO ryot: Using database backend: "SQLite"
2023-05-25T13:52:02.758441Z  INFO sea_orm_migration::migrator: Applying all pending migrations
2023-05-25T13:52:02.758736Z  INFO sea_orm_migration::migrator: Applying migration 'm20230410_000001_create_metadata'
2023-05-25T13:52:02.759614Z  INFO sea_orm_migration::migrator: Migration 'm20230410_000001_create_metadata' has been applied
2023-05-25T13:52:02.759829Z  INFO sea_orm_migration::migrator: Applying migration 'm20230416_000002_create_creator'
2023-05-25T13:52:02.760484Z  INFO sea_orm_migration::migrator: Migration 'm20230416_000002_create_creator' has been applied
2023-05-25T13:52:02.760666Z  INFO sea_orm_migration::migrator: Applying migration 'm20230416_000003_create_book'
2023-05-25T13:52:02.760828Z  INFO sea_orm_migration::migrator: Migration 'm20230416_000003_create_book' has been applied
2023-05-25T13:52:02.761008Z  INFO sea_orm_migration::migrator: Applying migration 'm20230417_000004_create_user'
2023-05-25T13:52:02.761794Z  INFO sea_orm_migration::migrator: Migration 'm20230417_000004_create_user' has been applied
2023-05-25T13:52:02.761970Z  INFO sea_orm_migration::migrator: Applying migration 'm20230419_000005_create_seen'
2023-05-25T13:52:02.762161Z  INFO sea_orm_migration::migrator: Migration 'm20230419_000005_create_seen' has been applied
2023-05-25T13:52:02.762342Z  INFO sea_orm_migration::migrator: Applying migration 'm20230423_000006_create_movie'
2023-05-25T13:52:02.762501Z  INFO sea_orm_migration::migrator: Migration 'm20230423_000006_create_movie' has been applied
2023-05-25T13:52:02.762683Z  INFO sea_orm_migration::migrator: Applying migration 'm20230425_000007_create_show'
2023-05-25T13:52:02.762843Z  INFO sea_orm_migration::migrator: Migration 'm20230425_000007_create_show' has been applied
2023-05-25T13:52:02.763024Z  INFO sea_orm_migration::migrator: Applying migration 'm20230502_000008_create_video_game'
2023-05-25T13:52:02.763187Z  INFO sea_orm_migration::migrator: Migration 'm20230502_000008_create_video_game' has been applied
2023-05-25T13:52:02.763371Z  INFO sea_orm_migration::migrator: Applying migration 'm20230502_000009_create_genre'
2023-05-25T13:52:02.763832Z  INFO sea_orm_migration::migrator: Migration 'm20230502_000009_create_genre' has been applied
2023-05-25T13:52:02.764007Z  INFO sea_orm_migration::migrator: Applying migration 'm20230504_000010_create_summary'
2023-05-25T13:52:02.764160Z  INFO sea_orm_migration::migrator: Migration 'm20230504_000010_create_summary' has been applied
2023-05-25T13:52:02.764367Z  INFO sea_orm_migration::migrator: Applying migration 'm20230504_000011_create_audio_book'
2023-05-25T13:52:02.764545Z  INFO sea_orm_migration::migrator: Migration 'm20230504_000011_create_audio_book' has been applied
2023-05-25T13:52:02.764725Z  INFO sea_orm_migration::migrator: Applying migration 'm20230505_000012_create_review'
2023-05-25T13:52:02.764912Z  INFO sea_orm_migration::migrator: Migration 'm20230505_000012_create_review' has been applied
2023-05-25T13:52:02.765096Z  INFO sea_orm_migration::migrator: Applying migration 'm20230507_000013_create_collection'
2023-05-25T13:52:02.765748Z  INFO sea_orm_migration::migrator: Migration 'm20230507_000013_create_collection' has been applied
2023-05-25T13:52:02.765949Z  INFO sea_orm_migration::migrator: Applying migration 'm20230509_000014_create_media_import_report'
2023-05-25T13:52:02.766185Z  INFO sea_orm_migration::migrator: Migration 'm20230509_000014_create_media_import_report' has been applied
2023-05-25T13:52:02.766405Z  INFO sea_orm_migration::migrator: Applying migration 'm20230514_000015_create_podcast'
2023-05-25T13:52:02.766587Z  INFO sea_orm_migration::migrator: Migration 'm20230514_000015_create_podcast' has been applied
2023-05-25T13:52:03.172584Z  INFO ryot: Listening on 0.0.0.0:8000
2023-05-25T14:00:00.001744Z  INFO ryot::background: Cleaning up user and metadata association
2023-05-25T14:00:00.002153Z  INFO ryot::background: Removing old user summaries and regenerating them
2023-05-25T14:02:47.034850Z  INFO ryot::background: Running jobs after user creation

Wrong aspect ratio on covers

See attached screenshot. When having a super wide screen (and therefore higher resolution) the covers looks wrong as it seems it want to force 6 items instead of 5 even though the container has the same max width.

I recommend to keep having 5 items for each row or increasing the width of the container at higher resolutions.

Tested both in Firefox & Chrome.

screen

Make summary calculation more performant

Right now summary calculation happens by analyzing all the seen items for a user. A better way would be to use the previous summary item, and add the details of the new seen item. This would also enable us to get rid of the bulk update mechanism.

Feature: Trakt import

Users are requesting integration with a lot of services- Spotify, Youtube etc. Since Trakt supports all of these, it would be an easy win if I add integration with it.

Import reports

We need to have a UI to display the status of imports.

Search filter is persisted

Steps to reproduce:

  1. Search for a show lets say Firefly
  2. Navigate to a different tab e.g. Audio Book
  3. Search is still populated with Firefly

It'd probably be better if the search is reset when navigating away? Or at least add a cross to the input to quickly remove the filter.

[Feature Request]: CSV import/export

For general import/export functionalities, CSV is the most flexible. Ultimately, most data from other services can be converted to CSV format (more of less easily), making it a near universal import/export format.

CSV import is the harder of the two I assume. Features ideal for this are:

  • Well defined input format, where name, IGDB/TVDB/IMDB/Goodreads/etc. IDs, data watched/read/played/etc., status etc. can be provided
  • Only either name or ID should be mandatory, if one is provided the other should be looked up automatically, and for other fields, sane defaults should be set (e.g. no date watched set - import with todays date)
  • Name matching necessarily needs to be fuzzy - although I think the DB APIs do this already, first match to name should be fine
  • There should be some sort of reasonably easy check for name matching, to see whether the fuzzy match got the right item

As example, I think Simkl (https://simkl.com/) does this nearly perfect. It does name matching, presents a tabular-style view for easy manual checking of important items and it creates a CSV error report for items that couldn't be matched which enables reasonably easy manual import of the rest.

CSV export on the other hand should be reasonably easy I think. That should just be a dump of all relevant fields in the database, written to a text file, using the same column headers as the import functionality. Both Simkl and Goodreads have excellent CSV export functionality which might be a good template.

Sync two ways

It would be cool if it could sync both ways with Letterboxd, for example

Allow users to set preferences

Users will be allowed to configure:

  • Enabled features: allow users to enable specific trackers
  • Allow users to set localization settings

Run as non-root user

Currently the docker container runs as the root user.
Supporting a non-privileged user would be ideal.

Action button to update metadata

The following attributes will be updated:

  • title
  • description
  • last_updated_on
  • images
  • seasons (for shows)
  • episodes (for podcasts)

Ryot and fitness tracking

Now that most of the media tracker features have been implemented, I'd like to gather some community feedback on what all should Ryot support for its fitness capabilities.

  • I'd like to create a separate Expo application that has an interface like the Strong app. This application will not be embedded in the ryot binary and just sync with the tracking server.
  • Support imports via a defined interface.

Eventually I'd also like Ryot to have health tracking (food, medicines etc), but that is further down the line. This should probably have some integration with third party self hosted apps that could do this better.

I would like the following additional capabilities:

  • Measuring body weight, height etc.
  • Allow taking pictures for progress

Improve summary calculation logic

Right now summary is recalculated when an item is marked as seen. This does not work as expected for shows and podcasts because the summary item does not keep track of seasons, so the same season is marked again. It gets fixed when we clean and regenerate summary.

Instead of deploying a summary calculation job when an item is seen, it would be better to do it on a cron job and stop deploying the job completely on media item seen event.

  • The above improvements
  • Additional filters on "My books" section, such as reviewed, rated etc.

Make search more effective

This can be possibly done by integration with Mellisearch.

  • Display "Found x similar items" when on search page

Unable to log in after user creation

Would love to test this but i am currently unable to log in.

I setup the docker version with the sample config.json and when i open the webUI i can create a new user.
i tried this several times with with different user names and passwords. Each te i can see the logs and it says

2023-05-13T08:35:36.383003Z  INFO ryot: Using database backend: "SQLite"
2023-05-13T08:35:38.092251Z  INFO ryot: Listening on 0.0.0.0:8000
2023-05-13T08:36:07.868785Z  INFO ryot::background: Running jobs after user creation
2023-05-13T08:38:57.535388Z  INFO ryot::background: Running jobs after user creation
2023-05-13T08:40:00.185500Z  INFO ryot::background: Running user and metadata association cleanup

(tried to setup two new users here)

when i go to the login screen and try to log in i only get

Authorization error
You are not logged in

Tried this in Edge and Chrome on windows. the Docker is running on UNRAID

Permission denied after beta 10

Hi,

when updating the docker image to anything above beta-10, the container stops immediately and throws a

permission denied (os error 13)

error. I understand that this is due to folder ownership, but I haven't changed anything. Deleting the volumes and starting fresh also does not help. For now I am stuck on beta-10, but maybe there is a simple fix and this is a user error on my side?

Thanks in advance, great work!

Store application logs

Right now we log to stdout. This should be configurable and be stored in files, database etc. And a separate page to view these logs would be cool.

Issues identified after review

I asked a friend to use Ryot and tell me what all he found problematic. Here is what all he told me:

  • Filters do not persist on the list page
  • If I have no items under "My Books", the list page should default to the search tab
  • Allow importing using a user's Goodreads profile ID
  • Important actions like updating profile, importing etc. should present a confirmation dialog
  • The summary section on dashboard is not aligned and does not look good
  • If you are watching a media and then remove the seen item, it stays in the "In Progress" tab.
  • In Goodreads import, take into account which shelf the book is in. If it is "To-Read", it should be added to "Watchlist" and so on
  • Pages are annoying, infinite scroll would be better
  • Allow filtering by collection on "My Books" tab

The following are from general usage.

  • Add color to favicon
  • Display total number of items in list pages
  • Add url for demo instance: can be hosted on Fly for free
  • Add better value prop (Reddit)
  • Relax password restrictions (Reddit)
  • Delete down migrations (Twitter)
  • Always calculate summary from beginning, and do not delete old ones
  • Add button to mark next episode of a show or podcast as seen
  • Add information about import reports and how to see which ones failed
  • Adding an item to a collection doesn't immediately show the new collection update in the media details UI
  • Set staleTime to infinity on a global level

[Feature Request] Sort by Rating

Pretty self explanatory, it'd be nice if we could sort things in our collections by their rating.

Absolutely love the project btw - great job

Suggestion: Setting progress with more detail

At the moment you can only set the progress via a percentage. You can't really find the place you stopped watching or reading with it.

What about implementing a progress based on the type of tracker?

So for books via page numbers, movies or shows via the exact timestamp you stopped watching, etc?

Allow marking shows and podcasts as in progress.

As of now the in-progress items are calculated on the fly. A better alternative would be to create a "In Progress" collection on user registration and add and remove items from there as required.

Have to run the container as root, otherwise it can't access the read only database.

Basically the title, I made a docker compose to manage the container

version: '3.8'

services:
  ryot:
    image: ghcr.io/ignisda/ryot:latest
    pull_policy: always
    container_name: ryot
    volumes:
      - /mnt/500gbcrucial/Ryot/:/data
      - /mnt/500gbcrucial/Ryot/ryot.example.json:/data/config/ryot.json
    ports:
      - 8471:8000
    restart: always
    user: root

The problem is that it only works with user: root not as normal user. I set permissions of all directories for Ryot to user and 777, but running it after that with a normal user doesn't work and it says it can't write in the read only database, or just errors out with ryot | Error: Permission denied (os error 13)

Sort by last seen

Hey, good job working on this. What I am missing what MediaTracker has is sorting by the last seen date of a movie, any chance this could be added?

Allow Ryot to track anything

The idea was from Reddit.

Ryot be extended to track other types of items. For example:

I (and many others) need a whisky tracker xD (desired/tasted/owned/planned bottles etc). Some people would want a cigar tracker.
Ideally, there should be a YAML config that one could use to create a tracker for items they need; and a common shared database of such "userconfigs".
Even better, one could provide external APIs in YAMLs for auto-fill.


I do not plan to work on this anytime soon since it would be a big undertaking, and I would like to finish the fitness tracking. But I am creating this issue to gather feedback.

Audiobookshelf Integration

Audiobookshelf (a popular selfhosted Audiobook + Podcast server) is likely the main application people within the community using this app would be using as well. It would be amazing if ryot could read Audiobook and Podcast data from the ABS API, and track data based on that.

The API offers an endpoint for getting media items in progress by library, so you should be able to read both Podcast status and Audiobook status from the one endpoint in order to scrobble that data from ABS to Ryot.

While I personally don't use its 'Ebook' features, it does also support synced reading of ebooks across its browser and mobile apps, so you could get 3 potential media item type locations from the one application alone

Collections

Media items can be put into collections for easier organization. Similar to functionality of "shelves" in Goodreads etc.

Recommendations

Implement a recommendation system based on users' tracked activities. For example, if a user enjoys a particular genre of books, Ryot can suggest similar books or authors they might like.

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.