<commit_before>#! /usr/bin/env perl
###################################################
#
#  Copyright (C) 2010-2011  <NAME> <<EMAIL>>, <NAME> <<EMAIL>> and Shutter Team
#
#  This file is part of Shutter.
#
#  Shutter is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  Shutter is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with Shutter; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
###################################################

package Lutim;

use lib $ENV{'SHUTTER_ROOT'}.'/share/shutter/resources/modules';

use utf8;
use strict;
use POSIX qw/setlocale/;
use Locale::gettext;
use Glib qw/TRUE FALSE/;

use Shutter::Upload::Shared;
our @ISA = qw(Shutter::Upload::Shared);

my $d = Locale::gettext->domain("shutter-upload-plugins");
$d->dir( $ENV{'SHUTTER_INTL'} );

my %upload_plugin_info = (
    'module'        => "Lutim",
	'url'           => "http://lut.im/",
	'registration'  => "-",
	'description'   => $d->get( "Upload screenshots to lut.im" ),
	'supports_anonymous_upload'	 => TRUE,
	'supports_authorized_upload' => FALSE,
);

binmode( STDOUT, ":utf8" );
if ( exists $upload_plugin_info{$ARGV[ 0 ]} ) {
	print $upload_plugin_info{$ARGV[ 0 ]};
	exit;
}

###################################################

sub new {
	my $class = shift;

	#call constructor of super class (host, debug_cparam, shutter_root, gettext_object, main_gtk_window, ua)
	my $self = $class->SUPER::new( shift, shift, shift, shift, shift, shift );

	bless $self, $class;
	return $self;
}

sub init {
	my $self = shift;

	#do custom stuff here
	use WWW::Mechanize;
	use HTTP::Status;
	use HTTP::Request::Common 'POST';

	$self->{_mech} = WWW::Mechanize->new( agent => "$self->{_ua}", timeout => 20 );
	$self->{_http_status} = undef;

	return TRUE;
}

sub upload {
	my ( $self, $upload_filename, $username, $password ) = @_;

	#store as object vars
	$self->{_filename} = $upload_filename;
	$self->{_username} = $username;
	$self->{_password} = $password;

	my $filesize     = -s $upload_filename;
	my $max_filesize = 15360000;
	if ( $filesize > $max_filesize ) {
		$self->{_links}{'status'} = 998;
		$self->{_links}{'max_filesize'} = sprintf( "%.2f", $max_filesize / 1024 ) . " KB";
		return %{ $self->{_links} };
	}

	utf8::encode $upload_filename;
	utf8::encode $password;
	utf8::encode $username;

	eval{

		my $url = "http://lut.im";
		$self->{_mech}->get($url);
		$self->{_http_status} = $self->{_mech}->status();

		if ( is_success( $self->{_http_status} ) ) {

			$self->{_mech}->request(POST $url,
				Content_Type => 'form-data',
					Content      => [
						file =>  [$upload_filename],
						format => 'json'
					],
			);

			$self->{_http_status} = $self->{_mech}->status();

			if ( is_success( $self->{_http_status} ) ) {
				my $html_file = $self->{_mech}->content;

				my @links = $html_file =~ m/"short":"([^"]+)"/;
				#my @links = $html_file =~ m{ <textarea>(.*)</textarea> }gx;

				$self->{_links}{'view_image'} = $url.'/'.$links[0];
				$self->{_links}{'download_link'} = $url.'/'.$links[0].'?dl';
				$self->{_links}{'twitter_link'} = $url.'/'.$links[0].'?t';

				if ( $self->{_debug} ) {
					print "The following links were returned by http://lut.im:\n";
					print $self->{_links}{'view_image'},"\n";
					print $self->{_links}{'download_link'},"\n";
					print $self->{_links}{'twitter_link'},"\n";
				}

				$self->{_links}{'status'} = $self->{_http_status};
			} else {
				$self->{_links}{'status'} = $self->{_http_status};
			}

		}else{
			$self->{_links}{'status'} = $self->{_http_status};
		}

	};
	if($@){
		$self->{_links}{'status'} = $@;
	}

	return %{ $self->{_links} };

}

