function wrk_sourcecfg($db, $queueargs) { $action = $queueargs['mount']['action']; unset($queueargs['mount']['action']); switch ($action) { case 'reset': $dbh = cfgdb_connect($db); $source = cfgdb_read('cfg_source', $dbh); foreach ($source as $mp) { sysCmd("umount -f \"/mnt/NAS/" . $mp['name'] . "\""); sysCmd("rmdir \"/mnt/NAS/" . $mp['name'] . "\""); } if (cfgdb_delete('cfg_source', $dbh)) { $return = 1; } else { $return = 0; } $dbh = null; break; case 'add': $dbh = cfgdb_connect($db); print_r($queueargs); unset($queueargs['mount']['id']); // format values string foreach ($queueargs['mount'] as $key => $value) { if ($key == 'error') { $values .= "'" . SQLite3::escapeString($value) . "'"; error_log(">>>>> values on line 1014 >>>>> " . $values, 0); } else { $values .= "'" . SQLite3::escapeString($value) . "',"; error_log(">>>>> values on line 1016 >>>>> " . $values, 0); } } error_log(">>>>> values on line 1019 >>>>> " . $values, 0); // write new entry cfgdb_write('cfg_source', $dbh, $values); $newmountID = $dbh->lastInsertId(); $dbh = null; if (wrk_sourcemount($db, 'mount', $newmountID)) { $return = 1; } else { $return = 0; } break; case 'edit': $dbh = cfgdb_connect($db); $mp = cfgdb_read('cfg_source', $dbh, '', $queueargs['mount']['id']); cfgdb_update('cfg_source', $dbh, '', $queueargs['mount']); sysCmd("umount -f \"/mnt/NAS/" . $mp[0]['name'] . "\""); if ($mp[0]['name'] != $queueargs['mount']['name']) { sysCmd("rmdir \"/mnt/NAS/" . $mp[0]['name'] . "\""); sysCmd("mkdir \"/mnt/NAS/" . $queueargs['mount']['name'] . "\""); } if (wrk_sourcemount($db, 'mount', $queueargs['mount']['id'])) { $return = 1; } else { $return = 0; } error_log(">>>>> wrk_sourcecfg(edit) exit status = >>>>> " . $return, 0); $dbh = null; break; case 'delete': $dbh = cfgdb_connect($db); $mp = cfgdb_read('cfg_source', $dbh, '', $queueargs['mount']['id']); sysCmd("umount -f \"/mnt/NAS/" . $mp[0]['name'] . "\""); sysCmd("rmdir \"/mnt/NAS/" . $mp[0]['name'] . "\""); if (cfgdb_delete('cfg_source', $dbh, $queueargs['mount']['id'])) { $return = 1; } else { $return = 0; } $dbh = null; break; } return $return; }
pcntl_signal(SIGTTIN, SIG_IGN); pcntl_signal(SIGHUP, SIG_IGN); // --- DEMONIZE --- // // --- INITIALIZE ENVIRONMENT --- // // change /run and session files for correct session file locking sysCmd('chmod 777 /run'); // reset DB permission sysCmd('chmod -R 777 /var/www/db'); // initialize CLI session session_save_path('/run'); // inpect session playerSession('open', $db, '', ''); // reset session file permissions sysCmd('chmod 777 /run/sess*'); // mount all sources wrk_sourcemount($db, 'mountall'); // start MPD daemon sysCmd("service mpd start"); // check Architecture $arch = wrk_getHwPlatform(); if ($arch != $_SESSION['hwplatformid']) { // reset playerID if architectureID not match. This condition "fire" another first-install process playerSession('write', $db, 'playerid', ''); } // --- INITIALIZE ENVIRONMENT --- // // --- PLAYER FIRST INSTALLATION PROCESS --- // if (isset($_SESSION['playerid']) && $_SESSION['playerid'] == '') { // register HW architectureID and playerID wrk_setHwPlatform($db); // destroy actual session playerSession('destroy', $db, '', '');
function wrk_sourcecfg($queueargs) { $action = $queueargs['mount']['action']; unset($queueargs['mount']['action']); switch ($action) { case 'reset': $source = ConfigDB::read('cfg_source'); foreach ($source as $mp) { sysCmd("umount -f '/mnt/NAS/" . $mp['name'] . "'"); sysCmd("rmdir '/mnt/NAS/" . $mp['name'] . "'"); } $return = ConfigDB::delete('cfg_source') ? 1 : 0; break; case 'add': print_r($queueargs); unset($queueargs['mount']['id']); // write new entry $newmountID = ConfigDB::write('cfg_source', array_values($queueargs['mount'])); $return = wrk_sourcemount('mount', $newmountID) ? 1 : 0; break; case 'edit': $mp = ConfigDB::read('cfg_source', '', $queueargs['mount']['id']); ConfigDB::update('cfg_source', '', $queueargs['mount']); sysCmd("umount -f '/mnt/NAS/" . $mp[0]['name'] . "'"); if ($mp[0]['name'] != $queueargs['mount']['name']) { sysCmd("rmdir '/mnt/NAS/" . $mp[0]['name'] . "'"); sysCmd("mkdir '/mnt/NAS/" . $queueargs['mount']['name'] . "'"); } $return = wrk_sourcemount('mount', $queueargs['mount']['id']) ? 1 : 0; break; case 'delete': $mp = ConfigDB::read('cfg_source', '', $queueargs['mount']['id']); sysCmd("umount -f '/mnt/NAS/" . $mp[0]['name'] . "'"); sysCmd("rmdir '/mnt/NAS/" . $mp[0]['name'] . "'"); $return = ConfigDB::delete('cfg_source', $queueargs['mount']['id']) ? 1 : 0; break; } return $return; }
} /* * Initialize environment */ // reset file permissions // TODO can this be moved to wrk_sysChmod? sysCmd('chmod 777 /run'); sysCmd('chmod 777 /run/sess*'); sysCmd('chmod 777 ' . MPD_LIB . 'WEBRADIO/*.*'); sysCmd('chmod 777 ' . MPD_LIB . 'SDCARD'); sysCmd('chmod 777 /var/www/tcmods.conf'); sysCmd('chmod 777 /var/www/playhistory.log'); sysCmd('chmod 777 /var/www/liblog.txt'); sysCmd('chmod -R 777 /var/www/db'); // mount all sources wrk_sourcemount('mountall'); // start MPD daemon with consume mode off sysCmd("service mpd start"); if (false !== ($mpd = openMpdSocket(MPD_HOST, 6600))) { sendMpdCommand($mpd, 'consume 0'); closeMpdSocket($mpd); } // - set symlink for album art lookup sysCmd("ln -s /var/lib/mpd/music /var/www/coverroot"); // load session Session::wrap(function () { // make sure session vars are set $vars = array('w_active', 'w_lock', 'w_queue', 'w_queueargs', 'debug', 'debugdata'); foreach ($vars as $var) { if (!isset($_SESSION[$var])) { $_SESSION[$var] = '';
function wrk_sourcecfg($redis, $action, $args) { runelog('function wrk_sourcecfg(' . $action . ')', $args); switch ($action) { case 'add': // unset($args->id); $args->id = $redis->incr('mountidx'); $args = (array) $args; $redis->hMset('mount_' . $args['id'], $args); $return = wrk_sourcemount($redis, 'mount', $args['id']); break; case 'edit': $mp = $redis->hGetAll('mount_' . $args->id); $args = (array) $args; $redis->hMset('mount_' . $args['id'], $args); sysCmd('mpc stop'); usleep(500000); sysCmd("umount -f \"/mnt/MPD/NAS/" . $mp['name'] . "\""); if ($mp['name'] != $args['name']) { sysCmd("rmdir \"/mnt/MPD/NAS/" . $mp['name'] . "\""); sysCmd("mkdir \"/mnt/MPD/NAS/" . $args['name'] . "\""); } $return = wrk_sourcemount($redis, 'mount', $args['id']); runelog('wrk_sourcecfg(edit) exit status', $return); break; case 'delete': $mp = $redis->hGetAll('mount_' . $args->id); sysCmd('mpc stop'); usleep(500000); sysCmd("umount -f \"/mnt/MPD/NAS/" . $mp['name'] . "\""); sleep(3); if (!empty($mp['name'])) { sysCmd("rmdir \"/mnt/MPD/NAS/" . $mp['name'] . "\""); } $return = $redis->del('mount_' . $args->id); break; case 'reset': $source = $redis->keys('mount_*'); sysCmd('systemctl stop mpd'); usleep(500000); foreach ($source as $key) { $mp = $redis->hGetAll($key); runelog('wrk_sourcecfg() internal loop $mp[name]', $mp['name']); sysCmd("umount -f \"/mnt/MPD/NAS/" . $mp['name'] . "\""); sysCmd("rmdir \"/mnt/MPD/NAS/" . $mp['name'] . "\""); $return = $redis->del($key); } // reset mount index if ($return) { $redis->del('mountidx'); } sysCmd('systemctl start mpd'); // set process priority sysCmdAsync('sleep 1 && rune_prio nice'); break; case 'mountall': $return = wrk_sourcemount($redis, 'mountall'); break; case 'umountusb': $return = sysCmd('udevil umount ' . $args); break; } return $return; }