mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-09 19:52:31 +00:00
Loads correctly formated torrents from session dir when starting.
git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@294 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
@@ -53,6 +53,32 @@ DownloadStore::remove(Download* d) {
|
||||
unlink(create_filename(d).c_str());
|
||||
}
|
||||
|
||||
utils::Directory
|
||||
DownloadStore::get_formated_entries() {
|
||||
if (!is_active())
|
||||
return utils::Directory();
|
||||
|
||||
utils::Directory d(m_path);
|
||||
d.update();
|
||||
|
||||
d.erase(std::remove_if(d.begin(), d.end(), std::not1(std::ptr_fun(&DownloadStore::is_correct_format))), d.end());
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
bool
|
||||
DownloadStore::is_correct_format(std::string f) {
|
||||
if (f.size() != 48 || f.substr(40) != ".torrent")
|
||||
return false;
|
||||
|
||||
for (std::string::const_iterator itr = f.begin(); itr != f.end() - 8; ++itr)
|
||||
if (!(*itr >= '0' && *itr <= '9') &&
|
||||
!(*itr >= 'A' && *itr <= 'F'))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string
|
||||
DownloadStore::create_filename(Download* d) {
|
||||
return m_path + utils::string_to_hex(d->get_hash()) + ".torrent";
|
||||
|
||||
@@ -3,25 +3,31 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "utils/directory.h"
|
||||
|
||||
namespace core {
|
||||
|
||||
class Download;
|
||||
|
||||
class DownloadStore {
|
||||
public:
|
||||
|
||||
void activate(const std::string& path);
|
||||
void disable();
|
||||
|
||||
bool is_active() { return !m_path.empty(); }
|
||||
void activate(const std::string& path);
|
||||
void disable();
|
||||
|
||||
void save(Download* d);
|
||||
void remove(Download* d);
|
||||
bool is_active() { return !m_path.empty(); }
|
||||
|
||||
void save(Download* d);
|
||||
void remove(Download* d);
|
||||
|
||||
// Currently shows all entries in the correct format.
|
||||
utils::Directory get_formated_entries();
|
||||
|
||||
private:
|
||||
std::string create_filename(Download* d);
|
||||
static bool is_correct_format(std::string f);
|
||||
std::string create_filename(Download* d);
|
||||
|
||||
std::string m_path;
|
||||
std::string m_path;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ Manager::cleanup() {
|
||||
}
|
||||
|
||||
void
|
||||
Manager::insert(const std::string& uri) {
|
||||
Manager::insert(std::string uri) {
|
||||
if (std::strncmp(uri.c_str(), "http://", 7))
|
||||
create_file(uri);
|
||||
else
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ public:
|
||||
void initialize();
|
||||
void cleanup();
|
||||
|
||||
void insert(const std::string& uri);
|
||||
void insert(std::string uri);
|
||||
iterator erase(DownloadList::iterator itr);
|
||||
|
||||
void start(Download* d);
|
||||
|
||||
+15
-2
@@ -85,6 +85,19 @@ test_dir(const std::string& s) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void
|
||||
load_session_torrents(ui::Control* c) {
|
||||
// Load session torrents.
|
||||
std::list<std::string> l = c->get_core().get_download_store().get_formated_entries().make_list();
|
||||
|
||||
std::for_each(l.begin(), l.end(), std::bind1st(std::mem_fun(&core::Manager::insert), &c->get_core()));
|
||||
}
|
||||
|
||||
void
|
||||
load_arg_torrents(ui::Control* c, char** begin, char** end) {
|
||||
std::for_each(begin, end, std::bind1st(std::mem_fun(&core::Manager::insert), &c->get_core()));
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv) {
|
||||
ui::Control uiControl;
|
||||
@@ -122,8 +135,8 @@ main(int argc, char** argv) {
|
||||
|
||||
uiControl.get_core().initialize();
|
||||
|
||||
while (firstArg < argc)
|
||||
uiControl.get_core().insert(argv[firstArg++]);
|
||||
load_session_torrents(&uiControl);
|
||||
load_arg_torrents(&uiControl, argv + firstArg, argv + argc);
|
||||
|
||||
uiControl.get_display().adjust_layout();
|
||||
|
||||
|
||||
+12
-1
@@ -5,6 +5,7 @@
|
||||
#include <stdexcept>
|
||||
#include <dirent.h>
|
||||
|
||||
#include "functional.h"
|
||||
#include "directory.h"
|
||||
|
||||
namespace utils {
|
||||
@@ -28,7 +29,17 @@ Directory::update() {
|
||||
Base::push_back(ent->d_name);
|
||||
}
|
||||
|
||||
std::sort(begin(), end(), std::less<std::string>());
|
||||
Base::sort(std::less<std::string>());
|
||||
}
|
||||
|
||||
Directory::Base
|
||||
Directory::make_list() {
|
||||
Base l;
|
||||
|
||||
for (Base::iterator itr = begin(); itr != end(); ++itr)
|
||||
l.push_back(m_path + *itr);
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
#define RTORRENT_UTILS_DIRECTORY_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
|
||||
namespace utils {
|
||||
|
||||
class Directory : private std::vector<std::string> {
|
||||
class Directory : private std::list<std::string> {
|
||||
public:
|
||||
typedef std::vector<std::string> Base;
|
||||
typedef std::list<std::string> Base;
|
||||
|
||||
using Base::iterator;
|
||||
using Base::const_iterator;
|
||||
@@ -23,6 +23,8 @@ public:
|
||||
using Base::empty;
|
||||
using Base::size;
|
||||
|
||||
using Base::erase;
|
||||
|
||||
Directory() {}
|
||||
Directory(const std::string& path) : m_path(path) {}
|
||||
|
||||
@@ -30,6 +32,9 @@ public:
|
||||
|
||||
const std::string& get_path() { return m_path; }
|
||||
|
||||
// Make a list with full path names.
|
||||
Base make_list();
|
||||
|
||||
private:
|
||||
std::string m_path;
|
||||
};
|
||||
|
||||
@@ -52,9 +52,9 @@ equal(Type t, Ftor f) {
|
||||
return _equal<Type, Ftor>(t, f);
|
||||
}
|
||||
|
||||
template <typename Dest, typename Src>
|
||||
template <typename Src, typename Dest>
|
||||
struct _on : public std::unary_function<typename Src::argument_type, typename Dest::result_type> {
|
||||
_on(Dest d, Src s) : m_dest(d), m_src(s) {}
|
||||
_on(Src s, Dest d) : m_dest(d), m_src(s) {}
|
||||
|
||||
typename Dest::result_type operator () (typename Src::argument_type arg) {
|
||||
return m_dest(m_src(arg));
|
||||
@@ -64,10 +64,10 @@ struct _on : public std::unary_function<typename Src::argument_type, typename De
|
||||
Src m_src;
|
||||
};
|
||||
|
||||
template <typename Dest, typename Src>
|
||||
inline _on<Dest, Src>
|
||||
on(Dest d, Src s) {
|
||||
return _on<Dest, Src>(d, s);
|
||||
template <typename Src, typename Dest>
|
||||
inline _on<Src, Dest>
|
||||
on(Src s, Dest d) {
|
||||
return _on<Src, Dest>(s, d);
|
||||
}
|
||||
|
||||
template <typename Cond, typename Then>
|
||||
|
||||
Reference in New Issue
Block a user