fix send via email
[maemo-recorder] / src / maemo-recorder-ui.c
index 6d95261..ca76ddf 100644 (file)
@@ -33,6 +33,7 @@
 #include <string.h>
 #include <sys/time.h>
 #include <libmodest-dbus-client/libmodest-dbus-client.h>
+#include <glib/gstdio.h>
 #include "maemo-recorder.h"
 #include "maemo-recorder-ui.h"
 #include "maemo-recorder-file.h"
@@ -104,10 +105,6 @@ static void cbNew(GtkWidget* widget, AppData *data);
 static void cbOpen(GtkWidget* widget, AppData *data);
 /*static void cbSave(GtkWidget* widget, AppData *data);*/
 static void cbSaveAs(GtkWidget* widget, AppData *data);
-static void cbItemClose(GtkWidget *widget, gpointer data);
-static void cbUserSeek(GtkAdjustment *adjustment, gpointer data);
-static gchar* cbFormatSeekbarValue(GtkScale *scale, gdouble value);
-static GtkWidget* createToolBar(AppData *data);
 static void createMenu( AppData *data );
 static gboolean createPipeline(AppData *app, PipeLineType type);
 static void openPlayPipeline( AppData *data );
@@ -121,6 +118,8 @@ static gboolean closeFile(AppData *data);
 static const gchar *getFileName(AppData *data);
 static gdouble guessMediaLength(AppData *data);
 static GstCaps *createCapsFilter(AudioFormat format);
+static gboolean evKeypress(GtkWidget *widget, GdkEventKey *ev, AppData *appdata);
+static gboolean cbScaleRelease(GtkWidget *widget, GdkEventButton *ev, gpointer data);
 
 static gboolean lengthSet = FALSE;
 
@@ -129,7 +128,6 @@ static gboolean createPipeline(AppData *app, PipeLineType type)
     GstElement *src = NULL;
     GstElement *sink = NULL;
     GstElement *filter = NULL;
-    GstElement *queue = NULL;
     GstElement *pipeline = NULL;
     GstElement *parse = NULL;
     GstElement *bin = NULL;
@@ -302,8 +300,8 @@ static gboolean createPipeline(AppData *app, PipeLineType type)
                     break;
 
                 case FORMAT_WAV:
-                    gst_bin_add_many(GST_BIN(pipeline), src, parse, sink, NULL);
-                    if (!gst_element_link_many (src, parse, sink, NULL))
+                    gst_bin_add_many(GST_BIN(pipeline), src, filter, parse, sink, NULL);
+                    if (!gst_element_link_many (src, filter, parse, sink, NULL))
                     {
                         ULOG_ERR("gst_element_link failed for src, parse and sink!");
                     }
@@ -476,9 +474,6 @@ static void pipelineStateChanged (GstElement *element,
                gtk_label_set_text(GTK_LABEL(data->mainViewData.stateEntry), 
                       RECORDER_MSG_PLAYING);  
                gtk_widget_set_state(data->buttonPlay, GTK_STATE_ACTIVE);
-               /*
-               gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(data->buttonPlay), GTK_STOCK_MEDIA_PAUSE);
-               */
           }
 
           break;
@@ -509,7 +504,6 @@ static void pipelineStateChanged (GstElement *element,
         case GST_STATE_NULL:
           ULOG_INFO("%s() - Null", G_STRFUNC);
           gtk_widget_set_state(data->buttonPlay, GTK_STATE_NORMAL);
-          gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(data->buttonPlay), GTK_STOCK_MEDIA_PLAY);
           gtk_widget_set_state(data->buttonRec, GTK_STATE_NORMAL);
           
           break;
