Giter Club home page Giter Club logo

musicdb's Introduction

MusicDB

Your Music. Your Cloud.

MusicDB WebUI Screenshot

MusicDB releases Python 3.9+ License Twitter: @MusicDBProject


๐Ÿš€ Quick Start

[ย ย  ๐ŸŒ Websiteย ย ย |ย ย  โš™๏ธ Installation Guideย ย ย |ย ย  ๐ŸŽต Usage Guideย ย ย ]

Distribution Download Quick Installation
Arch Linux ๐Ÿ“ฆ musicdb-8.1.0-1-any.pkg.tar.zst pacman -U ./musicdb-8.0.0-1-any.pkg.tar.zst
Fedora 36 ๐Ÿ“ฆ musicdb-8.1.0-1.fc36.noarch.rpm dnf install ./musicdb-8.0.0-1.fc36.noarch.rpm
Ubuntu 22.04 ๐Ÿ“ฆ musicdb-8.1.0-1_all.deb apt install ./musicdb-8.0.0-1_all.deb
Source Code ๐Ÿ“ฆ musicdb-8.1.0-src.tar.zst โš™๏ธ Install from Source Code
Documentation ๐Ÿ“ฆ musicdb-8.1.0-doc.tar.zst โš™๏ธ Install Documentation

โš™๏ธ Install, Setup and Run MusicDB with Apache and Icecast

MusicDB requires Python 3 version 3.9.0 or later.

๐Ÿ’ก Information

MusicDB is hardware independent. It works with any Linux distribution installed on PC, ARM (like Raspberry Pi) or Mac.

Important: See Transition from 7.2.0 to 8.0.0 in case you already have MusicDB 7.2.0 installed.

Important: After updating MusicDB from 8.0.0 to 8.1.0 check if configuration file (/etc/musicdb.ini) has been updated as well. Some new album cover scales (200 and 1000) need to be configured. Then restart musicdb (systemctl restart musicdb). Otherwise artworks are missing in the web front-end on high resolution screens.


๐Ÿ” Details

[ย ย  โš™๏ธ Installation Guideย ย ย |ย ย  ๐ŸŽต Usage Guideย ย ย |ย ย  โš™๏ธ Architectureย ย ย ]

MusicDB is a music manager with focus on remote access to your music collection using a web-based user interface. It allows you to manage an audio stream based on a song-queue. The WebUI is focusing on being a presentation of your music rather than being a database front-end.

So, when you are listening to your music, you do not work with software. Instead you explore your music collection.

I started this project on 4th January 2014. Since I finished a first prototype within one weekend, I use MusicDB almost every day. Time to share it with the world. ๐Ÿ˜ƒ

New in Version 8.1.0

  • Improved album filter for genres and sub genres
  • Experimental support for the Chromium web browser
  • Some annoying bugs fixed (Most important: Uploading albums can be continued after connection error)

Features

  • Artwork Oriented: Albums and songs are represented by their artwork.
  • Clean Presentation: No meta data overloaded list-based UI.
  • Fuzzy search: The search allows you to have typos and issues with foreign languages.
  • Focus on a Genre: Hide all music not tagged with the genres you currently like to listen to.
  • Annotate your Mood: Use flags to annotate songs with specific moods or themes.
  • Queue Based: No playlist management distracts you from your music. Put a songs into the queue, then it will be played.
  • Private: Your music is stored on your private server.
  • Everywhere: Control via Web Application. Listen via Audio Stream.
  • Single User: MusicDB is a Single-User Multi-Client application. Connect all your computers to MusicDB without messing around with user management.
  • No Limits: Scales with music collections of hundreds of albums.
  • Independence: Keeps your music directory clean to use it with other tools as well. The file system is ground truth, not the database.

๐Ÿ’ฌ Socialize

[ย ย  ๐Ÿ’ฌ GitHub Discussionsย ย ย |ย ย  ๐Ÿฆ Twitterย ย ย |ย ย  ๐Ÿž GitHub Issuesย ย ย ]

Providing and maintaining open source software comes with some downsides and a lot of work. I'd like to know if anyone is using this software, and what you are doing with it. ๐Ÿ˜ƒ

  • Star: Hit the โ˜† to make this repository a bit more relevant.
  • Feedback: Provide some feedback on GitHub Discussions. Why do you like, don't like or don't care about MusicDB.
  • Experience: Share some experience or screenshots on GitHub Discussions or Twitter.
  • Bug Reports: Create an Issue if something does not work as you expect.
  • Feature Request: Create an Issue if you like to see some feature in MusicDB.
  • Contact Me: Write me an e-mail if you don't like to write something on the public channels.

