Giter Club home page Giter Club logo

spinner's Introduction

README

This README would normally document whatever steps are necessary to get the application up and running.

Things you may want to cover:

  • Ruby version

  • System dependencies

  • Configuration

  • Database creation

  • Database initialization

  • How to run the test suite

  • Services (job queues, cache servers, search engines, etc.)

  • Deployment instructions

  • ...

spinner's People

Contributors

aschmitz avatar aschmitz-ncc avatar dependabot[bot] avatar schlopecki-ncc avatar sebsebmc avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Forkers

tduehr

spinner's Issues

Allow users to skip their own songs

Sometimes a song that's not particularly appropriate comes up in the queue, or a song that's far too quiet (or sometimes, loud). It would be handy to allow users to skip their own songs, at the cost of forfeiting their queue spot.

GMusic Top Tracks

I remember seeing that mopidy-gmusic was pulling Top Tracks and we do display a link for it but we error if we try and view them. Currently it is considered an album but we get an error in browse_controller when we try and iterate over its tracks.

We may need to mark it somehow as a fake/pseudo album

Use a modern JS framework

I would like to use React or possibly Vue.js (which might be easier to use incrementally) to help modernize the frontend. Rails wants to do it's UJS, and I don't yet know how that will play with using other frameworks.

Reorder own queue

Feature: Allow users to reorder their queue. At the start we can just add a button to the songs in the queue to make them go to the front of a user's queue. This is technically enough to do full reordering. Later if we want drag-drop reordering or the UI gets too cluttered with buttons in the queue we will probably want #24 to improve the UI/UX

Support adding an arbitrary URI to the queue

In theory, this already works via a handcrafted POST, but we should probably have an UI option for this. In general, I expect this would be limited to MP3 and YouTube links, but if someone really wants to queue a Google Play Music (or whatever) song by URI, more power to them.

Document install process

I have a bunch of notes on this, but it would be good to get them into one document that can be followed to set up another instance of Spinner somewhere.

Fix next song when what should be next changes

There are a few cases where the next song up will be incorrect:

  • When a user "leaves the room"
  • When a user who would otherwise be next "enters the room" or queues a song after having an empty queue.
  • When the next queue entry is deleted
  • When queue entries are re-ordered (when this is supported)

I believe it would be sufficient to have some logic to call for double-checking the next song in the queue and handling it being incorrect. The easiest option would then be to call this code whenever a user's presence changes or a queue entry changes (although it would be nice to batch the latter together, in case an entire queue gets re-ordered). We will also need to handle the deletion of a queue entry if it is the next song: it may not exist in the database to delete by the time the next-song-checking code runs.

Store albums and artists?

It may be worthwhile to cache information about albums in the database. This would also make library browsing a bit better, but it's not clear how much information we'd end up "needlessly" caching.

Party mode changes

In order to make this more friendly for being used when hosting social events, I'd be interested in the following:

  • Websocket presence of mobile phones. If someone queues a song and then puts their phone away, will their phone keep sending presence heartbeats and keep them in the room? It would be unfortunate if people had to keep looking at their phones to make sure their songs get played. Otherwise allow for a way to disable the presence heartbeat and rely solely on the "mark away/mark present" buttons
  • Removing account requirement. Some people will avoid making new accounts for one-off needs; on a spinner instance only exposed on a local network there may be a reasonable way to handle accounts via username and cookies only.
  • In a similar vein, spinner doesn't actually use email so we can drop the email client side control during signup.
  • Putting songs to the front of your queue. Sometimes people have a song for the moment and want to put a song as being first on their queue. This may be a good time to upgrade the UI for the song list.
  • Some of these changes should be set with a config so we need to add some new config options.
  • Save the full playlist from the event for people who want to recreate that awesome playlist.

I'll probably be doing most of this work in a new party-mode branch.

Reduce GET spam when queuing many songs

When queuing many tracks I noticed that for each song that got added the browser would request the new queue because it was told to via ActionCable (I believe). This behavior should also appear when queuing an album, each song added causes a queue GET. Probably should specialize this case to not call queue_entry.notify_user_of_queue_change until done queuing. Unfortunately, this is currently an :after_save on the model, so it might get a bit gross. Maybe rate limiting or debouncing are easier methods to get better behavior.

Support adding an entire album to the queue

This would be a nice feature.

(We should also support adding an album to your library, but since the library features aren't exposed at all yet, that's likely to just be confusing at this time.)

Allow reactions to songs

Likely just +1/-1 ratings, vaguely like Turntable.fm used to allow. We could build on this to skip songs with a significant enough number of negative votes, as well.

Investigate changes needed for adding more song providers

We want to add additional sources like Spotify and will probably be forced to transition to YouTube Music. Currently to queue a file or YouTube link, the user has to provide a search term in a specific format in order to force Spinner to use a different mopidy backend. We can continue down this route and force a spotify: prefix to search Spotify, but the nicest option would be to automatically search all providers and deduplicate the results. There may be other issues with adding more providers that we might want to document here.

Skip unplayable songs

When someone queued an HTML file to play, Spinner got stuck trying to play it, failing, and then starting again. We should investigate why this happens (rather than just skipping it and moving on), and fix that behavior.

Improve Not Listening

The mark around/not listening link is currently not AJAX but probably should be. Also, its not super obvious when you're not listening. We could add a small header element that lets you know you're not listening (could also only appear if you also have stuff in your queue)

Support library browsing

Right now, when a user queues a song, we add the song to their library as well. We should expose the library information somehow, possibly for easily re-queuing songs, or removing songs from the library. It would also be nice to have a button to add a "now playing" (or recently played) song to the current user's library.

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.