@@ -531,24 +525,26 @@ static gboolean cbBus(GstBus *bus,
     {
         case GST_MESSAGE_WARNING:
         {
-            GError *err;
-            gchar *debug;
+            GError *err = NULL;
+            gchar *debug = NULL;
 
-            gst_message_parse_error (message, &err, &debug);
+            gst_message_parse_warning (message, &err, &debug);
             ULOG_WARN("%s() - Warning: %s", G_STRFUNC, err->message);
-            g_error_free (err);
+            if (err)
+                g_error_free (err);
             g_free (debug);
             break;
         }
 
         case GST_MESSAGE_ERROR: 
         {
-            GError *err;
-            gchar *debug;
+            GError *err = NULL;
+            gchar *debug = NULL;
 
             gst_message_parse_error (message, &err, &debug);
             ULOG_ERR("%s() - Error: %s", G_STRFUNC, err->message);
-            g_error_free (err);
+            if (err)
+                g_error_free (err);
             g_free (debug);
             /* break; */
             /* flow through to eos */
@@ -574,6 +570,7 @@ static gboolean cbBus(GstBus *bus,
                            GST_STATE_PAUSED);
                      destroyPipeline(app, PIPELINE_REC);
                      app->saved = FALSE;
+                     setAppState(data, APPSTATE_READY);
                      break;
 
                  case APPSTATE_READY:
@@ -653,7 +650,6 @@ static gboolean cbCheckPosition (AppData *data)
     {
         gdouble time = GST_TIME_TO_SECS(pos);
         guint mins = 0;
-        gdouble secs;
         gchar* tmp;
 
         ULOG_DEBUG("pos = %lld, time = %f", 
@@ -665,13 +661,13 @@ static gboolean cbCheckPosition (AppData *data)
            GTK_ADJUSTMENT(data->mainViewData.adjustment),
            time);
         gtk_adjustment_value_changed(GTK_ADJUSTMENT(data->mainViewData.adjustment));
-        if (secs >= 60.0)
+        if (time >= 60.0)
         {
-            mins = secs / 60;
-            secs -= mins * 60.0;
+            mins = time / 60;
+            time -= mins * 60.0;
         }
 
-        tmp = g_strdup_printf("%02u:%02d", mins, (int)secs);
+        tmp = g_strdup_printf("%02u:%02d", mins, (int)time);
 
         gtk_label_set_text(GTK_LABEL(data->mainViewData.ctime),
                  tmp);
@@ -720,7 +716,6 @@ static void cbNew(GtkWidget* widget, AppData *data)
     gtk_adjustment_set_value(GTK_ADJUSTMENT(data->mainViewData.adjustment),
               0);
     gtk_label_set_text(GTK_LABEL(data->mainViewData.ctime), "00:00");
-    gtk_widget_set_sensitive(data->buttonSave, FALSE);
     gtk_widget_set_sensitive(data->buttonSaveAs, FALSE);
     data->saved = TRUE;
 
@@ -1031,9 +1026,9 @@ static void cbEmailing(GtkWidget* widget, AppData *data)
 
     g_assert(NULL != data);
     
-    if (g_file_test(getFileName(data), G_FILE_TEST_EXISTS))
+    if (g_file_test(data->openFileName, G_FILE_TEST_EXISTS))
     {
-        file = file2uri(getFileName(data));
+        file = file2uri(data->openFileName);
         ULOG_INFO("Emailing: %s", file);
         list = g_slist_append(list, file);
         result = libmodest_dbus_client_compose_mail(data->osso,
@@ -1313,7 +1308,6 @@ static void cbStop(GtkWidget* widget, GdkEventButton *event, AppData *data)
     /* check if we are playing/recording */
 
     /* stop playing or recording */
-    gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(data->buttonPlay), GTK_STOCK_MEDIA_PLAY);
     gtk_widget_set_state(data->buttonPlay, GTK_STATE_NORMAL);
     gtk_widget_set_state(data->buttonRec, GTK_STATE_NORMAL);
     gtk_widget_set_sensitive(data->buttonPlay, TRUE);
@@ -1328,6 +1322,7 @@ static void cbStop(GtkWidget* widget, GdkEventButton *event, AppData *data)
             ULOG_INFO("%s() - Setting playPipeline state to PAUSED", G_STRFUNC);
             gst_element_set_state(GST_ELEMENT(data->playPipeline), 
                      GST_STATE_PAUSED);
+            setAppState(data, APPSTATE_READY);
             /* flow through */
         case APPSTATE_PAUSED:
         case APPSTATE_READY:
@@ -1347,9 +1342,8 @@ static void cbStop(GtkWidget* widget, GdkEventButton *event, AppData *data)
         case APPSTATE_RECORDING:
         {
             gdouble len = -1.0;
-            gst_element_set_state(GST_ELEMENT(data->recPipeline), 
-                 GST_STATE_PAUSED);
-            destroyPipeline(data, PIPELINE_REC);
+            gst_element_send_event(GST_ELEMENT(data->recPipeline),
+                 gst_event_new_eos());
             gtk_widget_set_sensitive(data->buttonSaveAs, TRUE);
             data->saved = FALSE;
 
@@ -1366,8 +1360,6 @@ static void cbStop(GtkWidget* widget, GdkEventButton *event, AppData *data)
             break;
     }
 
-    setAppState(data, APPSTATE_READY);
-
     ULOG_DEBUG("%s() - end", G_STRFUNC); 
 }
 
@@ -1402,16 +1394,6 @@ static void cbItemGroupChanged( gpointer data )
     ULOG_INFO("filter type=%d", app->filter);
 }
 
-static void cbItemClose(GtkWidget *widget, gpointer data)
-{
-    g_assert(data);
-
-    if (!closeFile(data))
-        return;
-
-    gtk_main_quit();
-}
-
 /* Create the menu items needed for the main view */
 static void createMenu( AppData *data )
 {
@@ -1427,6 +1409,8 @@ static void createMenu( AppData *data )
     button_open = hildon_gtk_button_new(HILDON_SIZE_AUTO);
     gtk_button_set_label( GTK_BUTTON(button_open), "Open");
     button_save = hildon_gtk_button_new(HILDON_SIZE_AUTO);
+    data->buttonSaveAs = button_save;
+    gtk_widget_set_sensitive(data->buttonSaveAs, FALSE);
     gtk_button_set_label( GTK_BUTTON(button_save), "Save");
     button_email = hildon_gtk_button_new(HILDON_SIZE_AUTO);
     gtk_button_set_label( GTK_BUTTON(button_email), "Send via email");
@@ -1457,7 +1441,7 @@ static void createMenu( AppData *data )
 
 }
 
-gboolean
+static gboolean
 cbScaleRelease(GtkWidget *widget, GdkEventButton *ev, gpointer data)
 {
     AppData* app = (AppData* ) data;
@@ -1465,13 +1449,13 @@ cbScaleRelease(GtkWidget *widget, GdkEventButton *ev, gpointer data)
     if (getAppState(app) == APPSTATE_RECORDING || NULL == app->playPipeline)
         return FALSE;
 
-    seekToTime(app->playPipeline, gtk_adjustment_get_value(app->mainViewData.adjustment));
+    seekToTime(app->playPipeline, gtk_adjustment_get_value(GTK_ADJUSTMENT(app->mainViewData.adjustment)));
   
     return FALSE;
 
 }
 
-gboolean
+static gboolean
 evKeypress(GtkWidget *widget, GdkEventKey *ev, AppData *appdata)
 {
 
@@ -1499,14 +1483,11 @@ gboolean maemo_recorder_ui_new(AppData *data)
     HildonProgram *app = NULL;
     HildonWindow *window = NULL;
     GtkWidget *hbox = NULL;
-    GtkWidget *label = NULL;
     GtkWidget *ctime = NULL;
     GtkWidget *etime = NULL;
     GtkWidget *filename = NULL;
     GtkWidget *format = NULL;
     GtkWidget *state = NULL;
-    GtkWidget *toolBar = NULL;
-    GtkWidget *infohbox = NULL;
     GtkWidget *table = NULL;
     GtkWidget *scale = NULL;
     GtkObject *adjustment = NULL;
@@ -1555,39 +1536,39 @@ gboolean maemo_recorder_ui_new(AppData *data)
     ctime = gtk_label_new("00:00");
     etime = gtk_label_new("00:00");
     scale = gtk_hscale_new(GTK_ADJUSTMENT(adjustment));
-    gtk_scale_set_draw_value(scale, FALSE);
-    gtk_box_pack_start(hbox, ctime, FALSE, FALSE, HILDON_MARGIN_DOUBLE);
-    gtk_box_pack_end(hbox, etime, FALSE, FALSE, HILDON_MARGIN_DOUBLE);
-    gtk_box_pack_end(hbox, scale, TRUE, TRUE, HILDON_MARGIN_DOUBLE);
-    gtk_box_set_homogeneous(hbox, FALSE);
+    gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE);
+    gtk_box_pack_start(GTK_BOX(hbox), ctime, FALSE, FALSE, HILDON_MARGIN_DOUBLE);
+    gtk_box_pack_end(GTK_BOX(hbox), etime, FALSE, FALSE, HILDON_MARGIN_DOUBLE);
+    gtk_box_pack_end(GTK_BOX(hbox), scale, TRUE, TRUE, HILDON_MARGIN_DOUBLE);
+    gtk_box_set_homogeneous(GTK_BOX(hbox), FALSE);
       
-    gtk_table_attach_defaults(table, filename,
+    gtk_table_attach_defaults(GTK_TABLE(table), filename,
                     1, 4, 1, 2);
-    gtk_table_attach_defaults(table, format,
+    gtk_table_attach_defaults(GTK_TABLE(table), format,
                     1, 4, 2, 3);
-    gtk_table_attach_defaults(table, state,
+    gtk_table_attach_defaults(GTK_TABLE(table), state,
                     1, 4, 3, 4);
-    gtk_table_attach_defaults(table, hbox,
+    gtk_table_attach_defaults(GTK_TABLE(table), hbox,
                     0, 5, 5, 6);
 
 
     recimage = gtk_image_new_from_file(REC_ICON);
     rec = gtk_event_box_new();
     data->buttonRec = GTK_WIDGET(rec);
-    gtk_container_add(rec, recimage);
+    gtk_container_add(GTK_CONTAINER(rec), recimage);
     playimage = gtk_image_new_from_file(PLAY_ICON);
     play = gtk_event_box_new();
     data->buttonPlay = GTK_WIDGET(play);
-    gtk_container_add(play, playimage);
+    gtk_container_add(GTK_CONTAINER(play), playimage);
     stopimage = gtk_image_new_from_file(STOP_ICON);
     stop = gtk_event_box_new();
-    gtk_container_add(stop, stopimage);
+    gtk_container_add(GTK_CONTAINER(stop), stopimage);
 
-    gtk_table_attach_defaults(table, rec,
+    gtk_table_attach_defaults(GTK_TABLE(table), rec,
                     5, 6, 4, 6);
-    gtk_table_attach_defaults(table, play,
+    gtk_table_attach_defaults(GTK_TABLE(table), play,
                     5, 6, 2, 4);
-    gtk_table_attach_defaults(table, stop,
+    gtk_table_attach_defaults(GTK_TABLE(table), stop,
                     5, 6, 0, 2);
 
 
@@ -1851,50 +1832,18 @@ static GstCaps *createCapsFilter(AudioFormat format)
 
 static gboolean cbStopPlayback(AppData *data)
 {
-    gint ret;
     ULOG_INFO("Stopping playback");
    
     g_assert(data != NULL);
     destroyPipelines(data);
     setAppState(data, APPSTATE_READY);
-    gtk_tool_button_set_stock_id(GTK_TOOL_BUTTON(data->buttonPlay), GTK_STOCK_MEDIA_PLAY);
     gtk_widget_set_state(data->buttonPlay, GTK_STATE_NORMAL);
 
     return FALSE;
 }
 
-static void cbUserSeek(GtkAdjustment *adjustment, gpointer data)
-{   
-    AppData *app;
-
-    g_return_if_fail(data != NULL);
-    app = (AppData *) data;
-
-    if (getAppState(app) != APPSTATE_READY && getAppState(app) != APPSTATE_PAUSED || NULL == app->playPipeline)
-        return;
-
-    seekToTime(app->playPipeline, gtk_adjustment_get_value(adjustment));
-}
-
-static gchar *cbFormatSeekbarValue(GtkScale *scale, gdouble value)
-{
-/*    ULOG_INFO("cbFormatSeekbarValue");*/
-    gint mins = 0;
-    gint digits = gtk_scale_get_digits(scale);
-
-    if (value >= 60.0)
-    {
-        mins = value / 60;
-        value -= mins * 60.0;
-        return g_strdup_printf("%d:%0*.*f", mins, digits + 3, digits, value);
-    }
-    /* mins:sec.frac */
-    return g_strdup_printf("%0.*f", digits, value);
-}
-
 static gboolean cbUpdateRecLength(AppData *data)
 {
-    struct timeval tv;
     guint mins = 0;
     gdouble secs;
     gchar *tmp;