summaryrefslogtreecommitdiff
path: root/rhimport
diff options
context:
space:
mode:
Diffstat (limited to 'rhimport')
-rwxr-xr-xrhimport398
1 files changed, 13 insertions, 385 deletions
diff --git a/rhimport b/rhimport
index caaa267..05bf4c9 100755
--- a/rhimport
+++ b/rhimport
@@ -24,22 +24,12 @@
use strict;
use Getopt::Long;
-use DBI;
-use Gtk2;
-use Gtk2::GladeXML;
use lib '/usr/local/share/rhimport/';
use rhimport;
-my $glade_file = '/usr/local/share/rhimport/rhimport.glade';
-my $DBHOST = "airplay";
-my $DBUSER = "rivendell";
-my $DBPW = "lldriven";
-my $DB = "rivendell";
my $HELP = 0;
my $FILE = "";
-my $POOL = 0;
-my $KEEPCARTS = 0;
my $DROPBOX = "";
my $LISTALLOWED = 0;
@@ -49,22 +39,16 @@ binmode(STDERR, ":utf8");
GetOptions ("help!" => \$HELP,
"file=s" => \$FILE,
- "pool!" => \$POOL,
- "keep-carts!" => \$KEEPCARTS,
"dropbox=s" => \$DROPBOX,
"list-allowed!" => \$LISTALLOWED,
) or die();
if($HELP) {
print << "EOF";
-usage: $0 --file <audio or playlist file> --pool --keep-carts --dropbox <path to dropbox> --list-allowed
-
-When called with no file and/or no dropbox the GUI gets started to select the missing parameters
+usage: $0 --file <audio or playlist file> --dropbox <path to dropbox> --list-allowed
options:
-f | --file the media file or playlist to import
- -p | --pool pool mode, import media files referneced by playlist
- -k | --keep-carts in pool mode keep existing carts instead of clearing them before import
-d | --dropbox the path to the dropbox to use
-l | --list-allowed list allowed dropboxes and exit
@@ -75,361 +59,21 @@ EOF
my $user = `/usr/bin/id -un`;
$user =~ s/\n//;
-my $dbh = DBI->connect("DBI:mysql:$DB:$DBHOST","$DBUSER","$DBPW") or die "Database Error: $DBI::errstr";
+my ($dbh, $errorstring) = rhimport::opendb();
+if(!defined $dbh) {
+ print "$errorstring\n";
+ exit 1;
+}
my @allowed_dbs = rhimport::get_dropboxes($dbh, $user);
if($LISTALLOWED) {
for my $href ( @allowed_dbs ) {
print "$href->{'NAME'} \t-> $href->{'PATH'}\n" unless $href->{'NAME'} =~ /^autoimport/;
}
- $dbh->disconnect();
+ rhimport::closedb($dbh);
exit 0;
}
-###########################################
-## GUI mode
-
-my $guixml;
-
-sub set_mode_playlist_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- $POOL = 1;
- my $l_mode = $guixml->get_widget('l_mode');
- $l_mode->set_label("<b>Musik Pool</b>");
- my $cb_clear_carts = $guixml->get_widget('cb_clear_carts');
- $cb_clear_carts->set_sensitive(1);
- my $l_file_playlist = $guixml->get_widget('l_file_playlist');
- $l_file_playlist->set_label("<b>Playlist</b>");
- my $filter = Gtk2::FileFilter->new;
- $filter->add_pattern("*.m3u");
- my $filechooser = $guixml->get_widget('filechooser');
- $filechooser->set_filter($filter);
-}
-
-sub set_mode_file_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- $POOL = 0;
- my $l_mode = $guixml->get_widget('l_mode');
- $l_mode->set_label("<b>Sendung</b>");
- my $cb_clear_carts = $guixml->get_widget('cb_clear_carts');
- $cb_clear_carts->set_sensitive(0);
- my $l_file_playlist = $guixml->get_widget('l_file_playlist');
- $l_file_playlist->set_label("<b>Datei</b>");
- my $filter = Gtk2::FileFilter->new;
- $filter->add_pattern("*.wav");
- $filter->add_pattern("*.WAV");
- $filter->add_pattern("*.ogg");
- $filter->add_pattern("*.OGG");
- $filter->add_pattern("*.flac");
- $filter->add_pattern("*.FLAC");
- $filter->add_pattern("*.fla");
- $filter->add_pattern("*.FLA");
- $filter->add_pattern("*.mp*");
- $filter->add_pattern("*.MP*");
- my $filechooser = $guixml->get_widget('filechooser');
- $filechooser->set_filter($filter);
-}
-
-sub set_mode_disabled_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- my @widgets = ('b_mode', 'cb_clear_carts', 'b_showcarts', 'b_apply', 'filechooser');
- for my $w ( @widgets ) {
- my $widget = $guixml->get_widget($w);
- $widget->set_sensitive(0) if($widget);
- }
-}
-
-sub toggle_mode_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- my $co_dropbox = $guixml->get_widget('co_dropbox');
- my $to_cart = $allowed_dbs[$co_dropbox->get_active]->{'TO_CART'} if($allowed_dbs[$co_dropbox->get_active]);
-
- my $response = 'no';
- if(($to_cart == 0 && $POOL) ||
- ($to_cart != 0 && !$POOL)) {
- my $question = "Diese Sendung hat ";
- if($to_cart != 0) {
- $question .= "nur ein Cart";
- } else {
- $question .= "mehrere Carts";
- }
- $question .= ". Soll der Modus trotzdem gewechselt werden?";
-
- my $parent_window = $guixml->get_widget('appwin');
- my $dialog = Gtk2::MessageDialog->new ($parent_window, 'destroy-with-parent',
- 'question', 'yes-no', $question);
- $dialog->set_default_response ('no');
- $response = $dialog->run;
- $dialog->destroy;
- }
- else {
- $response = 'yes';
- }
-
- if($response eq 'yes') {
- if($POOL) {
- set_mode_file_gui();
- } else {
- set_mode_playlist_gui();
- }
- }
-}
-
-my $gui_progress_cb = sub {
- my ($elapsed, $max, $text) = @_;
-
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
- my $progressbar = $guixml->get_widget('progressbar');
- $progressbar->set_text("($elapsed/$max) $text");
- $progressbar->set_fraction($elapsed/$max);
- while (Gtk2->events_pending) {
- Gtk2->main_iteration;
- }
- Gtk2::Gdk->flush;
-};
-
-my $gui_error_cb = sub {
- my ($text) = @_;
-
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
- $text .= "\n\nVorgang abbrechen?";
- my $parent_window = $guixml->get_widget('appwin');
- my $dialog = Gtk2::MessageDialog->new ($parent_window, 'destroy-with-parent',
- 'error', 'yes-no', $text);
- $dialog->set_default_response ('no');
- my $response = $dialog->run;
- $dialog->destroy;
-
- return 0 if($response eq 'yes');
-
- return 1;
-};
-
-sub start_import_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- my $b_apply = $guixml->get_widget('b_apply');
- my $b_close = $guixml->get_widget('b_close');
- $b_apply->set_sensitive(0);
- $b_close->set_sensitive(0);
-
- if(!rhimport::check_key_file()) {
- my $parent_window = $guixml->get_widget('appwin');
- my $dialog = Gtk2::MessageDialog->new ($parent_window, 'destroy-with-parent',
- 'error', 'ok', "Es wurde kein Import Key gefunden.");
- $dialog->run;
- $dialog->destroy;
- $b_apply->set_sensitive(1);
- $b_close->set_sensitive(1);
- return 0;
- }
-
- my $l_status = $guixml->get_widget('l_status');
-
- my $filechooser = $guixml->get_widget('filechooser');
- my $file = $filechooser->get_filename;
- if(!$file || -d $file) {
- if($POOL) {
- $l_status->set_label("Keine Playlist ausgewählt!");
- } else {
- $l_status->set_label("Keine Audio Datei ausgewählt!");
- }
- $b_apply->set_sensitive(1);
- $b_close->set_sensitive(1);
- return 0;
- }
- $filechooser->unselect_all;
-
- my $co_dropbox = $guixml->get_widget('co_dropbox');
- my $dropbox = $allowed_dbs[$co_dropbox->get_active]->{'PATH'} if ($allowed_dbs[$co_dropbox->get_active]);
- my $group = $allowed_dbs[$co_dropbox->get_active]->{'GROUP'} if ($allowed_dbs[$co_dropbox->get_active]);
- my $to_cart = $allowed_dbs[$co_dropbox->get_active]->{'TO_CART'} if($allowed_dbs[$co_dropbox->get_active]);
-
- $l_status->set_label("importiere von $file");
-
- my $ret;
- my $log;
- if($POOL) {
- my $cb_clear_carts = $guixml->get_widget('cb_clear_carts');
- if($cb_clear_carts->get_active) {
- $log = rhimport::clear_carts($dbh, $group, $to_cart, $gui_progress_cb);
- }
- my $import_log;
- ($ret, $import_log) = rhimport::import_playlist($file, $dropbox, $user, rhimport::get_num_carts($dbh, $group) ,$gui_progress_cb, $gui_error_cb);
- $log .= $import_log;
- } else {
- $log = rhimport::clear_carts($dbh, $group, $to_cart, $gui_progress_cb);
- my $import_log;
- ($ret, $import_log) = rhimport::import_single($file, $dropbox, $user, $gui_progress_cb, $gui_error_cb);
- $log .= $import_log;
- }
-
- my $parent_window = $guixml->get_widget('appwin');
- my $dialog;
- if(!$ret) {
- $l_status->set_label("Fehler beim Importieren");
- $dialog = Gtk2::MessageDialog->new ($parent_window, 'destroy-with-parent',
- 'error', 'ok', "Fehler beim Importieren.");
-# $dialog->add_button("Log anzeigen", 1);
- } else {
- $l_status->set_label("");
- $dialog = Gtk2::MessageDialog->new ($parent_window, 'destroy-with-parent',
- 'info', 'ok', "Der Import wurde erfolgreich abgeschlossen!");
-# $dialog->add_button("Log anzeigen", 1);
- }
- my $response = $dialog->run;
- $dialog->destroy;
-
-# if($response == 1) {
-# $dialog = Gtk2::MessageDialog->new ($parent_window, 'destroy-with-parent',
-# 'info', 'ok', $log);
-# $dialog->run;
-# $dialog->destroy;
-# }
-
- $b_apply->set_sensitive(1);
- $b_close->set_sensitive(1);
- return $ret;
-}
-
-sub show_used_carts_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- my $co_dropbox = $guixml->get_widget('co_dropbox');
- my $group = $allowed_dbs[$co_dropbox->get_active]->{'GROUP'} if($allowed_dbs[$co_dropbox->get_active]);
-
-
- my $l_status = $guixml->get_widget('l_status');
- my ($low_cart, $high_cart) = rhimport::get_cart_range($dbh, $group);
- if($low_cart eq $high_cart) {
- $l_status->set_label("Cart: $low_cart");
- } else {
- $l_status->set_label("Carts: $low_cart - $high_cart");
- }
-
- # my $usedcartswin = Gtk2::Window->new();
- # $usedcartswin or die "can't open new window";
- # $usedcartswin->resize(640,480);
- # if($low_cart eq $high_cart) {
- # $usedcartswin->set_title("Cart: $low_cart");
- # } else {
- # $usedcartswin->set_title("Carts: $low_cart - $high_cart");
- # }
- # $usedcartswin->show;
-}
-
-sub clear_status_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- my $l_status = $guixml->get_widget('l_status');
- $l_status->set_label("");
-
- my $progressbar = $guixml->get_widget('progressbar');
- $progressbar->set_text("");
- $progressbar->set_fraction(0);
-}
-
-sub dropbox_updated_gui()
-{
- if(!$guixml) {
- print STDERR "no GUI definition found!\n";
- exit 2;
- }
-
- my $co_dropbox = $guixml->get_widget('co_dropbox');
- if($allowed_dbs[$co_dropbox->get_active]) {
- my $to_cart = $allowed_dbs[$co_dropbox->get_active]->{'TO_CART'};
- my $group = $allowed_dbs[$co_dropbox->get_active]->{'GROUP'};
- my ($low_cart, $high_cart) = rhimport::get_cart_range($dbh, $group);
-
- if($to_cart == 0) {
- set_mode_playlist_gui();
- } else {
- set_mode_file_gui();
- }
- } else {
- set_mode_disabled_gui();
- }
-}
-
-if(!$FILE || !$DROPBOX) {
- Gtk2->init;
-
- $guixml = Gtk2::GladeXML->new($glade_file);
- $guixml or die "can't load glade xml file";
- require gui_callbacks;
-
- my $model = Gtk2::ListStore->new('Glib::String', 'Glib::String', 'Glib::String', 'Glib::String');
- for my $href ( @allowed_dbs ) {
- $model->set ($model->append, 0, $href->{'PATH'}, 1, $href->{'GROUP'}, 2, $href->{'TO_CART'}, 3, $href->{'NAME'});
- }
- my $co_dropbox = $guixml->get_widget('co_dropbox');
- $co_dropbox->set_model($model);
- my $renderer = Gtk2::CellRendererText->new;
- $co_dropbox->pack_start($renderer, 1);
- $co_dropbox->add_attribute($renderer, text => 3);
- $co_dropbox->set_active(0);
- dropbox_updated_gui();
-
- my $cb_clear_carts = $guixml->get_widget('cb_clear_carts');
- if($KEEPCARTS) {
- $cb_clear_carts->set_active(0);
- } else {
- $cb_clear_carts->set_active(1);
- }
-
- $guixml->signal_autoconnect_from_package('gui_callbacks');
- my $appwin = $guixml->get_widget('appwin');
- $appwin or die "can't find Main Window";
- $appwin->resize(800,600);
- $appwin->show;
-
- Gtk2->main;
- $dbh->disconnect();
- exit 0;
-}
-
-###########################################
-## command line mode
-
my $cl_error_cb = sub {
my ($text) = @_;
@@ -438,14 +82,8 @@ my $cl_error_cb = sub {
$x =~ /^n/i;
};
-rhimport::check_key_file() or die "Import Key not found, use rhimport-create-id to create one\n";
-
(-e "$FILE") or die "file '$FILE' not found\n";
-if($POOL) {
- print "will import from playlist $FILE, with user $user\n\n";
-} else {
- print "will import $FILE, with user $user\n\n";
-}
+print "will import $FILE, with user $user\n\n";
my $group = '';
my $to_cart = 0;
@@ -464,22 +102,12 @@ if($group eq '') {
my $ret;
my $log;
-if($POOL) {
- if(!$KEEPCARTS) {
- $log = rhimport::clear_carts($dbh, $group, $to_cart);
- }
-
- my $import_log;
- ($ret, $import_log) = rhimport::import_playlist($FILE, $DROPBOX, $user, rhimport::get_num_carts($dbh, $group), 0, $cl_error_cb);
- $log .= $import_log;
-} else {
- $log = rhimport::clear_carts($dbh, $group, $to_cart);
- my $import_log;
- ($ret, $import_log) = rhimport::import_single($FILE, $DROPBOX, $user, 0, $cl_error_cb);
- $log .= $import_log;
-}
+$log = rhimport::clear_carts($dbh, $group, $to_cart);
+my $import_log;
+($ret, $import_log) = rhimport::import_single($FILE, $DROPBOX, $user, 0, $cl_error_cb);
+$log .= $import_log;
-$dbh->disconnect();
+rhimport::closedb($dbh);
if(!$ret) {
exit 1;