summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/libarchivearchive.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/libarchivearchive.h')
-rw-r--r--src/libs/installer/libarchivearchive.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libs/installer/libarchivearchive.h b/src/libs/installer/libarchivearchive.h
index e0281e655..796069ed1 100644
--- a/src/libs/installer/libarchivearchive.h
+++ b/src/libs/installer/libarchivearchive.h
@@ -64,12 +64,15 @@ public:
public Q_SLOTS:
void extract(const QString &dirPath, const quint64 totalFiles);
void addDataBlock(const QByteArray buffer);
+ void onFilePositionChanged(qint64 pos);
void cancel();
Q_SIGNALS:
void dataBlockRequested();
void dataAtEnd();
void dataReadyForRead();
+ void seekRequested(qint64 offset, int whence);
+ void seekReady();
void finished(const QString &errorString = QString());
void currentEntryChanged(const QString &filename);
@@ -77,10 +80,12 @@ Q_SIGNALS:
private:
static ssize_t readCallback(archive *reader, void *caller, const void **buff);
+ static la_int64_t seekCallback(archive *reader, void *caller, la_int64_t offset, int whence);
bool writeEntry(archive *reader, archive *writer, archive_entry *entry);
private:
QByteArray m_buffer;
+ qint64 m_lastPos = 0;
Status m_status;
};
@@ -107,16 +112,19 @@ public:
void workerExtract(const QString &dirPath, const quint64 totalFiles);
void workerAddDataBlock(const QByteArray buffer);
void workerSetDataAtEnd();
+ void workerSetFilePosition(qint64 pos);
void workerCancel();
ExtractWorker::Status workerStatus() const;
Q_SIGNALS:
void dataBlockRequested();
+ void seekRequested(qint64 offset, int whence);
void workerFinished();
void workerAboutToExtract(const QString &dirPath, const quint64 totalFiles);
void workerAboutToAddDataBlock(const QByteArray buffer);
void workerAboutToSetDataAtEnd();
+ void workerAboutToSetFilePosition(qint64 pos);
void workerAboutToCancel();
public Q_SLOTS:
@@ -133,11 +141,14 @@ private:
void initExtractWorker();
+ int archiveReadOpenWithCallbacks(archive *reader);
bool writeEntry(archive *reader, archive *writer, archive_entry *entry);
static qint64 readData(QFile *file, char *data, qint64 maxSize);
static ssize_t readCallback(archive *reader, void *archiveData, const void **buff);
+ static la_int64_t seekCallback(archive *reader, void *archiveData, la_int64_t offset, int whence);
+
static QString pathWithoutNamespace(const QString &path);
quint64 totalFiles();