The following commit has been merged in the master branch:
commit ca0a07a9e160a1a977e5ca02b362474ab221882e
Author: Andrei Zavada <[email protected]>
Date:   Wed Nov 7 01:37:34 2012 +0200

    apply some bash-fu to control downloading process properly

diff --git a/data/Makefile.am b/data/Makefile.am
index a2968ba..162009e 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -8,7 +8,8 @@ ui_DATA := \
        aghermann.png \
        edfhed.glade \
        aghermann.gresource \
-       idle-bg.svg
+       idle-bg.svg \
+       experiment-dl.sh
 
 CLEANFILES := \
        aghermann.desktop edfhed-gtk.desktop
@@ -20,7 +21,8 @@ EXTRA_DIST := \
        aghermann.gresource.xml \
        session-chooser.glade main.glade dialogs.glade \
        sf.glade mf.glade edfhed.glade \
-       idle-bg.svg equations1.png equation-uc.png
+       idle-bg.svg equations1.png equation-uc.png \
+       experiment-dl.sh
 
 GRESOURCES := \
        session-chooser.glade main.glade dialogs.glade \
diff --git a/data/experiment-dl.sh b/data/experiment-dl.sh
new file mode 100644
index 0000000..b79a748
--- /dev/null
+++ b/data/experiment-dl.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+set -e
+URL="http://johnhommer.com/academic/code/aghermann/Experiment.tar.bz2";
+TARBALL=Experiment.tar.bz2
+echo "
+Now downloading sample data.
+Press Ctl-C to interrupt.
+"
+function kill_wget
+{
+    kill $!
+}
+trap kill_wget SIGTERM SIGINT
+wget -c $URL &
+wait %1
+
+tar xjf $TARBALL
+rm -f $TARBALL
+
+echo "Sample data set downloaded and unpacked"
+read -p "Press <Enter> to close this window..."
diff --git a/src/ui/mw/mw-splash.cc b/src/ui/mw/mw-splash.cc
index 648410b..ae8ee16 100644
--- a/src/ui/mw/mw-splash.cc
+++ b/src/ui/mw/mw-splash.cc
@@ -34,18 +34,20 @@ bDownload_clicked_cb( GtkButton*, gpointer userdata)
 }
 
 void
-download_process_child_exited_cb( VteTerminal*, gpointer userdata)
+download_process_child_exited_cb( VteTerminal *terminal, gpointer userdata)
 {
        auto& ED = *(aghui::SExpDesignUI*)userdata;
-       if ( ED.dl_watch_busyblock ) {
-               delete ED.dl_watch_busyblock;
-               ED.dl_watch_busyblock = nullptr;
-               ED.ED->scan_tree( bind 
(&aghui::SExpDesignUI::sb_main_progress_indicator, &ED,
-                                       placeholders::_1, placeholders::_2, 
placeholders::_3));
-               ED.populate( false);
-       } else
-               FAFA;
-               //throw runtime_error ("Who's here?");
+       ED.set_wMainWindow_interactive( true, true);
+       int exit_status = vte_terminal_get_child_exit_status( terminal);
+       if ( exit_status != 0 )
+               aghui::pop_ok_message(
+                       ED.wMainWindow,
+                       "Download failed",
+                       "Exit status %d. Try again next time.", exit_status);
+       ED.dl_pid = -1;
+       ED.ED->scan_tree( bind 
(&aghui::SExpDesignUI::sb_main_progress_indicator, &ED,
+                               placeholders::_1, placeholders::_2, 
placeholders::_3));
+       ED.populate( false);
 }
 
 } // extern "C"
@@ -109,55 +111,44 @@ try_download()
        gtk_container_foreach( (GtkContainer*)cMeasurements,
                               (GtkCallback) gtk_widget_destroy,
                               NULL);
-       const char
-               *url = 
"http://johnhommer.com/academic/code/aghermann/Experiment.tar.bz2";,
-               *archive_file = "Experiment.tar.bz2";
-       snprintf_buf( " wget -c \"%s\" && "
-                     " tar xjf \"%s\" && "
-                     " rm -f \"%s\" && "
-                     " echo \"Sample data set downloaded and unpacked\" && "
-                     " read -p \"Press <Enter> to close this window...\"",
-                     url, archive_file, archive_file);
-
        auto tTerm = (VteTerminal*)vte_terminal_new();
