diff --git a/Makefile.am b/Makefile.am index ba2c63cd..76923958 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,19 +10,19 @@ lms_cssdir=$(lms_docrootdir)/css lms_jsdir=$(lms_docrootdir)/js lms_imagesdir=$(lms_approotdir)/images -lms_css_DATA = \ +dist_lms_css_DATA = \ docroot/css/lms.css -lms_js_DATA = \ +dist_lms_js_DATA = \ docroot/js/bootstrap-notify.js \ docroot/js/jquery-1.10.2.min.js \ docroot/js/mediaplayer.js -lms_images_DATA = \ +dist_lms_images_DATA = \ approot/images/unknown-cover.jpg \ approot/images/unknown-artist.jpg -lms_approot_DATA = \ +dist_lms_approot_DATA = \ approot/admin-database.xml \ approot/admin-user.xml \ approot/admin-users.xml \ @@ -49,6 +49,6 @@ lms_approot_DATA = \ approot/tracks.xml \ approot/tracksinfo.xml -sysconf_DATA = \ +dist_sysconf_DATA = \ $(top_srcdir)/conf/lms.conf diff --git a/README.md b/README.md index 5dffba43..67585370 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,13 @@ LMS is a self-hosted music streaming software: access your music files from anyw A [demo](http://lms.demo.poupon.io) instance is available, with the following limitations: - Settings cannot be saved - No persistent playqueue +- No administration panel ## Main features -- Persistent play queue across sessions - User management - Recommendation engine - Audio transcode for maximum interoperability and low bandwith requirements +- Persistent play queue across sessions - Subsonic API - Multi-value tags - Custom tag support (ex: "mood", "genre", "albummood", "albumgrouping", ...) @@ -28,7 +29,7 @@ LMS provides several ways to help you find the music you like: The recommendation engine makes use of [Self-Organizing Maps](https://en.wikipedia.org/wiki/Self-organizing_map).
Please note this engine: - may require some significant computation time on very large datasets -- makes use of computed data available on [AcousticBrainz](https://acousticbrainz.org/). Therefore your music must contain the [MusicBrainz Identifier](https://musicbrainz.org/doc/MusicBrainz_Identifier) for the recommendation engine to work properly +- makes use of computed data available on [AcousticBrainz](https://acousticbrainz.org/). Therefore your music must contain the [MusicBrainz Identifier](https://musicbrainz.org/doc/MusicBrainz_Identifier) for the recommendation engine to work properly (otherwise, only tag-based recommendations are provided) ## Subsonic API For now, the API version implemented is 1.12.0 and has been tested on Android using the official application, Ultrasonic and DSub. @@ -38,7 +39,7 @@ As LMS does not aim to implement all the features of Subsonic, some commands are The Subsonic API is enabled by default. ## Installation -Here are the required packages to build on Debian Stretch: +Here are the required packages to build LMS on Debian Stretch: ```sh apt-get install g++ autoconf automake libboost-filesystem-dev libboost-system-dev libavcodec-dev libavutil-dev libavformat-dev libav-tools libmagick++-dev libpstreams-dev libconfig++-dev libpstreams-dev ffmpeg libtag1-dev ``` @@ -94,7 +95,7 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://localhost:5091; + proxy_pass http://localhost:5082; proxy_read_timeout 120; } } diff --git a/src/Makefile.am b/src/Makefile.am index cc1a0817..3b990c7e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,67 +2,135 @@ bin_PROGRAMS = lms lms_SOURCES = \ $(srcdir)/api/subsonic/SubsonicId.cpp \ + $(srcdir)/api/subsonic/SubsonicId.hpp \ $(srcdir)/api/subsonic/SubsonicResource.cpp \ + $(srcdir)/api/subsonic/SubsonicResource.hpp \ $(srcdir)/api/subsonic/SubsonicResponse.cpp \ + $(srcdir)/api/subsonic/SubsonicResponse.hpp \ $(srcdir)/av/AvInfo.cpp \ + $(srcdir)/av/AvInfo.hpp \ $(srcdir)/av/AvTranscoder.cpp \ + $(srcdir)/av/AvTranscoder.hpp \ $(srcdir)/cover/CoverArtGrabber.cpp \ + $(srcdir)/cover/CoverArtGrabber.hpp \ $(srcdir)/database/Artist.cpp \ + $(srcdir)/database/Artist.hpp \ $(srcdir)/database/Cluster.cpp \ + $(srcdir)/database/Cluster.hpp \ $(srcdir)/database/DatabaseHandler.cpp \ + $(srcdir)/database/DatabaseHandler.hpp \ $(srcdir)/database/TrackFeatures.cpp \ + $(srcdir)/database/TrackFeatures.hpp \ $(srcdir)/database/TrackList.cpp \ + $(srcdir)/database/TrackList.hpp \ + $(srcdir)/database/Types.hpp \ $(srcdir)/database/Release.cpp \ + $(srcdir)/database/Release.hpp \ $(srcdir)/database/ScanSettings.cpp \ + $(srcdir)/database/ScanSettings.hpp \ $(srcdir)/database/SimilaritySettings.cpp \ + $(srcdir)/database/SimilaritySettings.hpp \ $(srcdir)/database/SqlQuery.cpp \ + $(srcdir)/database/SqlQuery.hpp \ $(srcdir)/database/Track.cpp \ + $(srcdir)/database/Track.hpp \ $(srcdir)/database/User.cpp \ + $(srcdir)/database/User.hpp \ $(srcdir)/image/Image.cpp \ + $(srcdir)/image/Image.hpp \ $(srcdir)/main/main.cpp \ + $(srcdir)/main/Service.hpp \ $(srcdir)/metadata/AvFormat.cpp \ + $(srcdir)/metadata/AvFormat.hpp \ + $(srcdir)/metadata/MetaData.hpp \ $(srcdir)/metadata/TagLibParser.cpp \ + $(srcdir)/metadata/TagLibParser.hpp \ $(srcdir)/scanner/MediaScanner.cpp \ + $(srcdir)/scanner/MediaScanner.hpp \ + $(srcdir)/scanner/MediaScannerAddon.hpp \ $(srcdir)/similarity/SimilaritySearcher.cpp \ + $(srcdir)/similarity/SimilaritySearcher.hpp \ $(srcdir)/similarity/cluster/SimilarityClusterSearcher.cpp \ + $(srcdir)/similarity/cluster/SimilarityClusterSearcher.hpp \ $(srcdir)/similarity/features/AcousticBrainzUtils.cpp \ + $(srcdir)/similarity/features/AcousticBrainzUtils.hpp \ $(srcdir)/similarity/features/SimilarityFeaturesCache.cpp \ + $(srcdir)/similarity/features/SimilarityFeaturesCache.hpp \ $(srcdir)/similarity/features/SimilarityFeaturesScannerAddon.cpp \ + $(srcdir)/similarity/features/SimilarityFeaturesScannerAddon.hpp \ $(srcdir)/similarity/features/SimilarityFeaturesSearcher.cpp \ + $(srcdir)/similarity/features/SimilarityFeaturesSearcher.hpp \ $(srcdir)/similarity/features/som/DataNormalizer.cpp \ + $(srcdir)/similarity/features/som/DataNormalizer.hpp \ + $(srcdir)/similarity/features/som/InputVector.hpp \ + $(srcdir)/similarity/features/som/Matrix.hpp \ $(srcdir)/similarity/features/som/Network.cpp \ + $(srcdir)/similarity/features/som/Network.hpp \ $(srcdir)/ui/Auth.cpp \ + $(srcdir)/ui/Auth.hpp \ $(srcdir)/ui/LmsApplication.cpp \ + $(srcdir)/ui/LmsApplication.hpp \ $(srcdir)/ui/LmsApplicationGroup.cpp \ + $(srcdir)/ui/LmsApplicationGroup.hpp \ $(srcdir)/ui/MediaPlayer.cpp \ + $(srcdir)/ui/MediaPlayer.hpp \ $(srcdir)/ui/PlayQueueView.cpp \ + $(srcdir)/ui/PlayQueueView.hpp \ $(srcdir)/ui/PlayHistoryView.cpp \ + $(srcdir)/ui/PlayHistoryView.hpp \ $(srcdir)/ui/SettingsView.cpp \ + $(srcdir)/ui/SettingsView.hpp \ $(srcdir)/ui/admin/DatabaseSettingsView.cpp \ + $(srcdir)/ui/admin/DatabaseSettingsView.hpp \ $(srcdir)/ui/admin/InitWizardView.cpp \ + $(srcdir)/ui/admin/InitWizardView.hpp \ $(srcdir)/ui/admin/UserView.cpp \ + $(srcdir)/ui/admin/UserView.hpp \ $(srcdir)/ui/admin/UsersView.cpp \ + $(srcdir)/ui/admin/UsersView.hpp \ $(srcdir)/ui/common/Validators.cpp \ + $(srcdir)/ui/common/Validators.hpp \ $(srcdir)/ui/explore/ArtistInfoView.cpp \ + $(srcdir)/ui/explore/ArtistInfoView.hpp \ $(srcdir)/ui/explore/ArtistLink.cpp \ + $(srcdir)/ui/explore/ArtistLink.hpp \ $(srcdir)/ui/explore/ArtistsInfoView.cpp \ + $(srcdir)/ui/explore/ArtistsInfoView.hpp \ $(srcdir)/ui/explore/ArtistView.cpp \ + $(srcdir)/ui/explore/ArtistView.hpp \ $(srcdir)/ui/explore/ArtistsView.cpp \ + $(srcdir)/ui/explore/ArtistsView.hpp \ $(srcdir)/ui/explore/Explore.cpp \ + $(srcdir)/ui/explore/Explore.hpp \ $(srcdir)/ui/explore/Filters.cpp \ + $(srcdir)/ui/explore/Filters.hpp \ $(srcdir)/ui/explore/ReleaseInfoView.cpp \ + $(srcdir)/ui/explore/ReleaseInfoView.hpp \ $(srcdir)/ui/explore/ReleaseLink.cpp \ + $(srcdir)/ui/explore/ReleaseLink.hpp \ $(srcdir)/ui/explore/ReleasesInfoView.cpp \ + $(srcdir)/ui/explore/ReleasesInfoView.hpp \ $(srcdir)/ui/explore/ReleasesView.cpp \ + $(srcdir)/ui/explore/ReleasesView.hpp \ $(srcdir)/ui/explore/ReleaseView.cpp \ + $(srcdir)/ui/explore/ReleaseView.hpp \ $(srcdir)/ui/explore/TracksInfoView.cpp \ + $(srcdir)/ui/explore/TracksInfoView.hpp \ $(srcdir)/ui/explore/TracksView.cpp \ + $(srcdir)/ui/explore/TracksView.hpp \ $(srcdir)/ui/resource/ImageResource.cpp \ + $(srcdir)/ui/resource/ImageResource.hpp \ $(srcdir)/ui/resource/AudioResource.cpp \ + $(srcdir)/ui/resource/AudioResource.hpp \ $(srcdir)/utils/Config.cpp \ + $(srcdir)/utils/Config.hpp \ + $(srcdir)/utils/Exception.hpp \ $(srcdir)/utils/Logger.cpp \ + $(srcdir)/utils/Logger.hpp \ $(srcdir)/utils/Path.cpp \ - $(srcdir)/utils/Utils.cpp + $(srcdir)/utils/Path.hpp \ + $(srcdir)/utils/Utils.cpp \ + $(srcdir)/utils/Utils.hpp lms_CXXFLAGS=-std=c++14 -Wall -I$(srcdir)/ui $(MAGICKXX_CFLAGS) -D_REENTRANT lms_LDADD=$(MAGICKXX_LIBS) diff --git a/src/main/main.cpp b/src/main/main.cpp index 0afbd125..12883a10 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -51,7 +51,7 @@ std::vector generateWtConfig(std::string execPath) if (Config::instance().getBool("tls-enable", false)) { - args.push_back("--https-port=" + std::to_string( Config::instance().getULong("listen-port", 5081))); + args.push_back("--https-port=" + std::to_string( Config::instance().getULong("listen-port", 5082))); args.push_back("--https-address=" + Config::instance().getString("listen-addr", "0.0.0.0")); args.push_back("--ssl-certificate=" + Config::instance().getString("tls-cert")); args.push_back("--ssl-private-key=" + Config::instance().getString("tls-key")); @@ -59,7 +59,7 @@ std::vector generateWtConfig(std::string execPath) } else { - args.push_back("--http-port=" + std::to_string( Config::instance().getULong("listen-port", 5081))); + args.push_back("--http-port=" + std::to_string( Config::instance().getULong("listen-port", 5082))); args.push_back("--http-address=" + Config::instance().getString("listen-addr", "0.0.0.0")); }