#!/usr/bin/perl -w

use Gtk2 '-init';

use constant TRUE=>1;
use constant FALSE=>0;

# config
$scpto = "d.minuslab.net";
$scppath = "~/dml/screenshots";

# first, perform the screenshotzor
`scrot /tmp/_shooter.png @ARGV`;

# window setup
$window = Gtk2::Window->new;
$window->set_title('Screenshooter');
$window->signal_connect(delete_event=>sub{Gtk2->main_quit; TRUE});
$window->set_default_size(250,200);

# our controls
$nameentry = Gtk2::Entry->new;
$typecombo = Gtk2::ComboBox->new_text;
$typecombo->insert_text(0, "PNG");
$typecombo->insert_text(1, "JPG");
$typecombo->set_active(0);
$desctext = Gtk2::TextView->new;

# boxen 
$vbox = Gtk2::VBox->new(FALSE, 6);
$window->add($vbox);
$bbox = Gtk2::HBox->new(FALSE, 6);

# ok/cancel buttons
$cancelbutton = Gtk2::Button->new_from_stock('gtk-cancel');
$okbutton = Gtk2::Button->new_from_stock('gtk-ok');
$cancelbutton->signal_connect(clicked=>"cancelshot");
$okbutton->signal_connect(clicked=>"doshot");
$bbox->pack_end($okbutton, FALSE, TRUE, 0);
$bbox->pack_end($cancelbutton, FALSE, TRUE, 0);

# frames
$imgframe = Gtk2::Frame->new('Image Name/Type');
$descframe = Gtk2::Frame->new('Description');

$imgframebox = Gtk2::HBox->new(FALSE, 6);
$imgframebox->pack_start($nameentry, TRUE, TRUE, 0);
$imgframebox->pack_start($typecombo, FALSE, TRUE, 0);

# add to frames
$imgframe->add($imgframebox);
$descframe->add($desctext);

# into box
$vbox->pack_start($imgframe, FALSE, TRUE, 0);
$vbox->pack_start($descframe, TRUE, TRUE, 0);
$vbox->pack_start($bbox, FALSE, TRUE, 0);

# show/main
$window->show_all;
Gtk2->main;

sub doshot {
	# grab info from shiz
	$name = $nameentry->get_text();
	$descbuf = $desctext->get_buffer();
	$desc = $descbuf->get_text($descbuf->get_start_iter(), $descbuf->get_end_iter(), TRUE);
	$ext = ( $typecombo->get_active() == 0 ) ? "png" : "jpg";

	# saferize name
	$name =~ s/[^A-Za-z0-9-_]/_/g;
	$date = `date +%Y-%m-%d-%H%M-`;
	chomp($date);
	$name = "$date$name";
	$filename = "$name.$ext";

	# hm.. if we're a jpg, we have to convert
	# fix name no matter waht
	if ( $ext eq "jpg" ) {
		`convert /tmp/_shooter.png /tmp/$filename`;
	} else {
		`mv /tmp/_shooter.png /tmp/$filename`;
	}

	# make a thumbnail
	print "Creating thumbnail... ";
	`convert -size x64 /tmp/$filename -resize x64 /tmp/$filename.thumb`;
	print "done.\n";

	# create description file
	open FIAL, ">/tmp/$filename.txt";
	print FIAL $desc;
	close FIAL;

	# hokay, so upload em
	print "Uploading thumbnail...\n";
	`scp /tmp/$filename.thumb $scpto:$scppath/.thumbs/$filename.thumb`;
	print "Uploading description...\n";
	`scp /tmp/$filename.txt $scpto:$scppath/.text/$filename.txt`;
	print "Uploading shot...\n";
	`scp /tmp/$filename $scpto:$scppath/.shots/$filename`;
	print "Done uploading.\n";
	
	# dizzone, so remove temp files
	print "Removing temp files... ";
	`rm /tmp/$filename`;
	`rm /tmp/$filename.thumb`;
	`rm /tmp/$filename.txt`;
	print "done.\n";

	# quit
	Gtk2->main_quit;
}

sub cancelshot {
	`rm /tmp/_shooter.png`;
	Gtk2->main_quit;
}
