forked from premiere/premiere-libtorrent
added setting to ignore file modification time when loading resume files
This commit is contained in:
parent
ef21d26257
commit
62eef91338
|
@ -1,3 +1,4 @@
|
||||||
|
* added setting to ignore file modification time when loading resume files
|
||||||
* support more fine-grained torrent states between which peer sources it
|
* support more fine-grained torrent states between which peer sources it
|
||||||
announces to
|
announces to
|
||||||
* supports calculating sha1 file-hashes when creating torrents
|
* supports calculating sha1 file-hashes when creating torrents
|
||||||
|
|
|
@ -3872,6 +3872,7 @@ session_settings
|
||||||
int default_peer_upload_rate;
|
int default_peer_upload_rate;
|
||||||
int default_peer_download_rate;
|
int default_peer_download_rate;
|
||||||
bool broadcast_lsd;
|
bool broadcast_lsd;
|
||||||
|
bool ignore_resume_timestamps;
|
||||||
};
|
};
|
||||||
|
|
||||||
``user_agent`` this is the client identification to the tracker.
|
``user_agent`` this is the client identification to the tracker.
|
||||||
|
@ -4503,6 +4504,15 @@ if ``broadcast_lsd`` is set to true, the local peer discovery
|
||||||
broadcast its messages. This can be useful when running on networks
|
broadcast its messages. This can be useful when running on networks
|
||||||
that don't support multicast. It's off by default since it's inefficient.
|
that don't support multicast. It's off by default since it's inefficient.
|
||||||
|
|
||||||
|
``ignore_resume_timestamps`` determines if the storage, when loading
|
||||||
|
resume data files, should verify that the file modification time
|
||||||
|
with the timestamps in the resume data. This defaults to false, which
|
||||||
|
means timestamps are taken into account, and resume data is less likely
|
||||||
|
to accepted (torrents are more likely to be fully checked when loaded).
|
||||||
|
It might be useful to set this to true if your network is faster than your
|
||||||
|
disk, and it would be faster to redownload potentially missed pieces than
|
||||||
|
to go through the whole storage to look for them.
|
||||||
|
|
||||||
pe_settings
|
pe_settings
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
@ -211,6 +211,7 @@ namespace libtorrent
|
||||||
, default_peer_upload_rate(0)
|
, default_peer_upload_rate(0)
|
||||||
, default_peer_download_rate(0)
|
, default_peer_download_rate(0)
|
||||||
, broadcast_lsd(false)
|
, broadcast_lsd(false)
|
||||||
|
, ignore_resume_timestamps(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// this is the user agent that will be sent to the tracker
|
// this is the user agent that will be sent to the tracker
|
||||||
|
@ -810,6 +811,12 @@ namespace libtorrent
|
||||||
// default in order to avoid flooding networks for no good reason. If
|
// default in order to avoid flooding networks for no good reason. If
|
||||||
// a network is known not to support multicast, this can be enabled
|
// a network is known not to support multicast, this can be enabled
|
||||||
bool broadcast_lsd;
|
bool broadcast_lsd;
|
||||||
|
|
||||||
|
// when set to true, the file modification time is ignored when loading
|
||||||
|
// resume data. The resume data includes the expected timestamp of each
|
||||||
|
// file and is typically compared to make sure the files haven't changed
|
||||||
|
// since the last session
|
||||||
|
bool ignore_resume_timestamps;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
|
|
|
@ -306,6 +306,7 @@ namespace aux {
|
||||||
TORRENT_SETTING(boolean, strict_end_game_mode)
|
TORRENT_SETTING(boolean, strict_end_game_mode)
|
||||||
TORRENT_SETTING(integer, default_peer_upload_rate)
|
TORRENT_SETTING(integer, default_peer_upload_rate)
|
||||||
TORRENT_SETTING(integer, default_peer_download_rate)
|
TORRENT_SETTING(integer, default_peer_download_rate)
|
||||||
|
TORRENT_SETTING(boolean, ignore_resume_timestamps)
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef TORRENT_SETTING
|
#undef TORRENT_SETTING
|
||||||
|
|
|
@ -187,11 +187,17 @@ namespace libtorrent
|
||||||
// resume data. This is because full allocation will not move
|
// resume data. This is because full allocation will not move
|
||||||
// pieces, so any older version of the resume data will
|
// pieces, so any older version of the resume data will
|
||||||
// still be a correct subset of the actual data on disk.
|
// still be a correct subset of the actual data on disk.
|
||||||
|
enum flags_t
|
||||||
|
{
|
||||||
|
compact_mode = 1,
|
||||||
|
ignore_timestamps = 2
|
||||||
|
};
|
||||||
|
|
||||||
bool match_filesizes(
|
bool match_filesizes(
|
||||||
file_storage const& fs
|
file_storage const& fs
|
||||||
, std::string p
|
, std::string p
|
||||||
, std::vector<std::pair<size_type, std::time_t> > const& sizes
|
, std::vector<std::pair<size_type, std::time_t> > const& sizes
|
||||||
, bool compact_mode
|
, int flags
|
||||||
, error_code& error)
|
, error_code& error)
|
||||||
{
|
{
|
||||||
if ((int)sizes.size() != fs.num_files())
|
if ((int)sizes.size() != fs.num_files())
|
||||||
|
@ -220,17 +226,20 @@ namespace libtorrent
|
||||||
time = s.mtime;
|
time = s.mtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((compact_mode && size != size_iter->first)
|
if (((flags & compact_mode) && size != size_iter->first)
|
||||||
|| (!compact_mode && size < size_iter->first))
|
|| (!(flags & compact_mode) && size < size_iter->first))
|
||||||
{
|
{
|
||||||
error = errors::mismatching_file_size;
|
error = errors::mismatching_file_size;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & ignore_timestamps) continue;
|
||||||
|
|
||||||
// allow one second 'slack', because of FAT volumes
|
// allow one second 'slack', because of FAT volumes
|
||||||
// in sparse mode, allow the files to be more recent
|
// in sparse mode, allow the files to be more recent
|
||||||
// than the resume data, but only by 5 minutes
|
// than the resume data, but only by 5 minutes
|
||||||
if ((compact_mode && (time > size_iter->second + 1 || time < size_iter->second - 1)) ||
|
if (((flags & compact_mode) && (time > size_iter->second + 1 || time < size_iter->second - 1)) ||
|
||||||
(!compact_mode && (time > size_iter->second + 5 * 60 || time < size_iter->second - 1)))
|
(!(flags & compact_mode) && (time > size_iter->second + 5 * 60 || time < size_iter->second - 1)))
|
||||||
{
|
{
|
||||||
error = errors::mismatching_file_timestamp;
|
error = errors::mismatching_file_timestamp;
|
||||||
return false;
|
return false;
|
||||||
|
@ -823,8 +832,10 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return match_filesizes(files(), m_save_path, file_sizes
|
int flags = (full_allocation_mode ? 0 : compact_mode)
|
||||||
, !full_allocation_mode, error);
|
| (settings().ignore_resume_timestamps ? ignore_timestamps : 0);
|
||||||
|
|
||||||
|
return match_filesizes(files(), m_save_path, file_sizes, flags, error);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue