ff7tk  1.0.0.16
Work with Final Fantasy 7 game data
Archive.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2009 - 2021 Arzel Jérôme <myst6re@gmail.com>
2 // SPDX-FileCopyrightText: 2019 Chris Rizzitello <sithlord48@gmail.com>
3 // SPDX-License-Identifier: LGPL-3.0-or-later
4 
5 #pragma once
6 
7 #include <QBuffer>
8 #include <QByteArray>
9 #include <QFile>
10 #include <QDebug>
11 #include <ff7tkformats_export.h>
12 
13 struct FF7TKFORMATS_EXPORT ArchiveObserver {
15  virtual ~ArchiveObserver();
16  virtual bool observerWasCanceled() const = 0;
17  virtual void setObserverMaximum(unsigned int max) = 0;
18  virtual void setObserverValue(int value) = 0;
19  virtual bool observerRetry(const QString &message) = 0;
20 };
21 
22 class FF7TKFORMATS_EXPORT Archive
23 {
24 public:
25  enum ArchiveError {
38  FileNotFoundError
39  };
40 
41  Archive();
42  explicit Archive(const QString &filename);
43  explicit Archive(QFile *device);
44  virtual ~Archive();
45  virtual inline void clear() {}
46  virtual QStringList fileList() const = 0;
47  virtual int fileCount() const = 0;
48  virtual bool fileExists(const QString &filePath) const = 0;
49  virtual QIODevice *file(const QString &filePath) = 0;
50  QByteArray fileData(const QString &filePath);
51  virtual QIODevice *modifiedFile(const QString &filePath) = 0;
52  QByteArray modifiedFileData(const QString &filePath);
53  virtual bool setFile(const QString &filePath, QIODevice *data) = 0;
54  bool setFileData(const QString &filePath, const QByteArray &data);
55  virtual bool addFile(const QString &filePath, QIODevice *data) = 0;
56  bool addFileData(const QString &filePath, const QByteArray &data);
57  virtual bool removeFile(const QString &filePath) = 0;
58  virtual bool isNameValid(const QString &filePath) const = 0;
59  virtual bool renameFile(const QString &filePath, const QString &newFilePath) = 0;
60  virtual bool open();
61  virtual bool isOpen() const;
62  virtual void close();
63  QString fileName() const;
64  void setFileName(const QString &fileName);
65  virtual bool pack(const QString &destination = QString(), ArchiveObserver *observer = nullptr) = 0;
66  ArchiveError error() const;
67  QString errorString() const;
68 protected:
69  virtual bool openHeader() = 0;
70  inline void setErrorString(const QString &errorString)
71  {
72  _errorString = errorString;
73  }
74  void setError(ArchiveError error, const QString &errorString = QString());
75  inline QFile *archiveIO() const
76  {
77  return _archiveIO;
78  }
79 
80 private:
81  Q_DISABLE_COPY(Archive)
82  QString _errorString;
83  ArchiveError _error;
84  QFile *_archiveIO;
85 };
Archive::CopyError
@ CopyError
Definition: Archive.h:36
Archive::RemoveError
@ RemoveError
Definition: Archive.h:31
Archive::PositionError
@ PositionError
Definition: Archive.h:33
ArchiveObserver
Definition: Archive.h:13
Archive::clear
virtual void clear()
Definition: Archive.h:45
Archive::ArchiveError
ArchiveError
Definition: Archive.h:25
Archive::RenameError
@ RenameError
Definition: Archive.h:32
Archive::ReadError
@ ReadError
Definition: Archive.h:27
Archive::ResizeError
@ ResizeError
Definition: Archive.h:34
ArchiveObserver::ArchiveObserver
ArchiveObserver()
Definition: Archive.h:14
Archive::InvalidError
@ InvalidError
Definition: Archive.h:37
Archive::AbortError
@ AbortError
Definition: Archive.h:30
Archive
The Archive class is a device list in a file system or an archive file.
Definition: Archive.h:22
Archive::setErrorString
void setErrorString(const QString &errorString)
Definition: Archive.h:70
Archive::WriteError
@ WriteError
Definition: Archive.h:28
Archive::PermissionsError
@ PermissionsError
Definition: Archive.h:35
Archive::OpenError
@ OpenError
Definition: Archive.h:29
Archive::archiveIO
QFile * archiveIO() const
Definition: Archive.h:75
Archive::NoError
@ NoError
Definition: Archive.h:26