summaryrefslogtreecommitdiff
path: root/modules/gallery/helpers/gallery_task.php
diff options
context:
space:
mode:
authorAndy Staudacher <andy.st@gmail.com>2010-01-22 01:16:16 -0800
committerAndy Staudacher <andy.st@gmail.com>2010-01-22 01:16:16 -0800
commit120c9c749e175cc6c67ae628ee1a8a967a8ddbcc (patch)
tree68f41aa6995ccb61c76873acab5f814aae796085 /modules/gallery/helpers/gallery_task.php
parent07ba5fe43aaa53be840b1842fe2eb4fc63ee7686 (diff)
Change "fetch translations" task to fetch them in batches.
The request limit was in place already, but the client didn't respect it before, leading to unhappy users in case they had lots of 3rd party modules installed, or more than 2-3 locales enabled. This is all taken care of now.
Diffstat (limited to 'modules/gallery/helpers/gallery_task.php')
-rw-r--r--modules/gallery/helpers/gallery_task.php31
1 files changed, 19 insertions, 12 deletions
diff --git a/modules/gallery/helpers/gallery_task.php b/modules/gallery/helpers/gallery_task.php
index 3a705027..b3b79e06 100644
--- a/modules/gallery/helpers/gallery_task.php
+++ b/modules/gallery/helpers/gallery_task.php
@@ -122,7 +122,7 @@ class gallery_task_Core {
$start = microtime(true);
$data = Cache::instance()->get("update_l10n_cache:{$task->id}");
if ($data) {
- list($dirs, $files, $cache) = unserialize($data);
+ list($dirs, $files, $cache, $num_fetched) = unserialize($data);
}
$i = 0;
@@ -130,6 +130,7 @@ class gallery_task_Core {
case "init": // 0%
$dirs = array("gallery", "modules", "themes", "installer");
$files = $cache = array();
+ $num_fetched = 0;
$task->set("mode", "find_files");
$task->status = t("Finding files");
break;
@@ -161,7 +162,7 @@ class gallery_task_Core {
}
break;
- case "scan_files": // 10% - 90%
+ case "scan_files": // 10% - 70%
while (($file = array_pop($files)) && microtime(true) - $start < 0.5) {
$file = DOCROOT . $file;
switch (pathinfo($file, PATHINFO_EXTENSION)) {
@@ -179,25 +180,31 @@ class gallery_task_Core {
$task->status = t2("Scanning files: scanned 1 file",
"Scanning files: scanned %count files", $total_files - count($files));
- $task->percent_complete = 10 + 80 * ($total_files - count($files)) / $total_files;
+ $task->percent_complete = 10 + 60 * ($total_files - count($files)) / $total_files;
if (empty($files)) {
$task->set("mode", "fetch_updates");
$task->status = t("Fetching updates");
- $task->percent_complete = 90;
+ $task->percent_complete = 70;
}
break;
- case "fetch_updates": // 90% - 100%
- l10n_client::fetch_updates();
- $task->done = true;
- $task->state = "success";
- $task->status = t("Translations installed/updated");
- $task->percent_complete = 100;
+ case "fetch_updates": // 70% - 100%
+ // Send fetch requests in batches until we're done
+ $num_remaining = l10n_client::fetch_updates($num_fetched);
+ if ($num_remaining) {
+ $total = $num_fetched + $num_remaining;
+ $task->percent_complete = 70 + 30 * ((float) $num_fetched / $total);
+ } else {
+ $task->done = true;
+ $task->state = "success";
+ $task->status = t("Translations installed/updated");
+ $task->percent_complete = 100;
+ }
}
- if ($task->percent_complete < 100) {
+ if (!$task->done) {
Cache::instance()->set("update_l10n_cache:{$task->id}",
- serialize(array($dirs, $files, $cache)));
+ serialize(array($dirs, $files, $cache, $num_fetched)));
} else {
Cache::instance()->delete("update_l10n_cache:{$task->id}");
}