johang / btfs

A bittorrent filesystem based on FUSE.
GNU General Public License v3.0
3.89k stars 145 forks source link

Torrent being downloaded completely soon after mounted #72

Open fabianski7 opened 3 years ago

fabianski7 commented 3 years ago

Well, I'm sorry if this is an invalid bug and this is the default behavior of btfs, but the description in the readme says that the files are downloaded as needed, not all at once.

The contents of the files will be downloaded on-demand as they are read by applications

I am using version 2.24 from the archlinux repository, with kernel 5.11.11 and kde plasma 5.21.3

johang commented 3 years ago

This is by design. Parts that are read by applications are prioritized, but if there is bandwidth available it will download the rest of the torrent.

fabianski7 commented 3 years ago

is there any way to change this?

johang commented 3 years ago

You can patch the function setup() in btfs.cc to set all files to priority 0.

fabianski7 commented 3 years ago

here?

https://github.com/johang/btfs/blob/master/src/btfs.cc#L103

johang commented 3 years ago

No, here: https://github.com/johang/btfs/blob/master/src/btfs.cc#L206

pkillnine commented 2 years ago

@johang how would you set all the files to priority 0? I'd like to patch this as well to prevent it downloading as soon as it's mounted.

johang commented 2 years ago

Look in libtorrents docs (torrent_handle::file_priority(...)).

pkillnine commented 2 years ago

@johang thanks, this patch seems to work - note that once a file is accessed it attempts to download the whole thing. Is it possible to set it so it only downloads what is accessed, rather than the whole file?

diff --git a/src/btfs.cc b/src/btfs.cc
index 1f4a72d..4da1ebe 100644
--- a/src/btfs.cc
+++ b/src/btfs.cc
@@ -205,6 +205,7 @@ setup() {
        handle.pause();

    for (int i = 0; i < ti->num_files(); ++i) {
+       handle.file_priority(i, 0);
        std::string parent("");

 #if LIBTORRENT_VERSION_NUM < 10100
leadenhead commented 2 years ago

This is by design. Parts that are read by applications are prioritized, but if there is bandwidth available it will download the rest of the torrent.

Same problem. There is no point in this utility without the "download files as needed" feature. It's not about the available bandwidth. You can download the torrent using qbittorrent. The point is the available disk space. You need to be able to view a specific file. But qbittorrent can do that too. Therefore, it is very important to download "only some parts" of the file. For example, when previewing video or audio (when searching). It would be nice to use some amount of cache (configurable), which would not save data to disk. For example, provided that the file is viewed by no more than 10 percent. Or work without saving to disk at all.

btfs 2.24-1 / archlinux 5.15.3-arch1-1 / spectrwm

rienafairefr commented 11 months ago

If anyone interested, I've patched btfs to handle the "no fetch" case, where pieces are downloaded only when really needed, no auto-downloading of anything except what's asked to be read through fuse, in a branch here https://github.com/rienafairefr/btfs/tree/no-fetch

OliverOffing commented 9 months ago

Check out https://github.com/distribyted/distribyted too — solved my problem.