Ticket #1510: delete-local-data.2.diff

File delete-local-data.2.diff, 5.3 KB (added by kysucix, 12 years ago)

Delete file when status application returns a status of TR_RPC_NOREMOVE

  • libtransmission/rpcimpl.c

     
    136136}
    137137
    138138static const char*
    139 torrentRemove( tr_handle *        h,
    140                tr_benc *          args_in,
    141                tr_benc * args_out UNUSED )
     139torrentRemove( tr_handle   * h,
     140               tr_benc     * args_in,
     141               tr_benc     * args_out UNUSED )
    142142{
    143     int           i, torrentCount;
     143    int i;
     144    int torrentCount;
    144145    tr_torrent ** torrents = getTorrents( h, args_in, &torrentCount );
    145146
    146     for( i = 0; i < torrentCount; ++i )
     147    for( i=0; i<torrentCount; ++i )
    147148    {
    148         tr_torrent *                 tor = torrents[i];
    149         const tr_rpc_callback_status status = notify(
    150             h, TR_RPC_TORRENT_REMOVING, tor );
     149        tr_torrent * tor = torrents[i];
     150        const tr_rpc_callback_status status = notify( h, TR_RPC_TORRENT_REMOVING, tor );
     151        int64_t deleteFlag;
     152        if( tr_bencDictFindInt( args_in, "delete-local-data", &deleteFlag ) && deleteFlag )
     153            tr_torrentDeleteLocalData( tor );
     154        /*
     155         * Waiting for the client to handle local-data delete we delete data
     156         * here. Is this safe? - Silvano Galliani
     157         */
    151158        if( !( status & TR_RPC_NOREMOVE ) )
     159        {
    152160            tr_torrentRemove( tor );
     161        }
    153162    }
    154163    tr_free( torrents );
    155164    return NULL;
  • libtransmission/transmission.h

     
    845845/** @brief Stop (pause) a torrent */
    846846void tr_torrentStop( tr_torrent * torrent );
    847847
     848/** @brief Deletes the torrent data stored on disk. */
     849void tr_torrentDeleteLocalData( tr_torrent * torrent );
     850
    848851/**
    849852 * @brief Iterate through the torrents.
    850853 *
  • libtransmission/torrent.c

     
    11941194}
    11951195
    11961196void
     1197tr_torrentDeleteLocalData( tr_torrent * tor )
     1198{
     1199    tr_file_index_t i;
     1200
     1201    for( i=0; i<tor->info.fileCount; ++i )
     1202    {
     1203        const tr_file * file = &tor->info.files[i];
     1204        char * path = tr_buildPath( tor->downloadDir, file->name, NULL );
     1205        tr_fdFileClose( path );
     1206        unlink( path );
     1207        tr_free( path );
     1208    }
     1209}
     1210
     1211void
    11971212tr_torrentStop( tr_torrent * tor )
    11981213{
    11991214    if( tor )
  • daemon/transmission-remote.1

     
    2828.Op Fl pl Ar files
    2929.Op Fl pn Ar files
    3030.Op Fl r
     31.Op Fl R
    3132.Op Fl s | S
    3233.Op Fl t Ar all | Ar id | Ar hash
    3334.Op Fl u Ar number | Fl U
     
    134135.It Fl r Fl -remove
    135136Remove the current torrent(s).  This does not delete the downloaded data.
    136137
     138.It Fl R Fl -remove-and-delete
     139Remove the current torrent(s) and delete their downloaded data.
     140
    137141.It Fl s Fl -start
    138142Start the current torrent(s)
    139143
  • daemon/remote.c

     
    9999      "pl", 1, "<files>"             },
    100100    { 'r', "remove",               "Remove the current torrent(s)",
    101101      "r",  0, NULL                  },
     102    { 'R', "remove-and-delete",    "Remove the current torrent(s) and delete local data",
     103      "R",  0, NULL                  },
    102104    { 's', "start",                "Start the current torrent(s)",
    103105      "s",  0, NULL                  },
    104106    { 'S', "stop",                 "Stop the current torrent(s)",
     
    409411                addIdArg( args, id );
    410412                break;
    411413
     414            case 'R':
     415                tr_bencDictAddStr( &top, "method", "torrent-remove" );
     416                addIdArg( args, id );
     417                tr_bencDictAddInt( args, "delete-local-data", 1 );
     418                break;
     419
    412420            case 's':
    413421                tr_bencDictAddStr( &top, "method", "torrent-start" );
    414422                addIdArg( args, id );
  • doc/rpc-spec.txt

     
    6868
    6969   Method name         | libtransmission function
    7070   --------------------+-------------------------------------------------
    71    "torrent-remove"    | tr_torrentRemove
    7271   "torrent-start"     | tr_torrentStart
    7372   "torrent-stop"      | tr_torrentStop
    7473   "torrent-verify"    | tr_torrentVerify
     
    292291                       form of one of 3.3's tr_info objects with the
    293292                       fields for id, name, and hashString.
    294293
     2943.5.  Removing a Torrent
    295295
     296   Method name: "torrent-remove"
     297
     298   Request arguments:
     299
     300   string                     | value type & description
     301   ---------------------------+-------------------------------------------------
     302   "ids"                      | array      torrent list, as described in 3.1
     303   "delete-local-data"        | 'boolean'  delete local data. (default: false)
     304
     305   Response arguments: none
     306
     307
    2963084.   Session Requests
    297309
    2983104.1.  Session Arguments