E2-Interface

 view release on metacpan or  search on metacpan

Scratchpad.pm  view on Meta::CPAN

use warnings;
use Carp;
use E2::Ticker;

our @ISA = ("E2::Ticker");
our $VERSION = "0.32";
our $DEBUG; *DEBUG = *E2::Interface::DEBUG;

sub new {
	my $arg = shift;
	my $class = ref($arg) || $arg;

	my $self = $class->SUPER::new( @_ );

	$self->{text} = undef;
	$self->{user} = undef;
	$self->{shared} = undef;

	return $self;
}

sub text   { return $_[0]->{text}   }
sub user   { return $_[0]->{user}   }
sub shared { return $_[0]->{shared} }

sub load {
	my $self = shift or croak "Usage: scratch_pad E2SCRATCHPAD [, USER ]";
	my $user_id = shift;
	my %opt;

	warn "E2::Scratchpad::load"	if $DEBUG > 1;

	$opt{scratch} = $user_id	if $user_id;

	my $handlers = {
		'scratchtxt' => sub {
			(my $a, my $b) = @_;
			$self->{text} = $b->text;
			$self->{user} = $b->{att}->{user};
			$self->{shared} = $b->{att}->{user};
		}
	};

	$self->{text} = undef;
	$self->{user} = undef;
	$self->{shared} = undef;

	return $self->thread_then( 
		[
			\&E2::Ticker::parse,
			$self,
			'scratch',
			$handlers,
			[],	# dummy value for array
			%opt
		],
		sub { return $self->user ? 1 : 0 }
	);
}

sub update {
	my $self = shift or croak "Usage: update E2SCRATCHPAD [ TEXT ] [, SHARE ]";
	my $text = shift;
	my $share = shift;

	warn "E2::Scratchpad::update"		if $DEBUG > 1;
	
	# Must be logged in AND either updating the text or the share
	# (or both)

	if( ! $self->logged_in ) {
		warn "Unable to update scratchpad: not logged in" if $DEBUG;
		return undef;
	}
	if( ! defined $text && ! defined $share ) {
		warn "Nothing to update" if $DEBUG;
		return undef;
	}

	my %req = (
		node => 'E2 Scratch Pad',
		skratchsubmit => 1,
		sexisgood => 1,
		submit => 'Update!'
	);

	if( defined $text ) {
		$req{skratch} = $text;
	}

	if( defined $share ) {
		# ...
	}

	$self->thread_then(
		[ \&E2::Interface::process_request, $self, %req ],
		sub {
			# FIXME: test for success
			return 1;
		}
	);
}

1;
__END__

=head1 NAME

E2::Scratchpad - A module for loading and setting a user's E2 Scratch Pad.

=head1 SYNOPSIS

	use E2::Scratchpad;
	use E2::User; # We need to get a user's user_id

	my $scratch = new E2::Scratchpad;

	# Load nate's scratchpad

	my $user = new E2::User;
	$user->load( 'nate' )



( run in 1.102 second using v1.01-cache-2.11-cpan-39bf76dae61 )