๐ŸŽต Using MusicDB

[ย ย  โš™๏ธ Installation Guideย ย ย |ย ย  ๐ŸŽต Usage Guideย ย ย |ย ย  ๐Ÿ“š Code Documentationย ย ย ]

The start page of ๐Ÿ““ MusicDB's Documentation should give you the help you need to start. The documentation is also made for developers, not only users. So there is much more information than you will need to use MusicDB. For the beginning, focus on the following chapters:

  1. ๐Ÿ““ Installation and Setup Manual
  2. ๐Ÿ““ Check the MusicDB Configuration
  3. ๐Ÿ““ Upload and Import Music to MusicDB
  4. ๐Ÿ““ WebUI Documentation

Some helpful hints:

  • Don't be to specific with the genre tags. Define only one tag per genre like Metal, Pop, Classic, โ€ฆ
  • Use sub-genre tags for a more detailed classification.
  • Tag albums beforehand and songs only when they are currently playing.
  • Set mood-flags only for the current playing song.
  • Check the ๐Ÿ““ Configuration of Randy to make sure the random song selection can work with your music collection. When you have a small music collection, decrease the blacklist sizes.
  • When defining the Album-View colors, pay attention to good contrast and follow the color scheme of the album cover.

If there are any problems setting up MusicDB, create an issue.


๐Ÿ”ฉ Technical Details

[ย ย  โš™๏ธ Architectureย ย ย |ย ย  ๐Ÿ“š Code Documentationย ย ย ]

This section gives you a rough overview of some technical details you may want to know before installing MusicDB.

Requirements

I test MusicDB only with the latest version of the requirements listed below. If MusicDB breaks when updating dependencies, it's a bug in MusicDB. Then please create an issue including the name and version of the dependency that causes issues. In case MusicDB does not run on outdated operating systems, update your system ๐Ÿ˜‰

MusicDB is hardware independent. It works with any Linux distribution installed on PC, ARM (like Raspberry Pi) or Mac.

I develop and operate MusicDB on an Arch Linux for x86-64. So on this system it will run most reliable ๐Ÿ˜ƒ.

Note on Debian/Ubuntu

I do not support Debian/Ubuntu distributions for lots of reasons.

Anyway, periodically I test MusicDB also on an Raspberry Pi 4 with Ubuntu or Raspberry PI OS which is Debian based. So, in principle it works. There may be a .deb package for the latest Ubuntu system, but again, expect some difficulties using MusicDB on Debian/Ubuntu. Some quirks with Debian/Ubuntu are documented in the installation documentation.

Sometime it happens that MusicDB does not run on certain distributions like Debian or Ubuntu LTS because the packages provided by those distributions are too old. I consider this as an issue of those distributions, not of MusicDB.

For best experience I recommend Arch Linux or Fedora to run MusicDB.

Tested Distributions and Browsers

๐ŸŸข Test succeeded, ๐Ÿ”ด Test failed, ๐ŸŸก Not tested

The following list shows on which Linux distribution installing and running the MusicDB back-end succeeded:

The following list shows on which web browser running the MusicDB front-end succeeded:

1: Python too Old - Python 3.9+ is required;


๐Ÿ— Roadmap

MusicDB is under active development since 2014. Because I use this software every day, it will remain under active development for a long time. Beside maintaining this software, I also think about improving it or adding new features if necessary.

The following list contains all huge improvements I'm planning to add to MusicDB. The links are pointing to the corresponding GitHub Project page.

Integration of Music Videos (Alpha Stage)
Integrate music videos into the MusicDB infrastructure. The UI should be switch to video-mode. Then, instead of showing artists and their albums, artists and their videos will be shown. The videos can then be put into a video-queue that get streamed.

Virtual Albums (Planning Phase)
Virtual albums are a collection of single songs that are not related to an album, or a collection of sym-links to (for example) remixes.

MusicAIv2 (Idea)
Next generation of MusicAI. I already miss the old one that was surprisingly helpful tagging songs. The next generation might base on TensorFlow 2.0 directly. I will have the same or similar architecture since it worked in the past.

