mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-25 06:35:57 -05:00
Merge pull request #1224 from owntone/rename_owntone2
Main renaming of forked-daapd
This commit is contained in:
commit
b63a2e0976
6
.gitignore
vendored
6
.gitignore
vendored
@ -29,9 +29,9 @@ missing
|
||||
stamp-h1
|
||||
autotools-stamp
|
||||
build-stamp
|
||||
forked-daapd.spec
|
||||
forked-daapd.conf
|
||||
forked-daapd.service
|
||||
owntone.spec
|
||||
owntone.conf
|
||||
owntone.service
|
||||
|
||||
# ignore debian packaging for convenience
|
||||
debian/
|
||||
|
19
AUTHORS
19
AUTHORS
@ -1,12 +1,13 @@
|
||||
forked-daapd is a fork/rewrite of mt-daapd (Firefly Media Server)
|
||||
written by Julien BLACHE <jb@jblache.org>.
|
||||
OwnTone is maintained by:
|
||||
|
||||
mt-daapd (Firefly Media Server) was originally written by
|
||||
Ron Pedde <ron@pedde.com> and a handful of contributors.
|
||||
|
||||
Contributors to forked-daapd include:
|
||||
- Ace Jones <ace.jones1@yahoo.com>
|
||||
- Dustin King <daking@rescomp.stanford.edu>
|
||||
- Kai Elwert <elwertk@googlemail.com>
|
||||
- Espen Jürgensen <espenjurgensen@gmail.com>
|
||||
- Christian Meffert <christian.meffert@googlemail.com>
|
||||
|
||||
Up until version 27.4 it was called forked-daapd.
|
||||
|
||||
forked-daapd up until 0.19 was written by Julien BLACHE <jb@jblache.org>. It was
|
||||
build on mt-daapd (Firefly Media Server), which was originally written by Ron
|
||||
Pedde <ron@pedde.com> and a handful of contributors.
|
||||
|
||||
For a complete list of contributers, please see:
|
||||
https://github.com/owntone/owntone-server/graphs/contributors
|
||||
|
61
INSTALL.md
61
INSTALL.md
@ -1,15 +1,14 @@
|
||||
# Installation instructions for forked-daapd
|
||||
# Installation instructions for OwnTone
|
||||
|
||||
This document contains instructions for installing forked-daapd from the git
|
||||
tree.
|
||||
This document contains instructions for installing OwnTone from the git tree.
|
||||
|
||||
The source for this version of forked-daapd can be found here:
|
||||
The source for this version of OwnTone can be found here:
|
||||
[owntone/owntone-server](https://github.com/owntone/owntone-server.git)
|
||||
|
||||
## Quick version for Raspbian (Raspberry Pi)
|
||||
|
||||
See the instructions here:
|
||||
[Improved forked-daapd (iTunes server) -
|
||||
[OwnTone server (iTunes server) -
|
||||
Raspberry Pi Forums](http://www.raspberrypi.org/phpBB3/viewtopic.php?t=49928)
|
||||
|
||||
## Quick version for Debian/Ubuntu users
|
||||
@ -27,10 +26,10 @@ sudo apt-get install \
|
||||
libcurl4-openssl-dev
|
||||
```
|
||||
|
||||
Note that forked-daapd will also work with other versions and flavours of
|
||||
Note that OwnTone will also work with other versions and flavours of
|
||||
libgcrypt and libcurl, so the above are just suggestions.
|
||||
|
||||
While forked-daapd will work with versions of libevent between 2.0.0 and 2.1.3,
|
||||
While OwnTone will work with versions of libevent between 2.0.0 and 2.1.3,
|
||||
it is recommended to use 2.1.4+. Otherwise you may not have support for
|
||||
simultaneous streaming to multiple DAAP clients.
|
||||
|
||||
@ -48,7 +47,7 @@ Then run the following (adding configure arguments for optional features):
|
||||
|
||||
```bash
|
||||
git clone https://github.com/owntone/owntone-server.git
|
||||
cd forked-daapd
|
||||
cd owntone-server
|
||||
autoreconf -i
|
||||
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
|
||||
make
|
||||
@ -74,11 +73,11 @@ sudo yum install \
|
||||
libcurl-devel
|
||||
```
|
||||
|
||||
Clone the forked-daapd repo:
|
||||
Clone the OwnTone repo:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/owntone/owntone-server.git
|
||||
cd forked-daapd
|
||||
cd owntone-server
|
||||
```
|
||||
|
||||
Now you need to install ANTLR3, but you probably can't use the version that
|
||||
@ -119,7 +118,7 @@ you can still look through it and use it as an installation guide.
|
||||
|
||||
## Quick version for macOS (using Homebrew)
|
||||
|
||||
This workflow file used for building forked-daapd via Github actions includes
|
||||
This workflow file used for building OwnTone via Github actions includes
|
||||
all the steps that you need to execute:
|
||||
[.github/workflows/macos.yml](.github/workflows/macos.yml)
|
||||
|
||||
@ -169,11 +168,11 @@ Optional features require the following additional ports:
|
||||
Chromecast | `--enable-chromecast` | gnutls protobuf-c
|
||||
Pulseaudio | `--with-pulseaudio` | pulseaudio
|
||||
|
||||
Clone the forked-daapd repo:
|
||||
Clone the OwnTone repo:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/owntone/owntone-server.git
|
||||
cd forked-daapd
|
||||
cd owntone-server
|
||||
```
|
||||
|
||||
Install antlr3 and library using the included script:
|
||||
@ -195,19 +194,19 @@ sudo make install
|
||||
Note: if for some reason you've installed the avahi port, you need to
|
||||
add `--without-avahi` to configure above.
|
||||
|
||||
Edit `/usr/local/etc/forked-daapd.conf` and change the `uid` to a nice
|
||||
Edit `/usr/local/etc/owntone.conf` and change the `uid` to a nice
|
||||
system daemon (eg: unknown), and run the following:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /usr/local/var/run
|
||||
sudo mkdir -p /usr/local/var/log # or change logfile in conf
|
||||
sudo chown unknown /usr/local/var/cache/forked-daapd # or change conf
|
||||
sudo chown unknown /usr/local/var/cache/owntone # or change conf
|
||||
```
|
||||
|
||||
Run forked-daapd:
|
||||
Run OwnTone:
|
||||
|
||||
```bash
|
||||
sudo /usr/local/sbin/forked-daapd
|
||||
sudo /usr/local/sbin/owntone
|
||||
```
|
||||
|
||||
Verify it's running (you need to <kbd>Ctrl</kbd>+<kbd>C</kbd> to stop
|
||||
@ -221,7 +220,7 @@ dns-sd -B _daap._tcp
|
||||
|
||||
Required tools:
|
||||
|
||||
- ANTLR v3 is required to build forked-daapd, along with its C runtime
|
||||
- ANTLR v3 is required to build OwnTone, along with its C runtime
|
||||
(libantlr3c). Use a version between 3.1.3 and 3.5 of ANTLR v3 and the
|
||||
matching C runtime version. Get it from <http://www.antlr3.org/>
|
||||
- Java runtime: ANTLR is written in Java and as such a JRE is required to
|
||||
@ -276,7 +275,7 @@ Libraries:
|
||||
from <https://libwebsockets.org/>
|
||||
|
||||
If using binary packages, remember that you need the development packages to
|
||||
build forked-daapd (usually named -dev or -devel).
|
||||
build OwnTone (usually named -dev or -devel).
|
||||
|
||||
sqlite3 needs to be built with support for the unlock notify API; this isn't
|
||||
always the case in binary packages, so you may need to rebuild sqlite3 to
|
||||
@ -284,9 +283,9 @@ enable the unlock notify API (you can check for the presence of the
|
||||
sqlite3_unlock_notify symbol in the sqlite3 library). Refer to the sqlite3
|
||||
documentation, look for `SQLITE_ENABLE_UNLOCK_NOTIFY`.
|
||||
|
||||
libav (or ffmpeg) is a central piece of forked-daapd and most other FLOSS
|
||||
libav (or ffmpeg) is a central piece of OwnTone and most other FLOSS
|
||||
multimedia applications. The version of libav you use will potentially have a
|
||||
great influence on your experience with forked-daapd.
|
||||
great influence on your experience with OwnTone.
|
||||
|
||||
## Long version - building and installing
|
||||
|
||||
@ -378,31 +377,31 @@ You can safely ignore all of these warnings.
|
||||
|
||||
After installation:
|
||||
|
||||
- edit the configuration file, `/etc/forked-daapd.conf`
|
||||
- edit the configuration file, `/etc/owntone.conf`
|
||||
- make sure the Avahi daemon is installed and running (Debian:
|
||||
`apt install avahi-daemon`)
|
||||
|
||||
Note that `sudo make install` will not install any system files to start the
|
||||
service after boot, and it will not setup a system user.
|
||||
|
||||
forked-daapd will drop privileges to any user you'll specify in the
|
||||
OwnTone will drop privileges to any user you'll specify in the
|
||||
configuration file if it's started as root.
|
||||
|
||||
This user must have read permission on your library (you can create a group for
|
||||
this and make the user a member of the group, for instance) and read/write
|
||||
permissions on the database location (`$localstatedir/cache/forked-daapd` by
|
||||
permissions on the database location (`$localstatedir/cache/owntone` by
|
||||
default).
|
||||
|
||||
If your system uses systemd then you might be able to use the service file
|
||||
included, see `forked-daapd.service`.
|
||||
included, see `owntone.service`.
|
||||
|
||||
Otherwise you might need an init script to start forked-daapd at boot. A simple
|
||||
init script will do, forked-daapd daemonizes all by itself and creates a
|
||||
Otherwise you might need an init script to start OwnTone at boot. A simple
|
||||
init script will do, OwnTone daemonizes all by itself and creates a
|
||||
pidfile under `/var/run`. Different distributions have different standards for
|
||||
init scripts and some do not use init scripts anymore; check the documentation
|
||||
for your distribution.
|
||||
|
||||
For dependency-based boot systems, here are the forked-daapd dependencies:
|
||||
For dependency-based boot systems, here are the OwnTone dependencies:
|
||||
|
||||
- local filesystems
|
||||
- network filesystems, if needed in your setup (library on NFS, ...)
|
||||
@ -414,7 +413,7 @@ The LSB header below sums it up:
|
||||
|
||||
```bash
|
||||
### BEGIN INIT INFO
|
||||
# Provides: forked-daapd
|
||||
# Provides: owntone
|
||||
# Required-Start: $local_fs $remote_fs $network $time
|
||||
# Required-Stop: $local_fs $remote_fs $network $time
|
||||
# Should-Start: avahi
|
||||
@ -422,8 +421,8 @@ The LSB header below sums it up:
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: DAAP/DACP (iTunes) server, support for AirPlay and Spotify
|
||||
# Description: forked-daapd is an iTunes-compatible media server for
|
||||
# sharing your media library over the local network with DAAP
|
||||
# Description: OwnTone is an iTunes-compatible media server for sharing
|
||||
# your media library over the local network with DAAP/DACP
|
||||
# clients like iTunes. Like iTunes, it can be controlled by
|
||||
# Apple Remote (and compatibles) and stream music directly to
|
||||
# AirPlay devices. It also supports streaming to RSP clients
|
||||
|
10
Makefile.am
10
Makefile.am
@ -1,8 +1,8 @@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
RPM_SPEC_FILE = forked-daapd.spec
|
||||
CONF_FILE = forked-daapd.conf
|
||||
SYSTEMD_SERVICE_FILE = forked-daapd.service
|
||||
RPM_SPEC_FILE = owntone.spec
|
||||
CONF_FILE = owntone.conf
|
||||
SYSTEMD_SERVICE_FILE = owntone.service
|
||||
|
||||
sysconf_DATA = $(CONF_FILE)
|
||||
|
||||
@ -10,7 +10,7 @@ BUILT_SOURCES = $(CONF_FILE) $(SYSTEMD_SERVICE_FILE)
|
||||
|
||||
SUBDIRS = sqlext src htdocs
|
||||
|
||||
dist_man_MANS = forked-daapd.8
|
||||
dist_man_MANS = owntone.8
|
||||
|
||||
nobase_dist_doc_DATA = \
|
||||
UPGRADING \
|
||||
@ -38,7 +38,7 @@ CLEANFILES = $(BUILT_SOURCES)
|
||||
do_subst = $(SED) -e 's|@sbindir[@]|$(sbindir)|g' \
|
||||
-e 's|@localstatedir[@]|$(localstatedir)|g' \
|
||||
-e 's|@PACKAGE[@]|$(PACKAGE)|g' \
|
||||
-e 's|@DAAPD_USER[@]|$(DAAPD_USER)|g'
|
||||
-e 's|@OWNTONE_USER[@]|$(OWNTONE_USER)|g'
|
||||
|
||||
# these files use $prefix, which is determined at build (not configure) time
|
||||
$(CONF_FILE) $(SYSTEMD_SERVICE_FILE): Makefile
|
||||
|
33
README.md
33
README.md
@ -1,6 +1,6 @@
|
||||
# OwnTone Server (previously forked-daapd)
|
||||
# OwnTone (previously forked-daapd)
|
||||
|
||||
OwnTone Server is a Linux/FreeBSD DAAP (iTunes), MPD (Music Player Daemon) and
|
||||
OwnTone is a Linux/FreeBSD DAAP (iTunes), MPD (Music Player Daemon) and
|
||||
RSP (Roku) media server.
|
||||
|
||||
It supports AirPlay devices/speakers, Apple Remote (and compatibles),
|
||||
@ -11,7 +11,7 @@ It does not support streaming video by AirPlay nor Chromecast.
|
||||
DAAP stands for Digital Audio Access Protocol which is the protocol used
|
||||
by iTunes and friends to share/stream media libraries over the network.
|
||||
|
||||
OwnTone Server was previously called forked-daapd, which again was a rewrite of
|
||||
OwnTone was previously called forked-daapd, which again was a rewrite of
|
||||
mt-daapd (Firefly Media Server).
|
||||
|
||||
|
||||
@ -20,9 +20,9 @@ mt-daapd (Firefly Media Server).
|
||||
Before you continue, make sure you know what version of OwnTone you have,
|
||||
and what features it was built with (e.g. Spotify support).
|
||||
|
||||
How to find out? Go to the [web interface](http://forked-daapd.local:3689) and
|
||||
How to find out? Go to the [web interface](http://owntone.local:3689) and
|
||||
check. No web interface? Then check the top of the log file (usually
|
||||
/var/log/forked-daapd.log).
|
||||
/var/log/owntone.log).
|
||||
|
||||
Note that you are viewing a snapshot of the instructions that may or may not
|
||||
match the version that you are using. Go to [references](#references) to find
|
||||
@ -59,10 +59,10 @@ please see the [INSTALL.md](INSTALL.md) file.
|
||||
|
||||
After installation (see [INSTALL.md](INSTALL.md)) do the following:
|
||||
|
||||
1. Edit the configuration file (usually `/etc/forked-daapd.conf`) to suit your
|
||||
1. Edit the configuration file (usually `/etc/owntone.conf`) to suit your
|
||||
needs
|
||||
2. Start or restart the server (usually `/etc/init.d/forked-daapd restart`)
|
||||
3. Go to the web interface [http://forked-daapd.local:3689](http://forked-daapd.local:3689),
|
||||
2. Start or restart the server (usually `/etc/init.d/owntone restart`)
|
||||
3. Go to the web interface [http://owntone.local:3689](http://owntone.local:3689),
|
||||
or, if that won't work, to [http://[your_server_address_here]:3689](http://[your_server_address_here]:3689)
|
||||
4. Wait for the library scan to complete
|
||||
5. If you will be using a remote, e.g. Apple Remote: Start the remote, go to
|
||||
@ -117,15 +117,12 @@ probably obsolete when you read it :-)
|
||||
|
||||
## Web interface
|
||||
|
||||
You can find the web interface at [http://forked-daapd.local:3689](http://forked-daapd.local:3689)
|
||||
You can find the web interface at [http://owntone.local:3689](http://owntone.local:3689)
|
||||
or alternatively at [http://[your_server_address_here]:3689](http://[your_server_address_here]:3689).
|
||||
|
||||
Use the web interface to control playback, trigger manual library rescans, pair
|
||||
with remotes, select speakers, authenticate with Spotify, etc.
|
||||
|
||||
The Debian forked-daapd package does not include the web interface due to Debian
|
||||
packaging rules.
|
||||
|
||||
You can find some screenshots and build instructions in [README_PLAYER_WEBINTERFACE.md](https://github.com/owntone/owntone-server/blob/master/README_PLAYER_WEBINTERFACE.md).
|
||||
|
||||
## Using Remote
|
||||
@ -144,7 +141,7 @@ they return online during playback.
|
||||
|
||||
### Pairing
|
||||
|
||||
1. Open the [web interface](http://forked-daapd.local:3689)
|
||||
1. Open the [web interface](http://owntone.local:3689)
|
||||
2. Start Remote, go to Settings, Add Library
|
||||
3. Enter the pair code in the web interface (update the page with F5 if it does
|
||||
not automatically pick up the pairing request)
|
||||
@ -359,7 +356,7 @@ the list, OwnTone will look for /foo/bar.{jpg,png}.
|
||||
You can use symlinks for the artwork files.
|
||||
|
||||
OwnTone caches artwork in a separate cache file. The default path is
|
||||
`/var/cache/forked-daapd/cache.db` and can be configured in the configuration
|
||||
`/var/cache/owntone/cache.db` and can be configured in the configuration
|
||||
file. The cache.db file can be deleted without losing the library and pairing
|
||||
informations.
|
||||
|
||||
@ -419,7 +416,7 @@ is changed. So that means OwnTone cannot update its database in real time.
|
||||
Instead you can schedule a cron job to update the database.
|
||||
|
||||
The first step in doing this is to add two entries to the 'directories'
|
||||
configuration item in forked-daapd.conf:
|
||||
configuration item in owntone.conf:
|
||||
|
||||
```
|
||||
directories = { "/some/local/dir", "/your/network/mount/library" }
|
||||
@ -480,7 +477,7 @@ curl "http://localhost:3689/logout?session-id=50"
|
||||
|
||||
OwnTone has support for playback of the tracks in your Spotify library.
|
||||
|
||||
1. Go to the [web interface](http://forked-daapd.local:3689) and check that your
|
||||
1. Go to the [web interface](http://owntone.local:3689) and check that your
|
||||
version of OwnTone was built with Spotify support.
|
||||
2. You must have a Spotify premium account. If you normally log into Spotify
|
||||
with your Facebook account you must first go to Spotify's web site where you
|
||||
@ -496,7 +493,7 @@ Once the above is in order you can login to Spotify via the web interface. The
|
||||
procedure for logging in to Spotify is a two-step procedure due to the current
|
||||
state of libspotify, but the web interface makes both steps available to you.
|
||||
|
||||
Note that the address [http://forked-daapd.local:3689](http://forked-daapd.local:3689)
|
||||
Note that the address [http://owntone.local:3689](http://owntone.local:3689)
|
||||
must be working on your local network to complete the Spotify OAuth web login.
|
||||
The address is announced automatically via mDNS, but if that for some reason
|
||||
doesn't work then configure it via router or .hosts file. You can remove it
|
||||
@ -513,7 +510,7 @@ configure the location of your Spotify user data in the configuration file.
|
||||
|
||||
To permanently logout and remove Spotify tracks + credentials make a request to
|
||||
[http://[your_server_address_here]:3689/api/spotify-logout](http://[your_server_address_here]:3689/api/spotify-logout)
|
||||
and also delete the contents of `/var/cache/forked-daapd/libspotify`.
|
||||
and also delete the contents of `/var/cache/owntone/libspotify`.
|
||||
|
||||
Limitations:
|
||||
You will not be able to do any playlist management through OwnTone - use
|
||||
|
@ -1,6 +1,6 @@
|
||||
# forked-daapd and ALSA
|
||||
# OwnTone and ALSA
|
||||
|
||||
ALSA is one of the main output configuration options for local audio; when using ALSA you will typically let the system select the soundcard on your machine as the `default` device/sound card - a mixer associated with the ALSA device is used for volume control. However if your machine has multiple sound cards and your system chooses the wrong playback device, you will need to manually select the card and mixer to complete the `forked daapd` configuration.
|
||||
ALSA is one of the main output configuration options for local audio; when using ALSA you will typically let the system select the soundcard on your machine as the `default` device/sound card - a mixer associated with the ALSA device is used for volume control. However if your machine has multiple sound cards and your system chooses the wrong playback device, you will need to manually select the card and mixer to complete the OwnTone configuration.
|
||||
|
||||
## Quick introduction to ALSA devices
|
||||
ALSA devices can be addressed in a number ways but traditionally we have referred to them using the hardware prefix, card number and optionally device number with something like `hw:0` or `hw:0,1`. In ALSA configuration terms `card X, device Y` is known as `hw:X,Y`.
|
||||
@ -11,7 +11,7 @@ Alternative ALSA names can be used to refer to physical ALSA devices and can be
|
||||
* more descriptive rather than being a card number
|
||||
* consistent for USB numeration - USB ALSA devices may not have the same card number across reboots/reconnects
|
||||
|
||||
The ALSA device information required for configuration the server can be deterined using `aplay`, as described in the rest of this document, but `forked-daapd` can also assist; when configured to log at `INFO` level the following information is provided during startup:
|
||||
The ALSA device information required for configuration the server can be deterined using `aplay`, as described in the rest of this document, but OwnTone can also assist; when configured to log at `INFO` level the following information is provided during startup:
|
||||
```
|
||||
laudio: Available ALSA playback mixer(s) on hw:0 CARD=Intel (HDA Intel): 'Master' 'Headphone' 'Speaker' 'PCM' 'Mic' 'Beep'
|
||||
laudio: Available ALSA playback mixer(s) on hw:1 CARD=E30 (E30): 'E30 '
|
||||
@ -22,7 +22,7 @@ The `CARD=` string is the alternate ALSA name for the device and can be used in
|
||||
On this machine the server reports that it can see the onboard HDA Intel sound card and two additional sound cards: a Topping E30 DAC and a Plantronics Headset which are both USB devices. We can address the first ALSA device as `hw:0` or `hw:CARD=Intel` or `hw:Intel` or `plughw:Intel`, the second ALSA device as `hw:1` or `hw:E30` and so forth. The latter 2 devices being on USB will mean that `hw:1` may not always refer to `hw:E30` and thus in such a case using the alternate name is useful.
|
||||
|
||||
## Configuring the server
|
||||
`forked-daapd` can support a single ALSA device or multiple ALSA devices.
|
||||
OwnTone can support a single ALSA device or multiple ALSA devices.
|
||||
```
|
||||
# example audio section for server for a single soundcard
|
||||
audio {
|
||||
@ -34,7 +34,7 @@ audio {
|
||||
mixer_device = "hw:1" # defaults to same as 'card' value
|
||||
}
|
||||
```
|
||||
Multiple devices can be made available to `forked-daapd` using seperate `alsa { .. }` sections.
|
||||
Multiple devices can be made available to OwnTone using seperate `alsa { .. }` sections.
|
||||
```
|
||||
audio {
|
||||
type = "alsa"
|
||||
@ -63,13 +63,13 @@ $ aplay -Ddefault /tmp/sine441.wav
|
||||
If you can hear music played then you are good to use `default` for the server configuration. If you can not hear anything from the `aplay` firstly verify (using `alsamixer`) that the sound card is not muted. If the card is not muted AND there is no sound you can try the options below to determine the card and mixer for configuring the server.
|
||||
|
||||
## Automatically Determine ALL relevant the sound card information
|
||||
As shown above, `forked-daapd` can help, consider the information that logged:
|
||||
As shown above, OwnTone can help, consider the information that logged:
|
||||
```
|
||||
laudio: Available ALSA playback mixer(s) on hw:0 CARD=Intel (HDA Intel): 'Master' 'Headphone' 'Speaker' 'PCM' 'Mic' 'Beep'
|
||||
laudio: Available ALSA playback mixer(s) on hw:1 CARD=E30 (E30): 'E30 '
|
||||
laudio: Available ALSA playback mixer(s) on hw:2 CARD=Seri (Plantronics Blackwire 3210 Seri): 'Sidetone' 'Headset'
|
||||
```
|
||||
Using the information above, we can see 3 soundcards that we could use with `forked-daap` with the first soundcard having a number of seperate mixer devices (volume control) for headphone and the interal speakers - we'll configure the server to use both these and also the E30 device. The server configuration for theese multiple outputs would be:
|
||||
Using the information above, we can see 3 soundcards that we could use with OwnTone with the first soundcard having a number of seperate mixer devices (volume control) for headphone and the interal speakers - we'll configure the server to use both these and also the E30 device. The server configuration for theese multiple outputs would be:
|
||||
```
|
||||
# using ALSA device alias where possible
|
||||
|
||||
@ -92,7 +92,7 @@ alsa "plughw:E30" {
|
||||
mixer_device = "hw:E30"
|
||||
}
|
||||
```
|
||||
NB: it is troublesome to use `hw` or `plughw` ALSA addressing when running `forked-daapd` on a machine with `pulseaudio` and if you wish to use refer to ALSA devices directly that you stop `pulseaudio`.
|
||||
NB: it is troublesome to use `hw` or `plughw` ALSA addressing when running OwnTone on a machine with `pulseaudio` and if you wish to use refer to ALSA devices directly that you stop `pulseaudio`.
|
||||
|
||||
## Manually Determining the sound cards you have / ALSA can see
|
||||
The example below is how I determined the correct sound card and mixer values for a Raspberry Pi that has an additional DAC card (hat) mounted. Of course using the log output from the server would have given the same results.
|
||||
@ -271,13 +271,13 @@ $ aplay -v -Dhw:1 /tmp/sine441.wav
|
||||
aplay: main:788: audio open error: Device or resource busy
|
||||
```
|
||||
|
||||
In this instance this device cannot open multiple streams - `forked-daapd` can handle this situation transparently with some audio being truncated from the end of the current file as the server prepares to play the following track. If this handling is causing you problems you may wish to use [ALSA's `dmix` functionally](https://www.alsa-project.org/main/index.php/Asoundrc#Software_mixing) which provides a software mixing module. We will need to define a `dmix` component and configure the server to use that as it's sound card.
|
||||
In this instance this device cannot open multiple streams - OwnTone can handle this situation transparently with some audio being truncated from the end of the current file as the server prepares to play the following track. If this handling is causing you problems you may wish to use [ALSA's `dmix` functionally](https://www.alsa-project.org/main/index.php/Asoundrc#Software_mixing) which provides a software mixing module. We will need to define a `dmix` component and configure the server to use that as it's sound card.
|
||||
|
||||
The downside to the `dmix` approach will be the need to fix a samplerate (48000 being the default) for this software mixing module meaning any files that have a mismatched samplerate will be resampled.
|
||||
|
||||
## ALSA dmix configuration/setup
|
||||
|
||||
A `dmix` device can be defined in `/etc/asound.conf` or `~/.asoundrc` for the same user running `forked-daapd`. We will need to know the underlying physical soundcard to be used: in our examples above, `hw:1,0` / `card 1, device 0` representing our IQaudIODAC as per output of `aplay -l`. We also take the `buffer_size` and `period_size` from the output of playing a sound file via `aplay -v`.
|
||||
A `dmix` device can be defined in `/etc/asound.conf` or `~/.asoundrc` for the same user running OwnTone. We will need to know the underlying physical soundcard to be used: in our examples above, `hw:1,0` / `card 1, device 0` representing our IQaudIODAC as per output of `aplay -l`. We also take the `buffer_size` and `period_size` from the output of playing a sound file via `aplay -v`.
|
||||
|
||||
```
|
||||
# use 'dac' as the name of the device: "aplay -Ddac ...."
|
||||
@ -328,7 +328,7 @@ At this point we are able to rerun the concurrent `aplay` commands (adding `-Dda
|
||||
|
||||
If there is only one card on the machine you may use `pcm.!default` instead of `pcm.!dac` - there is less configuration to be done later since many ALSA applications will use the device called `default` by default. Furthermore on RPI you can explicitly disable the onboard sound card to leave us with only the IQaudIODAC board enabled (won't affect HDMI sound output) by commenting out `#dtparam=audio=on` in `/boot/config.txt` and rebooting.
|
||||
|
||||
### forked-daapd config with dmix
|
||||
### Config with dmix
|
||||
|
||||
We will use the newly defined card named `dac` which uses the underlying `hw:1` device as per `/etc/asound.conf` or `~/.asoundrc` configuration. Note that the `mixer_device` is now required and must refer to the real device (see the `slave.pcm` value) and not the named device (ie `dac`) that we created and are using for the `card` configuration value.
|
||||
|
||||
@ -370,7 +370,7 @@ pcm.equal {
|
||||
hint.description "equalised device"
|
||||
}
|
||||
```
|
||||
and in `forked-daapd.conf`
|
||||
and in `owntone.conf`
|
||||
```
|
||||
alsa "equal" {
|
||||
nickname = "Equalised Output"
|
||||
|
@ -1,4 +1,4 @@
|
||||
# forked-daapd API Endpoint Reference
|
||||
# OwnTone API Endpoint Reference
|
||||
|
||||
Available API endpoints:
|
||||
|
||||
@ -395,7 +395,7 @@ curl -X GET "http://localhost:3689/api/outputs"
|
||||
|
||||
### Set enabled outputs
|
||||
|
||||
Set the enabled outputs by passing an array of output ids. forked-daapd enables all outputs
|
||||
Set the enabled outputs by passing an array of output ids. The server enables all outputs
|
||||
with the given ids and disables the remaining outputs.
|
||||
|
||||
**Endpoint**
|
||||
@ -2192,9 +2192,9 @@ GET /api/config
|
||||
|
||||
| Key | Type | Value |
|
||||
| --------------- | -------- | ----------------------------------------- |
|
||||
| version | string | forked-daapd server version |
|
||||
| version | string | Server version |
|
||||
| websocket_port | integer | Port number for the [websocket](#push-notifications) (or `0` if websocket is disabled) |
|
||||
| buildoptions | array | Array of strings indicating which features are supported by the forked-daapd server |
|
||||
| buildoptions | array | Array of strings indicating which features are supported by the server |
|
||||
|
||||
|
||||
**Example**
|
||||
@ -2402,10 +2402,10 @@ curl -X DELETE "http://localhost:3689/api/settings/webinterface/show_composer_no
|
||||
|
||||
## Push notifications
|
||||
|
||||
If forked-daapd was built with websocket support, forked-daapd exposes a websocket at `localhost:3688` to inform clients of changes (e. g. player state or library updates).
|
||||
The port depends on the forked-daapd configuration and can be read using the [`/api/config`](#config) endpoint.
|
||||
If the server was built with websocket support it exposes a websocket at `localhost:3688` to inform clients of changes (e. g. player state or library updates).
|
||||
The port depends on the server configuration and can be read using the [`/api/config`](#config) endpoint.
|
||||
|
||||
After connecting to the websocket, the client should send a message containing the event types it is interested in. After that forked-daapd
|
||||
After connecting to the websocket, the client should send a message containing the event types it is interested in. After that the server
|
||||
will send a message each time one of the events occurred.
|
||||
|
||||
**Message**
|
||||
@ -2610,8 +2610,8 @@ curl --include \
|
||||
### Artwork urls
|
||||
|
||||
Artwork urls in `queue item`, `artist`, `album` and `track` objects can be either relative urls or absolute urls to the artwork image.
|
||||
Absolute artwork urls are pointing to external artwork images (e. g. for radio streams that provide artwork metadata), while relative artwork urls are served from forked-daapd.
|
||||
Absolute artwork urls are pointing to external artwork images (e. g. for radio streams that provide artwork metadata), while relative artwork urls are served from the server.
|
||||
|
||||
It is possible to add the query parameters `maxwidth` and/or `maxheight` to relative artwork urls, in order to get a smaller image (forked-daapd only scales down never up).
|
||||
It is possible to add the query parameters `maxwidth` and/or `maxheight` to relative artwork urls, in order to get a smaller image (the server only scales down never up).
|
||||
|
||||
Note that even if a relative artwork url attribute is present, it is not guaranteed to exist.
|
||||
|
@ -1,6 +1,6 @@
|
||||
# forked-daapd player web interface
|
||||
# OwnTone player web interface
|
||||
|
||||
Mobile friendly player web interface for [forked-daapd](http://owntone.github.io/forked-daapd/) build with [Vue.js](https://vuejs.org), [Bulma](http://bulma.io).
|
||||
Mobile friendly player web interface for [OwnTone](http://owntone.github.io/owntone-server/) build with [Vue.js](https://vuejs.org), [Bulma](http://bulma.io).
|
||||
|
||||
## Screenshots
|
||||
|
||||
@ -9,7 +9,7 @@ Mobile friendly player web interface for [forked-daapd](http://owntone.github.io
|
||||
|
||||
## Usage
|
||||
|
||||
You can find forked-daapd's web interface at [http://forked-daapd.local:3689](http://forked-daapd.local:3689)
|
||||
You can find OwnTone's web interface at [http://owntone.local:3689](http://owntone.local:3689)
|
||||
or alternatively at [http://[your_server_address_here]:3689](http://[your_server_address_here]:3689).
|
||||
|
||||
|
||||
@ -37,4 +37,4 @@ npm run build
|
||||
npm run build --report
|
||||
```
|
||||
|
||||
After running `npm run dev` the web interface is reachable at [localhost:8080](http://localhost:8080). By default it expects **forked-daapd** to be running at [localhost:3689](http://localhost:3689) and proxies all JSON API calls to this location. If **forked-daapd** is running at a different location you need to modify the `proxyTable` configuration in `config/index.js`
|
||||
After running `npm run dev` the web interface is reachable at [localhost:8080](http://localhost:8080). By default it expects **owntone** to be running at [localhost:3689](http://localhost:3689) and proxies all JSON API calls to this location. If the server is running at a different location you need to modify the `proxyTable` configuration in `config/index.js`
|
||||
|
@ -1,4 +1,4 @@
|
||||
# forked-daapd and Pulseaudio
|
||||
# OwnTone and Pulseaudio
|
||||
|
||||
You have the choice of runnning Pulseaudio either in system mode or user mode.
|
||||
For headless servers, i.e. systems without desktop users, system mode is
|
||||
@ -24,7 +24,7 @@ instructions will require that you are root.
|
||||
|
||||
### Step 1: Setting up Pulseaudio
|
||||
|
||||
If you see a "Connection refused" error when starting forked-daapd, then you
|
||||
If you see a "Connection refused" error when starting the server, then you
|
||||
will probably need to setup Pulseaudio to run in system mode [1]. This means
|
||||
that the Pulseaudio daemon will be started during boot and be available to all
|
||||
users.
|
||||
@ -72,16 +72,16 @@ Phew, almost done with Pulseaudio! Now you should:
|
||||
3. check that the Bluetooth module is loaded with `pactl list modules short`
|
||||
|
||||
|
||||
### Step 2: Setting up forked-daapd
|
||||
### Step 2: Setting up the server
|
||||
|
||||
Add the user forked-daapd is running as (typically "daapd") to the
|
||||
Add the user the server is running as (typically "owntone") to the
|
||||
"pulse-access" group:
|
||||
|
||||
```
|
||||
adduser daapd pulse-access
|
||||
```
|
||||
|
||||
Now (re)start forked-daapd.
|
||||
Now (re)start the server.
|
||||
|
||||
|
||||
### Step 3: Adding a Bluetooth device
|
||||
@ -99,8 +99,8 @@ trust [MAC address]
|
||||
connect [MAC address]
|
||||
```
|
||||
|
||||
Now the speaker should appear in forked-daapd. You can also verify that
|
||||
Pulseaudio has detected the speaker with `pactl list sinks short`.
|
||||
Now the speaker should appear. You can also verify that Pulseaudio has detected
|
||||
the speaker with `pactl list sinks short`.
|
||||
|
||||
|
||||
|
||||
@ -137,7 +137,7 @@ pulseaudio -D
|
||||
|
||||
### Step 4: Adjust configuration file
|
||||
|
||||
In the `audio` section of `/etc/forked-daapd.conf`, set `server` to `localhost`:
|
||||
In the `audio` section of `/etc/owntone.conf`, set `server` to `localhost`:
|
||||
|
||||
```
|
||||
server = "localhost"
|
||||
|
@ -1,9 +1,9 @@
|
||||
# forked-daapd and Radio Stream tweaking
|
||||
# OwnTone and Radio Stream tweaking
|
||||
|
||||
Radio streams have many different ways in how metadata is sent. Many should
|
||||
just work as expected, but a few may require some tweaking. If you are not
|
||||
seeing expected title, track, artist, artwork in forked-daapd clients or web UI,
|
||||
the following may help.
|
||||
seeing expected title, track, artist, artwork in clients or web UI, the
|
||||
following may help.
|
||||
|
||||
First, understand what and how the particular stream is sending information.
|
||||
ffprobe is a command that can be used to interegrate most of the stream
|
||||
@ -23,11 +23,11 @@ look at the Metadata section, below is an example.
|
||||
```
|
||||
|
||||
In the example above, all tags are populated with correct information, no
|
||||
modifications to forked-daapd configuration should be needed. Note that
|
||||
modifications to the server configuration should be needed. Note that
|
||||
StreamUrl points to the artwork image file.
|
||||
|
||||
|
||||
Below is another example that will require some tweaks to forked-daapd, Notice
|
||||
Below is another example that will require some tweaks to the server, Notice
|
||||
`icy-name` is blank and `StreamUrl` doesn't point to an image.
|
||||
|
||||
```
|
||||
@ -60,7 +60,7 @@ Length is -1 since it's a stream, `<Artist Name>` was left blank since
|
||||
|
||||
### 2) StreamUrl is a JSON file with metadata
|
||||
If `StreamUrl` does not point directly to an artwork file then the link may be
|
||||
to a json file that contains an artwork link. If so, you can make forked-daapd
|
||||
to a json file that contains an artwork link. If so, you can make the server
|
||||
download the file automatically and search for an artwork link, and also track
|
||||
duration.
|
||||
|
||||
@ -82,7 +82,7 @@ Let's assume you get something like this:
|
||||
}
|
||||
```
|
||||
|
||||
In this case, you would need to tell forked-daapd to look for "eventDuration"
|
||||
In this case, you would need to tell the server to look for "eventDuration"
|
||||
and "eventImageUrl" (or just "duration" and "url"). You can do that like this:
|
||||
|
||||
```
|
||||
@ -95,7 +95,7 @@ If you want multiple search phrases then comma separate, e.g. "duration,length".
|
||||
### 3) Set metadata with a custom script
|
||||
If your radio station publishes metadata via another method than the above, e.g.
|
||||
just on their web site, then you will have to write a script that pulls the
|
||||
metadata and then pushes it to forked-daapd. To update metadata for the
|
||||
metadata and then pushes it to the server. To update metadata for the
|
||||
currently playing radio station use something like this JSON API request:
|
||||
|
||||
```shell
|
||||
|
@ -1,7 +1,7 @@
|
||||
# forked-daapd smart playlists
|
||||
# OwnTone smart playlists
|
||||
|
||||
|
||||
To add a smart playlist to forked-daapd, create a new text file with a filename ending with .smartpl;
|
||||
To add a smart playlist to the server, create a new text file with a filename ending with .smartpl;
|
||||
the filename doesn't matter, only the .smartpl ending does. The file must be placed somewhere in your
|
||||
library folder.
|
||||
|
||||
@ -128,7 +128,7 @@ This would match all songs added as files to the library that are not placed und
|
||||
}
|
||||
```
|
||||
|
||||
This would match any podcast and audiobook file that was never played with forked-daapd.
|
||||
This would match any podcast and audiobook file that was never played.
|
||||
|
||||
```
|
||||
"Recently added music" {
|
||||
@ -190,7 +190,7 @@ This matches all songs added in the last 2 weeks.
|
||||
|
||||
This matches all audiobooks played since the start of the last Monday 00:00AM.
|
||||
|
||||
All dates, except for `YYYY-DD-HH`, are relative to the day of when `forked-daapd` evaluates the smartpl query; `time_added after today` run on a Monday would match against items added since Monday 00:00hrs and evaluating the same smartpl on Friday would only match against added on Friday 00:00hrs.
|
||||
All dates, except for `YYYY-DD-HH`, are relative to the day of when the server evaluates the smartpl query; `time_added after today` run on a Monday would match against items added since Monday 00:00hrs and evaluating the same smartpl on Friday would only match against added on Friday 00:00hrs.
|
||||
|
||||
Note that `time_added after 4 weeks ago` and `time_added after last month` are subtly different; the former is exactly 4 weeks ago (from today) whereas the latter is the first day of the previous month.
|
||||
|
||||
|
27
UPGRADING
27
UPGRADING
@ -1,21 +1,20 @@
|
||||
Upgrading forked-daapd
|
||||
----------------------
|
||||
Upgrading
|
||||
---------
|
||||
|
||||
From time to time, newer versions of forked-daapd may need to perform a
|
||||
database upgrade. This upgrade is handled by forked-daapd upon startup if
|
||||
required.
|
||||
From time to time, newer versions of OwnTone may need to perform a database
|
||||
upgrade. This upgrade is handled by the server upon startup if required.
|
||||
|
||||
Before upgrading forked-daapd, it is always a good idea to backup your
|
||||
database, just in case.
|
||||
Before upgrading the server, it is always a good idea to backup your database,
|
||||
just in case.
|
||||
|
||||
The database upgrade procedure is built into forked-daapd; there is no
|
||||
external upgrade script to run. Depending on the changes done to the database
|
||||
structure, the upgrade process will take more or less time and may need some
|
||||
space in /tmp for temporary data. The upgrade can also require some more space
|
||||
in the directory containing the database file.
|
||||
The database upgrade procedure is built into the server; there is no external
|
||||
upgrade script to run. Depending on the changes done to the database structure,
|
||||
the upgrade process will take more or less time and may need some space in /tmp
|
||||
for temporary data. The upgrade can also require some more space in the
|
||||
directory containing the database file.
|
||||
|
||||
Before running the new forked-daapd version, make sure you have done your
|
||||
backups and checked your disk space.
|
||||
Before running the new server version, make sure you have done your backups and
|
||||
checked your disk space.
|
||||
|
||||
Some upgrades can also trigger a full rescan to rebuild parts of the database,
|
||||
so startup will be a bit slower and more resource-intensive than usual.
|
||||
|
118
configure.ac
118
configure.ac
@ -1,7 +1,7 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.60])
|
||||
AC_INIT([forked-daapd], [27.4])
|
||||
AC_INIT([owntone], [27.4])
|
||||
|
||||
AC_CONFIG_SRCDIR([config.h.in])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
@ -50,12 +50,12 @@ AC_SUBST([AM_CPPFLAGS])
|
||||
dnl Checks for header files.
|
||||
AC_CHECK_HEADERS_ONCE([regex.h pthread_np.h])
|
||||
AC_CHECK_HEADERS([sys/wait.h sys/param.h dirent.h getopt.h stdint.h], [],
|
||||
[AC_MSG_ERROR([[Missing header required to build forked-daapd]])])
|
||||
[AC_MSG_ERROR([[Missing header required to build OwnTone]])])
|
||||
AC_CHECK_HEADERS([time.h], [],
|
||||
[AC_MSG_ERROR([[Missing header required to build forked-daapd]])])
|
||||
[AC_MSG_ERROR([[Missing header required to build OwnTone]])])
|
||||
AC_CHECK_FUNCS_ONCE([posix_fadvise pipe2])
|
||||
AC_CHECK_FUNCS([strptime strtok_r], [],
|
||||
[AC_MSG_ERROR([[Missing function required to build forked-daapd]])])
|
||||
[AC_MSG_ERROR([[Missing function required to build OwnTone]])])
|
||||
|
||||
dnl check for clock_gettime or replace it
|
||||
AC_SEARCH_LIBS([clock_gettime], [rt],
|
||||
@ -105,33 +105,33 @@ dnl Checks for libraries.
|
||||
|
||||
AC_SUBST([COMMON_LIBS])
|
||||
AC_SUBST([COMMON_CPPFLAGS])
|
||||
AC_SUBST([FORKED_LIBS])
|
||||
AC_SUBST([FORKED_CPPFLAGS])
|
||||
AC_SUBST([FORKED_OPTS_LIBS])
|
||||
AC_SUBST([FORKED_OPTS_CPPFLAGS])
|
||||
AC_SUBST([OWNTONE_LIBS])
|
||||
AC_SUBST([OWNTONE_CPPFLAGS])
|
||||
AC_SUBST([OWNTONE_OPTS_LIBS])
|
||||
AC_SUBST([OWNTONE_OPTS_CPPFLAGS])
|
||||
|
||||
AM_ICONV
|
||||
dnl All FORK_ macros defined in m4/fork_checks.m4
|
||||
FORK_FUNC_REQUIRE([COMMON], [GNU libunistring], [LIBUNISTRING], [unistring],
|
||||
dnl All OWNTONE_ macros defined in m4/owntone_checks.m4
|
||||
OWNTONE_FUNC_REQUIRE([COMMON], [GNU libunistring], [LIBUNISTRING], [unistring],
|
||||
[u8_strconv_from_locale], [uniconv.h], [],
|
||||
[dnl Retry test with iconv library
|
||||
FORK_VARS_PREPEND([COMMON], [LIBICONV], [INCICONV])
|
||||
FORK_FUNC_REQUIRE([COMMON], [GNU libunistring], [LIBUNISTRING],
|
||||
OWNTONE_VARS_PREPEND([COMMON], [LIBICONV], [INCICONV])
|
||||
OWNTONE_FUNC_REQUIRE([COMMON], [GNU libunistring], [LIBUNISTRING],
|
||||
[unistring], [u8_strconv_from_locale], [uniconv.h])])
|
||||
|
||||
FORK_MODULES_CHECK([FORKED], [ZLIB], [zlib], [deflate], [zlib.h])
|
||||
FORK_MODULES_CHECK([FORKED], [CONFUSE], [libconfuse >= 3.0], [cfg_init], [confuse.h])
|
||||
FORK_MODULES_CHECK([FORKED], [LIBCURL], [libcurl], [curl_global_init], [curl/curl.h])
|
||||
FORK_MODULES_CHECK([FORKED], [LIBSODIUM], [libsodium], [sodium_init], [sodium.h])
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [ZLIB], [zlib], [deflate], [zlib.h])
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [CONFUSE], [libconfuse >= 3.0], [cfg_init], [confuse.h])
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [LIBCURL], [libcurl], [curl_global_init], [curl/curl.h])
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [LIBSODIUM], [libsodium], [sodium_init], [sodium.h])
|
||||
|
||||
FORK_MODULES_CHECK([FORKED], [MINIXML], [mxml],
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [MINIXML], [mxml],
|
||||
[mxmlNewElement], [mxml.h],
|
||||
[
|
||||
dnl See mxml-compat.h
|
||||
AC_CHECK_FUNCS([mxmlGetOpaque] [mxmlGetText] [mxmlGetType] [mxmlGetFirstChild])
|
||||
])
|
||||
|
||||
FORK_MODULES_CHECK([COMMON], [SQLITE3], [sqlite3 >= 3.5.0],
|
||||
OWNTONE_MODULES_CHECK([COMMON], [SQLITE3], [sqlite3 >= 3.5.0],
|
||||
[sqlite3_initialize], [sqlite3.h],
|
||||
[dnl Check that SQLite3 has the unlock notify API built-in
|
||||
AC_CHECK_FUNC([[sqlite3_unlock_notify]], [],
|
||||
@ -151,7 +151,7 @@ FORK_MODULES_CHECK([COMMON], [SQLITE3], [sqlite3 >= 3.5.0],
|
||||
[AC_MSG_RESULT([[runtime will tell]])])
|
||||
])
|
||||
|
||||
FORK_MODULES_CHECK([FORKED], [LIBEVENT], [libevent >= 2],
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [LIBEVENT], [libevent >= 2],
|
||||
[event_base_new], [event2/event.h],
|
||||
[dnl check for old version
|
||||
PKG_CHECK_EXISTS([libevent >= 2.1.4], [],
|
||||
@ -159,7 +159,7 @@ FORK_MODULES_CHECK([FORKED], [LIBEVENT], [libevent >= 2],
|
||||
[Define to 1 if you have libevent 2 (<2.1.4)])])
|
||||
])
|
||||
|
||||
FORK_MODULES_CHECK([FORKED], [JSON_C], [json-c],
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [JSON_C], [json-c],
|
||||
[json_tokener_parse], [json.h],
|
||||
[dnl check for old version
|
||||
PKG_CHECK_EXISTS([json-c >= 0.11], [],
|
||||
@ -169,13 +169,13 @@ FORK_MODULES_CHECK([FORKED], [JSON_C], [json-c],
|
||||
|
||||
dnl Build with libplist (2.2.0 does not ship libplist.pc, only libplist-2.0.pc)
|
||||
PKG_CHECK_EXISTS([libplist],
|
||||
[FORK_MODULES_CHECK([FORKED], [LIBPLIST], [libplist >= 0.16],
|
||||
[OWNTONE_MODULES_CHECK([OWNTONE], [LIBPLIST], [libplist >= 0.16],
|
||||
[plist_dict_get_item], [plist/plist.h])],
|
||||
[FORK_MODULES_CHECK([FORKED], [LIBPLIST], [libplist-2.0],
|
||||
[OWNTONE_MODULES_CHECK([OWNTONE], [LIBPLIST], [libplist-2.0],
|
||||
[plist_dict_get_item], [plist/plist.h])])
|
||||
|
||||
|
||||
FORK_FUNC_REQUIRE([FORKED], [ANTLR3 C runtime], [ANTLR3C], [antlr3c],
|
||||
OWNTONE_FUNC_REQUIRE([OWNTONE], [ANTLR3 C runtime], [ANTLR3C], [antlr3c],
|
||||
[antlr3BaseRecognizerNew], [antlr3.h],
|
||||
[AC_CHECK_FUNC([[antlr3NewAsciiStringInPlaceStream]],
|
||||
[AC_DEFINE([ANTLR3C_NEW_INPUT], 0,
|
||||
@ -185,10 +185,10 @@ FORK_FUNC_REQUIRE([FORKED], [ANTLR3 C runtime], [ANTLR3C], [antlr3c],
|
||||
])
|
||||
|
||||
AM_PATH_LIBGCRYPT([1:1.2.0])
|
||||
FORK_FUNC_REQUIRE([FORKED], [GNU Crypt Library], [LIBGCRYPT], [gcrypt],
|
||||
OWNTONE_FUNC_REQUIRE([OWNTONE], [GNU Crypt Library], [LIBGCRYPT], [gcrypt],
|
||||
[gcry_control], [gcrypt.h])
|
||||
AM_PATH_GPG_ERROR([1.6])
|
||||
FORK_FUNC_REQUIRE([FORKED], [GNUPG Error Values], [GPG_ERROR_MT], [gpg-error],
|
||||
OWNTONE_FUNC_REQUIRE([OWNTONE], [GNUPG Error Values], [GPG_ERROR_MT], [gpg-error],
|
||||
[gpg_err_init], [gpg-error.h])
|
||||
|
||||
|
||||
@ -197,7 +197,7 @@ AC_CHECK_HEADER([sys/eventfd.h], [AC_CHECK_FUNCS([eventfd])])
|
||||
AC_CHECK_HEADER([sys/timerfd.h], [AC_CHECK_FUNC([timerfd_create],
|
||||
[AC_DEFINE([HAVE_TIMERFD], 1, [Define to 1 if you have timerfd])])])
|
||||
|
||||
FORK_FUNC_REQUIRE([FORKED], [inotify], [INOTIFY], [inotify],
|
||||
OWNTONE_FUNC_REQUIRE([OWNTONE], [inotify], [INOTIFY], [inotify],
|
||||
[inotify_add_watch], [sys/inotify.h])
|
||||
|
||||
have_signal=no
|
||||
@ -229,7 +229,7 @@ AC_ARG_WITH([libav], [AS_HELP_STRING([--with-libav],
|
||||
[choose libav even if ffmpeg present (default=no)])],
|
||||
[[LIBAV=-libav]], [[LIBAV=]])
|
||||
dnl libav/ffmpeg requires many feature checks
|
||||
FORK_MODULES_CHECK([FORKED], [LIBAV],
|
||||
OWNTONE_MODULES_CHECK([OWNTONE], [LIBAV],
|
||||
[libavformat$LIBAV libavcodec$LIBAV libavutil$LIBAV libavfilter$LIBAV],
|
||||
[av_init_packet], [libavcodec/avcodec.h],
|
||||
[dnl Checks for misc libav and ffmpeg API differences
|
||||
@ -247,9 +247,9 @@ FORK_MODULES_CHECK([FORKED], [LIBAV],
|
||||
[Define to 1 if you have ffmpeg (not libav)])],
|
||||
[[is_ffmpeg=no]])
|
||||
AC_MSG_RESULT([$is_ffmpeg])
|
||||
FORK_CHECK_DECLS([av_version_info],
|
||||
OWNTONE_CHECK_DECLS([av_version_info],
|
||||
[libavutil/avutil.h])
|
||||
FORK_CHECK_DECLS([avformat_network_init],
|
||||
OWNTONE_CHECK_DECLS([avformat_network_init],
|
||||
[libavformat/avformat.h])
|
||||
])
|
||||
|
||||
@ -257,61 +257,61 @@ AC_CHECK_SIZEOF([void *])
|
||||
|
||||
dnl --- Begin configuring the options ---
|
||||
dnl ALSA
|
||||
FORK_ARG_WITH_CHECK([FORKED_OPTS], [ALSA support], [alsa], [ALSA],
|
||||
OWNTONE_ARG_WITH_CHECK([OWNTONE_OPTS], [ALSA support], [alsa], [ALSA],
|
||||
[alsa], [snd_mixer_open], [alsa/asoundlib.h])
|
||||
AM_CONDITIONAL([COND_ALSA], [[test "x$with_alsa" = "xyes"]])
|
||||
|
||||
dnl PULSEAUDIO
|
||||
FORK_ARG_WITH_CHECK([FORKED_OPTS], [Pulseaudio support], [pulseaudio], [LIBPULSE],
|
||||
OWNTONE_ARG_WITH_CHECK([OWNTONE_OPTS], [Pulseaudio support], [pulseaudio], [LIBPULSE],
|
||||
[libpulse], [pa_stream_get_state], [pulse/pulseaudio.h],
|
||||
[AC_CHECK_FUNCS([pa_threaded_mainloop_set_name])])
|
||||
AM_CONDITIONAL([COND_PULSEAUDIO], [[test "x$with_pulseaudio" = "xyes"]])
|
||||
|
||||
dnl Build with libwebsockets
|
||||
FORK_ARG_WITH_CHECK([FORKED_OPTS], [libwebsockets support], [libwebsockets], [LIBWEBSOCKETS],
|
||||
OWNTONE_ARG_WITH_CHECK([OWNTONE_OPTS], [libwebsockets support], [libwebsockets], [LIBWEBSOCKETS],
|
||||
[libwebsockets >= 2.0.2])
|
||||
AM_CONDITIONAL([COND_LIBWEBSOCKETS], [[test "x$with_libwebsockets" = "xyes"]])
|
||||
|
||||
dnl Build with libevent_pthreads
|
||||
FORK_ARG_WITH_CHECK([FORKED_OPTS], [libevent_pthreads support],
|
||||
OWNTONE_ARG_WITH_CHECK([OWNTONE_OPTS], [libevent_pthreads support],
|
||||
[libevent_pthreads], [LIBEVENT_PTHREADS], [libevent_pthreads],
|
||||
[evthread_use_pthreads], [event2/thread.h])
|
||||
|
||||
dnl Build with Avahi (or Bonjour if not)
|
||||
FORK_ARG_WITH_CHECK([FORKED_OPTS], [Avahi mDNS], [avahi], [AVAHI],
|
||||
OWNTONE_ARG_WITH_CHECK([OWNTONE_OPTS], [Avahi mDNS], [avahi], [AVAHI],
|
||||
[avahi-client >= 0.6.24], [avahi_client_new], [avahi-client/client.h])
|
||||
AS_IF([[test "x$with_avahi" = "xno"]],
|
||||
[FORK_FUNC_REQUIRE([FORKED_OPTS], [Bonjour DNS_SD], [DNSSD], [dns_sd],
|
||||
[OWNTONE_FUNC_REQUIRE([OWNTONE_OPTS], [Bonjour DNS_SD], [DNSSD], [dns_sd],
|
||||
[DNSServiceGetAddrInfo], [dns_sd.h], [],
|
||||
[AC_MSG_ERROR([[Avahi client or Bonjour DNS_SD required, please install one.]])])])
|
||||
AM_CONDITIONAL([COND_AVAHI], [[test "x$with_avahi" = "xyes"]])
|
||||
|
||||
dnl Spotify with dynamic linking to libspotify
|
||||
FORK_ARG_ENABLE([Spotify support], [spotify], [SPOTIFY],
|
||||
OWNTONE_ARG_ENABLE([Spotify support], [spotify], [SPOTIFY],
|
||||
[AS_IF([[test "x$with_libevent_pthreads" = "xno"]],
|
||||
[AC_MSG_ERROR([[Spotify support requires libevent_pthreads]])])
|
||||
FORK_MODULES_CHECK([SPOTIFY], [LIBSPOTIFY], [libspotify],
|
||||
OWNTONE_MODULES_CHECK([SPOTIFY], [LIBSPOTIFY], [libspotify],
|
||||
[], [libspotify/api.h])
|
||||
AC_DEFINE([HAVE_SPOTIFY_H], 1,
|
||||
[Define to 1 if you have the <libspotify/api.h> header file.])
|
||||
dnl Don't link with libspotify, use dynamic linking
|
||||
AC_SEARCH_LIBS([dlopen], [dl], [],
|
||||
[AC_MSG_ERROR([[Spotify support requires dlopen]])])
|
||||
FORK_VAR_PREPEND([FORKED_OPTS_CPPFLAGS], [$SPOTIFY_CPPFLAGS])
|
||||
FORK_VAR_PREPEND([FORKED_OPTS_LIBS], [-rdynamic])
|
||||
OWNTONE_VAR_PREPEND([OWNTONE_OPTS_CPPFLAGS], [$SPOTIFY_CPPFLAGS])
|
||||
OWNTONE_VAR_PREPEND([OWNTONE_OPTS_LIBS], [-rdynamic])
|
||||
])
|
||||
AM_CONDITIONAL([COND_SPOTIFY], [[test "x$enable_spotify" = "xyes"]])
|
||||
|
||||
dnl LastFM support
|
||||
FORK_ARG_DISABLE([LastFM support], [lastfm], [LASTFM])
|
||||
OWNTONE_ARG_DISABLE([LastFM support], [lastfm], [LASTFM])
|
||||
AM_CONDITIONAL([COND_LASTFM], [[test "x$enable_lastfm" = "xyes"]])
|
||||
|
||||
dnl ChromeCast support with libprotobuf-c
|
||||
FORK_ARG_ENABLE([Chromecast support], [chromecast], [CHROMECAST],
|
||||
[FORK_MODULES_CHECK([FORKED_OPTS], [LIBPROTOBUF_C],
|
||||
OWNTONE_ARG_ENABLE([Chromecast support], [chromecast], [CHROMECAST],
|
||||
[OWNTONE_MODULES_CHECK([OWNTONE_OPTS], [LIBPROTOBUF_C],
|
||||
[libprotobuf-c >= 1.0.0], [protobuf_c_message_pack],
|
||||
[protobuf-c/protobuf-c.h], [],
|
||||
[FORK_FUNC_REQUIRE([FORKED_OPTS], [v0 libprotobuf-c],
|
||||
[OWNTONE_FUNC_REQUIRE([OWNTONE_OPTS], [v0 libprotobuf-c],
|
||||
[LIBPROTOBUF_OLD], [protobuf-c],
|
||||
[protobuf_c_message_pack],
|
||||
[google/protobuf-c/protobuf-c.h],
|
||||
@ -320,43 +320,43 @@ FORK_ARG_ENABLE([Chromecast support], [chromecast], [CHROMECAST],
|
||||
[protobuf_old=yes]],
|
||||
[AC_MSG_ERROR([[Chromecast support requires protobuf-c]])])
|
||||
])
|
||||
FORK_MODULES_CHECK([FORKED_OPTS], [GNUTLS], [gnutls], [gnutls_init],
|
||||
OWNTONE_MODULES_CHECK([OWNTONE_OPTS], [GNUTLS], [gnutls], [gnutls_init],
|
||||
[gnutls/gnutls.h])
|
||||
])
|
||||
AM_CONDITIONAL([COND_CHROMECAST], [[test "x$enable_chromecast" = "xyes"]])
|
||||
AM_CONDITIONAL([COND_PROTOBUF_OLD], [[test "x$protobuf_old" = "xyes"]])
|
||||
|
||||
dnl Prefer AirPlay 2
|
||||
FORK_ARG_ENABLE([preference for AirPlay 2 for devices that support both 1 and 2], [preferairplay2], [PREFER_AIRPLAY2])
|
||||
OWNTONE_ARG_ENABLE([preference for AirPlay 2 for devices that support both 1 and 2], [preferairplay2], [PREFER_AIRPLAY2])
|
||||
|
||||
dnl DB profiling support
|
||||
FORK_ARG_ENABLE([DB profiling support], [dbprofile], [DB_PROFILE])
|
||||
OWNTONE_ARG_ENABLE([DB profiling support], [dbprofile], [DB_PROFILE])
|
||||
|
||||
dnl MPD support
|
||||
FORK_ARG_DISABLE([MPD client protocol support], [mpd], [MPD])
|
||||
OWNTONE_ARG_DISABLE([MPD client protocol support], [mpd], [MPD])
|
||||
AM_CONDITIONAL([COND_MPD], [[test "x$enable_mpd" = "xyes"]])
|
||||
|
||||
dnl Include default webinterface
|
||||
FORK_ARG_DISABLE([Include default web interface], [webinterface], [WEBINTERFACE],
|
||||
OWNTONE_ARG_DISABLE([Include default web interface], [webinterface], [WEBINTERFACE],
|
||||
[AS_IF([[test "x$with_libwebsockets" = "xno"]],
|
||||
[AC_MSG_ERROR([[Web interface requires libwebsockets >= 2.0.2 (or use --disable-webinterface)]])])
|
||||
])
|
||||
AM_CONDITIONAL([COND_WEBINTERFACE], [[test "x$enable_webinterface" = "xyes"]])
|
||||
|
||||
dnl Defining users and groups
|
||||
AC_ARG_WITH([daapd_user],
|
||||
[AS_HELP_STRING([--with-daapd-user=USER],
|
||||
[User for running forked-daapd (default=daapd)])],
|
||||
AC_ARG_WITH([owntone_user],
|
||||
[AS_HELP_STRING([--with-user=USER],
|
||||
[User for running OwnTone (default=owntone)])],
|
||||
[[test x"$withval" = xyes && withval=]], [[withval=]])
|
||||
DAAPD_USER=${withval:-daapd}
|
||||
AC_SUBST([DAAPD_USER])
|
||||
OWNTONE_USER=${withval:-owntone}
|
||||
AC_SUBST([OWNTONE_USER])
|
||||
|
||||
AC_ARG_WITH([daapd_group],
|
||||
[AS_HELP_STRING([--with-daapd-group=GROUP],
|
||||
[Group for daapd user (default=USER)])],
|
||||
AC_ARG_WITH([owntone_group],
|
||||
[AS_HELP_STRING([--with-group=GROUP],
|
||||
[Group for owntone user (default=USER)])],
|
||||
[[test x"$withval" = xyes && withval=]], [[withval=]])
|
||||
DAAPD_GROUP=${withval:-$DAAPD_USER}
|
||||
AC_SUBST([DAAPD_GROUP])
|
||||
OWNTONE_GROUP=${withval:-$OWNTONE_USER}
|
||||
AC_SUBST([OWNTONE_GROUP])
|
||||
dnl --- End options ---
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
@ -364,6 +364,6 @@ AC_CONFIG_FILES([
|
||||
sqlext/Makefile
|
||||
htdocs/Makefile
|
||||
Makefile
|
||||
forked-daapd.spec
|
||||
owntone.spec
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
@ -1,4 +1,4 @@
|
||||
# fork_checks.m4 serial 2
|
||||
# owntone_checks.m4 serial 2
|
||||
dnl Copyright (c) Scott Shambarger <devel@shambarger.net>
|
||||
dnl
|
||||
dnl Copying and distribution of this file, with or without modification, are
|
||||
@ -6,10 +6,10 @@ dnl permitted in any medium without royalty provided the copyright notice
|
||||
dnl and this notice are preserved. This file is offered as-is, without any
|
||||
dnl warranty.
|
||||
|
||||
dnl _FORK_FUNC_MERGE
|
||||
dnl _OWNTONE_FUNC_MERGE
|
||||
dnl ----------------
|
||||
dnl Internal only. Defines function used by FORK_VAR_PREPEND
|
||||
AC_DEFUN([_FORK_FUNC_MERGE], [[
|
||||
dnl Internal only. Defines function used by OWNTONE_VAR_PREPEND
|
||||
AC_DEFUN([_OWNTONE_FUNC_MERGE], [[
|
||||
# fork_fn_merge(before, after)
|
||||
# create wordlist removing duplicates
|
||||
fork_fn_merge() {
|
||||
@ -31,55 +31,55 @@ fork_fn_merge() {
|
||||
unset fork_fn_var_result
|
||||
}]])
|
||||
|
||||
dnl FORK_VAR_PREPEND(VARNAME, BEFORE)
|
||||
dnl OWNTONE_VAR_PREPEND(VARNAME, BEFORE)
|
||||
dnl ---------------------------------
|
||||
dnl Prepends words in BEFORE to the contents of VARNAME, skipping any
|
||||
dnl duplicate words.
|
||||
AC_DEFUN([FORK_VAR_PREPEND],
|
||||
[AC_REQUIRE([_FORK_FUNC_MERGE])dnl
|
||||
AC_DEFUN([OWNTONE_VAR_PREPEND],
|
||||
[AC_REQUIRE([_OWNTONE_FUNC_MERGE])dnl
|
||||
[ $1=$(fork_fn_merge "$2" "$$1")]])
|
||||
|
||||
dnl FORK_VARS_PREPEND(TARGET, LIBS_ENV, CFLAGS_ENV)
|
||||
dnl OWNTONE_VARS_PREPEND(TARGET, LIBS_ENV, CFLAGS_ENV)
|
||||
dnl -----------------------------------------------
|
||||
dnl Prepend LIBS_ENV to LIBS and TARGET_LIBS
|
||||
dnl Append CFLAGS_ENV to CPPFLAGS and TARGET_CPPFLAGS.
|
||||
AC_DEFUN([FORK_VARS_PREPEND],
|
||||
AC_DEFUN([OWNTONE_VARS_PREPEND],
|
||||
[[
|
||||
LIBS="$$2 $LIBS"
|
||||
$1_LIBS="$$2 $$1_LIBS"]
|
||||
FORK_VAR_PREPEND([CPPFLAGS], [$$3])
|
||||
FORK_VAR_PREPEND([$1_CPPFLAGS], [$$3])
|
||||
OWNTONE_VAR_PREPEND([CPPFLAGS], [$$3])
|
||||
OWNTONE_VAR_PREPEND([$1_CPPFLAGS], [$$3])
|
||||
])
|
||||
|
||||
dnl _FORK_VARS_ADD_PREFIX(TARGET)
|
||||
dnl _OWNTONE_VARS_ADD_PREFIX(TARGET)
|
||||
dnl -----------------------------
|
||||
dnl Internal use only. Add libdir prefix to {TARGET_}LIBS and
|
||||
dnl includedir prefix to {TARGET_}CPPFLAGS as fallback search paths
|
||||
dnl expanding all variables.
|
||||
AC_DEFUN([_FORK_VARS_ADD_PREFIX],
|
||||
AC_DEFUN([_OWNTONE_VARS_ADD_PREFIX],
|
||||
[AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
|
||||
AC_LIB_WITH_FINAL_PREFIX([[
|
||||
eval LIBS=\"-L$libdir $LIBS\"
|
||||
eval $1_LIBS=\"-L$libdir $$1_LIBS\"
|
||||
eval fork_tmp_cppflags=\"-I$includedir\"]
|
||||
FORK_VAR_PREPEND([CPPFLAGS], [$fork_tmp_cppflags])
|
||||
FORK_VAR_PREPEND([$1_CPPFLAGS], [$fork_tmp_cppflags])
|
||||
OWNTONE_VAR_PREPEND([CPPFLAGS], [$fork_tmp_cppflags])
|
||||
OWNTONE_VAR_PREPEND([$1_CPPFLAGS], [$fork_tmp_cppflags])
|
||||
])
|
||||
])
|
||||
|
||||
dnl FORK_CHECK_DECLS(SYMBOLS, INCLUDE, [ACTION-IF-FOUND],
|
||||
dnl OWNTONE_CHECK_DECLS(SYMBOLS, INCLUDE, [ACTION-IF-FOUND],
|
||||
dnl [ACTION-IF-NOT-FOUND])
|
||||
dnl -----------------------------------------------------
|
||||
dnl Expands AC_CHECK_DECLS with SYMBOLS and INCLUDE appended to
|
||||
dnl AC_INCLUDES_DEFAULT.
|
||||
dnl NOTE: Remember that AC_CHECK_DECLS defines HAVE_* to 1 or 0
|
||||
dnl (not 1 or undefined!)
|
||||
AC_DEFUN([FORK_CHECK_DECLS],
|
||||
AC_DEFUN([OWNTONE_CHECK_DECLS],
|
||||
[AC_CHECK_DECLS([$1], [$3], [$4], [AC_INCLUDES_DEFAULT
|
||||
[@%:@include <$2>]])
|
||||
])
|
||||
|
||||
dnl FORK_FUNC_REQUIRE(TARGET, DESCRIPTION, ENV, LIBRARY, FUNCTION, [HEADER],
|
||||
dnl OWNTONE_FUNC_REQUIRE(TARGET, DESCRIPTION, ENV, LIBRARY, FUNCTION, [HEADER],
|
||||
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl ------------------------------------------------------------------------
|
||||
dnl Check for software which lacks pkg-config support, setting TARGET_CPPFLAGS
|
||||
@ -95,22 +95,22 @@ dnl identify software to install. If FUNCTION not found, either displays
|
||||
dnl error suggested use of ENV_* overrides, or if ENV_* were not set
|
||||
dnl expands optional ACTION-IF-NOT-FOUND in place of error.
|
||||
dnl Restores original CPPFLAGS and LIBS when done.
|
||||
AC_DEFUN([FORK_FUNC_REQUIRE],
|
||||
[AS_VAR_PUSHDEF([FORK_MSG], [fork_msg_$3])
|
||||
AC_DEFUN([OWNTONE_FUNC_REQUIRE],
|
||||
[AS_VAR_PUSHDEF([OWNTONE_MSG], [fork_msg_$3])
|
||||
AC_ARG_VAR([$3_CFLAGS], [C compiler flags for $2, overriding search])
|
||||
AC_ARG_VAR([$3_LIBS], [linker flags for $2, overriding search])
|
||||
[fork_save_$3_LIBS=$LIBS; fork_save_$3_CPPFLAGS=$CPPFLAGS
|
||||
fork_found_$3=yes]
|
||||
AS_IF([[test -n "$$3_CFLAGS" && test -n "$$3_LIBS"]],
|
||||
[dnl ENV variables provided, just verify they work
|
||||
AS_VAR_SET([FORK_MSG], [["
|
||||
AS_VAR_SET([OWNTONE_MSG], [["
|
||||
Library specific environment variables $3_LIBS and
|
||||
$3_CFLAGS were used, verify they are correct..."]])
|
||||
FORK_VARS_PREPEND([$1], [$3_LIBS], [$3_CFLAGS])
|
||||
OWNTONE_VARS_PREPEND([$1], [$3_LIBS], [$3_CFLAGS])
|
||||
AC_CHECK_FUNC([[$5]], [],
|
||||
[AC_MSG_FAILURE([[Unable to link function $5 with $2.$]FORK_MSG])])],
|
||||
[AC_MSG_FAILURE([[Unable to link function $5 with $2.$]OWNTONE_MSG])])],
|
||||
[dnl Search w/o LIBRARY, w/ LIBRARY, and finally adding $prefix path
|
||||
AS_VAR_SET([FORK_MSG], [["
|
||||
AS_VAR_SET([OWNTONE_MSG], [["
|
||||
Install $2 in the default include path, or alternatively set
|
||||
library specific environment variables $3_CFLAGS
|
||||
and $3_LIBS."]])
|
||||
@ -119,7 +119,7 @@ and $3_LIBS."]])
|
||||
[[LIBS="-l$4 $LIBS"
|
||||
$1_LIBS="-l$4 $$1_LIBS"]
|
||||
AC_TRY_LINK_FUNC([[$5]], [AC_MSG_RESULT([[-l$4]])],
|
||||
[_FORK_VARS_ADD_PREFIX([$1])
|
||||
[_OWNTONE_VARS_ADD_PREFIX([$1])
|
||||
AC_TRY_LINK_FUNC([[$5]], [AC_MSG_RESULT([[-l$4]])],
|
||||
[AC_MSG_RESULT([[no]])
|
||||
fork_found_$3=no])])
|
||||
@ -128,17 +128,17 @@ and $3_LIBS."]])
|
||||
AS_IF([[test "$fork_found_$3" != "no"]],
|
||||
[dnl check HEADER, then expand FOUND
|
||||
m4_ifval([$6], [AC_CHECK_HEADER([[$6]], [],
|
||||
[AC_MSG_FAILURE([[Unable to find header $6 for $2.$]FORK_MSG])])])
|
||||
[AC_MSG_FAILURE([[Unable to find header $6 for $2.$]OWNTONE_MSG])])])
|
||||
$7])
|
||||
[LIBS=$fork_save_$3_LIBS; CPPFLAGS=$fork_save_$3_CPPFLAGS]
|
||||
dnl Expand NOT-FOUND after restoring saved flags to allow recursive expansion
|
||||
AS_IF([[test "$fork_found_$3" = "no"]],
|
||||
[m4_default_nblank([$8],
|
||||
[AC_MSG_FAILURE([[Function $5 in lib$4 not found.$]FORK_MSG])])])
|
||||
AS_VAR_POPDEF([FORK_MSG])
|
||||
[AC_MSG_FAILURE([[Function $5 in lib$4 not found.$]OWNTONE_MSG])])])
|
||||
AS_VAR_POPDEF([OWNTONE_MSG])
|
||||
])
|
||||
|
||||
dnl FORK_MODULES_CHECK(TARGET, ENV, MODULES, [FUNCTION], [HEADER],
|
||||
dnl OWNTONE_MODULES_CHECK(TARGET, ENV, MODULES, [FUNCTION], [HEADER],
|
||||
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl --------------------------------------------------------------
|
||||
dnl Expands PKG_CHECK_MODULES, but when found also attempt to link
|
||||
@ -147,10 +147,10 @@ dnl TARGET_CPPFLAGS and TARGET_LIBS. Expands optional ACTION-IF-FOUND with
|
||||
dnl working CPPFLAGS/LIBS for additional checks. Expands
|
||||
dnl ACTION-IF-NOT-FOUND only if package not found (not link/include failures)
|
||||
dnl overriding default error. Restores original CPPFLAGS and LIBS when done.
|
||||
AC_DEFUN([FORK_MODULES_CHECK],
|
||||
AC_DEFUN([OWNTONE_MODULES_CHECK],
|
||||
[PKG_CHECK_MODULES([$2], [[$3]],
|
||||
[[fork_save_$2_LIBS=$LIBS; fork_save_$2_CPPFLAGS=$CPPFLAGS]
|
||||
FORK_VARS_PREPEND([$1], [$2_LIBS], [$2_CFLAGS])
|
||||
OWNTONE_VARS_PREPEND([$1], [$2_LIBS], [$2_CFLAGS])
|
||||
m4_ifval([$4], [AC_CHECK_FUNC([[$4]], [],
|
||||
[AC_MSG_ERROR([[Unable to link function $4]])])])
|
||||
m4_ifval([$5], [AC_CHECK_HEADER([[$5]], [],
|
||||
@ -160,23 +160,23 @@ AC_DEFUN([FORK_MODULES_CHECK],
|
||||
m4_default_nblank_quoted([$7]))
|
||||
])
|
||||
|
||||
dnl FORK_ARG_WITH_CHECK(TARGET, DESCRIPTION, OPTION, ENV, MODULES, [FUNCTION],
|
||||
dnl OWNTONE_ARG_WITH_CHECK(TARGET, DESCRIPTION, OPTION, ENV, MODULES, [FUNCTION],
|
||||
dnl [HEADER], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl --------------------------------------------------------------------------
|
||||
dnl Create an --with-OPTION with a default of "check" (include MODULES
|
||||
dnl if they are available). Expands FORK_MODULES_CHECK with remaining
|
||||
dnl if they are available). Expands OWNTONE_MODULES_CHECK with remaining
|
||||
dnl arguments. Defines HAVE_ENV to 1 if package found. DESCRIPTION is used
|
||||
dnl in option help. Shell variable with_OPTION set to yes before
|
||||
dnl ACTION-IF-FOUND. Default ACTION-IF-NOT-FOUND will fail
|
||||
dnl if --with-OPTION given and MODULES not found, or sets shell var
|
||||
dnl with_OPTION to no if option was check. A non-empty ACTION-IF-NOT-FOUND
|
||||
dnl overrides this behavior to allow alternate checks.
|
||||
AC_DEFUN([FORK_ARG_WITH_CHECK],
|
||||
AC_DEFUN([OWNTONE_ARG_WITH_CHECK],
|
||||
[AC_ARG_WITH([[$3]], [AS_HELP_STRING([--with-$3],
|
||||
[with $2 (default=check)])], [],
|
||||
[[with_$3=check]])
|
||||
AS_IF([[test "x$with_$3" != "xno"]],
|
||||
[FORK_MODULES_CHECK([$1], [$4], [$5], [$6], [$7],
|
||||
[OWNTONE_MODULES_CHECK([$1], [$4], [$5], [$6], [$7],
|
||||
[[with_$3=yes]
|
||||
AC_DEFINE([HAVE_$4], 1, [Define to 1 to build with $2])
|
||||
$8],
|
||||
@ -188,12 +188,12 @@ AC_DEFUN([FORK_ARG_WITH_CHECK],
|
||||
])
|
||||
])
|
||||
|
||||
dnl FORK_ARG_ENABLE(DESCRIPTION, OPTION, DEFINE, [ACTION-IF-ENABLE])
|
||||
dnl OWNTONE_ARG_ENABLE(DESCRIPTION, OPTION, DEFINE, [ACTION-IF-ENABLE])
|
||||
dnl ----------------------------------------------------------------
|
||||
dnl Create an --enable-OPTION, setting shell variable enable_OPTION
|
||||
dnl to no by default. If feature is enabled, defines DEFINE to 1
|
||||
dnl and expand ACTION-IF_ENABLE. DESCRIPTION is used in option help.
|
||||
AC_DEFUN([FORK_ARG_ENABLE],
|
||||
AC_DEFUN([OWNTONE_ARG_ENABLE],
|
||||
[AC_ARG_ENABLE([[$2]], [AS_HELP_STRING([--enable-$2],
|
||||
[enable $1 (default=no)])])
|
||||
AS_IF([[test "x$enable_$2" = "xyes"]],
|
||||
@ -202,12 +202,12 @@ AC_DEFUN([FORK_ARG_ENABLE],
|
||||
[[enable_$2=no]])
|
||||
])
|
||||
|
||||
dnl FORK_ARG_DISABLE(DESCRIPTION, OPTION, DEFINE, [ACTION-IF-ENABLE])
|
||||
dnl OWNTONE_ARG_DISABLE(DESCRIPTION, OPTION, DEFINE, [ACTION-IF-ENABLE])
|
||||
dnl ----------------------------------------------------------------
|
||||
dnl Create an --disable-OPTION, setting shell variable enable_OPTION
|
||||
dnl to yes by default. If feature is enabled, defines DEFINE to 1
|
||||
dnl and expand ACTION-IF_ENABLE. DESCRIPTION is used in option help.
|
||||
AC_DEFUN([FORK_ARG_DISABLE],
|
||||
AC_DEFUN([OWNTONE_ARG_DISABLE],
|
||||
[AC_ARG_ENABLE([[$2]], [AS_HELP_STRING([--disable-$2],
|
||||
[disable $1 (default=no)])])
|
||||
AS_IF([[test "x$enable_$2" = "x" || test "x$enable_$2" = "xyes"]],
|
@ -1,15 +1,15 @@
|
||||
.\" -*- nroff -*-
|
||||
.TH FORKED-DAAPD "8" "2018-01-14" "forked-daapd" "DAAP, MPD, Chromecast & RSP media server"
|
||||
.TH OWNTONE "8" "2018-01-14" "owntone" "DAAP, MPD, Chromecast & RSP media server"
|
||||
.SH NAME
|
||||
forked\-daapd \- iTunes\-compatible DAAP server with MPD, Chromecast and RSP support
|
||||
OwnTone \- iTunes\-compatible DAAP server with MPD, Chromecast and RSP support
|
||||
.SH SYNOPSIS
|
||||
.B forked-daapd
|
||||
.B OwnTone
|
||||
[\fIoptions\fR]
|
||||
.SH DESCRIPTION
|
||||
\fBforked\-daapd\fP is a Linux/FreeBSD DAAP (iTunes) media server with support
|
||||
\fBOwnTone\fP is a Linux/FreeBSD DAAP (iTunes) media server with support
|
||||
for AirPlay devices, Apple Remote (and compatibles), MPD, Spotify, Chromecast,
|
||||
mp3 streaming and internet radio. It allows you to share your music collection over
|
||||
the local network.
|
||||
mp3 streaming and internet radio. It allows you to share your music collection
|
||||
over the local network.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\fB\-d, \-\-debug=\fR\fIlevel\fP
|
||||
@ -46,15 +46,15 @@ Don't announce RSP service via mDNS.
|
||||
Don't announce DAAP service via mDNS.
|
||||
.TP
|
||||
\fB\-\-mdns-no-cname\fR
|
||||
Don't register forked-daapd.local as CNAME via mDNS.
|
||||
Don't register owntone.local as CNAME via mDNS.
|
||||
.TP
|
||||
\fB\-\-mdns-no-web\fR
|
||||
Don't announce web interface via mDNS.
|
||||
.SH FILES
|
||||
.nf
|
||||
\fI/etc/forked\-daapd.conf\fR
|
||||
\fI/var/cache/forked\-daapd\fR
|
||||
\fI/etc/owntone.conf\fR
|
||||
\fI/var/cache/owntone\fR
|
||||
.fi
|
||||
.SH SEE ALSO
|
||||
See \fIhttp://owntone.github.io/forked-daapd/\fR for more in-depth information
|
||||
about using \fBforked-daapd\fP.
|
||||
See \fIhttp://owntone.github.io/owntone-server/\fR for more in-depth information
|
||||
about using \fBOwnTone\fP.
|
@ -1,4 +1,4 @@
|
||||
# A quick guide to configuring forked-daapd:
|
||||
# A quick guide to configuring OwnTone:
|
||||
#
|
||||
# For regular use, the most important setting to configure is "directories",
|
||||
# which should be the location of your media. Whatever user you have set as
|
||||
@ -11,7 +11,7 @@ general {
|
||||
# Username
|
||||
# Make sure the user has read access to the library directories you set
|
||||
# below, and full access to the databases, log and local audio
|
||||
uid = "@DAAPD_USER@"
|
||||
uid = "@OWNTONE_USER@"
|
||||
|
||||
# Database location
|
||||
# db_path = "@localstatedir@/cache/@PACKAGE@/songs3.db"
|
||||
@ -140,7 +140,7 @@ library {
|
||||
# name_radio = "Radio"
|
||||
|
||||
# Artwork file names (without file type extension)
|
||||
# forked-daapd will look for jpg and png files with these base names
|
||||
# OwnTone will look for jpg and png files with these base names
|
||||
# artwork_basenames = { "artwork", "cover", "Folder" }
|
||||
|
||||
# Enable searching for artwork corresponding to each individual media
|
||||
@ -162,11 +162,11 @@ library {
|
||||
# filepath_ignore = { "myregex" }
|
||||
|
||||
# Disable startup file scanning
|
||||
# When forked-daapd starts it will do an initial file scan of your
|
||||
# When OwnTone starts it will do an initial file scan of your
|
||||
# library (and then watch it for changes). If you are sure your library
|
||||
# never changes while forked-daapd is not running, you can disable the
|
||||
# never changes while OwnTone is not running, you can disable the
|
||||
# initial file scan and save some system ressources. Disabling this scan
|
||||
# may lead to forked-daapd's database coming out of sync with the
|
||||
# may lead to OwnTone's database coming out of sync with the
|
||||
# library. If that happens read the instructions in the README on how
|
||||
# to trigger a rescan.
|
||||
# filescan_disable = false
|
||||
@ -184,7 +184,7 @@ library {
|
||||
# Decoding options for DAAP clients
|
||||
# Since iTunes has native support for mpeg, mp4a, mp4v, alac and wav,
|
||||
# such files will be sent as they are. Any other formats will be decoded
|
||||
# to raw wav. If forked-daapd detects a non-iTunes DAAP client, it is
|
||||
# to raw wav. If OwnTone detects a non-iTunes DAAP client, it is
|
||||
# assumed to only support mpeg and wav, other formats will be decoded.
|
||||
# Here you can change when to decode. Note that these settings have no
|
||||
# effect on AirPlay.
|
||||
@ -216,7 +216,7 @@ library {
|
||||
# allow_modifying_stored_playlists = false
|
||||
|
||||
# A directory in one of the library directories that will be used as the default
|
||||
# playlist directory. forked-dapd creates new playlists in this directory if only
|
||||
# playlist directory. OwnTone creates new playlists in this directory if only
|
||||
# a playlist name is provided (requires "allow_modify_stored_playlists" set to true).
|
||||
# default_playlist_directory = ""
|
||||
}
|
||||
@ -283,7 +283,7 @@ audio {
|
||||
#}
|
||||
|
||||
# Pipe output
|
||||
# Allows forked-daapd to output audio data to a named pipe
|
||||
# Allows OwnTone to output audio data to a named pipe
|
||||
#fifo {
|
||||
# nickname = "fifo"
|
||||
# path = "/path/to/fifo"
|
||||
@ -291,8 +291,9 @@ audio {
|
||||
|
||||
# AirPlay settings common to all devices
|
||||
#airplay_shared {
|
||||
# UDP ports used when airplay devices make connections back to forked-daapd
|
||||
# (choosing specific ports may be helpful when running forked-daapd behind a firewall)
|
||||
# UDP ports used when airplay devices make connections back to
|
||||
# OwnTone (choosing specific ports may be helpful when running
|
||||
# OwnTone behind a firewall)
|
||||
# control_port = 0
|
||||
# timing_port = 0
|
||||
#}
|
||||
@ -300,7 +301,7 @@ audio {
|
||||
# AirPlay per device settings
|
||||
# (make sure you get the capitalization of the device name right)
|
||||
#airplay "My AirPlay device" {
|
||||
# forked-daapd's volume goes to 11! If that's more than you can handle
|
||||
# OwnTone's volume goes to 11! If that's more than you can handle
|
||||
# you can set a lower value here
|
||||
# max_volume = 11
|
||||
|
||||
@ -310,11 +311,11 @@ audio {
|
||||
|
||||
# Enable this option to keep a particular AirPlay device in the speaker
|
||||
# list and thus ignore mdns notifications about it no longer being
|
||||
# present. The speaker will remain until restart of forked-daapd.
|
||||
# present. The speaker will remain until restart of OwnTone.
|
||||
# permanent = false
|
||||
|
||||
# Some devices spuriously disconnect during playback, and based on the
|
||||
# device type forked-daapd may attempt to reconnect. Setting this option
|
||||
# device type OwnTone may attempt to reconnect. Setting this option
|
||||
# overrides this so reconnecting is either always enabled or disabled.
|
||||
# reconnect = false
|
||||
|
||||
@ -331,7 +332,7 @@ audio {
|
||||
# Chromecast settings
|
||||
# (make sure you get the capitalization of the device name right)
|
||||
#chromecast "My Chromecast device" {
|
||||
# forked-daapd's volume goes to 11! If that's more than you can handle
|
||||
# OwnTone's volume goes to 11! If that's more than you can handle
|
||||
# you can set a lower value here
|
||||
# max_volume = 11
|
||||
|
||||
@ -387,7 +388,7 @@ mpd {
|
||||
# work). Set to 0 to disable serving artwork over http.
|
||||
# http_port = 0
|
||||
|
||||
# By default forked-daapd will - like iTunes - clear the playqueue if
|
||||
# By default OwnTone will - like iTunes - clear the playqueue if
|
||||
# playback stops. Setting clear_queue_on_stop_disable to true will keep
|
||||
# the playlist like MPD does. Note that some dacp clients do not show
|
||||
# the playqueue if playback is stopped.
|
@ -1,13 +1,13 @@
|
||||
[Unit]
|
||||
Description=DAAP/DACP (iTunes), RSP and MPD server, supports AirPlay and Remote
|
||||
Documentation=man:forked-daapd(8)
|
||||
Documentation=man:owntone(8)
|
||||
After=network.target sound.target remote-fs.target pulseaudio.service avahi-daemon.service
|
||||
|
||||
[Service]
|
||||
ExecStart=@sbindir@/forked-daapd -f
|
||||
ExecStart=@sbindir@/owntone -f
|
||||
|
||||
# Constrain the upper limit of memory/swap that can be used; this prevents
|
||||
# forked-daapd from consuming all system memory (in event of bug/malformed user
|
||||
# the server from consuming all system memory (in event of bug/malformed user
|
||||
# curl/SMARTPL query etc) that would hang/freeze low resource and headless (ie
|
||||
# RPi) machines
|
||||
#
|
@ -1,7 +1,7 @@
|
||||
# @configure_input@
|
||||
# -*- Mode:rpm-spec -*-
|
||||
%global username @DAAPD_USER@
|
||||
%global groupname @DAAPD_GROUP@
|
||||
%global username @OWNTONE_USER@
|
||||
%global groupname @OWNTONE_GROUP@
|
||||
|
||||
%bcond_without alsa
|
||||
%bcond_without pulseaudio
|
||||
@ -12,7 +12,7 @@
|
||||
%global _hardened_build 1
|
||||
|
||||
Summary: iTunes-compatible DAAP server with MPD and RSP support
|
||||
Name: forked-daapd
|
||||
Name: owntone
|
||||
Version: @PACKAGE_VERSION@
|
||||
Release: 1%{?dist}
|
||||
License: GPLv2+
|
||||
@ -51,8 +51,8 @@ BuildRequires: pkgconfig(gnutls)
|
||||
%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{name}-%{version}}
|
||||
|
||||
%description
|
||||
forked-daapd is a DAAP/DACP (iTunes), MPD (Music Player Daemon)
|
||||
and RSP (Roku) media server.
|
||||
OwnTone is a DAAP/DACP (iTunes), MPD (Music Player Daemon) and RSP (Roku) media
|
||||
server.
|
||||
|
||||
It has support for AirPlay devices/speakers, Apple Remote (and compatibles),
|
||||
MPD clients, Chromecast, network streaming, internet radio, Spotify and LastFM.
|
||||
@ -62,8 +62,6 @@ It does not support streaming video by AirPlay nor Chromecast.
|
||||
DAAP stands for Digital Audio Access Protocol, and is the protocol used
|
||||
by iTunes and friends to share/stream media libraries over the network.
|
||||
|
||||
forked-daapd is a complete rewrite of mt-daapd (Firefly Media Server).
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
@ -83,7 +81,7 @@ mkdir -p %{buildroot}%{homedir}
|
||||
mkdir -p %{buildroot}%{_localstatedir}/log
|
||||
touch %{buildroot}%{_localstatedir}/log/%{name}.log
|
||||
mkdir -p %{buildroot}%{_unitdir}
|
||||
install -m 0644 forked-daapd.service %{buildroot}%{_unitdir}/%{name}.service
|
||||
install -m 0644 owntone.service %{buildroot}%{_unitdir}/%{name}.service
|
||||
rm -f %{buildroot}%{_libdir}/%{name}/*.la
|
||||
|
||||
%pre
|
||||
@ -106,8 +104,8 @@ exit 0
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
%{_pkgdocdir}
|
||||
%config(noreplace) %{_sysconfdir}/forked-daapd.conf
|
||||
%{_sbindir}/forked-daapd
|
||||
%config(noreplace) %{_sysconfdir}/owntone.conf
|
||||
%{_sbindir}/owntone
|
||||
%{_libdir}/%{name}/
|
||||
%{_datarootdir}/%{name}/
|
||||
%{_unitdir}/%{name}.service
|
@ -2,7 +2,7 @@
|
||||
# Credit thorsteneckel who made the how-to that is the basis for this
|
||||
# script, see https://gist.github.com/thorsteneckel/c0610fb415c8d0486bce
|
||||
|
||||
echo "This script will install forked-daapd in FreeBSD 11.0. The script is not"
|
||||
echo "This script will install OwnTone in FreeBSD 11.0. The script is not"
|
||||
echo "very polished, so you might want to look through it before running it."
|
||||
read -p "Continue? [y/N] " yn
|
||||
if [ "$yn" != "y" ]; then
|
||||
@ -32,8 +32,8 @@ if [ "$yn" = "y" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
WORKDIR=~/forked-daapd_build
|
||||
CONFIG=/usr/local/etc/forked-daapd.conf
|
||||
WORKDIR=~/owntone_build
|
||||
CONFIG=/usr/local/etc/owntone.conf
|
||||
read -p "Should the script create $WORKDIR and use it for building? [Y/n] " yn
|
||||
if [ "$yn" = "n" ]; then
|
||||
exit
|
||||
@ -69,10 +69,10 @@ CLASSPATH=\$CLASSPATH:/usr/local/share/java/antlr-3.4-complete.jar:/usr/local/sh
|
||||
cd $WORKDIR
|
||||
fi
|
||||
|
||||
read -p "Should the script build forked-daapd? [y/N] " yn
|
||||
read -p "Should the script build owntone? [y/N] " yn
|
||||
if [ "$yn" = "y" ]; then
|
||||
git clone https://github.com/owntone/owntone-server.git
|
||||
cd forked-daapd
|
||||
cd owntone-server
|
||||
|
||||
#Cleanup in case this is a re-run
|
||||
gmake clean
|
||||
@ -90,7 +90,7 @@ if [ "$yn" = "y" ]; then
|
||||
export LDFLAGS="-L/usr/local/lib -L/usr/lib"
|
||||
./configure && gmake
|
||||
|
||||
read -p "Should the script install forked-daapd and add service startup scripts? [y/N] " yn
|
||||
read -p "Should the script install owntone and add service startup scripts? [y/N] " yn
|
||||
if [ "$yn" = "y" ]; then
|
||||
if [ -f $CONFIG ]; then
|
||||
echo "Backing up old config file to $CONFIG.bak"
|
||||
@ -100,17 +100,17 @@ if [ "$yn" = "y" ]; then
|
||||
|
||||
sudo sed -i -- 's/\/var\/cache/\/usr\/local\/var\/cache/g' $CONFIG
|
||||
# Setup user and startup scripts
|
||||
echo "daapd::::::forked-daapd:/nonexistent:/usr/sbin/nologin:" | sudo adduser -w no -D -f -
|
||||
sudo chown -R daapd:daapd /usr/local/var/cache/forked-daapd
|
||||
echo "owntone::::::owntone:/nonexistent:/usr/sbin/nologin:" | sudo adduser -w no -D -f -
|
||||
sudo chown -R owntone:owntone /usr/local/var/cache/owntone
|
||||
if [ ! -f scripts/freebsd_start_10.1.sh ]; then
|
||||
echo "Could not find FreeBSD startup script"
|
||||
exit
|
||||
fi
|
||||
sudo install -m 755 scripts/freebsd_start_10.1.sh /usr/local/etc/rc.d/forked-daapd
|
||||
sudo install -m 755 scripts/freebsd_start_10.1.sh /usr/local/etc/rc.d/owntone
|
||||
|
||||
service forked-daapd enabled
|
||||
service owntone enabled
|
||||
if [ $? -ne 0 ]; then
|
||||
sudo sh -c 'echo "forked_daapd_enable=\"YES\"" >> /etc/rc.conf'
|
||||
sudo sh -c 'echo "owntone_enable=\"YES\"" >> /etc/rc.conf'
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -132,8 +132,8 @@ if [ "$yn" = "y" ]; then
|
||||
sudo service avahi-daemon start
|
||||
fi
|
||||
|
||||
read -p "Should the script (re)start forked-daapd and display the log output? [y/N] " yn
|
||||
read -p "Should the script (re)start owntone and display the log output? [y/N] " yn
|
||||
if [ "$yn" = "y" ]; then
|
||||
sudo service forked-daapd restart
|
||||
tail -f /usr/local/var/log/forked-daapd.log
|
||||
sudo service owntone restart
|
||||
tail -f /usr/local/var/log/owntone.log
|
||||
fi
|
||||
|
@ -1,25 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
# PROVIDE: forked-daapd
|
||||
# PROVIDE: owntone
|
||||
# REQUIRE: avahi_daemon dbus
|
||||
|
||||
# Add the following lines to /etc/rc.conf to enable `forked-daapd':
|
||||
# Add the following lines to /etc/rc.conf to enable `owntone':
|
||||
#
|
||||
# forked_daapd_enable="YES"
|
||||
# forked_daapd_flags="<set as needed>"
|
||||
# owntone_enable="YES"
|
||||
# owntone_flags="<set as needed>"
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="forked_daapd"
|
||||
name="owntone"
|
||||
rcvar=`set_rcvar`
|
||||
|
||||
command="/usr/local/sbin/forked-daapd"
|
||||
command_args="-P /var/run/forked-daapd.pid"
|
||||
pidfile="/var/run/forked-daapd.pid"
|
||||
required_files="/usr/local/etc/forked-daapd.conf"
|
||||
command="/usr/local/sbin/owntone"
|
||||
command_args="-P /var/run/owntone.pid"
|
||||
pidfile="/var/run/owntone.pid"
|
||||
required_files="/usr/local/etc/owntone.conf"
|
||||
|
||||
# read configuration and set defaults
|
||||
load_rc_config "$name"
|
||||
: ${forked_daapd_enable="NO"}
|
||||
: ${owntone_enable="NO"}
|
||||
|
||||
run_rc_command "$1"
|
||||
|
@ -1,9 +1,9 @@
|
||||
pkglib_LTLIBRARIES = forked-daapd-sqlext.la
|
||||
pkglib_LTLIBRARIES = owntone-sqlext.la
|
||||
|
||||
forked_daapd_sqlext_la_SOURCES = sqlext.c
|
||||
forked_daapd_sqlext_la_LDFLAGS = -avoid-version -module -shared
|
||||
owntone_sqlext_la_SOURCES = sqlext.c
|
||||
owntone_sqlext_la_LDFLAGS = -avoid-version -module -shared
|
||||
AM_CPPFLAGS += \
|
||||
$(COMMON_CPPFLAGS)
|
||||
|
||||
forked_daapd_sqlext_la_LIBADD = \
|
||||
owntone_sqlext_la_LIBADD = \
|
||||
$(COMMON_LIBS)
|
||||
|
@ -214,7 +214,7 @@ expr returns [ pANTLR3_STRING result, int valid ]
|
||||
goto STR_result_valid_0; /* ABORT */
|
||||
}
|
||||
|
||||
/* No need to exclude empty artist and album, as forked-daapd makes sure there always exists an artist/album. */
|
||||
/* No need to exclude empty artist and album, as the server makes sure there always exists an artist/album. */
|
||||
if (neg_op && (op == ':' || op == '@')
|
||||
&& (strcmp((char *)field, "daap.songalbumartist") == 0
|
||||
|| strcmp((char *)field, "daap.songartist") == 0
|
||||
@ -255,7 +255,7 @@ expr returns [ pANTLR3_STRING result, int valid ]
|
||||
|
||||
*end = '\0'; /* Cut out potential garbage - we're being kind */
|
||||
|
||||
/* forked-daapd only has media_kind = 1 for music - so remove media_kind = 32 to imporve select query performance. */
|
||||
/* The server only has media_kind = 1 for music - so remove media_kind = 32 to imporve select query performance. */
|
||||
if (llval == 32
|
||||
&& (strcmp((char *)field, "com.apple.itunes.mediakind") == 0
|
||||
|| strcmp((char *)field, "com.apple.itunes.extended-media-kind") == 0))
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
sbin_PROGRAMS = forked-daapd
|
||||
sbin_PROGRAMS = owntone
|
||||
|
||||
if COND_SPOTIFY
|
||||
SPOTIFY_SRC=spotify.c spotify.h spotify_webapi.c spotify_webapi.h inputs/spotify.c
|
||||
@ -75,8 +75,8 @@ ANTLR_OBJECTS = \
|
||||
SMARTPLLexer.$(OBJEXT) SMARTPLParser.$(OBJEXT) SMARTPL2SQL.$(OBJEXT)
|
||||
|
||||
AM_CPPFLAGS += \
|
||||
$(FORKED_CPPFLAGS) \
|
||||
$(FORKED_OPTS_CPPFLAGS) \
|
||||
$(OWNTONE_CPPFLAGS) \
|
||||
$(OWNTONE_OPTS_CPPFLAGS) \
|
||||
$(COMMON_CPPFLAGS) \
|
||||
\
|
||||
-D_GNU_SOURCE \
|
||||
@ -85,12 +85,12 @@ AM_CPPFLAGS += \
|
||||
-DSTATEDIR=\"$(localstatedir)\" \
|
||||
-DPKGLIBDIR=\"$(pkglibdir)\"
|
||||
|
||||
forked_daapd_LDADD = \
|
||||
$(FORKED_LIBS) \
|
||||
$(FORKED_OPTS_LIBS) \
|
||||
owntone_LDADD = \
|
||||
$(OWNTONE_LIBS) \
|
||||
$(OWNTONE_OPTS_LIBS) \
|
||||
$(COMMON_LIBS)
|
||||
|
||||
forked_daapd_SOURCES = main.c \
|
||||
owntone_SOURCES = main.c \
|
||||
db.c db.h \
|
||||
db_init.c db_init.h \
|
||||
db_upgrade.c db_upgrade.h \
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include <confuse.h>
|
||||
|
||||
#define CONFFILE CONFDIR "/forked-daapd.conf"
|
||||
#define CONFFILE CONFDIR "/owntone.conf"
|
||||
|
||||
// Some shorthand macros for poor man's
|
||||
#define CFG_NAME_UNKNOWN_TITLE (cfg_getstr(cfg_getsec(cfg, "library"), "name_unknown_title"))
|
||||
|
4
src/db.c
4
src/db.c
@ -2700,7 +2700,7 @@ db_file_inc_playcount_byfilter(const char *filter)
|
||||
#define Q_TMPL "UPDATE files SET play_count = play_count + 1, time_played = %" PRIi64 ", seek = 0 WHERE %s;"
|
||||
/*
|
||||
* Rating calculation is taken from from the beets plugin "mpdstats" (see https://beets.readthedocs.io/en/latest/plugins/mpdstats.html)
|
||||
* and adapted to the forked-daapd rating rage (0 to 100).
|
||||
* and adapted to this servers rating rage (0 to 100).
|
||||
*
|
||||
* Rating consist of the stable rating and a rolling rating.
|
||||
* The stable rating is calculated based on the number was played and skipped:
|
||||
@ -6807,7 +6807,7 @@ db_open(void)
|
||||
}
|
||||
|
||||
errmsg = NULL;
|
||||
ret = sqlite3_load_extension(hdl, PKGLIBDIR "/forked-daapd-sqlext.so", NULL, &errmsg);
|
||||
ret = sqlite3_load_extension(hdl, PKGLIBDIR "/" PACKAGE_NAME "-sqlext.so", NULL, &errmsg);
|
||||
if (ret != SQLITE_OK)
|
||||
{
|
||||
if (errmsg)
|
||||
|
@ -21,10 +21,10 @@
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
/* Rule of thumb: Will the current version of forked-daapd work with the new
|
||||
/* Rule of thumb: Will the current version of the server work with the new
|
||||
* version of the database? If yes, then it is a minor upgrade, if no, then it
|
||||
* is a major upgrade. In other words minor version upgrades permit downgrading
|
||||
* forked-daapd after the database was upgraded. */
|
||||
* the server after the database was upgraded. */
|
||||
#define SCHEMA_VERSION_MAJOR 21
|
||||
#define SCHEMA_VERSION_MINOR 06
|
||||
|
||||
|
@ -753,7 +753,7 @@ evrtsp_request_dispatch(struct evrtsp_connection* evcon)
|
||||
/* Create the header from the store arguments */
|
||||
evrtsp_make_header(evcon, req);
|
||||
|
||||
/* forked-daapd customisation for encryption */
|
||||
/* owntone customisation for encryption */
|
||||
if (!evcon->ciphercb)
|
||||
evbuffer_add_buffer(evcon->output_raw, evcon->output_buffer);
|
||||
else
|
||||
|
@ -1775,7 +1775,7 @@ httpd_init(const char *webroot)
|
||||
ret = net_evhttp_bind(evhttpd, httpd_port, "httpd");
|
||||
if (ret < 0)
|
||||
{
|
||||
DPRINTF(E_FATAL, L_HTTPD, "Could not bind to port %d (forked-daapd already running?)\n", httpd_port);
|
||||
DPRINTF(E_FATAL, L_HTTPD, "Could not bind to port %d (server already running?)\n", httpd_port);
|
||||
goto bind_fail;
|
||||
}
|
||||
|
||||
|
@ -2301,7 +2301,7 @@ daap_request(struct evhttp_request *req, struct httpd_uri_parsed *uri_parsed)
|
||||
// Set reply headers
|
||||
headers = evhttp_request_get_output_headers(req);
|
||||
evhttp_add_header(headers, "Accept-Ranges", "bytes");
|
||||
evhttp_add_header(headers, "DAAP-Server", "forked-daapd/" VERSION);
|
||||
evhttp_add_header(headers, "DAAP-Server", PACKAGE_NAME "/" VERSION);
|
||||
// Content-Type for all replies, even the actual audio streaming. Note that
|
||||
// video streaming will override this Content-Type with a more appropriate
|
||||
// video/<type> Content-Type as expected by clients like Front Row.
|
||||
|
@ -2868,7 +2868,7 @@ dacp_request(struct evhttp_request *req, struct httpd_uri_parsed *uri_parsed)
|
||||
}
|
||||
|
||||
headers = evhttp_request_get_output_headers(req);
|
||||
evhttp_add_header(headers, "DAAP-Server", "forked-daapd/" VERSION);
|
||||
evhttp_add_header(headers, "DAAP-Server", PACKAGE_NAME "/" VERSION);
|
||||
/* Content-Type for all DACP replies; can be overriden as needed */
|
||||
evhttp_add_header(headers, "Content-Type", "application/x-dmap-tagged");
|
||||
|
||||
|
@ -769,7 +769,7 @@ jsonapi_reply_config(struct httpd_request *hreq)
|
||||
#endif
|
||||
json_object_object_add(jreply, "websocket_port", json_object_new_int(websocket_port));
|
||||
|
||||
// forked-daapd version
|
||||
// server version
|
||||
json_object_object_add(jreply, "version", json_object_new_string(VERSION));
|
||||
|
||||
// enabled build options
|
||||
@ -1212,7 +1212,7 @@ jsonapi_reply_spotify(struct httpd_request *hreq)
|
||||
json_object_object_add(jreply, "enabled", json_object_new_boolean(true));
|
||||
|
||||
httpd_port = cfg_getint(cfg_getsec(cfg, "library"), "port");
|
||||
snprintf(redirect_uri, sizeof(redirect_uri), "http://forked-daapd.local:%d/oauth/spotify", httpd_port);
|
||||
snprintf(redirect_uri, sizeof(redirect_uri), "http://owntone.local:%d/oauth/spotify", httpd_port);
|
||||
|
||||
oauth_uri = spotifywebapi_oauth_uri_get(redirect_uri);
|
||||
if (!oauth_uri)
|
||||
@ -2189,7 +2189,7 @@ queue_item_to_json(struct db_queue_item *queue_item, char shuffle)
|
||||
|| strncmp(queue_item->artwork_url, "https://", strlen("https://")) == 0))
|
||||
{
|
||||
// The queue item contains a valid http url for an artwork image, there is no need
|
||||
// for the client to request the image through the forked-daapd artwork handler.
|
||||
// for the client to request the image through the server artwork handler.
|
||||
// Directly pass the artwork url to the client.
|
||||
safe_json_add_string(item, "artwork_url", queue_item->artwork_url);
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ oauth_reply_spotify(struct httpd_request *hreq)
|
||||
|
||||
httpd_port = cfg_getint(cfg_getsec(cfg, "library"), "port");
|
||||
|
||||
snprintf(redirect_uri, sizeof(redirect_uri), "http://forked-daapd.local:%d/oauth/spotify", httpd_port);
|
||||
snprintf(redirect_uri, sizeof(redirect_uri), "http://owntone.local:%d/oauth/spotify", httpd_port);
|
||||
ret = spotifywebapi_oauth_callback(hreq->query, redirect_uri, &errmsg);
|
||||
if (ret < 0)
|
||||
{
|
||||
@ -68,9 +68,9 @@ oauth_reply_spotify(struct httpd_request *hreq)
|
||||
static int
|
||||
oauth_reply_spotify(struct httpd_request *hreq)
|
||||
{
|
||||
DPRINTF(E_LOG, L_WEB, "This version of forked-daapd was built without support for Spotify\n");
|
||||
DPRINTF(E_LOG, L_WEB, "This version was built without support for Spotify\n");
|
||||
|
||||
httpd_send_error(hreq->req, HTTP_NOTFOUND, "This version of forked-daapd was built without support for Spotify");
|
||||
httpd_send_error(hreq->req, HTTP_NOTFOUND, "This version was built without support for Spotify");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
@ -568,7 +568,7 @@ streaming_request(struct evhttp_request *req, struct httpd_uri_parsed *uri_parse
|
||||
|
||||
output_headers = evhttp_request_get_output_headers(req);
|
||||
evhttp_add_header(output_headers, "Content-Type", "audio/mpeg");
|
||||
evhttp_add_header(output_headers, "Server", "forked-daapd/" VERSION);
|
||||
evhttp_add_header(output_headers, "Server", PACKAGE_NAME "/" VERSION);
|
||||
evhttp_add_header(output_headers, "Cache-Control", "no-cache");
|
||||
evhttp_add_header(output_headers, "Pragma", "no-cache");
|
||||
evhttp_add_header(output_headers, "Expires", "Mon, 31 Aug 2015 06:00:00 GMT");
|
||||
|
@ -76,7 +76,7 @@
|
||||
// Ignore pictures with larger size than this
|
||||
#define PIPE_PICTURE_SIZE_MAX 1048576
|
||||
// Where we store pictures for the artwork module to read
|
||||
#define PIPE_TMPFILE_TEMPLATE "/tmp/forked-daapd.XXXXXX.ext"
|
||||
#define PIPE_TMPFILE_TEMPLATE "/tmp/" PACKAGE_NAME ".XXXXXX.ext"
|
||||
#define PIPE_TMPFILE_TEMPLATE_EXTLEN 4
|
||||
|
||||
enum pipetype
|
||||
|
@ -49,8 +49,8 @@
|
||||
static bool lastfm_disabled = false;
|
||||
|
||||
/**
|
||||
* The API key and secret (not so secret being open source) is specific to
|
||||
* forked-daapd, and is used to identify forked-daapd and to sign requests
|
||||
* The API key and secret (not so secret being open source) is specific to us,
|
||||
* and is used to identify client and to sign requests.
|
||||
*/
|
||||
static const char *lastfm_api_key = "579593f2ed3f49673c7364fd1c9c829b";
|
||||
static const char *lastfm_secret = "ce45a1d275c10b3edf0ecfa27791cb2b";
|
||||
|
@ -816,7 +816,7 @@ library(void *arg)
|
||||
#ifdef __linux__
|
||||
struct sched_param param;
|
||||
|
||||
/* Lower the priority of the thread so forked-daapd may still respond
|
||||
/* Lower the priority of the thread so the server may still respond
|
||||
* during library scan on low power devices. Param must be 0 for the SCHED_BATCH
|
||||
* policy.
|
||||
*/
|
||||
|
@ -224,7 +224,7 @@ static const struct metadata_map md_map_vorbis[] =
|
||||
* Update 20180131: Removed tags supported by ffmpeg 2.5.4 (around 3 years old)
|
||||
* + added some tags used for grouping
|
||||
* Update 20200114: Removed TDA, TDAT, TYE, TYER, TDR since the they are
|
||||
* well supported by ffmpeg, and forked-daapd was parsing TDA/TDAT incorrectly
|
||||
* well supported by ffmpeg, and the server was parsing TDA/TDAT incorrectly
|
||||
*
|
||||
*/
|
||||
static const struct metadata_map md_map_id3[] =
|
||||
|
@ -637,7 +637,7 @@ main(int argc, char **argv)
|
||||
/* Set up libevent logging callback */
|
||||
event_set_log_callback(logger_libevent);
|
||||
|
||||
DPRINTF(E_LOG, L_MAIN, "Forked Media Server Version %s taking off\n", VERSION);
|
||||
DPRINTF(E_LOG, L_MAIN, "OwnTone version %s taking off\n", VERSION);
|
||||
|
||||
DPRINTF(E_LOG, L_MAIN, "Built with:\n");
|
||||
buildopts = buildopts_get();
|
||||
@ -858,7 +858,9 @@ main(int argc, char **argv)
|
||||
|
||||
/* Register this CNAME with mDNS for OAuth */
|
||||
if (!mdns_no_cname)
|
||||
mdns_cname("forked-daapd.local");
|
||||
{
|
||||
mdns_cname("owntone.local");
|
||||
}
|
||||
|
||||
#ifdef HAVE_SIGNALFD
|
||||
/* Set up signal fd */
|
||||
|
@ -49,7 +49,7 @@ mdns_register(char *name, char *type, int port, char **txt);
|
||||
* Register a CNAME record, it will be an alias for hostname
|
||||
* Call only from the main thread!
|
||||
*
|
||||
* @in name The CNAME alias, e.g. "forked-daapd.local"
|
||||
* @in name The CNAME alias, e.g. "myserver.local"
|
||||
* @return 0 on success, -1 on error
|
||||
*/
|
||||
int
|
||||
|
@ -897,7 +897,7 @@ create_group_entry(struct mdns_group_entry *ge, int commit)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Convert to dns string: .forked-daapd.local -> \12forked-daapd\6local
|
||||
// Convert to dns string: .myserver.local -> \12myserver\6local
|
||||
count = 0;
|
||||
for (i = ret - 1; i >= 0; i--)
|
||||
{
|
||||
|
@ -516,7 +516,7 @@ mdns_cname(char *name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Convert to dns string: .forked-daapd.local -> \12forked-daapd\6local
|
||||
// Convert to dns string: .myserver.local -> \12myserver\6local
|
||||
count = 0;
|
||||
for (i = ret - 1; i >= 0; i--)
|
||||
{
|
||||
|
@ -352,7 +352,7 @@ net_evhttp_bind(struct evhttp *evhttp, short unsigned port, const char *log_serv
|
||||
{
|
||||
if (!v6enabled)
|
||||
{
|
||||
DPRINTF(E_FATAL, L_HTTPD, "Could not bind to port %d (forked-daapd already running?)\n", httpd_port);
|
||||
DPRINTF(E_FATAL, L_HTTPD, "Could not bind to port %d (server already running?)\n", httpd_port);
|
||||
goto bind_fail;
|
||||
}
|
||||
|
||||
|
20
src/mpd.c
20
src/mpd.c
@ -117,7 +117,7 @@ enum command_list_type
|
||||
* This lists for ffmpeg suffixes and mime types are taken from the ffmpeg decoder plugin from mpd
|
||||
* (FfmpegDecoderPlugin.cxx, git revision 9fb351a139a56fc7b1ece549894f8fc31fa887cd).
|
||||
*
|
||||
* forked-daapd does not support different decoders and always uses ffmpeg or libav for decoding.
|
||||
* The server does not support different decoders and always uses ffmpeg or libav for decoding.
|
||||
* Some clients rely on a response for the decoder commands (e.g. ncmpccp) therefor return something
|
||||
* valid for this command.
|
||||
*/
|
||||
@ -704,7 +704,7 @@ parse_filter_window_params(int argc, char **argv, bool exact_match, struct query
|
||||
|
||||
if (!tagtype)
|
||||
{
|
||||
DPRINTF(E_WARN, L_MPD, "Parameter '%s' is not supported by forked-daapd and will be ignored\n", argv[i]);
|
||||
DPRINTF(E_WARN, L_MPD, "Parameter '%s' is not supported and will be ignored\n", argv[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -1210,8 +1210,8 @@ mpd_command_setvol(struct evbuffer *evbuf, int argc, char **argv, char **errmsg,
|
||||
/*
|
||||
* Command handler function for 'single'
|
||||
* Sets the repeat mode, expects argument argv[1] to be an integer.
|
||||
* forked-daapd only allows single-mode in combination with repeat, therefor the command
|
||||
* single translates (depending on the current repeat mode) into:
|
||||
* The server only allows single-mode in combination with repeat, therefore
|
||||
* the command single translates (depending on the current repeat mode) into:
|
||||
* a) if repeat off:
|
||||
* 0 = repeat off
|
||||
* 1 = repeat song
|
||||
@ -1250,7 +1250,7 @@ mpd_command_single(struct evbuffer *evbuf, int argc, char **argv, char **errmsg,
|
||||
|
||||
/*
|
||||
* Command handler function for 'replay_gain_status'
|
||||
* forked-daapd does not support replay gain, therefor this function returns always
|
||||
* The server does not support replay gain, therefor this function returns always
|
||||
* "replay_gain_mode: off".
|
||||
*/
|
||||
static int
|
||||
@ -1441,7 +1441,7 @@ mpd_command_playid(struct evbuffer *evbuf, int argc, char **argv, char **errmsg,
|
||||
id = 0;
|
||||
if (argc > 1)
|
||||
{
|
||||
//TODO [mpd] mpd allows passing "-1" as argument and simply ignores it, forked-daapd fails to convert "-1" to an unsigned int
|
||||
//TODO [mpd] mpd allows passing "-1" as argument and simply ignores it, the server fails to convert "-1" to an unsigned int
|
||||
ret = safe_atou32(argv[1], &id);
|
||||
if (ret < 0)
|
||||
{
|
||||
@ -3932,7 +3932,7 @@ mpd_command_sendmessage(struct evbuffer *evbuf, int argc, char **argv, char **er
|
||||
}
|
||||
|
||||
/*
|
||||
* Dummy function to handle commands that are not supported by forked-daapd and should
|
||||
* Dummy function to handle commands that are not supported and should
|
||||
* not raise an error.
|
||||
*/
|
||||
static int
|
||||
@ -4000,7 +4000,7 @@ mpd_command_urlhandlers(struct evbuffer *evbuf, int argc, char **argv, char **er
|
||||
* Command handler function for 'decoders'
|
||||
* MPD returns the decoder plugins with their supported suffix and mime types.
|
||||
*
|
||||
* forked-daapd only uses libav/ffmepg for decoding and does not support decoder plugins,
|
||||
* The server only uses libav/ffmepg for decoding and does not support decoder plugins,
|
||||
* therefor the function reports only ffmpeg as available.
|
||||
*/
|
||||
static int
|
||||
@ -4166,7 +4166,7 @@ static struct mpd_command mpd_handlers[] =
|
||||
{ "readmessages", mpd_command_ignore, -1 },
|
||||
{ "sendmessage", mpd_command_sendmessage, -1 },
|
||||
|
||||
// Forked-daapd commands (not supported by mpd)
|
||||
// Custom commands (not supported by mpd)
|
||||
{ "outputvolume", mpd_command_outputvolume, 3 },
|
||||
|
||||
// NULL command to terminate loop
|
||||
@ -4637,7 +4637,7 @@ mpd_listener_cb(short event_mask)
|
||||
*
|
||||
* Artwork is found by taking the uri and removing everything after the last '/'. The first
|
||||
* item in the library with a virtual path that matches *path/to* is used to read the artwork
|
||||
* file through the default forked-daapd artwork logic.
|
||||
* file through the default artwork logic.
|
||||
*/
|
||||
static void
|
||||
artwork_cb(struct evhttp_request *req, void *arg)
|
||||
|
@ -237,7 +237,7 @@ struct output_definition
|
||||
// Request a change of quality from the device
|
||||
int (*device_quality_set)(struct output_device *device, struct media_quality *quality, int callback_id);
|
||||
|
||||
// Authorize forked-daapd to use the device
|
||||
// Authorize the server to use the device
|
||||
int (*device_authorize)(struct output_device *device, const char *pin, int callback_id);
|
||||
|
||||
// Change the call back associated with a device
|
||||
|
@ -264,7 +264,7 @@ struct airplay_session
|
||||
unsigned short data_port;
|
||||
unsigned short control_port;
|
||||
unsigned short events_port;
|
||||
unsigned short timing_port; // ATV4 has this set to 0, but it is not used by forked-daapd anyway
|
||||
unsigned short timing_port; // ATV4 has this set to 0, but it is not used by us anyway
|
||||
|
||||
/* Pairing, see pair.h */
|
||||
enum pair_type pair_type;
|
||||
|
@ -351,7 +351,7 @@ struct cast_msg_basic cast_msg[] =
|
||||
.type = CONNECT,
|
||||
.namespace = NS_CONNECTION,
|
||||
.payload = "{'type':'CONNECT'}",
|
||||
// msg.payload_utf8 = "{\"origin\":{},\"userAgent\":\"forked-daapd\",\"type\":\"CONNECT\",\"senderInfo\":{\"browserVersion\":\"44.0.2403.30\",\"version\":\"15.605.1.3\",\"connectionType\":1,\"platform\":4,\"sdkType\":2,\"systemVersion\":\"Macintosh; Intel Mac OS X10_10_3\"}}";
|
||||
// msg.payload_utf8 = "{\"origin\":{},\"userAgent\":\"owntone\",\"type\":\"CONNECT\",\"senderInfo\":{\"browserVersion\":\"44.0.2403.30\",\"version\":\"15.605.1.3\",\"connectionType\":1,\"platform\":4,\"sdkType\":2,\"systemVersion\":\"Macintosh; Intel Mac OS X10_10_3\"}}";
|
||||
},
|
||||
{
|
||||
.type = CLOSE,
|
||||
@ -439,7 +439,7 @@ struct cast_msg_basic cast_msg[] =
|
||||
{
|
||||
.type = PRESENTATION,
|
||||
.namespace = NS_WEBRTC,
|
||||
.payload = "{'type':'PRESENTATION','sessionId':'%s','seqNum':%u,'title':'forked-daapd','icons':[{'url':'http://www.gyfgafguf.dk/images/fugl.jpg'}] }",
|
||||
.payload = "{'type':'PRESENTATION','sessionId':'%s','seqNum':%u,'title':'" PACKAGE_NAME "','icons':[{'url':'http://www.gyfgafguf.dk/images/fugl.jpg'}] }",
|
||||
.flags = USE_TRANSPORT_ID | USE_REQUEST_ID,
|
||||
},
|
||||
{
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
|
||||
/* This file includes much of the boilerplate code required for making an
|
||||
* audio output for forked-daapd.
|
||||
* audio output.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
@ -595,7 +595,7 @@ stream_open(struct pulse_session *ps, struct media_quality *quality, pa_stream_n
|
||||
|
||||
pa_threaded_mainloop_lock(pulse.mainloop);
|
||||
|
||||
if (!(ps->stream = pa_stream_new(pulse.context, "forked-daapd audio", &ss, NULL)))
|
||||
if (!(ps->stream = pa_stream_new(pulse.context, PACKAGE_NAME " audio", &ss, NULL)))
|
||||
goto unlock_and_fail;
|
||||
|
||||
pa_stream_set_state_callback(ps->stream, cb, ps);
|
||||
@ -932,7 +932,7 @@ pulse_init(void)
|
||||
pa_threaded_mainloop_set_name(pulse.mainloop, "pulseaudio");
|
||||
#endif
|
||||
|
||||
if (!(pulse.context = pa_context_new(pa_threaded_mainloop_get_api(pulse.mainloop), "forked-daapd")))
|
||||
if (!(pulse.context = pa_context_new(pa_threaded_mainloop_get_api(pulse.mainloop), PACKAGE_NAME)))
|
||||
goto fail;
|
||||
|
||||
pa_context_set_state_callback(pulse.context, context_state_cb, NULL);
|
||||
|
@ -211,7 +211,7 @@ struct raop_session
|
||||
/* AirTunes v2 */
|
||||
unsigned short server_port;
|
||||
unsigned short control_port;
|
||||
unsigned short timing_port; // ATV4 has this set to 0, but it is not used by forked-daapd anyway
|
||||
unsigned short timing_port; // ATV4 has this set to 0, but it is not used by us anyway
|
||||
|
||||
/* Device verification, see pair.h */
|
||||
struct pair_verify_context *pair_verify_ctx;
|
||||
|
@ -28,7 +28,7 @@
|
||||
* - maintain the playback queue
|
||||
*
|
||||
* The player thread should never be making operations that may block, since
|
||||
* that could block callers requesting status (effectively making forked-daapd
|
||||
* that could block callers requesting status (effectively making the server
|
||||
* unresponsive) and it could also starve the outputs. In practice this rule is
|
||||
* not always obeyed, for instance some outputs do their setup in ways that
|
||||
* could block.
|
||||
|
@ -76,7 +76,7 @@ struct player_history
|
||||
/* Count of song ids in the buffer */
|
||||
unsigned int count;
|
||||
|
||||
/* Circular buffer of song ids previously played by forked-daapd */
|
||||
/* Circular buffer of song ids previously played */
|
||||
uint32_t id[MAX_HISTORY_COUNT];
|
||||
uint32_t item_id[MAX_HISTORY_COUNT];
|
||||
};
|
||||
|
@ -1790,8 +1790,8 @@ initscan()
|
||||
if (ret < 0)
|
||||
{
|
||||
DPRINTF(E_LOG, L_SPOTIFY, "Spotify webapi token refresh failed. "
|
||||
"In order to use the web api, authorize forked-daapd to access "
|
||||
"your saved tracks by visiting http://forked-daapd.local:3689\n");
|
||||
"In order to use the web api, authorize the server to access "
|
||||
"your saved tracks by visiting http://owntone.local:3689\n");
|
||||
|
||||
db_spotify_purge();
|
||||
|
||||
@ -1808,7 +1808,7 @@ initscan()
|
||||
if (ret < 0)
|
||||
{
|
||||
DPRINTF(E_LOG, L_SPOTIFY, "libspotify-login failed. In order to use Spotify, "
|
||||
"provide valid credentials for libspotify by visiting http://forked-daapd.local:3689\n");
|
||||
"provide valid credentials for libspotify by visiting http://owntone.local:3689\n");
|
||||
|
||||
db_spotify_purge();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user