Changeset 14077


Ignore:
Timestamp:
May 22, 2013, 8:35:38 PM (9 years ago)
Author:
jordan
Message:

(trunk, libT) #4682 'Add return id from duplicate torrent torrent-add rpc' -- added.

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/cli/cli.c

    r14070 r14077  
    223223main (int argc, char ** argv)
    224224{
    225   int           error;
    226225  tr_session  * h;
    227226  tr_ctor     * ctor;
     
    311310  tr_free (fileContents);
    312311
    313   tor = tr_torrentNew (ctor, &error);
     312  tor = tr_torrentNew (ctor, NULL, NULL);
    314313  tr_ctorFree (ctor);
    315314  if (!tor)
  • trunk/daemon/daemon.c

    r13969 r14077  
    264264    if (!err)
    265265    {
    266         tr_torrentNew (ctor, &err);
     266        tr_torrentNew (ctor, &err, NULL);
    267267
    268268        if (err == TR_PARSE_ERR)
  • trunk/extras/rpc-spec.txt

    r14025 r14077  
    383383   <http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTCOOKIE>
    384384
    385    Response arguments: on success, a "torrent-added" object in the
     385   Response arguments: On success, a "torrent-added" object in the
    386386                       form of one of 3.3's tr_info objects with the
    387387                       fields for id, name, and hashString.
     388
     389                       On failure due to a duplicate torrent existing,
     390                       a "torrent-duplicate" object in the same form.
    388391
    3893923.5.  Removing a Torrent
     
    762765         |         | yes       | torrent-rename-path  | new method
    763766         |         | yes       | free-space           | new method
     767         |         | yes       | torrent-add          | new return return arg "torrent-duplicate"
    764768
    7657695.1.  Upcoming Breakage
  • trunk/gtk/open-dialog.c

    r14018 r14077  
    187187        int err = 0;
    188188        int new_file = 0;
     189        int duplicate_id = 0;
    189190        tr_torrent * torrent;
    190191
     
    201202        tr_ctorSetDeleteSource (o->ctor, FALSE);
    202203
    203         if ((torrent = tr_torrentNew (o->ctor, &err)))
     204        if ((torrent = tr_torrentNew (o->ctor, &err, &duplicate_id)))
    204205        {
    205206            removeOldTorrent (o);
     
    208209        else if (new_file)
    209210        {
    210             gtr_add_torrent_error_dialog (GTK_WIDGET (b), err, o->filename);
     211            tr_torrent * tor;
     212
     213            if (duplicate_id)
     214              tor = gtr_core_find_torrent (o->core, duplicate_id);
     215            else
     216              tor = NULL;
     217
     218            gtr_add_torrent_error_dialog (GTK_WIDGET (b), err, tor, o->filename);
    211219        }
    212220
  • trunk/gtk/tr-core.c

    r14018 r14077  
    11031103core_create_new_torrent (TrCore * core, tr_ctor * ctor)
    11041104{
    1105   int errcode = 0;
    11061105  tr_torrent * tor;
    11071106  bool do_trash = false;
     
    11121111  tr_ctorGetDeleteSource (ctor, &do_trash);
    11131112  tr_ctorSetDeleteSource (ctor, FALSE);
    1114   tor = tr_torrentNew (ctor, &errcode);
     1113  tor = tr_torrentNew (ctor, NULL, NULL);
    11151114
    11161115  if (tor && do_trash)
     
    11281127    }
    11291128
    1130     return tor;
     1129  return tor;
    11311130}
    11321131
  • trunk/gtk/util.c

    r14018 r14077  
    218218
    219219void
    220 gtr_add_torrent_error_dialog (GtkWidget * child, int err, const char * file)
     220gtr_add_torrent_error_dialog (GtkWidget   * child,
     221                              int           err,
     222                              tr_torrent  * duplicate_torrent,
     223                              const char  * filename)
    221224{
    222225  char * secondary;
    223   const char * fmt;
    224226  GtkWidget * w;
    225227  GtkWindow * win = getWindow (child);
    226228
    227   switch (err)
    228     {
    229       case TR_PARSE_ERR: fmt = _("The torrent file \"%s\" contains invalid data."); break;
    230       case TR_PARSE_DUPLICATE: fmt = _("The torrent file \"%s\" is already in use."); break;
    231       default: fmt = _("The torrent file \"%s\" encountered an unknown error."); break;
    232     }
    233 
    234   secondary = g_strdup_printf (fmt, file);
     229  if (err == TR_PARSE_ERR)
     230    secondary = g_strdup_printf (_("The torrent file \"%s\" contains invalid data."), filename);
     231  else if (err == TR_PARSE_DUPLICATE)
     232    secondary = g_strdup_printf (_("The torrent file \"%s\" is already in use by \"%s.\""), filename, tr_torrentName (duplicate_torrent));
     233  else
     234    secondary = g_strdup_printf (_("The torrent file \"%s\" encountered an unknown error."), filename);
    235235
    236236  w = gtk_message_dialog_new (win,
  • trunk/gtk/util.h

    r13991 r14077  
    126126void gtr_add_torrent_error_dialog (GtkWidget  * window_or_child,
    127127                                   int          err,
     128                                   tr_torrent * duplicate_torrent,
    128129                                   const char * filename);
    129130
  • trunk/libtransmission/libtransmission-test.c

    r13969 r14077  
    328328  /* create the torrent */
    329329  err = 0;
    330   tor = tr_torrentNew (ctor, &err);
     330  tor = tr_torrentNew (ctor, &err, NULL);
    331331  assert (!err);
    332332
  • trunk/libtransmission/quark.c

    r14067 r14077  
    345345  { "torrent-complete-sound-command", 30 },
    346346  { "torrent-complete-sound-enabled", 30 },
     347  { "torrent-duplicate", 17 },
    347348  { "torrent-get", 11 },
    348349  { "torrent-set", 11 },
  • trunk/libtransmission/quark.h

    r14009 r14077  
    355355  TR_KEY_torrent_complete_sound_command,
    356356  TR_KEY_torrent_complete_sound_enabled,
     357  TR_KEY_torrent_duplicate,
    357358  TR_KEY_torrent_get,
    358359  TR_KEY_torrent_set,
  • trunk/libtransmission/rename-test.c

    r13969 r14077  
    134134  /* create the torrent */
    135135  err = 0;
    136   tor = tr_torrentNew (ctor, &err);
     136  tor = tr_torrentNew (ctor, &err, NULL);
    137137  assert (!err);
    138138
  • trunk/libtransmission/rpcimpl.c

    r14070 r14077  
    15161516addTorrentImpl (struct tr_rpc_idle_data * data, tr_ctor * ctor)
    15171517{
    1518     int err = 0;
    1519     const char * result = NULL;
    1520     tr_torrent * tor = tr_torrentNew (ctor, &err);
    1521 
    1522     tr_ctorFree (ctor);
    1523 
    1524     if (tor)
    1525     {
    1526         tr_variant fields;
    1527         tr_variantInitList (&fields, 3);
    1528         tr_variantListAddStr (&fields, "id");
    1529         tr_variantListAddStr (&fields, "name");
    1530         tr_variantListAddStr (&fields, "hashString");
    1531         addInfo (tor, tr_variantDictAdd (data->args_out, TR_KEY_torrent_added), &fields);
    1532         notify (data->session, TR_RPC_TORRENT_ADDED, tor);
    1533         tr_variantFree (&fields);
    1534     }
    1535     else if (err == TR_PARSE_DUPLICATE)
    1536     {
    1537         result = "duplicate torrent";
    1538     }
    1539     else if (err == TR_PARSE_ERR)
    1540     {
    1541         result = "invalid or corrupt torrent file";
    1542     }
    1543 
    1544     tr_idle_function_done (data, result);
     1518  int err;
     1519  int duplicate_id;
     1520  const char * result;
     1521  tr_torrent * tor;
     1522  tr_quark key;
     1523
     1524  err = 0;
     1525  duplicate_id = 0;
     1526  tor = tr_torrentNew (ctor, &err, &duplicate_id);
     1527  tr_ctorFree (ctor);
     1528
     1529  if (!err)
     1530    {
     1531      key = TR_KEY_torrent_added;
     1532      result = NULL;
     1533    }
     1534  else if (err == TR_PARSE_ERR)
     1535    {
     1536      result = "invalid or corrupt torrent file";
     1537    }
     1538  else if (err == TR_PARSE_DUPLICATE)
     1539    {
     1540      tor = tr_torrentFindFromId (data->session, duplicate_id);
     1541      key = TR_KEY_torrent_duplicate;
     1542      result = "duplicate torrent";
     1543    }
     1544
     1545  if (tor != NULL)
     1546    {
     1547      tr_variant fields;
     1548      tr_variantInitList (&fields, 3);
     1549      tr_variantListAddStr (&fields, "id");
     1550      tr_variantListAddStr (&fields, "name");
     1551      tr_variantListAddStr (&fields, "hashString");
     1552      addInfo (tor, tr_variantDictAdd (data->args_out, key), &fields);
     1553      notify (data->session, TR_RPC_TORRENT_ADDED, tor);
     1554      tr_variantFree (&fields);
     1555    }
     1556
     1557  tr_idle_function_done (data, result);
    15451558}
    15461559
  • trunk/libtransmission/session.c

    r14023 r14077  
    19381938                char * path = tr_buildPath (dirname, d->d_name, NULL);
    19391939                tr_ctorSetMetainfoFromFile (data->ctor, path);
    1940                 if ((tor = tr_torrentNew (data->ctor, NULL)))
     1940                if ((tor = tr_torrentNew (data->ctor, NULL, NULL)))
    19411941                {
    19421942                    tr_list_prepend (&list, tor);
  • trunk/libtransmission/torrent.c

    r13991 r14077  
    972972
    973973static tr_parse_result
    974 torrentParseImpl (const tr_ctor * ctor, tr_info * setmeInfo,
    975                   bool * setmeHasInfo, int * dictLength)
    976 {
    977     int             doFree;
    978     bool            didParse;
    979     bool            hasInfo = false;
    980     tr_info         tmp;
     974torrentParseImpl (const tr_ctor  * ctor,
     975                  tr_info        * setmeInfo,
     976                  bool           * setmeHasInfo,
     977                  int            * dictLength,
     978                  int            * setme_duplicate_id)
     979{
     980    bool doFree;
     981    bool didParse;
     982    bool hasInfo = false;
     983    tr_info tmp;
    981984    const tr_variant * metainfo;
    982     tr_session    * session = tr_ctorGetSession (ctor);
     985    tr_session * session = tr_ctorGetSession (ctor);
    983986    tr_parse_result result = TR_PARSE_OK;
    984987
     
    10001003        result = TR_PARSE_ERR;
    10011004
    1002     if (didParse && session && tr_torrentExists (session, setmeInfo->hash))
    1003         result = TR_PARSE_DUPLICATE;
     1005    if (didParse && session && (result == TR_PARSE_OK))
     1006      {
     1007        const tr_torrent * const tor = tr_torrentFindFromHash (session, setmeInfo->hash);
     1008
     1009        if (tor != NULL)
     1010          {
     1011            result = TR_PARSE_DUPLICATE;
     1012
     1013            if (setme_duplicate_id != NULL)
     1014              *setme_duplicate_id = tr_torrentId (tor);
     1015          }
     1016      }
    10041017
    10051018    if (doFree)
     
    10151028tr_torrentParse (const tr_ctor * ctor, tr_info * setmeInfo)
    10161029{
    1017     return torrentParseImpl (ctor, setmeInfo, NULL, NULL);
     1030    return torrentParseImpl (ctor, setmeInfo, NULL, NULL, NULL);
    10181031}
    10191032
    10201033tr_torrent *
    1021 tr_torrentNew (const tr_ctor * ctor, int * setmeError)
    1022 {
    1023     int len;
    1024     bool hasInfo;
    1025     tr_info tmpInfo;
    1026     tr_parse_result r;
    1027     tr_torrent * tor = NULL;
    1028 
    1029     assert (ctor != NULL);
    1030     assert (tr_isSession (tr_ctorGetSession (ctor)));
    1031 
    1032     r = torrentParseImpl (ctor, &tmpInfo, &hasInfo, &len);
    1033     if (r == TR_PARSE_OK)
    1034     {
    1035         tor = tr_new0 (tr_torrent, 1);
    1036         tor->info = tmpInfo;
    1037         if (hasInfo)
    1038             tor->infoDictLength = len;
    1039         torrentInit (tor, ctor);
     1034tr_torrentNew (const tr_ctor * ctor, int * setme_error, int * setme_duplicate_id)
     1035{
     1036  int len;
     1037  bool hasInfo;
     1038  tr_info tmpInfo;
     1039  tr_parse_result r;
     1040  tr_torrent * tor = NULL;
     1041
     1042  assert (ctor != NULL);
     1043  assert (tr_isSession (tr_ctorGetSession (ctor)));
     1044
     1045  r = torrentParseImpl (ctor, &tmpInfo, &hasInfo, &len, setme_duplicate_id);
     1046  if (r == TR_PARSE_OK)
     1047    {
     1048      tor = tr_new0 (tr_torrent, 1);
     1049      tor->info = tmpInfo;
     1050
     1051      if (hasInfo)
     1052        tor->infoDictLength = len;
     1053
     1054      torrentInit (tor, ctor);
    10401055    }
    10411056    else
    10421057    {
    1043         if (r == TR_PARSE_DUPLICATE)
    1044             tr_metainfoFree (&tmpInfo);
    1045 
    1046         if (setmeError)
    1047             *setmeError = r;
    1048     }
    1049 
    1050     return tor;
     1058      if (r == TR_PARSE_DUPLICATE)
     1059        tr_metainfoFree (&tmpInfo);
     1060
     1061      if (setme_error != NULL)
     1062        *setme_error = r;
     1063    }
     1064
     1065  return tor;
    10511066}
    10521067
  • trunk/libtransmission/transmission.h

    r13991 r14077  
    10621062
    10631063
    1064 /** Instantiate a single torrent.
    1065     @return 0 on success,
    1066             TR_EINVALID if the torrent couldn't be parsed, or
    1067             TR_EDUPLICATE if there's already a matching torrent object. */
     1064/**
     1065 * Instantiate a single torrent.
     1066 *
     1067 * Returns a pointer to the torrent on success, or NULL on failure.
     1068 *
     1069 * @param setme_error: TR_PARSE_ERR if the parsing failed;
     1070 *                     TR_PARSE_OK if parsing succeeded and it's not a duplicate;
     1071 *                     TR_PARSE_DUPLICATE if parsing succeeded but it's a duplicate.
     1072 *
     1073 * @param setme_duplicate_id: when setmeError is TR_PARSE_DUPLICATE,
     1074 *                            this field is set to the duplicate torrent's id.
     1075 */
    10681076tr_torrent * tr_torrentNew (const tr_ctor   * ctor,
    1069                             int             * setmeError);
     1077                            int             * setme_error,
     1078                            int             * setme_duplicate_id);
    10701079
    10711080/** @} */
  • trunk/macosx/Torrent.m

    r14037 r14077  
    16671667       
    16681668        if (result == TR_PARSE_OK)
    1669             fHandle = tr_torrentNew(ctor, NULL);
     1669            fHandle = tr_torrentNew(ctor, NULL, NULL);
    16701670       
    16711671        tr_ctorFree(ctor);
Note: See TracChangeset for help on using the changeset viewer.