diff --git a/Makefile.am b/Makefile.am
index e70aeadb..638d820d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
EXTRA_DIST = configure CREDITS
-SUBDIRS = src tools admin-root contrib
+SUBDIRS = src tools contrib
diff --git a/admin-root/CREDITS b/admin-root/CREDITS
deleted file mode 100644
index 926b1835..00000000
--- a/admin-root/CREDITS
+++ /dev/null
@@ -1,150 +0,0 @@
-
-I've received lots of help from people on this project.
-
-These are the people who have contributed to whatever
-small success this project enjoys (in order of contribution).
-If I've forgotten anyone, I apologize -- email me and I'll
-make it right.
-
-The Plone project
- * css files for the admin interface
-
-Aubin Paul
- * Patches for Debian package generation
- * Precompiled Debian binaries
-
-Paul Forgey
- * Tons of troubleshooting on Solaris
- * Fixes for readdir_r
- * Fixes for alignment problems in XING header parsing
-
-Paul Hubbard
- * T/S and patch testing to resolve scanning bugs
-
-David Buttrick
- * Webmastering, FAQ maintenance, Doc maintenance
-
-Hans-Christoph Steiner
- * Webmastering, FAQ maintenance, Doc maintenance
- * Amazing amounts of troubleshooting, testing on OSX 10.2
-
-David Imhoff
- * Code cleanup patches (_XOPEN_SOURCE, declaration problems)
-
-James Turner
- * Fixes for OSX 10.2
- * configure.in suggestions
-
-Hiren Joshi
- * Dynamic art code
-
-David W. Berry
- * Tons of protocol compliance fixes.
- * Browse, query, and index support
-
-Paul Kim
- * Dynamic art code for AAC
- * Various AAC meta-info cleanups
- * Compilation tag support (aac and mp3)
- * ogg/vorbis tag handling
-
-Stephen Lee
- * Patches for proper url decoding
-
-Rob Nunn
- * gentoo rc script
-
-Frank Schwichtenberg
- * patches for static playlist bug
-
-Gavin Shelley
- * patches for Solaris strftime
-
-Stephen Rubner
- * fixes for ulong ino_t
-
-Ciamac Moallemi
- * gzip content-encoding
-
-Roger Mundt
- * troubleshooting and debugging help
-
-dirkthedaring2 (?)
- * fixes for inverted playlist
- * speedups on connect
-
-Adrian Schroeter
- * fixes for AMD64
- * -Wall cleanups
-
-Timo J. Rinne
- * Server-side format conversion (on-the-fly transcoding)
-
-Herman I. May
- * Web wrangling and forums question answering
- * HTML interface fixes
-
-North Overby
- * Patches for disc number
- * alac speedups for nslu2
-
-Joe Holt
- * Fixes for web config stupidness
-
-Mark Woehrer
- * Patches for "Date Added" in iTunes xml scanner
-
-Stefan Bruns
- * Speedups for javascript in playlist page, konq fixes, css fixes
- * Fixes for mlit -> xml serialization when block len = 0
-
-blech (from the forums)
- * Fixes for iTunes 5 view persistence
-
-Phil Packer
- * Patches for returning static playlists in order
-
-Diego Penneno
- * Patches for multiple PID files to facilitate gentoo init scripts
- * configure patches
-
-Patrick Kolla
- * Popup "wizard" for smart playlists
- * Stylish new web interface look.. woohoo!
-
-slomo (from the forums)
- * Musepack tag parsing support.
-
-Anders Betner
- * Web interface mojo -- ajaxy web config and playlist editor
-
-MikeC
- * Win32 panel configurator
-
-MikeK
- * OSX Preference pane/helper, and OSX packaging
-
-Eddie Bindt
- * Dutch Translations
-
-Julien Richefeu
- * French Translations
-
-Helmut Wieser
- * German Translations
-
-Luca Paolini
- * Italian Translations
-
-Gareth Potter
- * Japanese Translations
-
-Anton Johansson
- * Swedish Translations
-
-Ian Burrell
- * configure patches to put plugins in libdir
- * RH/Centos/Fedora specfiles
-
-Stephane Moreau
- * admin page updates to make apache rewrites easier
diff --git a/admin-root/Makefile.am b/admin-root/Makefile.am
deleted file mode 100644
index 398572e1..00000000
--- a/admin-root/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-
-SUBDIRS=lib-js
-
-adminrootdir = ${pkgdatadir}/admin-root
-adminroot_DATA = ftr.html linkOpaque.gif about.html \
- gpl-license.txt linkTransparent.gif config-update.html hdr.html \
- firefly.css ff_logo_sm.gif config.html index.html required.gif \
- gpl-license.html thanks.html feedback.html \
- playlist.html playlist.js smart.html smart.js \
- smartpopup.html firefly.js CREDITS status.js \
- config.js config.xml spinner.gif spinner_stopped.gif util.js \
- pngfix.js no_access.html index.css config.css \
- xiph-license.html xiph-license.txt zlib-license.html zlib-license.txt
-
-EXTRA_DIST = ftr.html linkOpaque.gif about.html \
- gpl-license.txt linkTransparent.gif config-update.html hdr.html \
- firefly.css ff_logo_sm.gif config.html index.html required.gif \
- gpl-license.html thanks.html feedback.html \
- playlist.html playlist.js smart.html smart.js \
- smartpopup.html firefly.js CREDITS status.js \
- config.js config.xml spinner.gif spinner_stopped.gif util.js \
- pngfix.js no_access.html index.css config.css \
- xiph-license.html xiph-license.txt zlib-license.html zlib-license.txt
-
diff --git a/admin-root/about.html b/admin-root/about.html
deleted file mode 100644
index cbe0991d..00000000
--- a/admin-root/about.html
+++ /dev/null
@@ -1,56 +0,0 @@
-@include hdr.html@
-
-
About Firefly
-
-This is the administrative web interface for the Firefly Media Server,
-version @version@.
-
-
-
About
-
-Firefly is an open-source media server for the Roku SoundBridge and
-Apple iTunes. It runs on POSIX platforms as well as Win32. It supports
-server-side transcoding and other advanced features. While every effort
-is taken to ensure quality, this software is released without warranty as
-described by the GNU General Public License. See the section below
-titled "No Warranty". This work,
-although released under the GNU General Public License, is Copyright
-© 2003-2006 Ron Pedde and others. See source file headers for
-more information. See the link named
-GPL License for more details on the
-licensing of this software.
-
-
-
-The project homepage is located at
-
-http://www.fireflymediaserver.org .
-
-
-
Legal Info
-
-This program makes use of the following libraries and packages:
-
-Fabrice Bellard's FFmpeg , licensed under the GPL License
-D. Richard Hipp's SQLite database, dedicated to the public domain
-Underbit Technologies' libid3tag , licensed under the GPL License
-Jean-loup Gailly and Mark Adler's zlib , licensed under the zlib license
-Josh Coalson's libFLAC , licensed under the Xiph (BSD 3-clause) License
-xiph.org's libOgg , licensed under the Xiph (BSD 3-clause) License
-
-
-
-
No Warranty
-
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-
-@include ftr.html@
diff --git a/admin-root/config-update.html b/admin-root/config-update.html
deleted file mode 100644
index 884140ab..00000000
--- a/admin-root/config-update.html
+++ /dev/null
@@ -1,19 +0,0 @@
-@include hdr.html@
-
-Configuration Updated
-
-
-
-
- Admin Password @admin_pw@
- MP3 Password @password@
-
-
-
-
-@SERVICE-STATUS@
-
-
-
-@include ftr.html@
-
diff --git a/admin-root/config.css b/admin-root/config.css
deleted file mode 100644
index 9abc975c..00000000
--- a/admin-root/config.css
+++ /dev/null
@@ -1,51 +0,0 @@
-label {
- float: left;
- width: 11em;
- font: icon;
- padding-top: .3em;
- padding-left: 1em;
-}
-input {
- font: icon;
-}
-select {
- font: icon;
-}
-#config_path_label {
- float: left;
- width: 11em;
- font:icon;
- padding: .3em 0 .5em 1em;
-}
-#config_path {
- float: left;
- width: 40em;
- font: icon;
- padding: .3em 0 .5em 0;
-}
-.addItemHref {
- float: left;
- margin-left: 11em;
- font: icon;
- padding-left: 1.5em;
- margin-bottom: .5em;
-}
-.message_div {
- background-color: yellow;
- padding: 1em;
- border: 1px solid #8CACBB;
-}
-#messages {
- background-color: yellow;
- padding: .5em;
- border: 1px solid #8CACBB;
- width: 40em;
- float: left;
- margin-left: 1em;
-}
-#buttons {
- float: left;
-}
-#buttons input {
- width: 7em;
-}
diff --git a/admin-root/config.html b/admin-root/config.html
deleted file mode 100644
index 1f657ce0..00000000
--- a/admin-root/config.html
+++ /dev/null
@@ -1,9 +0,0 @@
-@include hdr.html@
-Configuration
-Your config file is not writable, you can not change anything using this webpage
-
-
-
-
-@include ftr.html@
diff --git a/admin-root/config.js b/admin-root/config.js
deleted file mode 100644
index 4b13fae6..00000000
--- a/admin-root/config.js
+++ /dev/null
@@ -1,611 +0,0 @@
-Event.observe(window,'load',init);
-//###TODO
-// * Disable/enable save/cancel, Add key and onchange listeners keep a note on changed items
-// * create the path/file browser
-// * better errormessage for non writable config
-// * make tabs?
-// * add warning if leaving page without saving
-
-// Config isn't defined until after the Event.observe above
-// I could have put it below Config = ... but I want all window.load events
-// at the start of the file
-var DEBUG = window.location.toString().match(/debug.*/);
-var g_messageTimeout;
-if ('debug=validate' == DEBUG) {
- DEBUG = 'validate';
-}
-function init() {
- Config.init();
-}
-var ConfigXML = {
- config: {},
- advancedSections: [],
- getItem: function (id) {
- return this.config[id];
- },
- getAllItems: function () {
- return $H(this.config).pluck('value');
- },
- addAdvancedSection: function (sectionName) {
- this.advancedSections.push(sectionName);
- },
- isAdvancedSection: function (sectionName) {
- return this.advancedSections.find(function (name) {
- return name == sectionName
- });
- },
- getAllAdvancedSections: function () {
- return this.advancedSections;
- },
- getSectionId: function (sectionName) {
- return 'firefly_'+sectionName.replace(/\ /g,'').toLowerCase();
- },
- parseXML: function(xmlDoc) {
- $A(xmlDoc.getElementsByTagName('section')).each(function (section) {
- if ('true' == section.getAttribute('advanced')) {
- // Only used by Config._showAdvancedConfig, Config._showBasicConfig
- ConfigXML.addAdvancedSection(section.getAttribute('name'));
- }
- $A(section.getElementsByTagName('item')).each(function (item) {
- var returnItem = {};
- $A(item.attributes).each(function (attr) {
- returnItem[attr.name] = attr.value;
- });
- Element.cleanWhitespace(item);
- $A(item.childNodes).each(function (node) {
- if (Element.textContent(node) == '') {
- return;
- }
- if ('options' == node.nodeName) {
- var options = [];
- $A(item.getElementsByTagName('option')).each(function (option) {
- options.push({value: option.getAttribute('value'),
- label: Element.textContent(option)});
- });
- returnItem['options'] = options;
- } else {
- returnItem[node.nodeName] = Element.textContent(node);
- }
- $A(node.attributes).each(function (attr) {
- returnItem[attr.name] = attr.value;
- });
- });
- ConfigXML.config[returnItem.id] = returnItem;
- });
- });
- }
-};
-var ConfigInitialValues = {
- values: {},
- getValue: function (id) {
- return ConfigInitialValues.values[id];
- },
- setValue: function (id,value) {
- this.values[id] = value;
- },
- parseXML: function (xmldoc) {
- // IE and w3c treat xmldoc differently make shore firstChild is firstchild of
- if (xmldoc.childNodes[1] && xmldoc.childNodes[1].nodeName == 'config') {
- sections = $A(xmldoc.childNodes[1].childNodes);
- } else {
- sections = $A(xmldoc.firstChild.childNodes);
- }
- var missingItems = [];
- sections.each(function (section) {
- var sectionName = section.nodeName;
- $A(section.childNodes).each(function (node) {
- var itemId = sectionName + ':' + node.nodeName;
- if (node.firstChild && node.firstChild.hasChildNodes()) {
- var values = [];
- $A(node.childNodes).each(function (n) {
- values.push(Element.textContent(n));
- });
- ConfigInitialValues.values[itemId] = values;
- } else {
- ConfigInitialValues.values[itemId] = Element.textContent(node);
- }
- if (!ConfigXML.getItem(itemId)) {
- missingItems.push(itemId);
- }
- });
- });
- if (missingItems.length > 0) {
- //###FIXME A bit ugly, but add a section with values from mt-daapd.conf that aren't
- // in config.xml
- ConfigXML.addAdvancedSection('missing_items');
- var frag = document.createDocumentFragment();
- missingItems.each(function (el){
- frag.appendChild(document.createTextNode(el));
- frag.appendChild(document.createElement('br'));
- });
- var outerDiv = Builder.node('div',{id: ConfigXML.getSectionId('missing_items')});
- outerDiv.appendChild(Builder.node('div',{className: 'naviheader'},'Options missing from config.xml'));
- var contentDiv = Builder.node('div',{className: 'navibox'});
- contentDiv.appendChild(document.createTextNode('The options below are in your mt-daapd.conf and Firefly uses them,'));
- contentDiv.appendChild(document.createElement('br'));
- contentDiv.appendChild(document.createTextNode("but this web page can't handle them until they are added to config.xml"));
- contentDiv.appendChild(document.createElement('br'));
- contentDiv.appendChild(document.createElement('br'));
- contentDiv.style.paddingLeft = '1em';
- contentDiv.appendChild(frag);
- outerDiv.appendChild(contentDiv);
- if (!Cookie.getVar('show_advanced_config')) {
- outerDiv.style.display = 'none';
- }
- $('theform').appendChild(outerDiv);
- }
- }
-};
-var Config ={
- configPath: '',
- init: function () {
- new Ajax.Request('config.xml',{method: 'get',onComplete: Config.storeConfigLayout});
- },
- storeConfigLayout: function (request) {
- // Need to store this until showConfig is run
- Config.tmpConfigXML = request.responseXML;
- ConfigXML.parseXML(request.responseXML);
- ConfigXML.getAllItems().each(function (item) {
- if (item.multiple) {
- //###FIXME default values on item.multiple="true" not possible
- ConfigInitialValues.setValue(item.id,[]);
- } else {
- ConfigInitialValues.setValue(item.id,item.default_value || '');
- }
- });
- new Ajax.Request('xml-rpc?method=stats',{method: 'get',onComplete: Config.updateStatus});
- },
- updateStatus: function (request) {
- Config.configPath = Element.textContent(request.responseXML.getElementsByTagName('config_path')[0]);
- Config.isWritable = Element.textContent(request.responseXML.getElementsByTagName('writable_config')[0]) == '1';
- new Ajax.Request('xml-rpc?method=config',{method: 'get',onComplete: Config.showConfig});
- },
- showConfig: function (request) {
- ConfigInitialValues.parseXML(request.responseXML);
- $A(Config.tmpConfigXML.getElementsByTagName('section')).each(function (section) {
- var head = document.createElement('div');
- head.className= 'naviheader';
- var sectionName = section.getAttribute('name');
- head.appendChild(document.createTextNode(sectionName));
- var body = document.createElement('div');
- body.className = 'navibox';
- if ('Server' == sectionName) {
- body.appendChild(Builder.node('span',{id:'config_path_label'},'Config File Location'));
- var span = Builder.node('span',{id:'config_path'});
- span.appendChild(document.createTextNode(Config.configPath));
- body.appendChild(span);
- body.appendChild(Builder.node('br'));
- body.appendChild(Builder.node('div',{style: 'clear: both;'}));
- }
- $A(section.getElementsByTagName('item')).each(function (item) {
- body.appendChild(Config._buildItem(item.getAttribute('id')));
- });
- var div = document.createElement('div');
- div.id = ConfigXML.getSectionId(sectionName);
- if (!Cookie.getVar('show_advanced_config') && ConfigXML.isAdvancedSection(sectionName)) {
- div.style.display = 'none';
- }
- div.appendChild(head);
- div.appendChild(body);
- $('theform').appendChild(div);
- });
- // Won't be using the config.xml XML doc anymore get rid of it
- Config.tmpConfigXML = '';
- if (!Config.isWritable) {
- Effect.Appear('config_not_writable_warning');
- } else {
- // Create save and cancel buttons
-// var save = Builder.node('button',{id: 'button_save', disabled: 'disabled'},'Save');
- var save = Builder.node('input',{id: 'button_save',type: 'button', value:'Save',
- style: 'font: 1.2em Verdana, Helvetica, Arial, sans-serif'});
- Event.observe(save,'click',saveForm);
- var cancel = Builder.node('input',{id: 'button_cancel',type: 'button',value:'Cancel',
- style: 'font: 1.2em Verdana, Helvetica, Arial, sans-serif'});
- Event.observe(cancel,'click',cancelForm);
- var spacer = document.createTextNode('\u00a0\u00a0');
- var buttons = $('buttons');
- if (navigator.platform.toLowerCase().indexOf('mac') != -1) {
- // We're on mac
- buttons.appendChild(cancel);
- buttons.appendChild(spacer);
- buttons.appendChild(save);
- } else {
- //###TODO What about all them unix variants?
- buttons.appendChild(save);
- buttons.appendChild(spacer);
- buttons.appendChild(cancel);
- }
- }
- var advanced = Builder.node('a',{href: 'javascript://',id:'basic_config_button'},'Show basic config');
- Event.observe(advanced,'click',Config._showBasicConfig);
- var basic = Builder.node('a',{href: 'javascript://',id:'advanced_config_button'},'Show advanced config');
- Event.observe(basic,'click',Config._showAdvancedConfig);
- if (Cookie.getVar('show_advanced_config')) {
- basic.style.display = 'none';
- } else {
- advanced.style.display = 'none';
- }
- var div = $('toggle_basic_advanced');
- div.appendChild(advanced);
- div.appendChild(basic);
- },
- _buildItem: function(itemId) {
- var frag = document.createElement('div');
- var href;
- var item = ConfigXML.getItem(itemId);
- switch(item.type) {
- case 'text':
- if (item.multiple) {
- var values = ConfigInitialValues.getValue(itemId);
- if (!values || values.length === 0) {
- values = [''];
- }
-// var parentSpan = Builder.node('span');
- values.each(function (val,i) {
- var div = document.createElement('div');
- // Crappy IE wants a width on floated elements (or maybe it was w3c requiring it)
- div.style.width = '60em';
- div.appendChild(BuildElement.input(itemId+i,itemId,
- item.name,
- val || item.default_value || '',
- item.size || 20,
- item.short_description,
- ''));
-// if (item.browse) {
-// href = Builder.node('a',{href: 'javascript://'},'Browse');
-// Event.observe(href,'click',Config._browse);
-// div.appendChild(href);
-// }
- div.appendChild(document.createTextNode('\u00a0\u00a0'));
- href = Builder.node('a',{style: 'width: 6em;',href: 'javascript://'},'Remove');
- Event.observe(href,'click',Config._removeItemEvent);
- div.appendChild(href);
- div.appendChild(Builder.node('br'));
- frag.appendChild(div);
- });
- // This is used by cancelForm to find out how
- // many options a multiple group has
-// frag.appendChild(parentSpan);
- href = Builder.node('a',{href:'javascript://',className:'addItemHref'},item.add_item_label);
- frag.appendChild(href);
- Event.observe(href,'click',Config._addItemEvent);
- frag.appendChild(Builder.node('div',{style:'clear: both'}));
- } else {
- frag.appendChild(BuildElement.input(itemId,itemId,
- item.name,
- ConfigInitialValues.getValue(itemId) || item.default_value || '',
- item.size || 20,
- item.short_description,
- ''));
-// if (item.browse) {
-// href = Builder.node('a',{href: 'javascript://'},'Browse');
-// Event.observe(href,'click',Config._browse);
-// frag.appendChild(href);
-// }
- // frag.appendChild(Builder.node('br'));
- }
- break;
- case 'select':
- frag.appendChild(BuildElement.select(itemId,
- item.name,
- item.options,
- ConfigInitialValues.getValue(itemId) || item.default_value,
- item.short_description));
-// frag.appendChild(Builder.node('br'));
- break;
- default:
- alert('This should not happen (1)');
- break;
- }
- if (!Cookie.getVar('show_advanced_config') && item.advanced) {
- frag.style.display = 'none';
- }
- frag.style.clear = 'both';
- return frag;
- },
- _addItemEvent: function (e) {
- var div = Event.element(e).previousSibling;
- Config._addItem(div);
- },
- _addItem: function(div) {
- var newSpan = div.cloneNode(true);
- var id = newSpan.getElementsByTagName('input')[0].id;
- var num = parseInt(id.match(/\d+$/));
- num++;
- id = id.replace(/\d+$/,'') + num;
-
- newSpan.getElementsByTagName('label')[0].setAttribute('for',id);
- newSpan.getElementsByTagName('input')[0].id = id;
- newSpan.getElementsByTagName('input')[0].value = '';
- newSpan.style.display = 'none';
- var hrefs = newSpan.getElementsByTagName('a');
- if ('Netscape' == navigator.appName) {
- // Firefox et al doesn't copy registered events on an element deep clone
- // Don't know if that is w3c or if IE has it right
- if (hrefs.length == 1) {
- Event.observe(hrefs[0],'click',Config._removeItemEvent);
- } else {
- Event.observe(hrefs[0],'click',Config._browse);
- Event.observe(hrefs[1],'click',Config._removeItemEvent);
- }
- }
- div.parentNode.insertBefore(newSpan,div.nextSibling);
- Effect.BlindDown(newSpan,{duration: 0.2});
- },
- _removeItemEvent: function (e) {
- var div = Event.element(e).parentNode;
- Config._removeItem(div);
- },
- _removeItem: function(div,noAnimation) {
- if (div.parentNode.getElementsByTagName('input').length > 1) {
- if (noAnimation) {
- // cancelForm uses a loop to delete elements, the loop can't wait
- // for Effect.BlindUp to finish
- Element.remove(div);
- } else {
- Effect.BlindUp(div,{duration: 0.2, afterFinish: function (){Element.remove(div);}});
- }
- } else {
- div.getElementsByTagName('input')[0].value='';
- }
- },
- _browse: function(e) {
- alert('Here goes UI to browse for files and dirs');
- },
- _showAdvancedConfig: function (e) {
- Element.toggle('advanced_config_button');
- Element.toggle('basic_config_button');
- Cookie.setVar('show_advanced_config','true',30);
- ConfigXML.getAllAdvancedSections().each(function (sectionName) {
- Effect.BlindDown(ConfigXML.getSectionId(sectionName));
- });
- ConfigXML.getAllItems().each(function (item) {
- if (item.advanced) {
- var element = $(item.id);
- if (!element) {
- // Handle options with multiple values
- $A(document.getElementsByName(item.id)).each(function (el) {
- Effect.BlindDown(el.parentNode.parentNode);
- });
- } else {
- Effect.BlindDown(element.parentNode);
- }
- }
- });
- },
- _showBasicConfig: function (e) {
- Element.toggle('advanced_config_button');
- Element.toggle('basic_config_button');
- Cookie.removeVar('show_advanced_config');
- ConfigXML.getAllAdvancedSections().each(function (sectionName) {
- Effect.BlindUp(ConfigXML.getSectionId(sectionName));
- });
- ConfigXML.getAllItems().each(function (item) {
- if (item.advanced) {
- var element = $(item.id);
- if (!element) {
- // Handle options with multiple values
- $A(document.getElementsByName(item.id)).each(function (el) {
- Effect.BlindUp(el.parentNode.parentNode);
- });
- } else {
- Effect.BlindUp(element.parentNode);
- }
- }
- });
- }
-};
-var BuildElement = {
- input: function(id,name,displayName,value,size,short_description,long_description) {
-
- var frag = document.createDocumentFragment();
- var label = document.createElement('label');
-
- label.setAttribute('for',id);
- label.appendChild(document.createTextNode(displayName));
- frag.appendChild(label);
- var input;
- if (/KHTML/.test(navigator.userAgent) && (80 == size)) {
- // Safari & Konqueror input fields gets to long
- // This is a runner up in the ugly bug fix contest
- size = 60;
- }
-
- if (Config.isWritable) {
- input = Builder.node('input',{id: id,name: name,className: 'text',
- value: value,size: size});
- } else {
- input = Builder.node('input',{id: id,name: name,className: 'text',
- value: value,size: size, disabled: 'disabled'});
- }
- if (/KHTML/.test(navigator.userAgent)) {
- // Safari & Konqueror doesn't do font: icon on inputs and selects
- input.style.fontSize = 'x-small';
- }
- frag.appendChild(input);
- frag.appendChild(document.createTextNode('\u00a0'));
- if (short_description) {
- frag.appendChild(document.createTextNode(short_description));
- }
-
- return frag;
- },
- select: function(id,displayName,options,value,short_description,long_description) {
- var frag = document.createDocumentFragment();
- var label = document.createElement('label');
- label.setAttribute('for',id);
- label.appendChild(document.createTextNode(displayName));
- frag.appendChild(label);
-
- var select = Builder.node('select',{id: id,name: id,size: 1});
- if (!Config.isWritable) {
- select.disabled = 'disabled';
- }
- $A(options).each(function (option) {
- select.appendChild(Builder.node('option',{value: option.value},
- option.label));
- });
- select.value = value;
- if (/KHTML/.test(navigator.userAgent)) {
- // Safari & Konqueror doesn't do font: icon on inputs and selects
- select.style.fontSize = 'x-small';
- }
-
- frag.appendChild(select);
- frag.appendChild(document.createTextNode('\u00a0'));
- if (short_description) {
- frag.appendChild(document.createTextNode(short_description));
- }
-
- return frag;
- }
-};
-
-function saved(req) {
- if (g_messageTimeout) {
- window.clearTimeout(g_messageTimeout);
- }
- if ('200' == Element.textContent(req.responseXML.getElementsByTagName('status')[0])) {
- $('messages').innerHTML = 'Saved';
- Effect.Appear('messages',{duration: 0.2});
- g_messageTimeout = window.setTimeout(function(){
- Effect.Fade('messages',{duration: 0.2});
- },3000);
- } else {
- $('messages').innerHTML = 'Error: ' + req.responseText;
- Effect.Appear('messages',{duration: 0.2});
- }
-}
-function saveForm() {
- var postVars = [];
- var multiple = {};
-
- $A($('theform').getElementsByTagName('select')).each(function (select) {
- if (DEBUG) {
- debug(select.id,select.value);
- } else {
- if (select.value != ConfigInitialValues.getValue(select.id)) {
- postVars.push(Form.Element.serialize(select.id));
- }
- }
- });
-
- $A($('theform').getElementsByTagName('input')).each(function (input) {
- if (ConfigXML.getItem(input.name).multiple) {
- var value = encodeURIComponent(input.value.replace(/,/g,',,'));
- if (multiple[input.name]) {
- multiple[input.name].push(value);
- } else {
- multiple[input.name] = [value];
- }
- } else {
- if (DEBUG) {
- debug(input.id,input.value);
- } else {
- if (input.value != ConfigInitialValues.getValue(input.id)) {
- postVars.push(Form.Element.serialize(input.id));
- ConfigInitialValues.setValue(input.id,input.value);
- }
- }
- }
- });
-
- $H(multiple).each(function (item) {
- if (DEBUG) {
- debug(item.key,item.value.join(','));
- } else {
- var currentValue = item.value.join(',');
- var initialValue = ConfigInitialValues.getValue(item.key).collect(function (value) {
- return encodeURIComponent(value.replace(/,/g,',,'));
- });
- if (currentValue != initialValue) {
- postVars.push(item.key + '=' + currentValue);
- ConfigInitialValues.setValue(item.key,item.value.collect(function (value) {
- return decodeURIComponent(value).replace(/,,/g,',');
- }));
- }
- }
- });
- if (DEBUG) {
- return;
- }
- if (postVars.length > 0 ) {
- new Ajax.Request('xml-rpc?method=updateconfig',
- {method: 'post',
- parameters: postVars.join('&'),
- onComplete: saved});
- }
-
- function debug(id,value) {
- var getArr = [];
- var getString;
- if ('validate' == DEBUG) {
- var a = id.split(':');
- getArr.push('section='+encodeURIComponent(a[0]));
- getArr.push('key='+encodeURIComponent(a[1]));
- getArr.push('value='+encodeURIComponent(value));
- getArr.push('verify_only=1');
- getString = 'xml-rpc?method=setconfig&' + getArr.join('&');
-
- } else {
- getString = 'xml-rpc?method=updateconfig&' + Form.Element.serialize(id);
- }
- var output = id + '=' + value;
- new Ajax.Request(getString,
- {method: 'get',
- onComplete: function(req){
- var errorString = Element.textContent(req.responseXML.getElementsByTagName('statusstring')[0]);
- if (errorString != 'Success') {
- console.log(output + ' => ' + errorString);
- }
- }});
-
-
- }
-}
-function cancelForm() {
- ConfigXML.getAllItems().each(function (item) {
- if (item.multiple) {
- var values = ConfigInitialValues.getValue(item.id);
- if (!values || values.length === 0) {
- values = [''];
- }
- var initialValuesCount = values.length;
- var currentElements = document.getElementsByName(item.id);
-var i=0;
- while (initialValuesCount < currentElements.length) {
- i++;
- if (i > 10) {
- alert('Getting dizzy; too many turns in this loop (silly errormessage 1)');
- return;
- }
- Config._removeItem(currentElements[0].parentNode,'noAnimation');
- }
- while (initialValuesCount > currentElements.length) {
- i++;
- if (i > 10) {
- alert('An important part came off (silly errormessage 2)');
- return;
- }
- Config._addItem(currentElements[currentElements.length-1].parentNode);
- }
- values.each(function (val,i){
- currentElements[i].value = val;
- });
- } else {
- //###TODO potential error a select without a default value
- $(item.id).value = ConfigInitialValues.getValue(item.id) || item.default_value || '';
- }
- $('messages').innerHTML = 'Cancelled';
- if (g_messageTimeout) {
- window.clearTimeout(g_messageTimeout);
- }
- Effect.Appear('messages',{duration: 0.2});
- g_messageTimeout = window.setTimeout(function(){
- Effect.Fade('messages',{duration: 0.2});
- },3000);
-
-
- });
- return;
-}
diff --git a/admin-root/config.xml b/admin-root/config.xml
deleted file mode 100644
index 8d617fbf..00000000
--- a/admin-root/config.xml
+++ /dev/null
@@ -1,345 +0,0 @@
-
-
-
- -
-
Server Name
-
- The name iTunes and other daap clients should see
-
-
- This is both the name of the server as advertised via Bonjour, and the
- name of the database exported via DAAP. Also know as "What shows up in
- iTunes".
-
- text
-
- -
-
Web Root
-
- text
-
- -
-
Port
-
- The port the server should run at; default is 3689
-
- text
-
- -
-
Logfile
-
- text
-
- -
-
Run As
-
- text
-
- -
-
Admin password
-
- The password for this administration interface.
-
- text
-
- -
-
Music Password
-
- The password clients need to access this server.
-
- text
-
- -
-
Compress
-
- Should browsing data be compressed on the way to the client?
-
- select
-
- No
- Yes
-
-
- -
-
Truncate Logfile
-
- Should the logfile get truncated on startup?
-
- select
-
- No
- Yes
-
-
-
- -
-
Debug Level
-
- Possible values are 0 to 9, 9 being the most detailed debug level.
-
- select
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-
-
-
-
-
- -
-
Music Folder
-
- text
-
- -
-
Extensions
-
- text
-
- -
-
Playlist File
-
- text
-
- -
-
Compilation Directories
-
- text
-
-
-
- -
-
MP3 Tag Codepage
-
- What codepage non-utf mp3 tags should be converted from (default: ISO-8859-1)
-
- text
-
- -
-
Process Playlists
-
- Should static playlists (.m3u, etc) be processed?
-
- select
-
- No
- Yes
-
-
- -
-
Process iTunes files
-
- Should iTunes xml-files be processed?
-
- select
-
- No
- Yes
-
-
- -
-
Process .m3u files
-
- Should .m3u playlists be processed?
-
- select
-
- No
- Yes
-
-
- -
-
Case Sensitive
-
- Is the filesystem case sensitive?
-
- select
-
- No
- Yes
-
-
- -
-
Ignore appledouble
-
- Skip appledouble files when scanning
-
- select
-
- No
- Yes
-
-
- -
-
Ignore dotfiles
-
- Ignore unix hidden dot files
-
- select
-
- No
- Yes
-
-
- -
-
Group compilations
-
- Compilations are grouped under "Various artist"
-
- select
-
- No
- Yes
-
-
- -
-
Follow Symlinks
-
- Should symlinks be followed when scanning directories?
-
- select
-
- No
- Yes
-
-
- -
-
Skip First Scan
-
- Should the initial boot-up scan be skipped?
-
- select
-
- No
- Yes
-
-
-
-
- -
-
Database Type
-
- select
-
- sqlite
- sqlite3
-
-
- -
-
Database Directory
-
- text
-
- -
-
Scan Type
-
- select
-
- 0 - Normal
- 1 - Aggressive
- 2 - Painfully aggressive
-
-
- -
-
Rescan Interval
-
- How often should Firefly look for new files? In seconds.
-
- text
-
- -
-
Always Scan
-
- select
-
- No
- Yes
-
-
-
-
-
- -
-
Ordered Playlists
-
- Should playlists be returned in the order specified in the playlist?
-
- select
-
- No
- Yes
-
-
- -
-
Empty strings
-
- select
-
- No
- Yes
-
-
- -
-
Supports update
-
- select
-
- No
- Yes
-
-
- -
-
Supports browse
-
- select
-
- No
- Yes
-
-
-
-
-
-
- -
-
Plugin Directory
-
- text
-
-
-
-
- -
-
SSC Program
-
- text
-
- -
-
SSC Codec Types
-
- text
-
- -
-
Never Transcode
-
- Codecs to not transcode, even if plugins are available
-
- text
-
- -
-
Always Transcode
-
- Codecs to always transcode, even if client plays it
-
- text
-
-
-
diff --git a/admin-root/favicon.ico b/admin-root/favicon.ico
deleted file mode 100644
index eeb5a025..00000000
Binary files a/admin-root/favicon.ico and /dev/null differ
diff --git a/admin-root/feedback.html b/admin-root/feedback.html
deleted file mode 100644
index a21e923c..00000000
--- a/admin-root/feedback.html
+++ /dev/null
@@ -1,105 +0,0 @@
-@include hdr.html@
-
-Feedback
-
-
-Here you can send feedback on your mt-daapd installation to the developer.
-
-
-
-
-@include ftr.html@
-
diff --git a/admin-root/ff_logo_sm.gif b/admin-root/ff_logo_sm.gif
deleted file mode 100644
index 5b210aee..00000000
Binary files a/admin-root/ff_logo_sm.gif and /dev/null differ
diff --git a/admin-root/firefly.css b/admin-root/firefly.css
deleted file mode 100644
index 3362a132..00000000
--- a/admin-root/firefly.css
+++ /dev/null
@@ -1,167 +0,0 @@
-/* General */
-
-body
-{ background: #ffffff;
- font: 0.7em Verdana, Helvetica, Arial, sans-serif;
- color: #000000;
- margin: 0;
- padding: 0;
-}
-#main_table {
- border-width: 0;
-}
-img {
- border: 0px;
-}
-
-/*
-div.ministatus
-{ text-align: right;
- padding: 1em;
-}
-*/
-
-a
-{ color: blue;
- text-decoration: none;
-}
-
-a:hover
-{ color: blue;
- text-decoration: underline;
-}
-
-/* Navigation */
-div.naviheader {
- background-color: #A3C1E8;
- padding: 0.5em 0em 0.5em 1em;
- margin: 1em 0em 0em 0em;
- font-weight: bold;
- border-color: #A3C1E8;
- border-style: solid;
- border-width: 1px 1px 0 1px;
-}
-
-div.navibox
-{ padding: 0.5em 0em 0.5em 0em;
- margin: 0em 0em 1em 0em;
- border-color: #A3C1E8;
- border-style: solid;
- border-width: 0 1px 1px 1px;
- background-color: #f0f0f0;
-}
-
-
-/* Main */
-
-h1,h2,h3
-{ border-bottom: 1px solid #A3C1E8;
-}
-
-
-p.license {
- text-align: justify;
-}
-
-pre {
- font-size: 120%;
-}
-
-.playlistfield {
- width: 300px;
-}
-
-table {
- border: 1px solid #A3C1E8;
-}
-
-th {
- font-weight: bold;
- padding: 0 1em 0 1em;
- background: #A3C1E8;
- color: #000000;
- text-align: left;
-}
-
-td {
- padding: 0 1em 0 1em;
-}
-
-#navigation {
- float: left;/*74A8F5*/
- background-color: #A3C1E8;
- padding-top: 1em;
- height: 500px;
-}
-#navigation ul {
- padding: 0;
- margin: 0;
-}
-#navigation li {
- padding: 0;
- margin: 0;
- list-style-type: none;
-}
-#navigation li a {
- font-size: 120%;
- display: block;
- width: 12em;
- text-decoration:none;
- color: #000000;
- padding: 2px 0.5em 2px 0.5em;
- border-color: #ffffff;
- border-width: 1px 0 1px 0;
- border-style: solid;
-}
-#navigation li a:hover {
- background-color: #F2BB73;
- color: #000000;
-/* border: 1px solid #F47D24;*/
-}
-#navigation li a.naviselected {
- background-color: #ffffff;
-}
-.links {
- padding-top: 1em;
- padding-left: .5em;
-}
-#tagline {
- padding: 0.25em 0 0.25em 0.5em;
- border-color: #F47D24;
- border-style: solid;
- border-width: 1px 0 1px 0;
- background-color: #F2BB73
-}
-#firefly_head {
- background-color: #f0f0f0;
- padding-top: 4px;
- padding-left: .5em;
-}
-#spinner {
- margin-left: 1em;
-}
-/* config.html */
-#toggle_basic_advanced {
- font: icon !important;
-}
-/* smart.html */
-#pl_editor {
- width: 400px;
-}
-#pl_editor label {
- float: left;
- width: 7em;
- font: icon;
- padding-top: .3em;
- padding-left: 1em;
-}
-
-#playlist_buttons {
- float: right;
-}
-#pl_warning {
- background-color: yellow;
- padding: 1em;
- border: 1px solid #8CACBB;
- width: 40em;
-}
\ No newline at end of file
diff --git a/admin-root/firefly.js b/admin-root/firefly.js
deleted file mode 100644
index 49c9afd8..00000000
--- a/admin-root/firefly.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/* JavaScript file containing basic stuff */
-
-var reqStatus;
-var globalStatus = new Array();
-
-function popUp(URL)
-{ day = new Date();
- id = day.getTime();
- eval("pagemtdaapdplPop = window.open(URL, 'mtdaapdple', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=500,height=240,left=320,top=448');");
-}
-
-/* Temporary stuff follows */
-
-function processStatus()
-{ globalStatus['statistics'] = new Array();
- var xmldoc = reqStatus.responseXML;
-}
-
-
-function reqStatusStateChange()
-{ if(reqStatus.readyState == 4)
- { if(reqStatus.status == 200)
- { processStatus();
- }
- }
-}
-
-function getStatusXML(url, async)
-{ // branch for native XMLHttpRequest object
- if (window.XMLHttpRequest)
- { reqStatus = new XMLHttpRequest();
- reqStatus.onreadystatechange = reqStatusStateChange;
- reqStatus.open("GET", url, async);
- return reqStatus.send(null);
- // branch for IE/Windows ActiveX version
- } else if (window.ActiveXObject)
- { reqStatus = new ActiveXObject("Microsoft.XMLHTTP");
- if (reqStatus)
- { reqStatus.onreadystatechange = reqStatusStateChange;
- reqStatus.open("GET", url, async);
- return reqStatus.send();
- }
- }
-}
-
-
diff --git a/admin-root/ftr.html b/admin-root/ftr.html
deleted file mode 100644
index e72c1a3c..00000000
--- a/admin-root/ftr.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-