]> granicus.if.org Git - transmission/commitdiff
(trunk) modify tr_torrentParse() and tr_torrentNew() arguments s.t. they use the...
authorCharles Kerr <charles@transmissionbt.com>
Thu, 2 Apr 2009 17:30:29 +0000 (17:30 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Thu, 2 Apr 2009 17:30:29 +0000 (17:30 +0000)
15 files changed:
cli/cli.c
daemon/daemon.c
gtk/add-dialog.c
gtk/tr-core.c
gtk/tr-torrent.c
libtransmission/fdlimit.c
libtransmission/metainfo.c
libtransmission/rpcimpl.c
libtransmission/session.c
libtransmission/torrent-ctor.c
libtransmission/torrent.c
libtransmission/transmission.h
macosx/Controller.m
macosx/DragOverlayWindow.m
macosx/Torrent.m

index e77861e06bb118467bb32a4896405d98fa1e03e4..ac8c31343165ee7751fe69eb65f94bf600b4cb82 100644 (file)
--- a/cli/cli.c
+++ b/cli/cli.c
@@ -355,7 +355,7 @@ main( int     argc,
     {
         tr_info info;
 
-        if( !tr_torrentParse( h, ctor, &info ) )
+        if( !tr_torrentParse( ctor, &info ) )
         {
             int          i;
             const time_t start = time( NULL );
@@ -391,7 +391,7 @@ main( int     argc,
     {
         tr_info info;
 
-        if( !tr_torrentParse( h, ctor, &info ) )
+        if( !tr_torrentParse( ctor, &info ) )
         {
             dumpInfo( stdout, &info );
             tr_metainfoFree( &info );
@@ -401,7 +401,7 @@ main( int     argc,
         goto cleanup;
     }
 
-    tor = tr_torrentNew( h, ctor, &error );
+    tor = tr_torrentNew( ctor, &error );
     tr_ctorFree( ctor );
     if( !tor )
     {
index 1d3cda46578348d0f0a41907c0cc8eafe22ab4f1..da8024eadb496c8a3ccb9842903a844bc413b204 100644 (file)
@@ -190,7 +190,7 @@ onFileAdded( tr_session * session, const char * dir, const char * file )
 
         int err = tr_ctorSetMetainfoFromFile( ctor, filename );
         if( !err )
-            tr_torrentNew( session, ctor, &err );
+            tr_torrentNew( ctor, &err );
 
         tr_ctorFree( ctor );
         tr_free( filename );
index 2849ca2a354b3b011d8f3820202da226e3f23666..11cbd06f5031e7eabf2352f60972ebcdda63a620 100644 (file)
@@ -171,7 +171,6 @@ sourceChanged( GtkFileChooserButton * b,
         int          err = 0;
         int          new_file = 0;
         tr_torrent * torrent;
-        tr_session * session = tr_core_session( data->core );
 
         if( filename
           && ( !data->filename || strcmp( filename, data->filename ) ) )
@@ -186,7 +185,7 @@ sourceChanged( GtkFileChooserButton * b,
         tr_ctorSetPaused( data->ctor, TR_FORCE, TRUE );
         tr_ctorSetDeleteSource( data->ctor, FALSE );
 
-        if( ( torrent = tr_torrentNew( session, data->ctor, &err ) ) )
+        if( ( torrent = tr_torrentNew( data->ctor, &err ) ) )
         {
             removeOldTorrent( data );
             data->gtor = tr_torrent_new_preexisting( torrent );
index e23f15541c9359d8f63b65c4ec38de9c460e543f..2f50c3260f829357604eda87e40c4121ef36ed16 100644 (file)
@@ -927,7 +927,7 @@ add_filename( TrCore *     core,
         else
         {
             tr_info inf;
-            int err = tr_torrentParse( session, ctor, &inf );
+            int err = tr_torrentParse( ctor, &inf );
 
             switch( err )
             {
index c6b2d9ca803ba2dc327f1cbc6a6cb43b7dc32ccb..183d7b10c8d69e97fa0cc822bfd33777d3817ed3 100644 (file)
@@ -198,7 +198,7 @@ tr_torrent_new_ctor( tr_session   * session,
      * doesn't have any concept of the glib trash API */
     tr_ctorGetDeleteSource( ctor, &doTrash );
     tr_ctorSetDeleteSource( ctor, FALSE );
-    tor = tr_torrentNew( session, ctor, errcode );
+    tor = tr_torrentNew( ctor, errcode );
 
     if( tor && doTrash )
     {
index bfb36e7a6b5f091a3b3dff52aefeb82062ff913c..13a0daebe2b5ea7cae9a0e891d31b130fe1e2018 100644 (file)
@@ -443,7 +443,7 @@ tr_fdFileReturn( int fd )
             TrCloseFile( i );
         else if( o->syncAt <= time( NULL ) ) {
             dbgmsg( "fsync()ing file '%s' in slot #%d", o->filename, i );
-            fsync( o->fd );
+            //fsync( o->fd );
 #ifdef HAVE_POSIX_FADVISE
             /* TODO: test performance with and without this */
             posix_fadvise( o->fd, 0, 0, POSIX_FADV_DONTNEED );
index c52cc134e892639f24216b843942527f76113f1f..1e5c983c4f5ddc058f5cbf98d96c4d8c324f7efc 100644 (file)
@@ -440,7 +440,7 @@ tr_metainfoParseImpl( const tr_session * session,
 
     /* filename of Transmission's copy */
     tr_free( inf->torrent );
-    inf->torrent = getTorrentFilename( session, inf );
+    inf->torrent = session ?  getTorrentFilename( session, inf ) : NULL;
 
     return NULL;
 }
index 41e10db5f20216ec941af7808e58372df4fa0667..6c926baa9a7a33f19df27c4aea13eb090c45831b 100644 (file)
@@ -745,7 +745,7 @@ addTorrentImpl( struct tr_rpc_idle_data * data, tr_ctor * ctor )
 {
     int err = 0;
     const char * result = NULL;
-    tr_torrent * tor = tr_torrentNew( data->session, ctor, &err );
+    tr_torrent * tor = tr_torrentNew( ctor, &err );
 
     tr_ctorFree( ctor );
 
index 79f650d8a2ebe2da04221fb403037a6f2f76877a..48a488d8e76aeca85b5788a93df4d3a42ee15ad1 100644 (file)
@@ -1368,7 +1368,7 @@ tr_sessionLoadTorrents( tr_session * session,
                 tr_torrent * tor;
                 char * path = tr_buildPath( dirname, d->d_name, NULL );
                 tr_ctorSetMetainfoFromFile( ctor, path );
-                if(( tor = tr_torrentNew( session, ctor, NULL )))
+                if(( tor = tr_torrentNew( ctor, NULL )))
                 {
                     tr_list_append( &list, tor );
                     ++n;
@@ -1619,7 +1619,7 @@ metainfoLookupRescan( tr_session * session )
                 tr_info inf;
                 char * path = tr_buildPath( dirname, d->d_name, NULL );
                 tr_ctorSetMetainfoFromFile( ctor, path );
-                if( !tr_torrentParse( session, ctor, &inf ) )
+                if( !tr_torrentParse( ctor, &inf ) )
                 {
                     tr_list_append( &list, tr_strdup( inf.hashString ) );
                     tr_list_append( &list, tr_strdup( path ) );
index 123d6953ab7874a8ecb7d0b9701eef0fa485cc31..02c2c6f7361c1691704c94e411100e3361044235 100644 (file)
@@ -291,6 +291,12 @@ tr_ctorGetMetainfo( const tr_ctor *  ctor,
     return err;
 }
 
+tr_session*
+tr_ctorGetSession( const tr_ctor * ctor )
+{
+    return (tr_session*) ctor->session;
+}
+
 /***
 ****
 ***/
@@ -301,9 +307,11 @@ tr_ctorNew( const tr_session * session )
     tr_ctor * ctor = tr_new0( struct tr_ctor, 1 );
 
     ctor->session = session;
-    tr_ctorSetPeerLimit( ctor, TR_FALLBACK, session->peerLimitPerTorrent );
     tr_ctorSetPaused( ctor, TR_FALLBACK, FALSE );
-    tr_ctorSetDownloadDir( ctor, TR_FALLBACK, session->downloadDir );
+    if( session != NULL ) {
+        tr_ctorSetPeerLimit( ctor, TR_FALLBACK, session->peerLimitPerTorrent );
+        tr_ctorSetDownloadDir( ctor, TR_FALLBACK, session->downloadDir );
+    }
     tr_ctorSetSave( ctor, TRUE );
     return ctor;
 }
@@ -316,4 +324,3 @@ tr_ctorFree( tr_ctor * ctor )
     tr_free( ctor->optionalArgs[0].downloadDir );
     tr_free( ctor );
 }
-
index 5b548f135348007c00495a3fd26563fe3bfc1893..02106cac1b46bfbbc075fea6e1a3897bb2fd7d12 100644 (file)
@@ -503,9 +503,7 @@ getBlockSize( uint32_t pieceSize )
 }
 
 static void
-torrentRealInit( tr_session      * session,
-                 tr_torrent      * tor,
-                 const tr_ctor   * ctor )
+torrentRealInit( tr_torrent * tor, const tr_ctor * ctor )
 {
     int          doStart;
     uint64_t     loaded;
@@ -513,6 +511,9 @@ torrentRealInit( tr_session      * session,
     const char * dir;
     static int   nextUniqueId = 1;
     tr_info    * info = &tor->info;
+    tr_session * session = tr_ctorGetSession( ctor );
+
+    assert( session != NULL );
 
     tr_globalLock( session );
 
@@ -647,14 +648,14 @@ torrentRealInit( tr_session      * session,
 }
 
 int
-tr_torrentParse( const tr_session  * session,
-                 const tr_ctor     * ctor,
+tr_torrentParse( const tr_ctor     * ctor,
                  tr_info           * setmeInfo )
 {
     int             err = 0;
     int             doFree;
     tr_info         tmp;
     const tr_benc * metainfo;
+    tr_session    * session = tr_ctorGetSession( ctor );
 
     if( setmeInfo == NULL )
         setmeInfo = &tmp;
@@ -669,7 +670,7 @@ tr_torrentParse( const tr_session  * session,
     if( !err && !getBlockSize( setmeInfo->pieceSize ) )
         err = TR_EINVALID;
 
-    if( !err && tr_torrentExists( session, setmeInfo->hash ) )
+    if( !err && session && tr_torrentExists( session, setmeInfo->hash ) )
         err = TR_EDUPLICATE;
 
     if( doFree )
@@ -679,20 +680,22 @@ tr_torrentParse( const tr_session  * session,
 }
 
 tr_torrent *
-tr_torrentNew( tr_session     * session,
-               const tr_ctor  * ctor,
+tr_torrentNew( const tr_ctor  * ctor,
                int            * setmeError )
 {
     int          err;
     tr_info      tmpInfo;
     tr_torrent * tor = NULL;
 
-    err = tr_torrentParse( session, ctor, &tmpInfo );
+    assert( ctor != NULL );
+    assert( tr_isSession( tr_ctorGetSession( ctor ) ) );
+
+    err = tr_torrentParse( ctor, &tmpInfo );
     if( !err )
     {
         tor = tr_new0( tr_torrent, 1 );
         tor->info = tmpInfo;
-        torrentRealInit( session, tor, ctor );
+        torrentRealInit( tor, ctor );
     }
     else if( setmeError )
     {
index dc768f95e0ee5b0cf842ed5842fbbd0d6ecfdba7..12f8edc53625234f723eec5c69717b0802fb5ca7 100644 (file)
@@ -754,7 +754,9 @@ tr_ctorMode;
 
 struct tr_benc;
 
-tr_ctor*    tr_ctorNew( const tr_session * session );
+/* it's okay to use NULL here if you're only parsing the torrent.
+ * @see tr_torrentParse() */
+tr_ctor*    tr_ctorNew( const tr_session * session_or_NULL );
 
 void        tr_ctorFree( tr_ctor * ctor );
 
@@ -808,6 +810,8 @@ int         tr_ctorGetMetainfo( const tr_ctor         * ctor,
 int         tr_ctorGetDeleteSource( const tr_ctor  * ctor,
                                     tr_bool        * setmeDoDelete );
 
+tr_session* tr_ctorGetSession( const tr_ctor * ctor );
+
 /* returns NULL if tr_ctorSetMetainfoFromFile() wasn't used */
 const char* tr_ctorGetSourceFile( const tr_ctor * ctor );
 
@@ -825,10 +829,12 @@ const char* tr_ctorGetSourceFile( const tr_ctor * ctor );
  * (that is, if TR_EINVALID is not returned), then the parsed
  * metainfo is stored in setme_info and should be freed by the
  * caller via tr_metainfoFree().
+ *
+ * If the constructor's session variable is NULL,
+ * info.torrent will be NULL and the duplicate check will not be performed.
  */
-int tr_torrentParse( const tr_session  * session,
-                     const tr_ctor     * ctor,
-                     tr_info           * setme_info_or_NULL );
+int tr_torrentParse( const tr_ctor * ctor,
+                     tr_info       * setme_info_or_NULL );
 
 /** @brief free a metainfo
     @see tr_torrentParse */
@@ -839,8 +845,7 @@ void tr_metainfoFree( tr_info * inf );
     @return 0 on success,
             TR_EINVALID if the torrent couldn't be parsed, or
             TR_EDUPLICATE if there's already a matching torrent object. */
-tr_torrent * tr_torrentNew( tr_session      * session,
-                            const tr_ctor   * ctor,
+tr_torrent * tr_torrentNew( const tr_ctor   * ctor,
                             int             * setmeError );
 
 /** @} */
index c1c930190369ed462fb9ce6652f69bedd2176a07..bf24274813bdaa274ddd49bec72e20f0b368a908 100644 (file)
@@ -793,7 +793,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
         //ensure torrent doesn't already exist
         tr_ctor * ctor = tr_ctorNew(fLib);
         tr_ctorSetMetainfoFromFile(ctor, [torrentPath UTF8String]);
-        int result = tr_torrentParse(fLib, ctor, &info);
+        int result = tr_torrentParse(ctor, &info);
         if (result != TR_OK)
         {
             if (result == TR_EDUPLICATE)
@@ -2457,7 +2457,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
         tr_ctor * ctor = tr_ctorNew(fLib);
         tr_ctorSetMetainfoFromFile(ctor, [file UTF8String]);
         
-        switch (tr_torrentParse(fLib, ctor, NULL))
+        switch (tr_torrentParse(ctor, NULL))
         {
             case TR_OK:
                 [self openFiles: [NSArray arrayWithObject: file] addType: ADD_AUTO forcePath: nil];
@@ -2697,7 +2697,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
             {
                 tr_ctor * ctor = tr_ctorNew(fLib);
                 tr_ctorSetMetainfoFromFile(ctor, [file UTF8String]);
-                switch (tr_torrentParse(fLib, ctor, NULL))
+                switch (tr_torrentParse(ctor, NULL))
                 {
                     case TR_OK:
                         if (!fOverlayWindow)
@@ -2761,7 +2761,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
             {
                 tr_ctor * ctor = tr_ctorNew(fLib);
                 tr_ctorSetMetainfoFromFile(ctor, [file UTF8String]);
-                switch (tr_torrentParse(fLib, ctor, NULL))
+                switch (tr_torrentParse(ctor, NULL))
                 {
                     case TR_OK:
                         [filesToOpen addObject: file];
index c0a4445987a2450c4d9505a083c77b9e6637a27d..b49a16c180796d416e896717feacea8ef62e50c5 100644 (file)
@@ -88,7 +88,7 @@
             tr_ctor * ctor = tr_ctorNew(fLib);
             tr_ctorSetMetainfoFromFile(ctor, [file UTF8String]);
             tr_info info;
-            if (tr_torrentParse(fLib, ctor, &info) == TR_OK)
+            if (tr_torrentParse(ctor, &info) == TR_OK)
             {
                 count++;
                 size += info.totalSize;
index b304bb3a07f12537b9c1c6336e74f02946bed3a3..8bf4e82abbc577864996dac48f09b785df0e8b18 100644 (file)
@@ -1623,26 +1623,26 @@ int trashDataFile(const char * filename)
         if (hashString)
         {
             tr_ctorSetMetainfoFromHash(ctor, [hashString UTF8String]);
-            if (tr_torrentParse(lib, ctor, &info) == TR_OK)
+            if (tr_torrentParse(ctor, &info) == TR_OK)
             {
                 NSString * currentDownloadFolder = [self shouldUseIncompleteFolderForName: [NSString stringWithUTF8String: info.name]]
                                                     ? fIncompleteFolder : fDownloadFolder;
                 tr_ctorSetDownloadDir(ctor, TR_FORCE, [currentDownloadFolder UTF8String]);
                 
-                fHandle = tr_torrentNew(lib, ctor, NULL);
+                fHandle = tr_torrentNew(ctor, NULL);
             }
             tr_metainfoFree(&info);
         }
         if (!fHandle && path)
         {
             tr_ctorSetMetainfoFromFile(ctor, [path UTF8String]);
-            if (tr_torrentParse(lib, ctor, &info) == TR_OK)
+            if (tr_torrentParse(ctor, &info) == TR_OK)
             {
                 NSString * currentDownloadFolder = [self shouldUseIncompleteFolderForName: [NSString stringWithUTF8String: info.name]]
                                                     ? fIncompleteFolder : fDownloadFolder;
                 tr_ctorSetDownloadDir(ctor, TR_FORCE, [currentDownloadFolder UTF8String]);
                 
-                fHandle = tr_torrentNew(lib, ctor, NULL);
+                fHandle = tr_torrentNew(ctor, NULL);
             }
             tr_metainfoFree(&info);
         }