mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-05-09 07:27 am

[dw-free] Add error message to the xposter error messages.

[commit: http://hg.dwscoalition.org/dw-free/rev/4828af364826]

Add error message to the xposter error messages.

Patch by [staff profile] mark.

Files modified:
  • bin/upgrading/en.dat
  • cgi-bin/DW/Worker/XPostWorker.pm
  • cgi-bin/LJ/Event/XPostFailure.pm
--------------------------------------------------------------------------------
diff -r 08c8842ed39b -r 4828af364826 bin/upgrading/en.dat
--- a/bin/upgrading/en.dat	Sat May 09 07:20:41 2009 +0000
+++ b/bin/upgrading/en.dat	Sat May 09 07:27:30 2009 +0000
@@ -1941,15 +1941,15 @@ event.userpic_upload.me=One of the accou
 
 event.userpic_upload.user=[[user]] uploads a new userpic
 
-event.xpost.failure.content=Crosspost to [[accountname]] failed.
-
-event.xpost.failure.title=Crosspost of <a href = "[[entryurl]]">[[entrydesc]]</a> to [[accountname]] action failed.
+event.xpost.failure.content=Crosspost to [[accountname]] failed.<br /><br />[[errmsg]]
+
+event.xpost.failure.title=Crosspost of <a href="[[entryurl]]">[[entrydesc]]</a> to [[accountname]] action failed.
 
 event.xpost.nosubject=an entry
 
 event.xpost.success.content=Crosspost to [[accountname]] successful.
 
-event.xpost.success.title=Crosspost of <a href = "[[entryurl]]">[[entrydesc]]</a> to [[accountname]] action successful.
+event.xpost.success.title=Crosspost of <a href="[[entryurl]]">[[entrydesc]]</a> to [[accountname]] action successful.
 
 fckland.ljimage=Insert/Edit Image
 
@@ -4579,7 +4579,7 @@ xpost.delete.success=Crossposted entry a
 
 xpost.edit.error=Failed to update crossposted entry at [[username]]@[[server]]:  [[error]]
 
-xpost.edit.success=Update of crosspost at [[username]]@[[server]] successful.  You can view this edited entry <a href = "[[xpostlink]]">here</a>.
+xpost.edit.success=Update of crosspost at [[username]]@[[server]] successful.  You can view this edited entry <a href="[[xpostlink]]">here</a>.
 
 xpost.error=Failed to crosspost entry to [[username]]@[[server]]:  [[error]]
 
diff -r 08c8842ed39b -r 4828af364826 cgi-bin/DW/Worker/XPostWorker.pm
--- a/cgi-bin/DW/Worker/XPostWorker.pm	Sat May 09 07:20:41 2009 +0000
+++ b/cgi-bin/DW/Worker/XPostWorker.pm	Sat May 09 07:27:30 2009 +0000
@@ -80,7 +80,11 @@ sub work {
     if ($result->{success}) {
         $sclient->insert_jobs(LJ::Event::XPostSuccess->new($u, $acctid, $ditemid)->fire_job );
     } else {
-        $sclient->insert_jobs(LJ::Event::XPostFailure->new($u, $acctid, $ditemid)->fire_job );
+        $sclient->insert_jobs(
+            LJ::Event::XPostFailure->new(
+                $u, $acctid, $ditemid, ( $result->{error} || 'Unknown error message.' )
+            )->fire_job
+        );
     }
     
     $job->completed;
diff -r 08c8842ed39b -r 4828af364826 cgi-bin/LJ/Event/XPostFailure.pm
--- a/cgi-bin/LJ/Event/XPostFailure.pm	Sat May 09 07:20:41 2009 +0000
+++ b/cgi-bin/LJ/Event/XPostFailure.pm	Sat May 09 07:27:30 2009 +0000
@@ -6,6 +6,7 @@
 #
 # Authors:
 #      Allen Petersen <allen@suberic.net>
+#      Mark Smith <mark@dreamwidth.org>
 #
 # Copyright (c) 2009 by Dreamwidth Studios, LLC.
 #
@@ -16,12 +17,32 @@ package LJ::Event::XPostFailure;
 package LJ::Event::XPostFailure;
 use strict;
 use base 'LJ::Event';
-use Carp qw(croak);
+use Carp qw/ croak /;
+use Storable qw/ nfreeze thaw /;
 
 sub new {
-    my ($class, $u, $ditemid, $acctid) = @_;
-    croak 'Not an LJ::User' unless LJ::isu($u);
-    return $class->SUPER::new($u, $ditemid, $acctid);
+    my ( $class, $u, $acctid, $ditemid, $errmsg ) = @_;
+    $u = LJ::want_user( $u )
+        or croak 'Invalid LJ::User object passed.';
+
+    # we're overloading the import_status table.  they won't notice.
+    my $sid = LJ::alloc_user_counter( $u, 'Z' );
+    if ( $sid ) {
+        # build the ref we'll store
+        my $optref = {
+            ditemid => $ditemid+0,
+            acctid => $acctid+0,
+            errmsg => $errmsg,
+        };
+
+        # now attempt to store it
+        $u->do( 'INSERT INTO import_status (userid, import_status_id, status) VALUES (?, ?, ?)',
+                undef, $u->id, $sid, nfreeze( $optref ) );
+        return $class->SUPER::new( $u, $sid );
+    }
+
+    # we failed somewhere
+    return undef;
 }
 
 # for this to be on for all users
@@ -35,10 +56,13 @@ sub always_checked { 1 }
 sub always_checked { 1 }
 
 
-# FIXME make this more useful, like include the failure message
 sub content {
-    my ($self) = @_;
-    return BML::ml('event.xpost.failure.content', { accountname => $self->account->displayname });
+    my $self = $_[0];
+    return BML::ml( 'event.xpost.failure.content',
+            {
+                accountname => $self->account->displayname,
+                errmsg => $self->errmsg,
+            } );
 }
 
 # the main title for the event
@@ -95,29 +119,53 @@ sub get_subscriptions {
     return $self->SUPER::get_subscriptions($u, $subid);
 }
 
+
 sub acctid {
-    return $_[0]->arg1;
+    return $_[0]->_optsref->{acctid};
 }
 
+
 sub ditemid {
-    return $_[0]->arg2;
+    return $_[0]->_optsref->{ditemid};
 }
+
+
+sub errmsg {
+    return $_[0]->_optsref->{errmsg};
+}
+
 
 # the account crossposted to
 sub account {
-    my ($self) = @_;
-    return $_[0]->{account} if $_[0]->{account};
-    $_[0]->{account} = DW::External::Account->get_external_account($self->u, $self->acctid);
-    return $_[0]->{account};
+    my $self = $_[0];
+    return $self->{account} ||=
+        DW::External::Account->get_external_account( $self->u, $self->acctid );
 }
+
 
 # the entry crossposted
 sub entry {
-    my ($self) = @_;
-    return $self->{entry} if $self->{entry};
-    $_[0]->{entry} = LJ::Entry->new($self->u, ( ditemid => $self->ditemid ));
-    return $self->{entry};
+    my $self = $_[0];
+    return $self->{entry} ||= LJ::Entry->new( $self->u, ditemid => $self->ditemid );
 }
 
 
+# load our options hashref which contains most of the information we
+# are actually interested in
+sub _optsref {
+    my $self = $_[0];
+    return $self->{_optsref} if $self->{_optsref};
+
+    my $u = $self->u;
+    my $item = $u->selectrow_array(
+        'SELECT status FROM import_status WHERE userid = ? AND import_status_id = ?',
+        undef, $u->id, $self->arg1
+    );
+    return undef
+        if $u->err || ! $item;
+
+    return $self->{_optsref} = thaw( $item );
+}
+
+
 1;
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org