12 #ifndef hifi_AssetsBackupHandler_h
13 #define hifi_AssetsBackupHandler_h
20 #include <QJsonDocument>
21 #include <QJsonObject>
23 #include <AssetUtils.h>
24 #include <ReceivedMessage.h>
25 #include <PortableHighResolutionClock.h>
27 #include "BackupHandler.h"
29 class AssetsBackupHandler :
public QObject,
public BackupHandlerInterface {
33 AssetsBackupHandler(
const QString& backupDirectory,
bool assetServerEnabled);
35 std::pair<bool, float> isAvailable(
const QString& backupName)
override;
36 std::pair<bool, float> getRecoveryStatus()
override;
38 void loadBackup(
const QString& backupName, QuaZip& zip)
override;
39 void loadingComplete()
override;
40 void createBackup(
const QString& backupName, QuaZip& zip)
override;
41 std::pair<bool, QString> recoverBackup(
const QString& backupName, QuaZip& zip,
const QString& username,
const QString& sourceFilename)
override;
42 void deleteBackup(
const QString& backupName)
override;
43 void consolidateBackup(
const QString& backupName, QuaZip& zip)
override;
44 bool isCorruptedBackup(
const QString& backupName)
override;
46 bool operationInProgress() {
return getRecoveryStatus().first; }
49 void setupRefreshTimer();
50 void refreshMappings();
52 void refreshAssetsInBackups();
53 void refreshAssetsOnDisk();
54 void checkForMissingAssets();
55 void checkForAssetsToDelete();
57 void downloadMissingFiles(
const AssetUtils::Mappings& mappings);
58 void downloadNextMissingFile();
59 bool writeAssetFile(
const AssetUtils::AssetHash& hash,
const QByteArray& data);
61 void computeServerStateDifference(
const AssetUtils::Mappings& currentMappings,
62 const AssetUtils::Mappings& newMappings);
63 void restoreAllAssets();
64 void restoreNextAsset();
65 void updateMappings();
67 QString _assetsDirectory;
68 bool _assetServerEnabled {
false };
70 QTimer _mappingsRefreshTimer;
71 p_high_resolution_clock::time_point _lastMappingsRefresh;
72 AssetUtils::Mappings _currentMappings;
74 struct AssetServerBackup {
75 AssetServerBackup(
const QString& pName, AssetUtils::Mappings pMappings,
bool pCorruptedBackup) :
76 name(pName), mappings(pMappings), corruptedBackup(pCorruptedBackup) {}
79 AssetUtils::Mappings mappings;
84 std::vector<AssetServerBackup> _backups;
85 std::set<AssetUtils::AssetHash> _assetsInBackups;
86 std::set<AssetUtils::AssetHash> _assetsOnDisk;
89 std::set<AssetUtils::AssetHash> _assetsLeftToRequest;
92 std::vector<AssetUtils::AssetHash> _assetsLeftToUpload;
93 std::vector<std::pair<AssetUtils::AssetPath, AssetUtils::AssetHash>> _mappingsLeftToSet;
94 AssetUtils::AssetPathList _mappingsLeftToDelete;
95 int _mappingRequestsInFlight { 0 };
96 int _numRestoreOperations { 0 };