Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
19dae19
Update README.md to contain Star History graph
JustCallMeQuincy Apr 29, 2023
a034563
Updated some grammar
JustCallMeQuincy May 4, 2023
abd141e
Fixed some more grammar
JustCallMeQuincy May 4, 2023
d609367
Updated to v2.1.0-stable.20230512
Sandakan May 12, 2023
50428e5
Merge pull request #167 from JustCallMeQuincy/patch-4
Sandakan May 13, 2023
eeb6389
v2.1.0-stable finalization update
Sandakan May 14, 2023
515788e
Merge pull request #165 from Sandakan/minor-release
Sandakan May 14, 2023
71a364a
Update README.md to contain Discord Server invite
JustCallMeQuincy May 14, 2023
8ce5e35
Update package.json to contain the updated Discord server invite
JustCallMeQuincy May 14, 2023
6e356df
Merge pull request #171 from JustCallMeQuincy/patch-5
Sandakan May 15, 2023
79ffacf
Merge pull request #172 from JustCallMeQuincy/patch-6
Sandakan May 15, 2023
b741835
Merge pull request #175 from Sandakan/patch-release
Sandakan May 16, 2023
09d54a6
Updated to v2.2.0-stable.20230516
Sandakan May 17, 2023
7270ff8
Updated to v2.2.0-stable.20230517
Sandakan May 17, 2023
6519532
Updates for build workflow
Sandakan May 18, 2023
1a5eba2
Fixes for build workflow
Sandakan May 18, 2023
3a7c1e3
Fixes for build workflow
Sandakan May 18, 2023
171dcd3
Fix for build workflow
Sandakan May 18, 2023
6dd2c3f
Fix for build workflow
Sandakan May 18, 2023
bf7b692
v2.2.0-stable update finalization
Sandakan May 20, 2023
c467e50
Merge pull request #176 from Sandakan/minor-release
Sandakan May 20, 2023
9a14fc9
workflow fixes
Sandakan May 20, 2023
30f92ae
Merge pull request #179 from Sandakan/master
Sandakan May 24, 2023
43a7dd7
Updated to v2.2.1-stable.20230524
Sandakan May 24, 2023
3f30d28
Merge pull request #180 from Sandakan/patch-release
Sandakan May 28, 2023
674c24f
Updated to v2.2.0-stable.20230528
Sandakan May 28, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .erb/configs/webpack.config.main.prod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ const configuration: webpack.Configuration = {
},

