Git Product home page Git Product logo

dmouayad / dune Goto Github PK

View Code? Open in Web Editor NEW
3.0 2.0 1.0 3.51 MB

DUNE offers seamless music streaming from YouTube, YouTube Music, Spotify and local library.

License: GNU Affero General Public License v3.0

Kotlin 0.01% Swift 0.04% Objective-C 0.01% Dart 94.88% CMake 1.92% C++ 2.60% C 0.14% HTML 0.40%
cross-platform flutter music-player music-streaming windows-app youtube flutter-windows spotify offline-music offline-music-player listening-stats music

dune's Introduction

DUNE

Release
Dune makes it easy to have your favourite songs in one place just choose your playlist โžก ๐ŸŽง โžก enjoy seamless music streaming.

Table of contents

Features

Explore Music

  • Get up-to-date popular & trending music from all over the world.
  • Explore music by genre & mood.

Local music library

  • Add your local audio files with one click and all of your tracks, albums, artists will be saved and available inside the app.

Tabs support

Yes, you've read it correctly, with the option of both vertical & horizontal tabs-layout:

Now your web-browsing experience is less cluttered because DUNE is the prefect place for your music-exploring adventures.

Listening Statistics

Not 100% functional; going under some refinements.

Other Features

  • Mixed playlists: creating a playlist with songs from different sources.
  • Data Usage control: You can set the quality of audio streaming & cover images.
  • No-Tabs mode: Tabs can be disabled but, you still have all the other great features.
  • Themes: Provides a wide verity of accent colors for you to choose from.
  • Cross-platform support
  • Lyrics support
  • Download media & offline mode
  • Local library Mode

Screenshots

Download

Release

Older versions are also available at: GitHub releases

OS Latest version
windows-10 github
android-os github
linux--v1 github

Roadmap

This project is a WIP

Please refer to DUNE project for: planned features, discussions and development progress.

How it works

Storage

  • Isar

    Feature Offline store Backup & Restore Cloud store Storing User Playlists Storing User Preferences Storing User Listening History
    Supported โœ” ๐Ÿšง โŒ ๐Ÿšง โœ” โœ”

Build from source

To build your own version of DUNE, please follow these instructions.

Feed back & Contributions

  • ๐Ÿ› Found an issue or encountered a bug? please check the existing issues or create a new one.
  • ๐Ÿ’ช๐Ÿป Want to improve this project? check out the Contributing guide.
  • โญ You can also help us by starring this repo.
  • Read also "motivation for this project".

Disclaimer

  • Initially, this app was developed to demonstrate the power of Flutter in creating cross-platform apps.

    But, if you like using DUNE, well, thank you. Enjoy the music responsibly and support the artists who create it.

  • Read also Copy Rights ยฉ disclaimer.

Motivation

Although there are many projects that offer similar features, they often fall short in providing a complete package ๐Ÿ“ฆ. For example, some apps can stream music from different platforms, but they do not ๐Ÿšซ allow users to:

  • Create a playlist with songs from different sources.
  • Provide the option to add your local music library.
  • Change the search engine(source) without adjusting some setting.

Another important issue in some of these projects is the quality of code. While it may not be an immediate concern for users, it becomes a time-consuming and challenging task for maintainers to add new features in the long run. This can be for several reasons:

  • The lack of a clear architecture on how code is organized and communicate across different layers.
  • Having mega classes and functions scattered all over the place discarding the SOLID principals.
  • The absence of tests, no Unit tests no Widget tests, nothing.

That is why I started this project with the goal of creating something beautiful & elegant from the inside-out.

Acknowledgement

Packages & Plugins

Inspiration

License

DUNE is an open source project and licensed under the GNU License.

dune's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

skgupta507

dune's Issues

New side panel design

What needs to be done:

  • replace BaseAppPreferences.tabsModeEnabled with a new Enum type; TabsMode which can be either vertical, horizontal or disabled.
  • Create new Side Panel Widget which will have:
    • navigation icons pinned at the top.
    • list of tabs if current TabsMode is TabsMode.vertical
    • previous and next buttons
    • playlists dropdown button
    • Local library dropdown button containing(tracks, artists, albums and maybe folders & genres)

[AppNavigation] [Tabs] - new listener is added on `tabsRouters` despite some routers already have a listener

Description:

  • Because adding a new tab results in creating a new GoRouter instance and we need to listen to changes on this router:
    a new listener is added for every tab-router even if we already added a listener on it.
  • Current implementation removes the listener before adding a new one but it seems to not have any effect i.e. doesn't remove existing listener.

Suggestions:

  • create a list of keys, each key belongs to a GoRouter instance.
  • we acquire the keys from the object hashCode.

implement "LibraryPage" routes

what needs to be done:

  • add routes for library (tracks, albums, artists) pages.
  • implement sorting and filter UI for: artists, albums, tracks.

implement `LocalMusicLibrary`

What needs to be done:

  • LocalMusicLibraryFacade: contains only a public interface which can be used by other components. Has a LocalMusicRepository

  • AudioLibraryScanner (with unit tests).

  • Implement the following functions in LocalMusicLibraryFacade:
    - addMusicDirectory
    - removeMusicDirectory

create Artist page

What needs to be done:

  • create ArtistPageController
  • create ArtistPageRoute
  • add this route as a sub-route for BaseHomeScreenBodyRoute
  • create ArtistPage
  • navigate to this page when ArtistCard is pressed.

[SidePanel]: panel width not set correctly

Description:

  • On app startup and when the panel is pinned, initial width is not set to the maximum and this results in not showing correct panel layout and components.
  • When changing the window size(on Desktop) the panel width is not being updated accordingly.

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.