functions.php
changeset 0 c63de9eb7045
child 2 860ba7141641
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/functions.php	Sun Mar 23 14:59:33 2008 -0400
@@ -0,0 +1,124 @@
+<?php
+
+/**
+ * Utility functions
+ * 
+ * Web control interface script for Amarok
+ * Written by Dan Fuhry - 2008
+ *
+ * This script is in the public domain. Use it for good, not evil.
+ */
+
+/**
+ * Utility/reporting functions
+ */
+ 
+/**
+ * Report a fatal error and exit
+ * @param string Error message
+ */
+
+function burnout($msg)
+{
+  echo "\x1B[31;1m[WebControl] fatal: \x1B[37;1m";
+  echo "$msg\x1B[0m\n";
+  exit(1);
+}
+
+/**
+ * Print a stylized status message, compatible with Linux consoles
+ * @param string Status message
+ */
+
+function status($msg)
+{
+  echo "\x1B[32;1m[WebControl] \x1B[32;0m$msg\x1B[0m\n";
+}
+
+/**
+ * Performs an action with DCOP.
+ * @param string DCOP component, e.g. player, playlist, playlistbrowser, ...
+ * @param string Action to perform, e.g. stop, play, ...
+ * @param string additional parameters... (NOT IMPLEMENTED)
+ * @return mixed output of DCOP command
+ */
+
+function dcop_action($component, $action)
+{
+  $tmpfile = tempnam('amaweb', '');
+  if ( !$tmpfile )
+    burnout('tempnam() failed us');
+  system("dcop amarok $component $action > $tmpfile");
+  $output = @file_get_contents($tmpfile);
+  @unlink($tmpfile);
+  $output = trim($output);
+  
+  // detect type of output
+  if ( $output == 'true' )
+    return true;
+  else if ( $output == 'false' )
+    return false;
+  else if ( preg_match('/^-?[0-9]+/', $output) )
+    return intval($output);
+  else
+    return $output;
+}
+
+/**
+ * Rebuilds the copy of the playlist in RAM
+ */
+
+function rebuild_playlist()
+{
+  // import what we need
+  global $homedir, $playlist;
+  // sync and load the playlist file
+  $playlist_file = dcop_action('playlist', 'saveCurrentPlaylist');
+  // start XML parser
+  try
+  {
+    $xml = simplexml_load_file($playlist_file);
+  }
+  catch ( Exception $e )
+  {
+    burnout("Caught exception trying to load playlist file:\n$e");
+  }
+  $attribs = $xml->attributes();
+  if ( @$attribs['product'] != 'Amarok' )
+  {
+    burnout('Playlist is not in Amarok format');
+  }
+  $playlist = array();
+  foreach ( $xml->children() as $child )
+  {
+    $attribs = $child->attributes();
+    $item = array(
+        'uri'    => $attribs['uri'],
+        'title'  => strval($child->Title),
+        'artist' => strval($child->Artist),
+        'album'  => strval($child->Album),
+        'length' => seconds_to_str(intval($child->Length))
+      );
+    $playlist[] = $item;
+  }
+}
+
+/**
+ * Converts a number to minute:second format
+ * @param int Seconds
+ * @return string format: mm:ss
+ */
+
+function seconds_to_str($secs)
+{
+  $seconds = $secs % 60;
+  $minutes = ( $secs - $seconds ) / 60;
+  $seconds = strval($seconds);
+  $minutes = strval($minutes);
+  if ( strlen($seconds) < 2 )
+    $seconds = "0$seconds";
+  if ( strlen($minutes) < 2 )
+    $minutes = "0$minutes";
+  return "$minutes:$seconds";
+}
+