More ideas in "brain-storming-phase" can be found on the Roadmap GitHub Project page

MusicDB Logo

musicdb's People

Contributors

rstemmer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

musicdb's Issues

Default color picker can be useless

On the image's left side is the color input as Firefox implements it. On the right side the color input of Chrome. (Tested on Linux)
colorpickerfail

Obviously Chrome's version is as bad as just hacking the hex-code into a text input. No color picker and not even saturation/value adjustment controls.

Docker image

Hey !

It could be very nice if you can make a Docker image for your project, trying step just for testing your project and it takes a long time to install all dependancies, all python dependancies.. etc :)

Docker image are very fun to easily deploy but still more fun to simply launch and test in 10 seconds ! :)

Regards,

MusicAI: Tensorflow not working

2019-05-17 18:27:20.748099: F tensorflow/stream_executor/lib/statusor.cc:34] Attempting to fetch value instead of handling error Failed precondition: could not dlopen DSO: libcublas.so.10.1; dlerror: libcublas.so.10.1: cannot open shared object file: No such file or directory

Deprecated warning by Tensorflow. - AI must be checked if there is some action necessary on my side..

 LOG[2019-08-28 07:53:12|WARN ] deprecation.py:new_func.506: From /usr/lib/python3.7/site-packages/tflearn/layers/core.py:239: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future
 version.
Instructions for updating:
Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
 LOG[2019-08-28 07:53:12|WARN ] deprecation.py:new_func.506: From /usr/lib/python3.7/site-packages/tflearn/objectives.py:66: calling reduce_sum_v1 (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a 
future version.
Instructions for updating:
keep_dims is deprecated, use keepdims instead
 LOG[2019-08-28 07:53:13|WARN ] deprecation.py:new_func.323: From /usr/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version
.
Instructions for updating:
Use tf.cast instead.
 LOG[2019-08-28 07:53:16|WARN ] deprecation.py:new_func.323: From /usr/lib/python3.7/site-packages/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will b
e removed in a future version.
Instructions for updating:
Use standard file APIs to check for files with this prefix.

Search function considers hated and deactivated songs

The search function shows all songs it finds.
At least for the quick preview all hated and deactivated songs shall be invisible.

In the full results list they may appear (with low dominance), but maybe they should also be invisible.
At least the deactivated ones.

Exported mp3 files have no release year ID3 frame

Exported files that get converted to mp3 have no release year ID3 frame.
Using id3edit (the tool used to set the ID3 Tag) seems not be the problem.
There may be a problem with generating the parameter lists for the id3edit call.

  • Did I change the command line interface for setting the release date when I moved to id3edit version 2?
  • Did I change the Frame ID of the Frame so that it is no more standard conform (or now it is, and my audio player not?)

Target Device: A Sony Android smartphone using Sonys audio player software

musicdb artwork module requires absolute artwork path

Adding artwork for an album fails, if the artwork path is not absolute.
In the following example, both calls should work, but only the second one succeeds.

cd ~
musicdb artwork -u --artwork tmp.jpg --album /data/music/Artist/2020\ -\ Album
musicdb artwork -u --artwork /home/user/tmp.jpg --album /data/music/Artist/2020\ -\ Album

The error appers in mdbapi/artwork.py:321: if artworkpath and not self.fs.IsFile(artworkpath):
The root for fs is / and therefore relative paths are interpreted as being relative to the systems root directory.
This is correct, because the the command line modules should make all user defined paths absolute before calling MusicDB internal functions.
So mod/artwork.py fails at this point.

Public bug tracker

Issue

Currently, I use an FlySpray instances running on my private server to track bugs, features and development progress.
The concepts behind the GitHub Issue tracker does not fulfill my requirements so that I really do not want to use it.
I need to find an alternative solution.

Possible Solutions

Some thought on how to solve the problem.

External FlySpray Provider

Just paying for a ready to use FlySpray instance would be my favorite solution.
Sadly there are no provider for ready to use and easy to maintain public FlySpray installations.

External Web Hoster

Paying for some public web space I can run my own FlySpray installation on can be an option.
The problem is the effort for maintaining the installation.
I have to take care to update FlySpray as soon as possible whenever there is an update instead of just blocking the port in the Firewall and update when I have time.
So I have to spend money and time.

External Provider of a Different Bug Tracking System

There may be more than FlySpray. :)

GitHub Issues Tracker