-       // (dl_watch_busyblock = new aghui::SBusyBlock (wMainWindow),
-       dl_watch_busyblock = nullptr;
        g_signal_connect( tTerm, "child-exited",
                          (GCallback)download_process_child_exited_cb,
                           this);
        gtk_box_pack_start( (GtkBox*)cMeasurements,
                            (GtkWidget*)tTerm,
                            TRUE, FALSE, 0);
+       set_wMainWindow_interactive( false, true);
        // punch a hole for VteTerminal for any user ^C
-       gtk_widget_set_sensitive( (GtkWidget*)tTerm, TRUE);
+       gtk_widget_set_sensitive( (GtkWidget*)cMeasurements, TRUE);
        gtk_widget_show_all( (GtkWidget*)cMeasurements);
-       GPid pid;
+       gtk_widget_grab_focus( (GtkWidget*)tTerm);
        GError *Error = NULL;
-       char *argv[] = {
-               vte_get_user_shell(),
+       const char *argv[] = {
+               "/bin/sh", // vte_get_user_shell(),
                "-c",
-               __buf__,
+               "source " PACKAGE_DATADIR "/" PACKAGE "/experiment-dl.sh",
                NULL
        };
        vte_terminal_fork_command_full(
                tTerm,
                VTE_PTY_DEFAULT,
                ED->session_dir().c_str(),
-               argv,
+               const_cast<char**> (argv),
                NULL, // char **envv,
                (GSpawnFlags)G_SPAWN_DO_NOT_REAP_CHILD, // GSpawnFlags 
spawn_flags,
                NULL, // GSpawnChildSetupFunc child_setup,
                NULL, // gpointer child_setup_data,
-               &pid,
+               &dl_pid,
                &Error); // GError **error);
        if ( Error ) {
                aghui::pop_ok_message(
                        wMainWindow,
-                       "Failed to download dataset",
+                       "Error",
                        "%s\n", Error->message);
                return 1;
        } else {
-               vte_terminal_watch_child( tTerm, pid);
+               vte_terminal_watch_child( tTerm, dl_pid);
                return 0;
        }
 }
diff --git a/src/ui/mw/mw.cc b/src/ui/mw/mw.cc
index 09fdc54..ef930b0 100644
--- a/src/ui/mw/mw.cc
+++ b/src/ui/mw/mw.cc
@@ -13,6 +13,7 @@
 #include <cstring>
 #include <ctime>
 #include <functional>
+#include <signal.h>
 
 #include "common/config-validate.hh"
 #include "libsigfile/page-metrics-base.hh"
@@ -116,6 +117,7 @@ SExpDesignUI (aghui::SSessionChooser *parent,
        draw_nremrem_cycles (true),
        finalize_ui (false),
        suppress_redraw (false),
+       dl_pid (-1),
        close_this_SF_now (nullptr),
        display_profile_type (sigfile::TMetricType::Psd),
        operating_range_from (2.),
@@ -352,6 +354,10 @@ figure_binsize_item()
 aghui::SExpDesignUI::
 ~SExpDesignUI ()
 {
+       if ( dl_pid > 0 ) {
+               fprintf( stderr, "killing dl process %d\n", dl_pid);
+               kill( dl_pid, SIGTERM);
+       }
        save_settings();
        save_artifact_detection_profiles();
        delete ED;
diff --git a/src/ui/mw/mw.hh b/src/ui/mw/mw.hh
index 3ec9658..2e88284 100644
--- a/src/ui/mw/mw.hh
+++ b/src/ui/mw/mw.hh
@@ -166,7 +166,7 @@ class SExpDesignUI
        void update_subject_details_interactively( agh::CSubject&);
        void show_empty_experiment_blurb();
        int try_download();
-       aghui::SBusyBlock *dl_watch_busyblock;
+       GPid dl_pid;
 
       // collected ED info
         // ED strings (channels, sessions, etc)

-- 
Sleep experiment manager

_______________________________________________
debian-med-commit mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-med-commit

Reply via email to