From ccb290cb6831d519f7be530f9ad00a24d9663d8f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 21 Dec 2010 11:09:01 -0500 Subject: [PATCH] Break up delicious import into a queue manager by bookmark --- plugins/Bookmark/BookmarkPlugin.php | 8 ++ plugins/Bookmark/deliciousbackupimporter.php | 63 ++++------ .../Bookmark/deliciousbookmarkimporter.php | 108 ++++++++++++++++++ plugins/Bookmark/importbookmarks.php | 7 +- 4 files changed, 141 insertions(+), 45 deletions(-) create mode 100644 plugins/Bookmark/deliciousbookmarkimporter.php diff --git a/plugins/Bookmark/BookmarkPlugin.php b/plugins/Bookmark/BookmarkPlugin.php index 900dc7651b..6bd38a8c12 100644 --- a/plugins/Bookmark/BookmarkPlugin.php +++ b/plugins/Bookmark/BookmarkPlugin.php @@ -134,6 +134,7 @@ class BookmarkPlugin extends Plugin return false; case 'BookmarkForm': case 'DeliciousBackupImporter': + case 'DeliciousBookmarkImporter': include_once $dir.'/'.strtolower($cls).'.php'; return false; default: @@ -286,6 +287,13 @@ class BookmarkPlugin extends Plugin return true; } + function onEndInitializeQueueManager($qm) + { + $qm->connect('dlcsback', 'DeliciousBackupImporter'); + $qm->connect('dlcsbkmk', 'DeliciousBookmarkImporter'); + return true; + } + /** * Plugin version data * diff --git a/plugins/Bookmark/deliciousbackupimporter.php b/plugins/Bookmark/deliciousbackupimporter.php index 6ab87b5212..01b996bbe5 100644 --- a/plugins/Bookmark/deliciousbackupimporter.php +++ b/plugins/Bookmark/deliciousbackupimporter.php @@ -34,8 +34,6 @@ if (!defined('STATUSNET')) { exit(1); } -require_once INSTALLDIR . '/lib/apiauth.php'; - /** * Importer class for Delicious bookmarks * @@ -47,8 +45,19 @@ require_once INSTALLDIR . '/lib/apiauth.php'; * @link http://status.net/ */ -class DeliciousBackupImporter +class DeliciousBackupImporter extends QueueHandler { + /** + * Transport of the importer + * + * @return string transport string + */ + + function transport() + { + return 'dlcsback'; + } + /** * Import an in-memory bookmark list to a user's account * @@ -59,14 +68,15 @@ class DeliciousBackupImporter * a bunch of
's, occasionally with
's. * There are sometimes

's lost inside. * - * @param User $user User whose feed we're going to fill - * @param string $body Body of the file + * @param array $data pair of user, text * - * @return void + * @return boolean success value */ - function importBookmarks($user, $body) + function handle($data) { + list($user, $body) = $data; + $doc = $this->importHTML($body); $dls = $doc->getElementsByTagName('dl'); @@ -117,6 +127,8 @@ class DeliciousBackupImporter $dt = $dd = null; } } + + return true; } /** @@ -152,40 +164,9 @@ class DeliciousBackupImporter } } - $as = $dt->getElementsByTagName('a'); - - if ($as->length == 0) { - throw new ClientException(_("No tag in a

.")); - } - - $a = $as->item(0); - - $private = $a->getAttribute('private'); - - if ($private != 0) { - throw new ClientException(_('Skipping private bookmark.')); - } - - if (!empty($dd)) { - $description = $dd->nodeValue; - } else { - $description = null; - } - - $title = $a->nodeValue; - $url = $a->getAttribute('href'); - $tags = $a->getAttribute('tags'); - $addDate = $a->getAttribute('add_date'); - $created = common_sql_date(intval($addDate)); - - $saved = Notice_bookmark::saveNew($user, - $title, - $url, - $tags, - $description, - array('created' => $created)); - - return $saved; + $qm = QueueManager::get(); + + $qm->enqueue(array($user, $dt, $dd), 'dlcsbkmk'); } /** diff --git a/plugins/Bookmark/deliciousbookmarkimporter.php b/plugins/Bookmark/deliciousbookmarkimporter.php new file mode 100644 index 0000000000..686e1a39c0 --- /dev/null +++ b/plugins/Bookmark/deliciousbookmarkimporter.php @@ -0,0 +1,108 @@ +. + * + * @category Bookmark + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Importer class for Delicious bookmarks + * + * @category Bookmark + * @package StatusNet + * @author Evan Prodromou + * @copyright 2010 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class DeliciousBookmarkImporter extends QueueHandler +{ + /** + * Return the transport for this queue handler + * + * @return string 'dlcsbkmk' + */ + + function transport() + { + return 'dlcsbkmk'; + } + + /** + * Handle the data + * + * @param array $data array of user, dt, dd + * + * @return boolean success value + */ + + function handle($data) + { + list($user, $dt, $dd) = $data; + + $as = $dt->getElementsByTagName('a'); + + if ($as->length == 0) { + throw new ClientException(_("No tag in a
.")); + } + + $a = $as->item(0); + + $private = $a->getAttribute('private'); + + if ($private != 0) { + throw new ClientException(_('Skipping private bookmark.')); + } + + if (!empty($dd)) { + $description = $dd->nodeValue; + } else { + $description = null; + } + + $title = $a->nodeValue; + $url = $a->getAttribute('href'); + $tags = $a->getAttribute('tags'); + $addDate = $a->getAttribute('add_date'); + $created = common_sql_date(intval($addDate)); + + $saved = Notice_bookmark::saveNew($user, + $title, + $url, + $tags, + $description, + array('created' => $created)); + + return true; + } +} diff --git a/plugins/Bookmark/importbookmarks.php b/plugins/Bookmark/importbookmarks.php index 991329dd6d..5518b00e97 100644 --- a/plugins/Bookmark/importbookmarks.php +++ b/plugins/Bookmark/importbookmarks.php @@ -83,13 +83,12 @@ function getBookmarksFile() } try { - $dbi = new DeliciousBackupImporter(); - $user = getUser(); - $html = getBookmarksFile(); - $dbi->importBookmarks($user, $html); + $qm = QueueManager::get(); + + $qm->enqueue(array($user, $html), 'dlcsback'); } catch (Exception $e) { print $e->getMessage()."\n"; -- 2.39.5