I could just use this Bug Tracker.
Disadvantages are, that it is hard to manage bugs and features.
Especially the fact that the UI appends A LOT of overhead with every change to an Issue (Edit tags, move to different Milestones) is a big downside.
GitHub's Issue Tracker focus lays on fancy GUI, not on the content. That sucks.
Otherwise I could use the Labels to reimplement "Task Types", "Categories", "Difficulty" and "Urgency".

musicdb add: Crash and missleading UI

The add module of MusicDB marks invalid song names.
I thought it will automatically clean those names. Of cause it does nothing as long as the user does not explicitly gives the command to do something (in this case pressing c to give the command to clean the names).
Even worse is the fact, that MusicDB crashes when forgetting to press c:

Traceback (most recent call last):
  File "/srv/musicdb/musicdb", line 208, in <module>
    exitcode = modobj.MDBM_Main(args)
  File "/srv/musicdb/mod/add.py", line 824, in MDBM_Main
    self.RunImportProcess(data)
  File "/srv/musicdb/mod/add.py", line 756, in RunImportProcess
    self.AddAlbum(newalbumpath, artist["id"])
  File "/srv/musicdb/mdbapi/database.py", line 531, in AddAlbum
    raise AssertionError("Analysing path \"%s\" failed!", songpaths[0])
AssertionError: ('Analysing path "%s" failed!', 'Die Kreatur/2020 - Panoptikum/Die Kreatur - Panoptikum - 01 DIE KREATUR.mp3')

Problem 1: Make sure the user is aware that the song-name-remarks are indicating problems with the naming, and not an applied solution.
Problem 2: If the user leaves those problems unsolved, a message box should appear allowing the user to solve the issues, or cancel the import process.
Problem 3: The exception listed above should not be unhandled!

Style improvements for 4k screens necessary

The css files require some updates to make MusicDB look good on 4k screens.
With 5.1.1 I already fixed the font sizes.
There are some more issues to fix:

  • Font Size
  • FlexBox layout
  • Image sizes
  • Use as much relative units as possible

imp module deprecated

/srv/musicdb/musicdb:20: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

Just a warning, but needs to be fixed in near future

New added album does not automatically appear in WebUI

New added album does not automatically appear in WebUI until the artists-list gets updated (for example by triggering the genre selection).

After a new Album/Artist/Song got added or removed from the music collection, the WebUI should update its state to be in sync with the server again.

The mechanics already exists and only need to be applied as an event of a music collection update.

Watchdog gets not reset after connection

When the WebUI is reloaded, it connects successfully.
But the watchdog gets not reset correctly by the heat beat.
Only after the watchdog forces a reconnect, it gets reset with every heart beat.

This is barely notable if not looking at the logs and so it is not critical.

Random song selection should select a favorite after several skipped songs

I just skipped some songs that got added to the empty queue by the Random Song Selection Algorithm (Randy).
I skipped them, because I did not like them, even if the song fits perfectly the selected genre (and any other criteria a valid song shall fulfill).
Goal of Randy is to provide a song selection that "feels good". This objective failed at this point.

Possible Improvements

It is important that the improvements do not have any disadvantages regarding discovering less frequently or never played songs.
Also songs with lots of dislikes should still have a chance to get added to the queue because liking/disliking songs is very mood-depending.

Select a favorite after several skipped songs

After a certain amount of "next song" commands or "dislikes", Randy shall add a song that got faved by the user.
The amount of actions until the new constraint counts should be configurable.

Trace the voting and maintain a positive average

Randy could trace each songs voting (like/dislikes) that got played.
A gliding average (configurable) should not be lower than a certain threshold (also configurable).
Is the average vote below the threshold a faved song should be added to the queue at "next" position. Then the average can be reset.
When a song gets liked/dislikes while it is playing, the vote should also be considered.
So a dislike has direct impact to the "quality" of the next songs.

Improvements for importing amazon songs

When songs are bought at amazon they are full of "[explicit]" substrings.
The import module should automatically remove them (using the clear-function of muscdb add).
Furthermore the ID3 frames COMM and PRIV can be used to identify the origin of the song.

Allow hiding Albums

Implement a way to hide albums.

  • Add column in albums table to mark albums as "hidden".
  • Improve API to filter hidden albums
  • Improve WebUI to hide albums
  • How to make hidden albums visible again? CLI-Module?