1;<commit_msg>Rewrite the shutter plugin from the official documentation<commit_after>#! /usr/bin/env perl
###################################################
#
#  Copyright (C) 2010-2011  <NAME> <<EMAIL>>, <NAME> <<EMAIL>> and Shutter Team
#
#  This file is part of Shutter.
#
#  Shutter is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  Shutter is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with Shutter; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
###################################################

package Lutim;

use lib $ENV{'SHUTTER_ROOT'}.'/share/shutter/resources/modules';

use utf8;
use strict;
use POSIX qw/setlocale/;
use Locale::gettext;
use Glib qw/TRUE FALSE/;

use Shutter::Upload::Shared;
our @ISA = qw(Shutter::Upload::Shared);

my $d = Locale::gettext->domain("shutter-upload-plugins");
$d->dir( $ENV{'SHUTTER_INTL'} );

my %upload_plugin_info = (
    'module'                        => "Lutim",
    'url'                           => "https://lut.im/",
    'registration'                  => "-",
    'name'                          => "Lutim",
    'description'                   => "Upload screenshots to Lutim",
    'supports_anonymous_upload'     => TRUE,
    'supports_authorized_upload'    => FALSE,
    'supports_oauth_upload'         => FALSE,
);

binmode( STDOUT, ":utf8" );
if ( exists $upload_plugin_info{$ARGV[ 0 ]} ) {
    print $upload_plugin_info{$ARGV[ 0 ]};
    exit;
}


#don't touch this
sub new {
    my $class = shift;

    #call constructor of super class (host, debug_cparam, shutter_root, gettext_object, main_gtk_window, ua)
    my $self = $class->SUPER::new( shift, shift, shift, shift, shift, shift );

    bless $self, $class;
    return $self;
}

#load some custom modules here (or do other custom stuff)
sub init {
    my $self = shift;

    use JSON;
    use LWP::UserAgent;
    use HTTP::Request::Common;

    return TRUE;
}

#handle
sub upload {
    my ( $self, $upload_filename, $username, $password ) = @_;

    #store as object vars
    $self->{_filename} = $upload_filename;
    $self->{_username} = $username;
    $self->{_password} = $password;

    utf8::encode $upload_filename;
    utf8::encode $password;
    utf8::encode $username;

    my $json = JSON->new();

    my $browser = LWP::UserAgent->new(
        'timeout'    => 20,
        'keep_alive' => 10,
        'env_proxy'  => 1,
    );


    #upload the file
    eval{

        my $url     = 'https://lut.im/';
        my $request = HTTP::Request::Common::POST(
            $url,
            Content_Type => 'multipart/form-data',
            Content      => [
                file   => [$upload_filename],
                format => 'json'
            ]
        );

        my $response = $browser->request($request);

        if ($response->is_success) {
            my $hash = $json->decode($response->decoded_content);

            if ($hash->{success}) {
                my $link = $url.$hash->{msg}->{short};
                $self->{_links}->{'view_image'}    = $link;
                $self->{_links}->{'download_link'} = $link.'?dl';
                $self->{_links}->{'twitter_link'}  = $link.'?t';

                #set success code (200)
                $self->{_links}{'status'} = 200;
            } else {
                $self->{_links}{'status'} = $hash->{msg}->{msg};

            }
        } else {
            $self->{_links}{'status'} = $response->status_line;
        }
    };
    if($@){
        $self->{_links}{'status'} = $@;
    }

    #and return links
    return %{ $self->{_links} };
}

1;
{'fraction_non_alphanumeric': 0.1959921798631476, 'fraction_numerical': 0.011485826001955034, 'mean_word_length': 3.058006941001487, 'pattern_counts': {'":': 3, '<': 17, '<?xml version=': 0, '>': 117, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5176904', 'n_tokens_mistral': 2979, 'n_tokens_neox': 2747, 'n_words': 699}