Ticket #3846: move_incomplete_dir_on_verify.diff

File move_incomplete_dir_on_verify.diff, 2.5 KB (added by marcus, 9 years ago)
  • libtransmission/torrent.c

    === modified file 'libtransmission/torrent.c'
    old new  
    20182018    }
    20192019}
    20202020
     2021static void
     2022moveIncompleteDir( void * vtor)
     2023{
     2024    struct tr_torrent * tor = vtor;
     2025    const char * incompleteDir = tr_sessionGetIncompleteDir( tor->session );
     2026    const char * dir = tor->downloadDir;
     2027
     2028    if ( dir != incompleteDir ) {
     2029        volatile int status;
     2030        tr_torrentSetLocation( tor, incompleteDir, true, NULL, &status );
     2031        while (TR_LOC_MOVING == status)
     2032            tr_wait_msec(100);
     2033        if (TR_LOC_DONE == status)
     2034            tor->downloadDir = tr_strdup( dir );
     2035    }
     2036}
     2037
    20212038void
    20222039tr_torrentRecheckCompleteness( tr_torrent * tor )
    20232040{
     
    20672084
    20682085            if( tr_sessionIsTorrentDoneScriptEnabled( tor->session ) )
    20692086                torrentCallScript( tor, tr_sessionGetTorrentDoneScript( tor->session ) );
     2087        } else {
     2088            if (tr_sessionIsIncompleteFileNamingEnabled( tor->session )) {
     2089                tr_file_index_t fileIndex;
     2090
     2091                for( fileIndex=0; fileIndex<tor->info.fileCount; ++fileIndex ) {
     2092                    if( !tr_cpFileIsComplete( &tor->completion, fileIndex ) ) {
     2093                        char * sub;
     2094                        const tr_file * f = &tor->info.files[fileIndex];
     2095
     2096                        if( tr_torrentFindFile2( tor, fileIndex, &tor->currentDir, &sub, NULL ) ) {
     2097                           
     2098                            if( !strcmp( sub, f->name ) ) {
     2099
     2100                                char * oldpath = tr_buildPath(tor->currentDir, f->name, NULL);
     2101                                char * newpath = tr_buildPath(tor->currentDir, tr_torrentBuildPartial(tor, fileIndex), NULL);
     2102                                if( rename( oldpath, newpath) ){
     2103                                    tr_torerr( tor, "error moving \"%s\" to \"%s\"", oldpath, newpath );
     2104                                }
     2105
     2106                                tr_free( newpath );
     2107                                tr_free( oldpath );
     2108                            }
     2109                        }
     2110   
     2111                        tr_free(sub);
     2112                    }
     2113                }
     2114            }
     2115            if( tr_sessionIsIncompleteDirEnabled( tor->session ) && tor->currentDir == tor->downloadDir )
     2116                tr_runInEventThread( tor->session, moveIncompleteDir, tor);
     2117
    20702118        }
    20712119
    20722120        fireCompletenessChange( tor, completeness, wasRunning );