* @license LGPL http://www.gnu.org/copyleft/lesser.html */ require_once 'DreamboxBouqets.php'; require_once 'Services/MediaTomb.php'; require_once 'config.php'; require_once dirname(__FILE__) . '/syncfunctions.php'; $bReally = true; echo "Synchronizing dreambox radio bouqets and mediatomb radion station list\n"; echo " fetching bouqets\n"; $arBouqets = DreamboxBouqets::fetchRadioBouqets( $GLOBALS['enigtombConfig']['dreambox']['host'] ); $mt = new Services_MediaTomb( $GLOBALS['enigtombConfig']['mediatomb']['user'], $GLOBALS['enigtombConfig']['mediatomb']['pass'], $GLOBALS['enigtombConfig']['mediatomb']['host'], $GLOBALS['enigtombConfig']['mediatomb']['port'] ); $strRadiodir = $GLOBALS['enigtombConfig']['mediatomb']['radiodir']; $radiodir = $mt->createContainerByPath($strRadiodir); /** * create bouqet/container sync list */ $arBouqetNames = array_keys($arBouqets); $arRadiodirContainers = $radiodir->getContainers(); $arContainerNames = array(); foreach ($arRadiodirContainers as $nId => $container) { $arBouqetNames[] = $container->title; $arContainerNames[$container->title] = $nId; } if (isset($GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']) && $GLOBALS['enigtombConfig']['mediatomb']['rootBouqet'] ) { $arBouqetNames[] = $GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']; $arContainerNames[$GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']] = $radiodir->id; $arRadiodirContainers[$radiodir->id] = $radiodir; } $arBouqetNames = array_unique($arBouqetNames); /** * sync bouqets and containers * Does not know about renamed bouqets */ echo " syncing bouqets and containers\n"; $arValidContainers = array(); foreach ($arBouqetNames as $strBouqetName) { if (isset($arContainerNames[$strBouqetName]) && isset($arBouqets[$strBouqetName])) { //everything is ok echo " " . $strBouqetName . " already exists, ok\n"; $nContainerId = $arContainerNames[$strBouqetName]; $arValidContainers[$nContainerId] = $arRadiodirContainers[$nContainerId]; } else if (!isset($arContainerNames[$strBouqetName])) { //container does not exist if ($strBouqetName != $GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']) { echo " creating " . $strBouqetName . "\n"; $container = $mt->createContainerByPath($strRadiodir . '/' . $strBouqetName); $arValidContainers[$container->id] = $container; } } else if (!isset($arBouqets[$strBouqetName])) { if ($strBouqetName != $GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']) { //bouqet does not exist anymore -> delete container echo " deleting container " . $strBouqetName . "\n"; if ($bReally) { $mt->deleteItem($arContainerNames[$strBouqetName]); } } } } /** * Sync radio stations */ echo " syncing stations\n"; foreach ($arValidContainers as $nContainerId => $container) { /** * Build stations sync list */ if (isset($GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']) && $GLOBALS['enigtombConfig']['mediatomb']['rootBouqet'] && $container == $radiodir ) { $strContainerTitle = $GLOBALS['enigtombConfig']['mediatomb']['rootBouqet']; } else { $strContainerTitle = $container->title; } echo " syncing stations in " . $strContainerTitle . "\n"; //existing stations in mediatomb $arStationItems = $container->getItems(0, 1000); $arStationUris = array(); $arStationItemsByUri = array(); foreach ($arStationItems as $item) { $arStationUris[] = $item->url; $arStationItemsByUri[$item->url] = $item; } unset($arStationItems); //stations in bouqet foreach ($arBouqets[$strContainerTitle] as $arStation) { $arStationUris[] = $arStation['stream']; $arBouqetStationsByUri[$arStation['stream']] = $arStation; } unset($arBouqets[$strContainerTitle]); $arStationUris = array_unique($arStationUris); //sync stations foreach ($arStationUris as $strUri) { echo ' syncing station ' . $strUri . "\n"; if (isset($arBouqetStationsByUri[$strUri]) && isset($arStationItemsByUri[$strUri])) { //station exists on both dreambox and mediatomb //update title echo " updating title and description\n"; $arTitles = enigtombGetStationTitle($arBouqetStationsByUri[$strUri]); echo " " . $arTitles['title'] . "\n"; if ($arTitles['description'] && $arTitles['description'] != $arTitles['title']) { echo " " . $arTitles['description'] . "\n"; } $arStationItemsByUri[$strUri]->title = $arTitles['title']; $arStationItemsByUri[$strUri]->description = $arTitles['description']; if ($bReally) { $arStationItemsByUri[$strUri]->save(); } } else if (!isset($arBouqetStationsByUri[$strUri])) { //station does not exist on dreambox //delete it in mediatomb echo " deleting\n"; if ($bReally) { $arStationItemsByUri[$strUri]->deleteItem(); } } else if (!isset($arStationItemsByUri[$strUri])) { //station exists on dreambox only //create it in mediatomb echo " creating\n"; $arTitles = enigtombGetStationTitle($arBouqetStationsByUri[$strUri]); echo " " . $arTitles['title'] . "\n"; if ($bReally) { $container->createExternalLink( $arTitles['title'], $strUri, $arTitles['description'], $GLOBALS['enigtombConfig']['mediatomb']['mimetype'], 'http-get', 'object.item', false ); } } } } echo "done\n"; ?>