mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-06 03:49:56 +02:00
Comitted initial Rio Player Plugin. This is going to need a lot of work ;)
This commit is contained in:
parent
2e0f0a31e5
commit
1681e9eef3
11 changed files with 2152 additions and 0 deletions
35
contrib/plugins/RioPlayer/README
Normal file
35
contrib/plugins/RioPlayer/README
Normal file
|
@ -0,0 +1,35 @@
|
|||
This is a crappy readme for the Rio Player plugin
|
||||
|
||||
Work in progress... Plugin isn't functional yet..
|
||||
|
||||
INSTALLATION
|
||||
|
||||
A full helpfile will be available at http://ampache.bountysource.com/wiki as soon as possible
|
||||
|
||||
|
||||
NFS Setup
|
||||
|
||||
Edit you're /etc/exports and add the line below.
|
||||
|
||||
/your/nfs/path (rw,no_root_squash)
|
||||
|
||||
Create a directory in your NFS root with the ip address of your box as the folder name like;
|
||||
/your/nfs/path/192.168.0.6
|
||||
untar the mercury.arf in this folder with the command tar xf mercury.arf this file can be found in the normal Audio Receiver
|
||||
setup ("c:\Program Files\Audio Receiver") when unchanged.
|
||||
|
||||
APACHE setup
|
||||
|
||||
Add this to your apache configuration;
|
||||
|
||||
Alias /layout/ "<ampache_root>/modules/rio/layout/"
|
||||
Alias /query "<ampache_root>/modules/rio/rio.php"
|
||||
Alias /results "<ampache_root>/modules/rio/rio.php"
|
||||
AliasMatch ^/content/ "<ampache_root>/modules/rio/rio.php"
|
||||
AliasMatch ^/favourites/ "<ampache_root>/modules/rio/rio.php"
|
||||
AliasMatch ^/list/ "<ampache_root>/modules/rio/rio.php"
|
||||
AliasMatch ^/tags "<ampache_root>/modules/rio/rio.php"
|
||||
|
||||
Ampache Setup
|
||||
|
||||
Copy the modules directory to the root of ampache.
|
87
contrib/plugins/RioPlayer/RioPlayer.plugin.php
Normal file
87
contrib/plugins/RioPlayer/RioPlayer.plugin.php
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright (c) 2001 - 2006 Ampache.org
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License v2
|
||||
as published by the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
class AmpacheRioPlayer {
|
||||
|
||||
var $name ='Rio Player';
|
||||
var $description ='Sets up ampache so a Rio Player can access it';
|
||||
var $url ='';
|
||||
var $version ='000001';
|
||||
var $min_ampache ='333001';
|
||||
var $max_ampache ='333005';
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* This function does nothing...
|
||||
*/
|
||||
function PluginRioPlayer() {
|
||||
|
||||
return true;
|
||||
|
||||
} // PluginLastfm
|
||||
|
||||
/**
|
||||
* install
|
||||
* This is a required plugin function it inserts the required preferences
|
||||
* into Ampache
|
||||
*/
|
||||
function install() {
|
||||
|
||||
/* We need to insert the new preferences */
|
||||
|
||||
$sql = "INSERT INTO preferences (`name`,`value`,`description`,`level`,`type`,`catagory`) " .
|
||||
"VALUES ('rio_querylimit','3000','Rio Player Query Limit','100','integer','system')";
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
$sql = "INSERT INTO preferences (`name`,`value`,`description`,`level`,`type`,`catagory`) " .
|
||||
"VALUES ('rio_track_stats','0','Rio Player Track Stats','100','boolean','system')";
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
$sql = "INSERT INTO preferences (`name`,`value`,`description`,`level`,`type`,`catagory`) " .
|
||||
"VALUES ('rio_user','','Rio Player Global User','100','string','system')";
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
$sql = "INSERT INTO preferences (`name`,`value`,`description`,`level`,`type`,`catagory`) " .
|
||||
"VALUES ('rio_global_stats','0','Rio Player Group Stats','100','boolean','system')";
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
fix_all_users_prefs();
|
||||
|
||||
} // install
|
||||
|
||||
/**
|
||||
* uninstall
|
||||
* This is a required plugin function it removes the required preferences from
|
||||
* the database returning it to its origional form
|
||||
*/
|
||||
function uninstall() {
|
||||
|
||||
/* We need to remove the preivously added preferences */
|
||||
|
||||
$sql = "DELETE FROM preferences WHERE name='rio_querylimit' OR name='rio_track_stats' OR name='rio_user' OR name='rio_global_stats'";
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
fix_all_users_prefs();
|
||||
|
||||
} // uninstall
|
||||
|
||||
} // end AmpacheRioPlayer
|
||||
?>
|
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/all_info
Normal file
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/all_info
Normal file
Binary file not shown.
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/big_title
Normal file
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/big_title
Normal file
Binary file not shown.
5
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/index
Normal file
5
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/index
Normal file
|
@ -0,0 +1,5 @@
|
|||
/layout/en_UK/all_info=All Info
|
||||
/layout/en_UK/remaining=Remaining Time
|
||||
/layout/en_UK/scope=Scope View
|
||||
/layout/en_UK/inverse_scope=Inverse Scope
|
||||
/layout/en_UK/big_title=Big Title
|
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/inverse_scope
Normal file
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/inverse_scope
Normal file
Binary file not shown.
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/remaining
Normal file
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/remaining
Normal file
Binary file not shown.
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/scope
Normal file
BIN
contrib/plugins/RioPlayer/modules/rio/layout/en_UK/scope
Normal file
Binary file not shown.
161
contrib/plugins/RioPlayer/modules/rio/rio.conf
Normal file
161
contrib/plugins/RioPlayer/modules/rio/rio.conf
Normal file
|
@ -0,0 +1,161 @@
|
|||
de_private_playlists=0
|
||||
|
||||
|
||||
// When doing filtered queries, should we match from the beginning or anywhere?
|
||||
// eg. Should "bea" match "The Beatles" (0) or only "Beatles" (1)
|
||||
// 0=do not filter from beginning
|
||||
// 1=filter from beginning (default)
|
||||
|
||||
filter_from_beginning=1
|
||||
|
||||
|
||||
// The reciver can hang or reboot on large queries. Use this setting to specify a Query Limit.
|
||||
// eg. query_limit=3000 to limit large queries to 3000 entries. This is the default.
|
||||
// The breaking point varies possibly depending on specific data returned and usage conditions (that use cache etc.?)
|
||||
// If your rio hangs or reboots on some queries, try lowering this number.
|
||||
// This entry should be an integer > 0
|
||||
|
||||
query_limit=3000
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// RECEIVER STATS
|
||||
// ==============
|
||||
// You can treat each receiver as individual ampache users, or group all receivers into a single user.
|
||||
// All usernames must be valid, existing ampache users.
|
||||
// Basically this tries to make a receiver behave like a specific ampache user, and share stats and ACLs etc. with it.
|
||||
|
||||
// First you have to enable receiver stats.
|
||||
// If disabled, ampache will not track any play stats or impose any sort of filters on the receivers, in
|
||||
// which case the unit is simply levraging ampache's database, but operating outside of ampache itself.
|
||||
//
|
||||
// This will associate a receiver with an ampache user (more details below) and try to associate as many
|
||||
// user specifc preferences as possible including 'most popular' lists, playlists and eventually ACLs etc.
|
||||
// If you set track_receiver_stats=1, then you must configure the rest of this section. Otherwise this section is ignored.
|
||||
// 0=Disable
|
||||
// 1=Enable (default)
|
||||
|
||||
track_receiver_stats=1
|
||||
|
||||
|
||||
// Next you must specify if you want to assocaiate each with specific ampache users as individuals,
|
||||
// or group alll receivers to a single ampache user.
|
||||
// Note that for individual receiver association this to be reliable, your DHCP server should be configured to always
|
||||
// assign a specific IP to a specifc receiver, based on it's MAC address. Otherwise a receiver could have multiple IPs,
|
||||
// or IPs could bounce between receivers, in which case tracking individually will be ineffective.
|
||||
// 0=Track receivers individually (default)
|
||||
// 1=Group receivers together
|
||||
|
||||
group_receivers_together=0
|
||||
|
||||
|
||||
// Next you must specify if you want ampache to automatically create the users to associate the receivers with.
|
||||
// If enabled, then whenever a new unit is seen, an associated ampache user will be created, if it doesn't already exist.
|
||||
// If you have specifed the username in this config file, that username will be used, otherwise a default
|
||||
// username will be created in the form of 'rio-<dotted_ip_address>', like 'rio-192.168.0.10'
|
||||
// If you specified group_receivers_together=1, then a user for the IP '0.0.0.0' will be created.
|
||||
// Automatically created users will have their access level set as 'disabled' and a random password will be set, since
|
||||
// the receiver doesn't actually 'log in'.
|
||||
// If you want to modify the user access level or password you can do so in the ampache web interface as any Admin user.
|
||||
// If you do not enable this setting, then you MUST specify all receivers by IP (or 0.0.0.0) and assign a username,
|
||||
// which you've previously created in ampache.
|
||||
// 0=User will manually create receiver-mappings and manually create those user accounts
|
||||
// 1=Users will be automatically created for new units (default)
|
||||
//
|
||||
// NOTE: If you let users be automatically created, the rest of this setup is easy and can be ignored
|
||||
// otherwise it's up to you to make everything work the way you want.
|
||||
// 0=You have to create ampache users manually for the receivers
|
||||
// 1=Users will be automatically created for you (default)
|
||||
|
||||
automatically_create_users=1
|
||||
|
||||
|
||||
// Finally you specify each of your receivers and an associated ampache username to assign their play stats to.
|
||||
// If you specified automatically_create_users=0, you MUST do this for each receiver.
|
||||
// otherwise you can simply let the system auto-create the users with default usernames.
|
||||
// Remember, if you set group_receivers_together=1, then you MUST create an entry for 0.0.0.0
|
||||
// if you also specified automatically_create_users=0
|
||||
// The format is:
|
||||
// rio_user_<dotted_ip_address_of_receiver>=<ampache_username>
|
||||
//
|
||||
// eg:
|
||||
// rio_user_0.0.0.0=rio (special address for group_receivers_together=1)
|
||||
// rio_user_192.168.0.10=bedroom
|
||||
//
|
||||
// If not user specified, any automatically created username will be 'rio-<dotted_ip_address>'
|
||||
// eg:
|
||||
// 'all receivers if grouped' would be 'rio-0.0.0.0'
|
||||
// '192.168.0.10' would be 'rio-192.168.0.10'
|
||||
//
|
||||
// Note: You can specify an existing ampache user, to update that user's stats as well as inherit it's Most Popular lists etc.
|
||||
|
||||
rio_user_0.0.0.0=rio
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// DYNAMIC PLAYLISTS
|
||||
// -----------------
|
||||
// These playlists are generated on the fly based on usage data and newest album info etc. in the
|
||||
// same manner as those in the ampache web interface.
|
||||
// For each playlist, specify the maximum number of entries you want to be retreived for that list.
|
||||
// Setting a particular playlist to 0 removes it from the UI entirely
|
||||
// Note that in order to use 'user' spcific playlists, you must have track_receiver_stats=1 above
|
||||
|
||||
playlist_global_most_popular_songs=50
|
||||
playlist_user_most_popular_songs=50
|
||||
|
||||
|
||||
// These playlists contain each track from the album.
|
||||
// The value indicates how many albums you want on the list. You can have up to 100 each.
|
||||
|
||||
// They are preceded by a 3-letter code to indicate what type it is:
|
||||
// new - Newest Albums
|
||||
// gAl - Most Popular Albums (Global)
|
||||
// gAr - Most Popular Artists (Global)
|
||||
// uAl - Most Popular Albums (User)
|
||||
// uAr - Most Popular Artists (User)
|
||||
|
||||
playlist_newest_albums=5
|
||||
playlist_global_most_popular_albums=5
|
||||
playlist_user_most_popular_albums=5
|
||||
playlist_global_most_popular_artists=5
|
||||
playlist_user_most_popular_artists=5
|
||||
|
||||
|
||||
// If you want to print divider lines "-----" between each playlist section,
|
||||
// to make navigating large lists a bit easier, set this:
|
||||
// 0=Don't print divider lines (default)
|
||||
// 1=Print divider lines
|
||||
|
||||
playlist_dividers=1
|
||||
|
||||
|
||||
|
||||
|
||||
// FAVORITES
|
||||
// ---------
|
||||
// You can dynamically populate the "favorites" list, acessible via the "List" button on the receiver's
|
||||
// remote control. This list can have up to 100 entries TOTAL, a limitiation of the hardware. Only the first
|
||||
// 100 entries will be used.
|
||||
// Specify how many of each type you want to appear on the list.
|
||||
|
||||
favorites_newest_albums=5
|
||||
favorites_global_most_popular_albums=5
|
||||
favorites_user_most_popular_albums=5
|
||||
favorites_global_most_popular_artists=5
|
||||
favorites_user_most_popular_artists=5
|
||||
|
||||
|
||||
// If you want to print divider/header lines "---<section>---" between each favorites section, set this:
|
||||
// 0=Don't print divider lines (default)
|
||||
// 1=Print divider lines
|
||||
|
||||
favorites_dividers=1
|
||||
|
||||
|
||||
|
||||
|
1759
contrib/plugins/RioPlayer/modules/rio/rio.php
Normal file
1759
contrib/plugins/RioPlayer/modules/rio/rio.php
Normal file
File diff suppressed because it is too large
Load diff
105
contrib/plugins/RioPlayer/ssdp.pl
Executable file
105
contrib/plugins/RioPlayer/ssdp.pl
Executable file
|
@ -0,0 +1,105 @@
|
|||
#!/usr/bin/perl -T -w
|
||||
|
||||
#
|
||||
# UDP server for auto-configuration of Dell Audio Radio.
|
||||
#
|
||||
# Listens on UDP port 21075 for SSDP requests and
|
||||
# replies to point the client box to the appropriate
|
||||
# server.
|
||||
#
|
||||
# Typically put this is /etc/ssdp.pl and run it from
|
||||
# /etc/rc.d/rc.local (or equiv). This runs as a
|
||||
# daemon and consumes few resources. The client box
|
||||
# sends out a couple of requests when it powers up
|
||||
# and none otherwise.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use POSIX;
|
||||
use IO::Socket;
|
||||
|
||||
$ENV{PATH} = "/usr/bin:/bin:/usr/local/bin";
|
||||
$ENV{BASH_ENV} = "/root/.bashrc";
|
||||
|
||||
sub mlog($) {
|
||||
my $msg = shift;
|
||||
system("logger -t SSDP \"$msg\"");
|
||||
}
|
||||
|
||||
sub mdie($) {
|
||||
my $msg = shift;
|
||||
mlog $msg;
|
||||
exit 1;
|
||||
}
|
||||
|
||||
sub sig_handle($) {
|
||||
mdie "SSDP server exit on signal";
|
||||
}
|
||||
|
||||
# $mserve_ip must be a dotted-quad unless you modify the client
|
||||
# NFS image to include /etc/resolv.conf.
|
||||
#
|
||||
my $ssdp_port = 21075;
|
||||
my $mserve_ip = "10.60.60.16"; # web and NFS server IP address
|
||||
my $mserve_port = "80"; # web server port
|
||||
|
||||
#
|
||||
# The box makes two different requests. One comes from the kernel
|
||||
# during initial booting, the second comes from the player application
|
||||
# after the second boot when the player starts.
|
||||
#
|
||||
# The respones are different for Linux. If there is a port number
|
||||
# on the first "linux" request then the client box will use that port
|
||||
# for portmapper lookups, which is generally bad when talking to
|
||||
# another linux box.
|
||||
#
|
||||
# The second "player" response includes a port number that indicates
|
||||
# the port number to use for HTTP music related requests. I use
|
||||
# port 81 and setup a virtual server in Apache to respond to music
|
||||
# requests, but you may want to do this differently.
|
||||
#
|
||||
my $player_request = "^upnp:uuid:1D274DB0-F053-11d3-BF72-0050DA689B2F";
|
||||
my $linux_request = "^upnp:uuid:1D274DB1-F053-11d3-BF72-0050DA689B2F";
|
||||
|
||||
my (
|
||||
$pid, # PID of server
|
||||
$server, # Handle for server socket
|
||||
$him, # peer making UDP request
|
||||
$datagram, # Packet from client
|
||||
);
|
||||
|
||||
#
|
||||
# Cruft to become a daemon
|
||||
#
|
||||
$pid = fork;
|
||||
exit if $pid;
|
||||
mlog "SSDP server started";
|
||||
mdie "Could not fork: $!" unless defined($pid);
|
||||
POSIX::setsid() or mdie "Cannot start new session: $!";
|
||||
$SIG{INT} = \&sig_handle;
|
||||
$SIG{TERM} = \&sig_handle;
|
||||
$SIG{HUP} = \&sig_handle;
|
||||
$0 = "ssdp";
|
||||
|
||||
#
|
||||
# Get a socket to be a UDP server
|
||||
$server = IO::Socket::INET->new(LocalPort => $ssdp_port,
|
||||
Proto => "udp")
|
||||
or mdie "Couldn't be a udp server on port $ssdp_port : $@\n";
|
||||
|
||||
#
|
||||
# Wait for requests and respond if appropriate
|
||||
#
|
||||
while ($him = $server->recv($datagram, 256, 0)) {
|
||||
my ($port, $iaddr) = sockaddr_in($server->peername);
|
||||
my $peer = inet_ntoa($iaddr);
|
||||
$datagram =~ s/\n//g;
|
||||
if ($datagram =~ $linux_request) {
|
||||
mlog "Linux request from $peer.";
|
||||
$server->send("http://$mserve_ip/descriptor.xml\n");
|
||||
}
|
||||
if ($datagram =~ $player_request) {
|
||||
mlog "Player request from $peer.";
|
||||
$server->send("http://$mserve_ip:$mserve_port/descriptor.xml\n");
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue