private function updateAddon(Addon $addon, Package $package, array $versions)
{
if (!$addon->VendorID) {
$vendor = AddonVendor::get()->filter('Name', $addon->VendorName())->first();
if (!$vendor) {
$vendor = new AddonVendor();
$vendor->Name = $addon->VendorName();
$vendor->write();
}
$addon->VendorID = $vendor->ID;
}
$addon->Type = str_replace('silverstripe-', '', $package->getType());
$addon->Description = $package->getDescription();
$addon->Released = strtotime($package->getTime());
$addon->Repository = $package->getRepository();
$addon->Downloads = $package->getDownloads()->getTotal();
$addon->DownloadsMonthly = $package->getDownloads()->getMonthly();
$addon->Favers = $package->getFavers();
foreach ($versions as $version) {
$this->updateVersion($addon, $version);
}
// If there is no build, then queue one up if the add-on requires
// one.
if (!$addon->BuildQueued) {
if (!$addon->BuiltAt) {
$this->resque->queue('first_build', 'BuildAddonJob', array('id' => $addon->ID));
$addon->BuildQueued = true;
} else {
$built = (int) $addon->obj('BuiltAt')->format('U');
foreach ($versions as $version) {
if (strtotime($version->getTime()) > $built) {
$this->resque->queue('update', 'BuildAddonJob', array('id' => $addon->ID));
$addon->BuildQueued = true;
break;
}
}
}
}
$addon->LastUpdated = time();
$addon->write();
}