mirror of
https://github.com/transmission/transmission
synced 2024-12-25 01:03:01 +00:00
(trunk libT) by request, add a clientData argument to tr_torrentDeleteLocalData()
This commit is contained in:
parent
c5af8965e0
commit
5f9f97ee2a
4 changed files with 32 additions and 18 deletions
|
@ -281,10 +281,16 @@ tr_torrent_set_remove_flag( TrTorrent * gtor,
|
|||
gtor->priv->do_remove = do_remove;
|
||||
}
|
||||
|
||||
static int
|
||||
deleteFile( const char * filename, void * unused UNUSED )
|
||||
{
|
||||
return tr_file_trash_or_remove( filename );
|
||||
}
|
||||
|
||||
void
|
||||
tr_torrent_delete_files( TrTorrent * gtor )
|
||||
{
|
||||
tr_torrentDeleteLocalData( tr_torrent_handle( gtor ), tr_file_trash_or_remove );
|
||||
tr_torrentDeleteLocalData( tr_torrent_handle( gtor ), deleteFile, NULL );
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -239,7 +239,7 @@ torrentRemove( tr_session * session,
|
|||
const tr_rpc_callback_status status = notify( session, TR_RPC_TORRENT_REMOVING, tor );
|
||||
tr_bool deleteFlag;
|
||||
if( tr_bencDictFindBool( args_in, "delete-local-data", &deleteFlag ) && deleteFlag )
|
||||
tr_torrentDeleteLocalData( tor, NULL );
|
||||
tr_torrentDeleteLocalData( tor, NULL, NULL );
|
||||
if( !( status & TR_RPC_NOREMOVE ) )
|
||||
tr_torrentRemove( tor );
|
||||
}
|
||||
|
|
|
@ -2316,15 +2316,15 @@ walkLocalData( const tr_torrent * tor,
|
|||
}
|
||||
|
||||
static void
|
||||
deleteLocalFile( const char * filename, tr_fileFunc fileFunc )
|
||||
deleteLocalFile( const char * filename, tr_fileFunc fileFunc, void * fileFuncClientData )
|
||||
{
|
||||
struct stat sb;
|
||||
if( !stat( filename, &sb ) ) /* if file exists... */
|
||||
fileFunc( filename );
|
||||
fileFunc( filename, fileFuncClientData );
|
||||
}
|
||||
|
||||
static void
|
||||
deleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc )
|
||||
deleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc, void * fileFuncClientData )
|
||||
{
|
||||
int i, n;
|
||||
char ** s;
|
||||
|
@ -2352,12 +2352,12 @@ deleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc )
|
|||
s = (char**) tr_ptrArrayPeek( &folders, &n );
|
||||
for( i=0; i<n; ++i )
|
||||
if( tr_ptrArrayFindSorted( &dirtyFolders, s[i], vstrcmp ) == NULL )
|
||||
deleteLocalFile( s[i], fileFunc );
|
||||
deleteLocalFile( s[i], fileFunc, fileFuncClientData );
|
||||
|
||||
/* now blow away any remaining torrent files, such as torrent files in dirty folders */
|
||||
for( f=0; f<tor->info.fileCount; ++f ) {
|
||||
char * path = tr_buildPath( tor->currentDir, tor->info.files[f].name, NULL );
|
||||
deleteLocalFile( path, fileFunc );
|
||||
deleteLocalFile( path, fileFunc, fileFuncClientData );
|
||||
tr_free( path );
|
||||
}
|
||||
|
||||
|
@ -2374,10 +2374,10 @@ deleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc )
|
|||
for( i=0; i<n; ++i ) {
|
||||
#ifdef SYS_DARWIN
|
||||
char * dsStore = tr_buildPath( s[i], ".DS_Store", NULL );
|
||||
deleteLocalFile( dsStore, fileFunc );
|
||||
deleteLocalFile( dsStore, fileFunc, fileFuncClientData );
|
||||
tr_free( dsStore );
|
||||
#endif
|
||||
deleteLocalFile( s[i], fileFunc );
|
||||
deleteLocalFile( s[i], fileFunc, fileFuncClientData );
|
||||
}
|
||||
tr_ptrArrayDestruct( &cleanFolders, NULL );
|
||||
}
|
||||
|
@ -2390,20 +2390,26 @@ deleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc )
|
|||
tr_free( tmp );
|
||||
}
|
||||
|
||||
static int
|
||||
removeFile( const char * filename, void * unused UNUSED )
|
||||
{
|
||||
return remove( filename );
|
||||
}
|
||||
|
||||
void
|
||||
tr_torrentDeleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc )
|
||||
tr_torrentDeleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc, void * fileFuncClientData )
|
||||
{
|
||||
assert( tr_isTorrent( tor ) );
|
||||
|
||||
if( fileFunc == NULL )
|
||||
fileFunc = remove;
|
||||
fileFunc = removeFile;
|
||||
|
||||
/* close all the files because we're about to delete them */
|
||||
tr_fdTorrentClose( tor->session, tor->uniqueId );
|
||||
|
||||
if( tor->info.fileCount > 1 )
|
||||
{
|
||||
deleteLocalData( tor, fileFunc );
|
||||
deleteLocalData( tor, fileFunc, fileFuncClientData );
|
||||
}
|
||||
else if( tor->info.fileCount == 1 )
|
||||
{
|
||||
|
@ -2411,12 +2417,12 @@ tr_torrentDeleteLocalData( tr_torrent * tor, tr_fileFunc fileFunc )
|
|||
|
||||
/* torrent only has one file */
|
||||
char * path = tr_buildPath( tor->currentDir, tor->info.files[0].name, NULL );
|
||||
deleteLocalFile( path, fileFunc );
|
||||
deleteLocalFile( path, fileFunc, fileFuncClientData );
|
||||
tr_free( path );
|
||||
|
||||
tmp = tr_torrentBuildPartial( tor, 0 );
|
||||
path = tr_buildPath( tor->currentDir, tmp, NULL );
|
||||
deleteLocalFile( path, fileFunc );
|
||||
deleteLocalFile( path, fileFunc, fileFuncClientData );
|
||||
tr_free( path );
|
||||
tr_free( tmp );
|
||||
}
|
||||
|
@ -2509,7 +2515,7 @@ setLocation( void * vdata )
|
|||
{
|
||||
/* blow away the leftover subdirectories in the old location */
|
||||
if( do_move )
|
||||
tr_torrentDeleteLocalData( tor, remove );
|
||||
tr_torrentDeleteLocalData( tor, removeFile, NULL );
|
||||
|
||||
/* set the new location and reverify */
|
||||
tr_torrentSetDownloadDir( tor, location );
|
||||
|
|
|
@ -1007,8 +1007,6 @@ void tr_torrentStart( tr_torrent * torrent );
|
|||
/** @brief Stop (pause) a torrent */
|
||||
void tr_torrentStop( tr_torrent * torrent );
|
||||
|
||||
typedef int tr_fileFunc( const char * filename );
|
||||
|
||||
enum
|
||||
{
|
||||
TR_LOC_MOVING,
|
||||
|
@ -1023,6 +1021,8 @@ void tr_torrentSetLocation( tr_torrent * torrent,
|
|||
double * setme_progress,
|
||||
int * setme_state );
|
||||
|
||||
typedef int tr_fileFunc( const char * filename, void * clientData );
|
||||
|
||||
/**
|
||||
* @brief Deletes the torrent's local data.
|
||||
* @param torrent
|
||||
|
@ -1030,7 +1030,9 @@ void tr_torrentSetLocation( tr_torrent * torrent,
|
|||
* recycle bins, pass in a function that uses it instead.
|
||||
* tr_torrentDeleteLocalData() ignores fileFunc's return value.
|
||||
*/
|
||||
void tr_torrentDeleteLocalData( tr_torrent * torrent, tr_fileFunc fileFunc );
|
||||
void tr_torrentDeleteLocalData( tr_torrent * torrent,
|
||||
tr_fileFunc fileFunc,
|
||||
void * fileFuncClientData );
|
||||
|
||||
uint64_t tr_torrentGetBytesLeftToAllocate( const tr_torrent * torrent );
|
||||
|
||||
|
|
Loading…
Reference in a new issue