Changeset 6309 for trunk/gtk/main.c


Ignore:
Timestamp:
Jul 9, 2008, 4:33:00 PM (14 years ago)
Author:
charles
Message:

(gtk) #562: No error message when opening broken torrent file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/main.c

    r6162 r6309  
    115115    GtkWidget    * prefs;
    116116    GSList       * errqueue;
     117    GSList       * dupqueue;
    117118    GHashTable   * tor2details;
    118119    GHashTable   * details2tor;
     
    477478    cbdata->closing    = FALSE;
    478479    cbdata->errqueue   = NULL;
     480    cbdata->dupqueue   = NULL;
    479481    cbdata->minimized  = minimized;
    480482
     
    657659        g_slist_free( cbdata->errqueue );
    658660    }
     661    if( cbdata->dupqueue ) {
     662        g_slist_foreach( cbdata->dupqueue, (GFunc)g_free, NULL );
     663        g_slist_free( cbdata->dupqueue );
     664    }
    659665
    660666    g_hash_table_destroy( cbdata->details2tor );
     
    823829
    824830static void
     831flushAddTorrentErrors( GtkWindow * window, const char * primary, GSList ** files )
     832{
     833    GString * s = g_string_new( NULL );
     834    GSList * l;
     835    GtkWidget * w;
     836    for( l=*files; l; l=l->next )
     837        g_string_append_printf( s, "%s\n", (const char*)l->data );
     838    w = gtk_message_dialog_new( window,
     839                                GTK_DIALOG_DESTROY_WITH_PARENT,
     840                                GTK_MESSAGE_ERROR,
     841                                GTK_BUTTONS_CLOSE,
     842                                primary );
     843    gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( w ), s->str );
     844    g_signal_connect_swapped( w, "response",
     845                              G_CALLBACK( gtk_widget_destroy ), w );
     846    gtk_widget_show_all( w );
     847    g_string_free( s, TRUE );
     848
     849    g_slist_foreach( *files, (GFunc)g_free, NULL );
     850    g_slist_free( *files );
     851    *files = NULL;
     852}
     853
     854static void
     855showTorrentErrors( struct cbdata * cbdata )
     856{
     857    if( cbdata->errqueue )
     858        flushAddTorrentErrors( GTK_WINDOW( cbdata->wind ),
     859                               ngettext( "Couldn't add corrupt torrent",
     860                                         "Couldn't add corrupt torrents",
     861                                         g_slist_length( cbdata->errqueue ) ),
     862                               &cbdata->errqueue );
     863
     864    if( cbdata->dupqueue )
     865        flushAddTorrentErrors( GTK_WINDOW( cbdata->wind ),
     866                               ngettext( "Couldn't add duplicate torrent",
     867                                         "Couldn't add duplicate torrents",
     868                                         g_slist_length( cbdata->dupqueue ) ),
     869                               &cbdata->dupqueue );
     870}
     871
     872static void
    825873coreerr( TrCore * core UNUSED, enum tr_core_err code, const char * msg,
    826874         gpointer gdata )
    827875{
    828     struct cbdata * cbdata = gdata;
    829     char          * joined;
     876    struct cbdata * c = gdata;
    830877
    831878    switch( code )
    832879    {
    833         case TR_CORE_ERR_ADD_TORRENT:
    834             cbdata->errqueue = g_slist_append( cbdata->errqueue,
    835                                                g_strdup( msg ) );
    836             return;
     880        case TR_EINVALID:
     881            c->errqueue = g_slist_append( c->errqueue, g_path_get_basename( msg ) );
     882            break;
     883
     884        case TR_EDUPLICATE:
     885            c->dupqueue = g_slist_append( c->dupqueue, g_path_get_basename( msg ) );
     886            break;
     887
    837888        case TR_CORE_ERR_NO_MORE_TORRENTS:
    838             if( cbdata->errqueue )
    839             {
    840                 joined = joinstrlist( cbdata->errqueue, "\n" );
    841                 errmsg( cbdata->wind,
    842                         ngettext( "Failed to load torrent file: %s",
    843                                   "Failed to load torrent files: %s",
    844                                   g_slist_length( cbdata->errqueue ) ),
    845                         joined );
    846                 g_slist_foreach( cbdata->errqueue, (GFunc) g_free, NULL );
    847                 g_slist_free( cbdata->errqueue );
    848                 cbdata->errqueue = NULL;
    849                 g_free( joined );
    850             }
    851             return;
     889            showTorrentErrors( c );
     890            break;
     891
    852892        case TR_CORE_ERR_SAVE_STATE:
    853             errmsg( cbdata->wind, "%s", msg );
    854             return;
    855     }
    856 
    857     g_assert_not_reached();
     893            errmsg( c->wind, "%s", msg );
     894            break;
     895
     896        default:
     897            g_assert_not_reached();
     898            break;
     899    }
     900
    858901}
    859902
Note: See TracChangeset for help on using the changeset viewer.