Browse Source

Remove code duplication, refs #444

Jordi Boggiano 10 years ago
parent
commit
cc6088858b

+ 3 - 4
src/Packagist/WebBundle/Controller/WebController.php

@@ -713,20 +713,19 @@ class WebController extends Controller
         );
 
         try {
-            $data['downloads']['global'] = $this->get('packagist.download_manager')->getDownloads($package);
+            $data['downloads']['total'] = $this->get('packagist.download_manager')->getDownloads($package);
             $data['favers'] = $this->get('packagist.favorite_manager')->getFaverCount($package);
         } catch (ConnectionException $e) {
-            $data['downloads']['global'] = null;
+            $data['downloads']['total'] = null;
             $data['favers'] = null;
         }
 
         foreach ($versions as $version) {
             try {
-                $data['downloads']['versions'][$version->getVersion()] = $this->get('packagist.download_manager')->getVersionDownloads($package, $version);
+                $data['downloads']['versions'][$version->getVersion()] = $this->get('packagist.download_manager')->getDownloads($package, $version);
             } catch (ConnectionException $e) {
                 $data['downloads']['versions'][$version->getVersion()] = null;
             }
-
         }
 
         $response = new Response(json_encode(array('package' => $data)), 200);

+ 10 - 35
src/Packagist/WebBundle/Model/DownloadManager.php

@@ -30,42 +30,13 @@ class DownloadManager
     }
 
     /**
-     * Gets the total, monthly, and daily download counts for a package.
+     * Gets the total, monthly, and daily download counts for an entire package or optionally a version.
      *
-     * @param \Packagist\WebBundle\Entity\Package|int $package
+     * @param \Packagist\WebBundle\Entity\Package|int      $package
+     * @param \Packagist\WebBundle\Entity\Version|int|null $version
      * @return array
      */
-    public function getDownloads($package)
-    {
-        if ($package instanceof Package) {
-            $package = $package->getId();
-        }
-
-        $date = new \DateTime();
-        $keys = array('dl:'.$package);
-        for ($i = 0; $i < 30; $i++) {
-            $keys[] = 'dl:' . $package . ':' . $date->format('Ymd');
-            $date->modify('-1 day');
-        }
-
-        $vals = $this->redis->mget($keys);
-        $result = array(
-            'total' => (int) array_shift($vals) ?: 0,
-            'monthly' => (int) array_sum($vals) ?: 0,
-            'daily' => (int) $vals[0] ?: 0,
-        );
-
-        return $result;
-    }
-
-    /**
-     * Gets the total, monthly, and daily download counts for a package's version
-     *
-     * @param \Packagist\WebBundle\Entity\Package|int $package
-     * @param \Packagist\WebBundle\Entity\Version|int $version
-     * @return array
-     */
-    public function getVersionDownloads($package, $version)
+    public function getDownloads($package, $version = null)
     {
         if ($package instanceof Package) {
             $package = $package->getId();
@@ -75,10 +46,14 @@ class DownloadManager
             $version = $version->getId();
         }
 
+        if ($version !== null) {
+            $version = '-'.$version;
+        }
+
         $date = new \DateTime();
-        $keys = array('dl:'.$package.':'.$version);
+        $keys = array('dl:'.$package . $version);
         for ($i = 0; $i < 30; $i++) {
-            $keys[] = 'dl:' . $package . ':' . $version . ':' . $date->format('Ymd');
+            $keys[] = 'dl:' . $package . $version . ':' . $date->format('Ymd');
             $date->modify('-1 day');
         }