plugins: [
new DotEnvWebpackPlugin({ path: './.env' }),
new DotEnvWebpackPlugin({ path: './.env', systemvars: true }),
new BundleAnalyzerPlugin({
analyzerMode: process.env.ANALYZE === 'true' ? 'server' : 'disabled',
}),
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Build/release

on:
push:
branches: ['master']

env:
MUSIXMATCH_DEFAULT_USER_TOKEN: ${{ secrets.MUSIXMATCH_DEFAULT_USER_TOKEN }}
LAST_FM_API_KEY: ${{ secrets.LAST_FM_API_KEY }}
GENIUS_API_KEY: ${{ secrets.GENIUS_API_KEY }}

jobs:
release:
runs-on: ${{ matrix.os }}

strategy:
matrix:
os: [ubuntu-latest, windows-latest]

steps:
- name: Check out Git repository
uses: actions/checkout@v2

- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 18
check-latest: true

- name: Build/release Electron app
uses: samuelmeuli/action-electron-builder@v1
with:
# GitHub token, automatically provided to the action
# (No need to define this secret in the repo settings)
github_token: ${{ secrets.github_token }}

# If the commit is tagged with a version (e.g. "v1.0.0"),
# release the app after building
release: true
# release: ${{ startsWith(github.ref, 'refs/heads/master') }}
# release: ${{ startsWith(github.ref, 'refs/tags/v') }}
23 changes: 23 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Jest Tests

on: [push]

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 18
check-latest: true

- name: Install dependencies
run: npm ci

- name: Run Jest tests
run: npm run test
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public/images/artist_covers
temp/song_covers/*
temp/*.json
out/
coverage/
*.m3u
.env
thunder-tests
Expand Down
3 changes: 2 additions & 1 deletion .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
{
"files": [".prettierrc", ".eslintrc"],
"options": {
"parser": "json"
"parser": "json",
"endOfLine": "crlf"
}
}
]
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"pyong",
"Resyncing",
"RIELL",
"samuelmeuli",
"Spicetify",
"sspai",
"unmaximize",
Expand Down
34 changes: 26 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@

<div align="center">
<img alt="GitHub all releases" src="https://img.shields.io/github/downloads/Sandakan/Nora/total?label=all%20time%20downloads&style=for-the-badge">
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/downloads/Sandakan/Nora/v2.0.0-stable/total?style=for-the-badge">
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/downloads/Sandakan/Nora/v2.2.0-stable/total?style=for-the-badge">
<img alt="GitHub package.json version" src="https://img.shields.io/github/package-json/v/Sandakan/Nora?color=blue&label=latest%20version&style=for-the-badge">
<a href="https://github.com/Sandakan/Nora/blob/master/LICENSE"><img alt="GitHub license" src="https://img.shields.io/github/license/Sandakan/Nora?style=for-the-badge"></a>
<a href="https://github.com/Sandakan/Nora/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/Sandakan/Oto-Music-for-Desktop?style=for-the-badge"></a>
<img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/Sandakan/Nora/build.yml?branch=master&style=for-the-badge">
</div>

<br/>

<div align="center">
Nora is an elegant music player built using Electron and React.
<br>
Inspired by <a href="https://play.google.com/store/apps/details?id=com.piyush.music&gl=us">Oto Music (Android)</a> by Piyush Mamidwar.
Inspired from <a href="https://play.google.com/store/apps/details?id=com.piyush.music&gl=us">Oto Music (Android)</a> by Piyush Mamidwar.
</div>

<br/>
Expand Down Expand Up @@ -57,7 +58,7 @@ It packs a horizon of features including,

<br>

![Latest Version Artwork](/assets/other/release%20artworks/whats-new-v2.0.0-stable.webp)
![Latest Version Artwork](/assets/other/release%20artworks/whats-new-v2.2.0-stable.webp)

Visit the [release notes](/changelog.md) to see what's new on the latest release.</p>

Expand Down Expand Up @@ -85,6 +86,19 @@ Visit the [release notes](/changelog.md) to see what's new on the latest release

<br>

<div align="center">
<div>
<h3><i>" A sleek music player with a modern design, this solution seeks to provide users with a seamless experience when it comes to listening to their favorite local tunes. "</i></h3>
<a href="https://www.softpedia.com/get/Multimedia/Audio/Audio-Players/Oto-Music-for-Desktop.shtml"><i>Robert Condorache &bull; Softpedia </i></a>
</div>
</div>

<br>

<div align="center"> &bull; &bull; &bull; </div>

<br>

<div align="center">
<div>
<h3><i>" The application interface adopts rounded corners in a large area, the fonts and icons are round and cute, and the visual effect is very comfortable. "</i></h3>
Expand Down Expand Up @@ -141,22 +155,26 @@ This project is built using [Electron React Boilerplate](https://github.com/elec

<br>

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=Sandakan/Nora&type=Date)](https://star-history.com/#Sandakan/Nora&Date)

## Feedback

If you have any feedback about bugs, feature requests, etc. about the app, please let me know through my [email](mailto:[email protected]).
If you have any feedback about bugs, feature requests, etc. about the app, please let me know through the official [Nora Discord server](https://discord.gg/c5rGKnBs4y), or my [email](mailto:[email protected]).

<br>

<center>
Made with <span class="heart">&#10084;</span> by Sandakan Nipunajith.
<br>
Love Sri Lanka.
Love, Sri Lanka.
</center>

<br>

- ##### Every song, artist, album, and song cover used in this demonstration is not owned by myself but owned by their respective owners. They were used for demonstration purposes only. I value all the copyrights of the owners of the above assets.

[^1]: song lyrics uses [SongLyrics](https://www.npmjs.com/package/songlyrics) package and an implementation from [MxLRC](https://github.com/fashni/MxLRC) package under the hood.
[^2]: personalized shuffles and playlists are generated by analyzing the user's listening patterns and no. of listens per song and using that data to personalize the songs.
[^3]: currently app only supports editing mp3 files due to some limitations of the dependencies.
[^1]: The song lyrics use the [SongLyrics](https://www.npmjs.com/package/songlyrics) package and an implementation from the [MxLRC](https://github.com/fashni/MxLRC) package under the hood.
[^2]: Personalized shuffles and playlists are generated by analyzing the user's listening patterns and the number of times each song gets played.
[^3]: Currently, the app only supports editing mp3 files due to some limitations of the dependencies.
5 changes: 0 additions & 5 deletions __tests__/calculateElapsedTime.test.ts

This file was deleted.

53 changes: 53 additions & 0 deletions __tests__/isLatestVersion.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import isLatestVersion from '../src/renderer/utils/isLatestVersion';

describe('App versions check', () => {
test('Basic version checks', () => {
expect(isLatestVersion('2.0.0', '2.0.0')).toBe(true);
expect(isLatestVersion('2.0.0', '2.1.0')).toBe(true);
expect(isLatestVersion('2.1.0', '2.0.0')).toBe(false);
});

test('Versions with same release phases', () => {
expect(isLatestVersion('2.0.0-stable', '2.0.0-stable')).toBe(true);
expect(isLatestVersion('2.0.0-beta', '2.0.0-beta')).toBe(true);
expect(isLatestVersion('2.0.0-alpha', '2.0.0-alpha')).toBe(true);
});

test('Versions with same release phases and different build metadata', () => {
expect(
isLatestVersion('2.0.0-stable.20230515', '2.0.0-stable.20230510')
).toBe(true);
expect(isLatestVersion('2.0.0-beta20230510', '2.0.0-beta20230515')).toBe(
true
);
expect(
isLatestVersion('2.0.0-alpha.20250101', '2.0.0-alpha.19990509')
).toBe(true);
});

test('Versions with different release phases', () => {
expect(isLatestVersion('2.0.0-stable', '2.0.0-alpha')).toBe(true);
expect(isLatestVersion('2.0.0-beta', '2.0.0-stable')).toBe(true);
expect(isLatestVersion('2.0.0-alpha', '2.0.0-beta')).toBe(true);
});

test('Different major versions with same release phases', () => {
expect(isLatestVersion('3.0.0-stable', '2.0.0-stable')).toBe(false);
expect(isLatestVersion('2.0.0-stable', '3.0.0-stable')).toBe(true);
});

test('Different minor versions with same release phases', () => {
expect(isLatestVersion('2.1.0-stable', '2.0.0-stable')).toBe(false);
expect(isLatestVersion('2.0.0-stable', '2.1.0-stable')).toBe(true);
});

test('Different patch versions with same release phases', () => {
expect(isLatestVersion('2.0.2-stable', '2.0.0-stable')).toBe(false);
expect(isLatestVersion('2.0.0-stable', '2.0.2-stable')).toBe(true);
});

test('Random version checks', () => {
expect(isLatestVersion('2.1.2-stable', '3.4.1-alpha')).toBe(true);
expect(isLatestVersion('4.2.5-beta', '2.3.2-stable')).toBe(true);
});
});
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified assets/installer_assets/sidebar.bmp
Binary file not shown.
Binary file modified assets/other/artwork 0.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/other/artwork 1.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/other/artwork 2.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/other/artwork 3.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/other/artwork 5.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/other/artwork 6.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions assets/styles/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -254,12 +254,14 @@ input[type='range'].vertical::-webkit-slider-runnable-track {
transform: scale(0);
}

[type='range'].thumb-visible::-webkit-slider-thumb {
opacity: 1;
transform: scale(0.75);
}
[type='range'].vertical::-webkit-slider-thumb {
height: 0.875rem;
width: 0.875rem;
cursor: row-resize;
opacity: 1;
transform: scale(0.75);
}

input[type='range']:hover::-webkit-slider-thumb {
Expand Down
83 changes: 81 additions & 2 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,89 @@
# Change Log

> ### The latest version, **( v2.0.0-stable )** contains a lot of new features and improvements. As always expect some bugs in the app.
> ### The latest version, **( v2.2.0-stable )** contains a lot of new features and improvements. As always expect some bugs in the app.

<br>

![Nora v2.0.0-stable version artwork](assets/other/release%20artworks/whats-new-v2.0.0-stable.webp)
![Nora v2.2.0-stable version artwork](assets/other/release%20artworks/whats-new-v2.2.0-stable.webp)

<br>

- ### **v2.2.0-stable - ( 20<sup>th</sup> of May 2023 )**

- ### πŸŽ‰ New Features and Features

- Added the feature to save some images that appear in the app.
- Added an experimental fix for the bug where other music players like Groove Music don't recognize artworks edited by
Nora.
- Added a new keyboard shortcut to quickly navigate to Search. Fixes #173.

- ### πŸ”¨ Fixes and Improvements

- Improved the artists' splitting algorithm of suggestions.
- Fixed a bug where images and lyrics lines are draggable.
- Fixed a bug where playlist images aren't positioned correctly when the "artworks made from song covers" feature is
enabled.
- Fixed a bug in which the app doesn't inform the user if the metadata update process fails.
- Improved the app version matching algorithm and fixed a bug where the app informs the user about a new update even
though app the is in the latest version.
- Fixed a test contrast issue on the Artist Info page. Fixes #174.
- In Search page, the "Most Relevant" list (side-scroll) doesn't prevent you from scrolling down when hovering over them.

- ### 🐜 Known Issues and Bugs
- Sometimes updating song artwork may need an app restart to show on the app #162.
- The app may crash in mini-player mode when trying to use window snap feature #163.

<br>

- ### **v2.1.0-stable - ( 13<sup>th</sup> of May 2023 )**

- ### πŸŽ‰ New Features and Features

- Added a new design for the song cards on the Home page. Thanks to [**@Shapalapa** for the design inspiration](https://discord.com/channels/727373643935645727/1096107720358248571/1096107720358248571).
- Now songs show their album name next to their artist names.
- Added support for a new suggestion in the SongInfoPage that gets triggered when there are names of featured artists in the title of a song asking to add them to the song artists.
- Added the 'go to album' option to the context menu of songs.
- Added a feature to show the details of the song when right-clicking to get the context menu.
- Linked the new Nora Official Discord server with the app.
- Now, the SearchPage won't limit the no of results you can see to 5 on some components.
- Added experimental support for the offset tag in synced lyrics.
- Added a new hotkey to change the playback speed. Fixes #168.
- Added support for a range of playback speeds instead of a predefined list.
- Added experimental feature as the default sorting option for songs in an album according to their track number. Fixes #169.
- Added a new context menu option for folders to show the relevant folder on the Windows Explorer.

- ### πŸ”¨ Fixes and Improvements

- Fixed some bugs related to draggable songs in the queue. Fixes #63.
- Fixed some bugs related to sorting content in the app. Fixes https://github.com/Sandakan/Nora/issues/156.
- Fixed a bug where clicking `Play next` would add the song next to the next song.
- Updated the context menu options by right-clicking the current song info container in the footer. Fixes #160 and #158.
- Fixed a bug where deleting the current playing song wouldn't remove it from the current queue.
- Fixed some bugs related to lyrics not being read from the audio source.
- Fixed a bug where app UI goes out of bounds. Fixes #157.
- Fixed a possible bug where media control buttons don't work as expected. Fixes [#166](https://github.com/Sandakan/Nora/issues/166).
- Removed predictive search when searching for artists, albums, and genres in the SongTagsEditingPage.
- Updated components to show information about the content when right-clicking a component.
- Fixed some image scaling issues in ArtistInfoPage.
- Fixed a bug where adding song metadata from the internet with new album data doesn't count the song artwork to the album artwork.
- Improved the app's responsiveness to various screen sizes. Fixes #128.
- Updated the file association icons to show the relevant file type.
- Fixed a bug related to synced lyrics saved in audio files.
- Fixed a bug where sometimes users can't see the artist name when in ArtistInfoPage due to contrast issues between light and dark modes.
- Improved the artist detection algorithm of the SeparateArtistsSuggestion.
- Improved app performance by loading only necessary components to display.
- Fixed a bug where the context menu overflows out of the visible part of the app's window.
- Fixed some bugs related to how SongCards display in the HomePage when different screen sizes.
- Added a new line with "β€’β€’β€’" as the first line of synced lyrics.
- Fixed a bug where metrics in ListeningActivityBarGraph overflow out of its container.
- Fixed a bug where the `Download Synced Lyrics` button in the metadata editing page keeps spinning even though fetching lyrics failed.
- Improved the app version detection algorithm of the app.
- Updated Musixmatch Settings to show a message about the token updating process.
- Fixed a bug where library updates don't reflect on the AllSearchResultsPage.

- ### 🐜 Known Issues and Bugs
- Sometimes updating song artwork may need an app restart to show on the app #162.
- The app may crash in mini-player mode when trying to use window snap feature #163.

<br>

Expand Down
Loading