FileArchive: minor fixes to get progress reporting working
This commit is contained in:
parent
be860db54f
commit
2061c3780d
@ -178,6 +178,12 @@ FileArchive::~FileArchive ()
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
FileArchive::require_progress ()
|
||||
{
|
||||
_req.mp.progress = this;
|
||||
}
|
||||
|
||||
std::string
|
||||
FileArchive::fetch (const std::string & url, const std::string & destdir) const
|
||||
{
|
||||
@ -428,7 +434,8 @@ FileArchive::do_extract (struct archive* a)
|
||||
|
||||
for (;;) {
|
||||
int r = archive_read_next_header (a, &entry);
|
||||
if (!_req.mp.progress) {
|
||||
|
||||
if (_req.mp.progress) {
|
||||
// file i/o -- not URL
|
||||
const uint64_t read = archive_filter_bytes (a, -1);
|
||||
progress (read, _req.mp.length);
|
||||
@ -460,6 +467,10 @@ FileArchive::do_extract (struct archive* a)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_req.mp.progress && rv == 0) {
|
||||
// file i/o -- not URL
|
||||
progress (_req.mp.length, _req.mp.length);
|
||||
}
|
||||
|
||||
archive_read_close (a);
|
||||
archive_read_free (a);
|
||||
|
@ -18,6 +18,8 @@
|
||||
#ifndef _pbd_archive_h_
|
||||
#define _pbd_archive_h_
|
||||
|
||||
#include <atomic>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "pbd/signals.h"
|
||||
@ -57,6 +59,8 @@ class LIBPBD_API FileArchive
|
||||
|
||||
PBD::Signal2<void, size_t, size_t> progress; // TODO
|
||||
|
||||
void require_progress ();
|
||||
|
||||
struct MemPipe {
|
||||
public:
|
||||
MemPipe ()
|
||||
@ -100,8 +104,8 @@ class LIBPBD_API FileArchive
|
||||
size_t size;
|
||||
bool done;
|
||||
|
||||
double processed;
|
||||
double length;
|
||||
size_t processed;
|
||||
size_t length;
|
||||
FileArchive* progress;
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user