* Copyright (C) 2010, StatusNet, Inc.
*
* Importer class for Delicious.com backups
- *
+ *
* PHP version 5
*
* This program is free software: you can redistribute it and/or modify
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
-
class DeliciousBackupImporter extends QueueHandler
{
/**
*
* @return string transport string
*/
-
function transport()
{
return 'dlcsback';
*
* @return boolean success value
*/
-
function handle($data)
{
list($user, $body) = $data;
- $doc = $this->importHTML($body);
+ try {
+ $doc = $this->importHTML($body);
+ } catch (ClientException $cex) {
+ // XXX: message to the user
+ common_log(LOG_WARNING, $cex->getMessage());
+ return true;
+ }
+
+ // If we can't parse it, it's no good
+
+ if (empty($doc)) {
+ return true;
+ }
$dls = $doc->getElementsByTagName('dl');
if ($dls->length != 1) {
- throw new ClientException(_("Bad import file."));
+ // XXX: message to the user
+ common_log(LOG_WARNING, 'Bad input file');
+ return true;
}
$dl = $dls->item(0);
case 'dd':
$dd = $child;
- // This <dd> contains a description for the bookmark in
- // the preceding <dt> node.
- $saved = $this->importBookmark($user, $dt, $dd);
+ if (!empty($dt)) {
+ // This <dd> contains a description for the bookmark in
+ // the preceding <dt> node.
+ $saved = $this->importBookmark($user, $dt, $dd);
+ }
$dt = null;
$dd = null;
common_log(LOG_INFO, 'Skipping the <p> in the <dl>.');
break;
default:
- common_log(LOG_WARNING,
+ common_log(LOG_WARNING,
"Unexpected element $child->tagName ".
" found in import.");
}
/**
* Import a single bookmark
- *
+ *
* Takes a <dt>/<dd> pair. The <dt> has a single
* <a> in it with some non-standard attributes.
- *
+ *
* A <dt><dt><dd> sequence will appear as a <dt> with
- * anothe <dt> as a child. We handle this case recursively.
+ * anothe <dt> as a child. We handle this case recursively.
*
* @param User $user User to import data as
* @param DOMElement $dt <dt> element
*
* @return Notice imported notice
*/
-
function importBookmark($user, $dt, $dd = null)
{
$as = $dt->getElementsByTagName('a');
if ($as->length == 0) {
- throw new ClientException(_("No <A> tag in a <DT>."));
+ // TRANS: Client exception thrown when a bookmark in an import file is incorrectly formatted.
+ throw new ClientException(_m("No <A> tag in a <DT>."));
}
$a = $as->item(0);
$private = $a->getAttribute('private');
if ($private != 0) {
- throw new ClientException(_('Skipping private bookmark.'));
+ // TRANS: Client exception thrown when a bookmark in an import file is private.
+ throw new ClientException(_m('Skipping private bookmark.'));
}
if (!empty($dd)) {
$this->fixListItem($node);
}
}
-
}