Refresh both AGENTS guides and clarify module purpose, usage, ownership, threading, return values and wire formats in headers. Remove the unused timeout_heap freed_count field and unimplemented getter.
76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
/* Локальное чтение медиа из целого файла или набора блоков по localAttrs.
|
|
* readRange/readAll читают доступные данные; assembleAndCleanup собирает файл и удаляет фрагменты.
|
|
* media_split_to_blocks по умолчанию удаляет исходник после разбиения; сетевую загрузку модуль не выполняет. */
|
|
#pragma once
|
|
|
|
#include <QString>
|
|
#include <QList>
|
|
#include <QFile>
|
|
#include <QJsonObject>
|
|
#include <cstdint>
|
|
|
|
class MediaBlockReader {
|
|
public:
|
|
MediaBlockReader();
|
|
|
|
void initFromAttrs(const QString& mediaDir,
|
|
const QString& dt, const QString& basename,
|
|
const QString& suffix, const QString& ext,
|
|
const QJsonObject& localAttrs,
|
|
qint64 blockSize, qint64 totalSize, int totalBlocks);
|
|
|
|
static MediaBlockReader fromLegacyFile(const QString& filePath);
|
|
|
|
bool isValid() const { return m_valid; }
|
|
bool isComplete() const { return m_complete; }
|
|
bool isSingleFile() const { return m_mode == SINGLE_FILE; }
|
|
bool isFragmented() const { return m_mode == FRAGMENTED; }
|
|
qint64 totalSize() const { return m_totalSize; }
|
|
|
|
QByteArray readAll();
|
|
QByteArray readRange(qint64 offset, qint64 size);
|
|
bool seek(qint64 pos);
|
|
qint64 pos() const { return m_pos; }
|
|
bool atEnd() const;
|
|
|
|
bool saveToFile(const QString& destPath);
|
|
QString assembleAndCleanup();
|
|
QJsonObject localAttrsAfterAssembly() const;
|
|
|
|
QString debugPath() const;
|
|
|
|
private:
|
|
enum Mode { NONE, SINGLE_FILE, FRAGMENTED };
|
|
Mode m_mode = NONE;
|
|
bool m_valid = false;
|
|
bool m_complete = false;
|
|
qint64 m_pos = 0;
|
|
|
|
QString m_filePath;
|
|
qint64 m_fileSize = 0;
|
|
|
|
QString m_mediaDir, m_dt, m_basename, m_suffix, m_ext;
|
|
QList<int> m_blocks;
|
|
qint64 m_blockSize = 0;
|
|
qint64 m_totalSize = 0;
|
|
int m_totalBlocks = 0;
|
|
|
|
qint64 blockSizeForN(int n) const;
|
|
QString blockFilePath(int n) const;
|
|
};
|
|
|
|
struct MediaBlockInfo {
|
|
QString dt;
|
|
QString basename;
|
|
QString suffix;
|
|
QString ext;
|
|
int numBlocks = 0;
|
|
qint64 fileSize = 0;
|
|
qint64 blockSize = 0;
|
|
};
|
|
|
|
qint64 media_calc_block_size(qint64 fileSize);
|
|
MediaBlockInfo media_split_to_blocks(const QString& srcFile,
|
|
const QString& mediaDir,
|
|
bool removeSrc = true);
|