Reasons why users may want to hide albums:
The albums are interesting for "export" situations. For example albums the user only listens to when sitting in the car.

Apply album genre settings to untaged songs

When adding a new genre tag to an album, all its songs should be updated by a suggestion of the same genre.
This should only be applied to songs, that are not tagged at that moment.
The tag should be a "low confident" tag that needs to be confirmed by the user later.

This procedure can be seen as a replacement for MusicAI

musicdb add needs to be rewritten

  1. Hard to read code
  2. Code needs to be split into several files
  3. Does not take care about song meta data
  4. Does not automatically handle multi-CD-situations
  5. Hard to extend

AI broken. Importing tflearn failed

[M45ch1n3/pts/4:/srv/musicdb] python
Python 3.8.1 (default, Dec 21 2019, 20:57:38) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tflearn
2020-01-11 14:33:59.393571: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/site-packages/tflearn/__init__.py", line 4, in <module>
    from . import config
  File "/usr/lib/python3.8/site-packages/tflearn/config.py", line 5, in <module>
    from .variables import variable
  File "/usr/lib/python3.8/site-packages/tflearn/variables.py", line 7, in <module>
    from tensorflow.contrib.framework.python.ops import add_arg_scope as contrib_add_arg_scope
ModuleNotFoundError: No module named 'tensorflow.contrib'
>>> 

Installed tensorflow:

  • python-tensorflow-cuda 2.1.0-1
  • tensorflow-cuda 2.1.0-1
  • tflearn (0.3.2)

The tflearn module was installed via pip 9.3 (python 3.8).

Easy Update Process

Issue

The current update process is far too complicated.
Currently there are too many situation the user has to do changes manually.

Solution

I want to provide a singe script (update.sh) to update MusicDB in a way that the user does not have to do more than just executing the script.

Steps to the Solution

  • Separate installation (install.sh) and updating (update.sh)
  • Organize Databases and configuration files in a way to detect its current version and the steps needed to update them automatically.
  • Developing a MusicDB Module to allow updates that cannot be done by an external script (and call it from the update script)
  • Test the update and installation process
    • Arch Linux (Raspberry Pi)
    • Arch Linux (ODroid C2)
    • Debian (AMD64 VM)
  • Update documentation

(Changes are done on the sprint-summer2018 branch)

Requirements

  • This should be the last time that a user has to change things in his setup manually
  • Changes should not destroy previous installations

Randomizer adds song of a recently played artist into the queue

The random song selection algorithm inserted a song from the same artist the song before was (added by me) into the queue

Problem: The randomizer does not track songs added by the user. So that artist was not on the blacklist. This was implemented by intention, but obviously was a bad decision.

Solution: Also add user selection to the blacklists.

  • Move blacklist handling from Randy into different class/file
  • Update Randy/SongQueue classes

"Too many open files" Error

Issue

"Too many open files" after a very long run time.

Log

 LOG[2018-10-07 21:34:49|FATAL] server.py:Run.343: FATAL ERROR (shutting down server!!):
 LOG[2018-10-07 21:34:49|FATAL] server.py:Run.344: [Errno 24] Too many open files: '/data/musicdb/musicdb.fifo'
Traceback (most recent call last):
  File "/srv/musicdb/mdbapi/server.py", line 326, in Run
  File "/srv/musicdb/lib/namedpipe.py", line 93, in ReadLine
  File "/srv/musicdb/lib/namedpipe.py", line 91, in opener
OSError: [Errno 24] Too many open files: '/data/musicdb/musicdb.fifo'

install.sh does not define WSAPIKEY

After a fresh install, the WSAPIKEY in config.js and musicdb.ini is not set.
The script should generate a key.

Uncaught ReferenceError: WSAPIKEY is not defined
    <anonymous> http://127.0.0.1/musicdb/webui/config.js:8

Change "Foreground" and "Highlight" color label to "Primary" and "Secondary" color

Change "Foreground" and "Highlight" label for colors to "Primary" and "Secondary" color.
This would be closer to the way how those two colors are used. Actually they are used this way.

This change should not only be applied to the WebUI but also to the backend and the database.

Post Scriptum / Fun-Fact: The name of the three colors of the WebUI (Background, Foreground, Highlight) come from the very first version of MusicDB. From the day, right after executing mkdir musicdb.
It's never too late to fix bad decisions ๐Ÿ˜„

Easy to use tag manager for command line

