fix eof getting per unit
[rugen] / src / page_status.c
index aec2168..295217d 100644 (file)
@@ -68,22 +68,29 @@ static char* status_to_text( mvcp_status status )
        return "unknown";
 }
 
+static void format_status_string(char* buf, int size, mvcp_status status , char* sep)
+{
+       char tc1[12], tc2[12], tc3[12];
+
+       snprintf( buf, size,
+               "[%s]%sIN:%s%sPOS:%s%sOUT:%s%s%s%s",
+               status_to_text( status ), sep,
+               frames2tc(status->in,       status->fps, tc1), sep,
+               frames2tc(status->position, status->fps, tc2), sep,
+               frames2tc(status->out,      status->fps, tc3), sep,
+               status->clip, sep
+       );
+
+}
+
 static int show_status( page_status this, mvcp_status status )
 {
        GtkWidget *widget = this_page_get_widget( ( page )this );
        char temp[ 1024 ] = "";
        char temp2[ 1024 ];
        char label_name[ 256 ];
-       char tc1[12], tc2[12], tc3[12];
-
-       sprintf( temp, "[%s] IN:%s POS:%s OUT:%s %s",
-               status_to_text( status ),
-               frames2tc(status->in,       status->fps, tc1),
-               frames2tc(status->position, status->fps, tc2),
-               frames2tc(status->out,      status->fps, tc3),
-               status->clip
-       );
 
+       format_status_string(temp, sizeof(temp), status , "\n");
        sprintf( label_name, "label_unit_%d", status->unit );
 
        gdk_threads_enter();
@@ -91,6 +98,7 @@ static int show_status( page_status this, mvcp_status status )
        gtk_label_set_text( GTK_LABEL( widget ), temp );
        if ( status->unit == dv1394app_get_selected_unit( this->app ) )
        {
+               format_status_string(temp, sizeof(temp), status , " ");
                sprintf( temp2, "U%d - %s", status->unit, temp );
                widget = lookup_widget( dv1394app_get_widget( this->app ), "statusbar" );
                gtk_statusbar_pop( GTK_STATUSBAR( widget ), this->context );
@@ -203,20 +211,22 @@ static void *status_thread( void *arg )
        
        while ( !this->terminated )
        {
+               char buf[32];
+
+               if ( !this->app->eof[this->app->selected_unit] &&
+                       mvcp_unit_get( this->app->command, this->app->selected_unit,
+                       "eof", buf, sizeof(buf) ) != -1)
+                       this->app->eof[this->app->selected_unit] = buf[0];
+
                if ( mvcp_notifier_wait( notifier, &status ) != -1 )
                {
-                       char buf[32];
-
                        if ( status.status == unit_disconnected )
                        {
-                               this->app->eof = 0;
+                               this->app->eof[this->app->selected_unit] = 0;
                                break;
                        }
                        if ( show_status( this, &status ) )
                                show_units( this, TRUE );
-                       if ( !this->app->eof && mvcp_unit_get( this->app->command, this->app->selected_unit,
-                               "eof", buf, sizeof(buf) ) != -1)
-                                       this->app->eof = buf[0];
                }
        }