Giter VIP home page Giter VIP logo

radiostream's People

Contributors

khrynczenko avatar

Stargazers

 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

radiostream's Issues

Handle exceptions that close the program

Some mild exceptions occur that automatically close program. This should be investigated and possibly resolved to inform the user of a problem without closing the program.

Add pop-up mechanism

Nice way to inform user of something would be to pop up a message as in new window. Example would be when user changes language settings in the program and he should restart it in order to make effect.

Enforce apropariate amount of warnings and treat them as errors

I think that adding compiler fags in cmake would be a good thing.
Also it believe that turning warnings into errors is the only way. Otherwise neglect creeps in and in a moment there are hundreds of unresolved warnings.

For MSVC it would encompass:

  • /W4
  • /WX
  • /sdl
  • /analyze:ruleset

For GCC this would encompass:

  • -Wall
  • -Wextra
  • -Wpedantic
  • -Werror

It this is too much we could start with just first two for MSVC and GCC. Also CI for MSVC would be much needed in case someone works with GCC because we would need to check their changes against MSVC.

Change project structure

Instead of having (almost always) one class per file I think it would be better to treat files as a unit containing all related classes and functions.

Volume normalization

Volume normalization should be implemented. Most music services have that so should we.

Remember the size of window

Since window size can be manipulated without any restrictions I think is when user closes it size should be remembered and use automatically when program starts next time.

Stations search limit does not work.

Stations search limit option in tools menu does affect change config,json file but requests still return only 50 stations. The number in config.json does not matter.

Add AppVeyor

Additional CI for windows wouldn't hurt. AppVeyor seems to be the tool for the job.

Put all produced libraries with executable

When building project binaries of dependencies are being put into different directories from RadioStream output directory. In effect one needs to copy .so/.dll files by herself to the RadioStream output directory. Also BASS prebuilt binary and lang directory should be copied at the end of build phase.

Make sticky selection on listboxes.

Now it is possible to unselect a row when right clicking on it second time. If that happens and user tries to delete this selected but in fact unselected row the exceptions throws and program shuts down.

Synchronization problem.

There is currently a problem when we try to set a new stream and play it directly after.
Taken from StationPlayerController.cpp

case radiostream::Event::NewStationRequested:
    {
        const auto station = std::any_cast<Station>(data);
        context_.status_.change_text(context_.localizer_.get_localized_text("Loading stream..."));
        context_.status_.change_color(StatusBar::Color::PROCESSING);
        context_.station_player_.set_station(station);
        context_.station_player_.play();
        context_.status_.change_text(context_.localizer_.get_localized_text("Stream playing"));
        context_.status_.change_color(StatusBar::Color::FINISHED);
    }
break;

Both StationPlayer::set_station() and StationPlayer::play() are implemented this way:

void StationPlayer::play()
{
    auto thread = std::thread([this]()
    {
        stream_manager_.play();
    });
    thread.detach();
}

and

void StationPlayer::set_station(const Station& station)
{
    station_ = station;
    auto thread = std::thread([this]()
    {
        stream_manager_.set_stream(station_.ip_);
        check_if_song_title_has_changed();
        notify(std::make_any<Station>(station_), radiostream::Event::StationBeingPlayedChanged);
    });
    thread.detach();
}

So it might happen that the thread that executes the play method might get created before the thread in set_station. In case of event mentioned above it makes it possible that play is executed before the set_station and in effect station will not start playing. This is unintended and should be fixed.

Add AAC+ support

BASS library supports MP3/MP2/MP1/OGG/WAV/AIFF out of the box. AAC+ is one of the most popular coding formats use by Internet radio stations. Possible solution is using one of official addons from the BASS webpage.

Add clipboard manipulation.

Currently copying to clipboard is working only on Windows. So far I saw that to get to use clipboard on linux requires quite a lot of work.
Possible solution might be using some cross-platform library like clip.

Add PopUp message mechanism.

I think a popup message mechanism would be nice for example to inform the user that in order to language to be changed he needs to restart the application.

Auto search on pressing Enter.

When writing in search textbox to find stations, the search process should start automatically on pressing Enter without having to click button.

Improve CI time

Currently downloading and building pre-build tools/libs take most of the time. Some caching could help.

Store configuration and database files properly on linux.

Program data should be stored separately form the executable file i.e. not in the bin folder. It should be probably stored in the $HOME directory in some folder.

Storing it in the bin folder also requires running program with root privileges which is not desired.

Create .deb package

Debian packages are nice way for Linux Debian distributions. Some autonomous mechanism for creating it should be implemented probably.

  • CPack CMake may be able to generate them

radio-browser API endpoints have changed

https://api.radio-browser.info/

Now it is not only different endpoint, but it seems that it also redirects to HTTPS, even when HTTP one is requested.
This would require additional changes since using https is more convoluted using POCO. Maybe it would be wise to switch to some simple to use library. OpenSSL will probably be needed as another dependency.

Move from Travis to Github Actions

Travis became very unreliable as a CI solution. Even with an uploaded Docker image that has all the dependencies downloaded and installed, we hit the Travis minute limit. Github Actions is build-in and easy to use and free without limits for open-source projects hence I believe it is an easy choice.

Check if station is properly received

Currently when user tries to play some station and it does not start playing due to some problems, nothing actually happens and the status bar will display that "Station is playing" which is not true.

Excepted behavior would be to properly inform the user changing the info in the status bar.

Improve playlists readers

Currently every reared is really primitive in its reading process, this might result in them having troubles with non arbitrary formatted files.

Classes under consideration:
MultimediaPlaylistReader
M3UReader
PLSReader

Edit station

Please allow editing a station.
For example, I want to edit the station URL or station language.

Improve requesters API.

Idea: Make possible to use different stations list providers and enable to change them at run-time.

By requester I mean object that that results in list of available stations. Result might come from request to some web-api or local database etc.
For now there is only one HTTP requester namely one that uses www.radio-browser.info web-api. Because of that there is no interface for general Requester which in result ties the program to use only this one particular wep-api.

Solution: Make Requesters into strategies. Factory for retrieving them.

Add functionality for updating station url via www.radio-browser.info

When user adds to his database new station from the stations listed by radio-browser after some time its URL may get out-dated i.e. the station may change to stream under different URL. radio-browser keeps track of such changes which is why such feature for automatic update could be implemented.
The problems:

  • only stations that are listed on www.radio-browser.info could make use of such feature
  • is the name of station enough to resolve to correct station? what if station name has changed in www.radio-browser.info database
  • www.radio-browser.info is kept updated by people, if no one updates the station with new working URL it will stay broken

Missing scrollbar (sometimes).

Sometimes scrollbar in the list where the user stations are shown will not appear. Possible quickfix is to make it always visible even when not necessary.

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.