Giter Club home page Giter Club logo

lists's People

Contributors

dependabot[bot] avatar rathrio avatar simplay avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

project-kotinos

lists's Issues

Collections

A collection is either a list of very specific items, or a specific filter (i.e. a dynamic list). I want to use collections whenever tags don't make sense, e.g. "My favorite horror films of 2019".

Misspelled search terms yield poor suggestion

Below an example of the situation: I incorrectly was searching for He Men (I should have searched for He Man).

issue_case

Suggestion: Apply a distance measure between every retrieved suggestion and the initial (user provided) search word and then only list suggestions that exhibit a sufficient small distance value. A handy measure for the word difference would be the so called Levenshtein distance.

Add notes form to item edit page

Items have many notes. Allow users to edit them (or just one of them, maybe we don't need many notes) on the item's edit page.

Related to #14.

Item detail page

Instead of rendering a form when clicking on an item, show a detail page containing the following things for now:

  • name
  • description
  • year
  • tags
  • date added

Implement a DSL to define scrapers

This is a proposal that describes an idea how we could define scrapers using a DSL.

The DSL I am thinking of would exhibit two makros, rely_on and scrape_attribute.

# Fetch the results provided by the target client type. The result
# Is built by applying the given (optional) block on the client's output.
# Moreover, it defines an accessor to an instance of type client. 
# This can be used by the scraper instance
#
# @param client [Symbol] name of client class we the scrapper should rely on.
# @param block [Proc] defines how the result object is formed
Scraper#rely_on (client, &block)

# @param attribute_name [Symbol] identifier of a member in result hash
# @param block [Proc]  defines how an attrubute should be parsed
Scraper#scrap_attribute (attribute_name, &block)

In order to define a new scraper, the following 3 steps would be required:

  1. Write a new class that includes the Scraper module.
  2. Define on which client(s) the Scraper relies on and how it processes that resource.
  3. Define which attributes- and how they should be scraped.

In the following an example how the definition of TvScraper is supposed to look like when using relying on the proposed DSL:

class TvScraper
  include Scraper

  rely_on :move_client do
    title = query.gsub(/\((\d{2,4})\)/, '').strip
    moviedb_client.search(title, type: :tv, year: $1)['results'].to_a
  end

  scrape_attribute :name

  scrape_attribute :description do |result|
    result['overview']
  end

  scrape_attribute :image do |result|
    MoviedbClient::IMAGE_BASE_URI + result['poster_path'] if result['poster_path']
  end

  scrape_attribute :date do |result|
    Date.parse(result['first_air_date']) if result['first_air_date'].present?
  end

  scrape_attribute :trags do |result|
    result['genre_ids'].map { |id| MoviedbClient::GENRES[id] }.compact
  end

end

Add tag form

On the settings page in the tag tab, clicking on a tag should render a form to edit the tag. (Same behaviour as on the labels settings page)

Filter UI

Currently, one can filter items by their name using the search bar. Add possibility to filter items by:

  • year
  • tags

Add "recommended_by" to items

E.g. "YMS", "Single", "Oscar", ...

This should probably be a polymorphic list, i.e. it should accept simple strings, such as "YMS", but also references to other users of lists, or URLs, or whatever, (or both probably. say I want to remember that this was recommended to me by YMS in this youtube video ...)

Option to skip scraping of attributes (for search feature)

Some APIs are really slow, or require separate request for scraping genres for instance.

In some cases, we need scrapers to perform really well, such as when listing search results. Provide an option to skip scraping of attributes for speedup.

GameScraper.new(query: 'kingdom hearts', scrape_tags: false)

Item image upload form

Currently, one is only able to set a remote image url in the item form. Provide a more standard way to update item images.

Indicate personal TV-series progress

I am someone who is watching multiple series in parallel. Sometimes, I stop watching a particular series for quiet some time (for reasons). Untfortunately, I tend to forget where I left off watching.

Users should be able to make a note (in a TV list item) where they left off (watching) a series.

Show scraped links on item form

Some scrapers create Link records for items. Show them on the item form and allow them to be edited.

These could be youtube links for albums, links to the IGDB details page for a game, magnet links for movies etc.

Item has many Labels -> Item belongs to one List?

Does it make sense that items can have many labels, i.e., can occur in many lists?

The usecase I initially thought of was having some sort of inbox/starred list and that would have just been another label to assign.

I think it'd simplify things to just make items belong to just one category and solve any other nuances with tags or another attribute.

  • Make item belong to only one label
  • Rename Label to List

Add "creator" to items

The displayed name should be context sensitive, e.g. author for books, studio for games, director for film, etc...

Add "done_at" to items

In order to comprehend when one has watched a film. Which films did I watch last month?

done_at would probably suffice. This would enable aggregations such as "Done in 2019".

API

Introduce a JSON REST / GraphQL API for native clients / fancier frontends.

Provide scraping feedback in UI

Currently, scraping is done in a background process via sidekiq.

Approaches:

  • Use Actioncable to keep connection open and tell clients about updates in items. While job is still running, show a spinner in the item box. When job is done, update the item box.
  • Ged rid of background processing and use JS to update the view immediately, send the request and update the item box on successful response.

Add items at most once to a list

Currently, the same item can be added arbitrary many times to an list (see screenshot below).

issue_21

Suggestion: When searching for a term, which is already contained in a user's list, then a message like this item is already in your list should be displayed next to a retrieved item.

Sort UI

Users should be able to sort (asc and desc) their items by:

  • name
  • year
  • created_at

Add a rank column to items/labels

This is a prerequisite for #5.

What's the scope for item ranks? The default case is that items have one label assigned to them. So it'd make the most sense to require a unique rank within one (the first) label.

We should probably disallow reordering when items of multiple labels are displayed.

Any smarter approaches for multi-label items? Should we get rid of multiple labels all together?

Place scraper

This should enable me to move away from Google to star/favorite places.

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.