├── .env
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── PULL_REQUEST-TEMPLATE.md
├── README.md
├── build
├── favicon.png
├── icon.svg
├── icons
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ └── playstore
│ │ └── icon.png
└── manifest.json
├── image-1.jpg
├── image-2.jpg
├── image-3.jpg
├── image-4.jpg
├── image.png
├── package.json
├── public
├── favicon.png
├── icon.svg
├── icons
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ └── playstore
│ │ └── icon.png
├── index.html
└── manifest.json
├── src
├── App.jsx
├── actions
│ └── index.js
├── components
│ ├── AddSongs.jsx
│ ├── Header.jsx
│ ├── NowPlaying.jsx
│ ├── PlayingCtrl.jsx
│ ├── Song.jsx
│ └── SongList.jsx
├── index.css
├── index.js
├── middleware.js
├── reducers
│ ├── common.js
│ ├── index.js
│ ├── page.js
│ ├── playState.js
│ └── songs.js
├── registerServiceWorker.js
├── store
│ └── localStore.js
├── utils
│ ├── keyboardEvents.js
│ └── media-session.js
└── views
│ ├── MainView.jsx
│ └── PlayingView.jsx
└── yarn.lock
/.env:
--------------------------------------------------------------------------------
1 | SKIP_PREFLIGHT_CHECK=true
2 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | registerServiceWorker.js
2 | middleware.js
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["airbnb"],
3 | "parser": "babel-eslint",
4 | "env": {
5 | "browser": true
6 | },
7 | "rules": {
8 | "import/prefer-default-export": "off"
9 | }
10 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 | # misc
9 | .DS_Store
10 | .env.local
11 | .env.development.local
12 | .env.test.local
13 | .env.production.local
14 |
15 | npm-debug.log*
16 | yarn-debug.log*
17 | yarn-error.log*
18 |
19 | build/
20 | package-lock*
21 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | sudo: false
3 | node_js:
4 | - 11
5 | install:
6 | - npm install
7 | - npm install -D terser@3.14.1
8 | script:
9 | - npm run build
10 | - npm run lint
11 | deploy:
12 | provider: pages
13 | local-dir: build
14 | committer-from-gh: true
15 | skip-cleanup: true
16 | github-token: $GITHUB_TOKEN
17 | keep-history: true
18 | on:
19 | branch: master
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to react-music-player
2 |
3 | We would love for you to contribute and help make it even better
4 | than it is today! As a contributor, here are the guidelines we would like you
5 | to follow:
6 |
7 | - [ESLint](#eslint)
8 | - [Issues and Bugs](#issue)
9 | - [Feature Requests](#feature)
10 | - [Submission Guidelines](#submit)
11 |
12 | ## ESLint
13 | This project uses ESLint, please make sure all files pass linting before making pull request. Do not edit the ESLint configuration file
14 |
15 | ## Found an Issue?
16 | If you find a bug in the source code or a mistake in the documentation, you can help us by [submitting an issue](#submit-issue) to our [GitHub Repository](https://github.com/ashinzekene/react-music-player). Even better, you can [submit a Pull Request](#submit-pr) with a fix.
17 |
18 | ## Want a Feature?
19 | You can * request * a new feature by [submitting an issue](#submit - issue) to our [GitHub
20 | Repository][github].If you would like to * implement * a new feature, please submit an issue with
21 | a proposal for your work first, to be sure that we can use it.
22 |
23 | * **Small Features** can be crafted and directly [submitted as a Pull Request](#submit - pr).
24 |
25 | ## Submission Guidelines
26 |
27 | ### Submitting an Issue
28 | Before you submit an issue, search the archive, maybe your question was already answered.
29 |
30 | If your issue appears to be a bug, and hasn't been reported, open a new issue.
31 | Help us to maximize the effort we can spend fixing issues and adding new
32 | features, by not reporting duplicate issues.Providing the following information will increase the
33 | chances of your issue being dealt with quickly:
34 |
35 | * **Overview of the Issue** - if an error is being thrown a non- minified stack trace helps
36 | * **Version ** - what version is affected (e.g. 0.1.2)
37 | * **Motivation for or Use Case** - explain what are you trying to do and why the current behavior is a bug for you
38 | * **Browsers and Operating System** - is this a problem with all browsers?
39 | * **Reproduce the Error** - provide a live example [Runnable][runnable]) or a unambiguous set of steps
40 | * **Related Issues** - has a similar issue been reported before?
41 | * **Suggest a Fix** - if you can't fix the bug yourself, perhaps you can point to what might be
42 | causing the problem (line of code or commit)
43 |
44 | You can file new issues by providing the above information [here](https://github.com/ashinzekene/react-music-player/issues/new).
45 |
46 | ### Submitting a Pull Request (PR)
47 | Before you submit your Pull Request (PR) consider the following guidelines:
48 |
49 | * Search [GitHub](https://github.com/ashinzekene/react-music-player/pulls) for an open or closed PR
50 | that relates to your submission.You don't want to duplicate effort.
51 |
52 | * Make your changes in a new git fork:
53 |
54 | * Commit your changes using a descriptive commit message
55 | * Push your fork to GitHub:
56 | * In GitHub, send a pull request
57 | * If we suggest changes then:
58 | * Make the required updates.
59 | * Rebase your fork and force push to your GitHub repository (this will update your Pull Request):
60 |
61 | ```shell
62 | git rebase master -i
63 | git push -f
64 | ```
65 |
66 | That's it! Thank you for your contribution!
67 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | > Please provide us with the following information:
2 | > ---------------------------------------------------------------
3 |
4 | ### OS and Version?
5 | > Windows 7, 8 or 10. Linux (which distribution).macOS(Yosemite ? El Capitan? Sierra ?)
6 | > Browser
7 |
8 | ### Versions
9 | > Node
10 | > React
11 |
12 | ### Repro steps
13 | >
14 |
15 | ### The log given by the failure.
16 | >
17 |
18 | ### Mention any other details that might be useful.
19 |
20 | > ---------------------------------------------------------------
21 | > Thanks! We'll be in touch soon.
22 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Ashinze Ekene
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/PULL_REQUEST-TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Purpose
2 | * ...
3 |
4 | ## What
5 | * ...
6 |
7 | ## How to Test
8 | * ...
9 |
10 | ## What to Check
11 | Verify that the following are valid
12 | * ...
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MUSIC PLAYER
2 |
3 | [](https://travis-ci.com/ashinzekene/react-music-player)
4 |
5 | A react music player PWA that plays local files using the Files API
6 |
7 | [CHECK OUT THE WEB APP](https://ashinzekene.github.io/react-music-player)
8 |
9 |
10 |
11 |
12 |
13 |
14 | ## CONTRIBUTING
15 |
16 | Feel free to contribute to the repo. Make sure you configure eslint, or run lint before submitting pull requests
17 | ### TECH STACK
18 | - React
19 | - Redux
20 |
21 | ## Features
22 | 1. Play/Pause
23 | 1. Repeat Options
24 | 1. Progress Bar
25 | 1. Drag and Drop - Thanks to [@CliffReimers](https://github.com/CliffReimers)
26 | 1. Keyborad Controls - Thanks to [@Spring3](https://github.com/Spring3)
27 |
28 | ## TODO LIST
29 |
30 | 1. Play Next Automatically ✅
31 | 1. Controls - Next, Previous, Progress Bar ✅
32 | 1. Saving Songs(localStroage) ✅
33 | 1. UI ✅
34 | 1. A Page for currently playing song ✅
35 | 1. Host on GitHub ✅
36 | 1. Repeat ✅
37 | 1. Seek progressbar on nowPlayingPage ✅
38 | 1. Let playing song show as playing
39 | 1. Add Icons to sidebar
40 | 1. Show Time
41 | 1. Use the MediaAPI
42 | 1. Fix linting
43 | 1. Shuffle
44 | 1. Search
45 | 1. Playlists
46 |
47 | ## BUGS
48 |
49 | 1. Pauses on state change ✅
50 | > Was due to the fact the audio element was in a child component which unmounts
51 | > was resolved by moving the audio element to a component that does not unmount
--------------------------------------------------------------------------------
/build/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/favicon.png
--------------------------------------------------------------------------------
/build/icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/build/icons/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/icons/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/build/icons/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/icons/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/build/icons/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/icons/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/build/icons/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/icons/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/build/icons/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/icons/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/build/icons/playstore/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/build/icons/playstore/icon.png
--------------------------------------------------------------------------------
/build/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Music Player",
3 | "author": "Ashinze Ekene",
4 | "name": "React Music Player",
5 | "icons": [{
6 | "src": "icons/mipmap-mdpi/ic_launcher.png",
7 | "sizes": "48x48",
8 | "type": "image/png"
9 | }, {
10 | "src": "icons/mipmap-hdpi/ic_launcher.png",
11 | "sizes": "72x72",
12 | "type": "image/png"
13 | }, {
14 | "src": "icons/mipmap-xhdpi/ic_launcher.png",
15 | "sizes": "96x96",
16 | "type": "image/png"
17 | }, {
18 | "src": "icons/mipmap-xxhdpi/ic_launcher.png",
19 | "sizes": "144x144",
20 | "type": "image/png"
21 | }, {
22 | "src": "icons/mipmap-xxxhdpi/ic_launcher.png",
23 | "sizes": "192x192",
24 | "type": "image/png"
25 | }, {
26 | "src": "icons/playstore/icon.png",
27 | "sizes": "512x512",
28 | "type": "image/png"
29 | }],
30 | "start_url": ".",
31 | "display": "standalone",
32 | "theme_color": "#673ab7;",
33 | "background_color": "#ffffff"
34 | }
35 |
--------------------------------------------------------------------------------
/image-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/image-1.jpg
--------------------------------------------------------------------------------
/image-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/image-2.jpg
--------------------------------------------------------------------------------
/image-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/image-3.jpg
--------------------------------------------------------------------------------
/image-4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/image-4.jpg
--------------------------------------------------------------------------------
/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/image.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "music-player",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@material-ui/core": "^3.9.1",
7 | "@material-ui/icons": "^3.0.2",
8 | "@material-ui/lab": "^3.0.0-alpha.29",
9 | "localforage": "^1.5.0",
10 | "prop-types": "^15.6.2",
11 | "react": "16.8.0-alpha.1",
12 | "react-dom": "16.8.0-alpha.1",
13 | "react-redux": "^5.0.6",
14 | "redux": "^4.0.1"
15 | },
16 | "devDependencies": {
17 | "eslint": "5.6.0",
18 | "eslint-config-airbnb": "^17.1.0",
19 | "eslint-plugin-import": "^2.16.0",
20 | "eslint-plugin-jsx-a11y": "^6.2.0",
21 | "eslint-plugin-react": "^7.12.4",
22 | "react-scripts": "^2.1.3",
23 | "terser": "^3.14.1"
24 | },
25 | "scripts": {
26 | "start": "react-scripts start",
27 | "build": "react-scripts build",
28 | "predeploy": "npm run build",
29 | "lint": "./node_modules/.bin/eslint src/**/* --fix",
30 | "deploy": "gh-pages -d build",
31 | "test": "react-scripts test --env=jsdom",
32 | "eject": "react-scripts eject"
33 | },
34 | "homepage": "https://ashinzekene.github.io/react-music-player",
35 | "browserslist": [
36 | ">0.2%",
37 | "not dead",
38 | "not ie <= 11",
39 | "not op_mini all"
40 | ]
41 | }
42 |
--------------------------------------------------------------------------------
/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/favicon.png
--------------------------------------------------------------------------------
/public/icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/icons/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/icons/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/public/icons/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/icons/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/public/icons/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/icons/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/public/icons/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/icons/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/public/icons/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/icons/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/public/icons/playstore/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ashinzekene/react-music-player/46f1fdd79157639208f19174d95a91559b7f5065/public/icons/playstore/icon.png
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |