martpie / museeks

🎵 A simple, clean and cross-platform music player
https://museeks.io
MIT License
1.7k stars 200 forks source link

Network playback features #324

Open MrBlenny opened 7 years ago

MrBlenny commented 7 years ago

I'm looking at adding a few different networking features over the next few days.

Features

To begin with - this will only work locally (computer A and B must be on the same network) - but streaming over the internet should be trivial.

After this I'd be keen to make a few interface improvements such as sorting/filtering/resizing columns.

Changes

In order to add these features I see one major change that is required... I'll be adding an express server that is initiated by the main-process with an API to call a bunch of actions inside the main renderer window.

I understand that these network features may be considered out of the scope of this project - maybe they are better suited as a plugin. In any case - I think the express API it depends on should be considered a relatively core feature that will allow a bunch of other interesting dev.

MrBlenny commented 7 years ago

Another change would be to add a redux store to the main-thread using something like electron-redux. This makes sure the redux state is synced between the main-thread and renderers.

This would be particularly useful because the API (running in the main-thread) does not currently have access to the redux store so it is relatively complicated to return data in the redux store (as we must run a function in the renderer in order to do so).

Thoughts?

YurySolovyov commented 7 years ago

Depends on how much data you need to be shared, ATM it is not much if any

martpie commented 7 years ago

Remote playback

Hell yes

Shared library

I'll let this one up to you :smile:

===

About electron-redux, if it can solve the problem nicely, why not ?

YurySolovyov commented 7 years ago

What's the plan on this remote service discovery? I guess that would need a UI to copy link or whatever...

MrBlenny commented 7 years ago

Yep, I think network discovery will be on the SettingsLibrary page but I'll give it some more thought.

It will automatically discover other instances of Museeks running on the same network by pinging all IPs in its range X.X.X.1-255:SomePort Might be a good idea to add a pin/password for auth but I'll leave that for later.

YurySolovyov commented 7 years ago

by pinging all IPs in its range X.X.X.1-255:SomePort

That sounds expensive

martpie commented 7 years ago

I don't really see other ways to be honest

YurySolovyov commented 7 years ago

There are whisper protocols there, but they would need investigations... Though remote access does not have to be Skynet scale right away, we can start just by the ability to copy and paste a link...

martpie commented 7 years ago

https://github.com/eviltik/evilscan

DrEVILish commented 5 years ago

Yep, I think network discovery will be on the SettingsLibrary page but I'll give it some more thought. It will automatically discover other instances of Museeks running on the same network by pinging all IPs in its range X.X.X.1-255:SomePort Might be a good idea to add a pin/password for auth but I'll leave that for later.

Look into the Broadcast address which is part of the IP spec. I think this is how it works, I might be wrong.

We could have as Museeks opens it broadcasts a "HELLO" packet with some relevant information about itself on the Broadcast address. If it's the first one no one will hear it. (Tree Fall Woods) If there is another app open on the network, it will receive the "HELLO" and send a "REPLY" with some information to Sync the two or more servers together with information about each other.