Adding tags, especially mood-tags are a bit ugly because of the complexity behind the tag management.
A command line "GUI" like for musicdb-repair will be a benefit.

New Project Website

Issue

Overkill-Template

The current website is based on a random template I found on the internet.
I striped a lot of overhead from the site, but there is still far more code that necessary for a static website. This makes it uncomfortable to edit the page.

  • I simply have to write a bare html/css page. No big deal
  • Better screenshots (see next section)

Worst Screenshots Ever

For copyright reasons I have to blur all album covers on the screenshots.
I need to find lots of creative commons album covers I can use.
All tries to find some suitable album artworks ended up detecting copyright violations by the artists of those covers which again makes it impossible to use them.
This is a serious problem.

  • I need at least 20 free artworks
  • 5 fake artist names
  • 20 fake album names
  • 30 fake song names

Server event-loop broken with Python 3.7 / Autobahn 18.8.1

The implementation of handling the Autobahn event loop broke with the update to Python 3.7 / Autobahn 18.8.1.

Pure asyncio event loop

 LOG[2018-08-25 09:03:42|DEBUG] websocket.py:__init__.40: Using WebSocket module AutobahnPython/18.8.1
 LOG[2018-08-25 09:03:42|INFO ] server.py: MusicDB WebSocket Server (TLSv1.2 secured) listening to port 9001
 LOG[2018-08-25 09:03:42|INFO ] server.py: Setup complete. Executing server.
 LOG[2018-08-25 09:03:42|FATAL] server.py:Run.343: FATAL ERROR (shutting down server!!):
 LOG[2018-08-25 09:03:42|FATAL] server.py:Run.344: cannot reuse already awaited coroutine
Traceback (most recent call last):
  File "/srv/musicdb/mdbapi/server.py", line 324, in Run
    tlswsserver.HandleEvents()
  File "/srv/musicdb/lib/ws/server.py", line 175, in HandleEvents
    self.eventloop.run_until_complete(self.coro)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
    return future.result()
RuntimeError: cannot reuse already awaited coroutine

With uvloop as event loop

 LOG[2018-08-21 18:13:24|DEBUG] websocket.py:__init__.40: Using WebSocket module AutobahnPython/18.8.1
 LOG[2018-08-21 18:13:24|INFO ] server.py: MusicDB WebSocket Server (TLSv1.2 secured) listening to port 9001
 LOG[2018-08-21 18:13:24|INFO ] server.py: Setup complete. Executing server.
 LOG[2018-08-21 18:13:24|FATAL] server.py:Run.344: FATAL ERROR (shutting down server!!):
 LOG[2018-08-21 18:13:24|FATAL] server.py:Run.345: cannot reuse already awaited coroutine
Traceback (most recent call last):
  File "/srv/musicdb/mdbapi/server.py", line 325, in Run
    tlswsserver.HandleEvents()
  File "/srv/musicdb/lib/ws/server.py", line 181, in HandleEvents
    self.eventloop.run_until_complete(self.coro)
  File "uvloop/loop.pyx", line 1448, in uvloop.loop.Loop.run_until_complete
RuntimeError: cannot reuse already awaited coroutine

MoveInQueue broken

This bug is most likely only in the develop-version.
I just leave the report here to not forget about it.

p.s.
I need to create a label for "next generation issues"

Replace Division Slash by Slash on import

When a song name has a slash, its file name uses a Division Slash (U+2215), because Slash (U+002F) is reserved as path separator.
For example 08 Menschโˆ•Maschine.mp3.
Using a monospace font, the is no notable visual difference between a Slash and a Division Slash. But rendering the name in the WebUI, the kerning information are notable different.
Therefore it is necessary to replace the Division Slash before rendering the font name:
Menschโˆ•Maschine -> Mensch/Maschine.

This can be done in the WebUI on the fly.
I thought I did this in the past. Maybe there is something broken in the Java Script, or it never left the state of "I should do it".

Another solution is to do this on importing the song. Then the "correct" name is already stored in the database. Doing it in the backend may lead to a problem, because the songname-entry mismatches the song name part of the path-entry. The database was originally only used to cache filesystem information.
Following this strategy requires reviewing all parts of MusicDB that interact with the database and the filesystem. This is additional beneficial to improve stability and reliability of the code.

At the moment I prefer to follow both strategies. On-the-fly replacement in the WebUI, and replacing during import.

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.