1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_SHARED_FILECOLLECTION_H
4#define ENGINE_SHARED_FILECOLLECTION_H
5
6#include <base/system.h>
7#include <base/types.h>
8
9#include <cstdint>
10#include <vector>
11
12class IStorage;
13
14class CFileCollection
15{
16 enum
17 {
18 TIMESTAMP_LENGTH = 20, // _YYYY-MM-DD_HH-MM-SS
19 };
20
21 struct CFileEntry
22 {
23 time_t m_Timestamp;
24 char m_aFilename[IO_MAX_PATH_LENGTH];
25 CFileEntry(int64_t Timestamp, const char *pFilename)
26 {
27 m_Timestamp = Timestamp;
28 str_copy(dst&: m_aFilename, src: pFilename);
29 }
30 };
31
32 std::vector<CFileEntry> m_vFileEntries;
33 char m_aFileDesc[128];
34 int m_FileDescLength;
35 char m_aFileExt[32];
36 int m_FileExtLength;
37 char m_aPath[IO_MAX_PATH_LENGTH];
38 IStorage *m_pStorage;
39
40 bool ExtractTimestamp(const char *pTimestring, time_t *pTimestamp);
41 bool ParseFilename(const char *pFilename, time_t *pTimestamp);
42
43public:
44 void Init(IStorage *pStorage, const char *pPath, const char *pFileDesc, const char *pFileExt, int MaxEntries);
45
46 static int FilelistCallback(const char *pFilename, int IsDir, int StorageType, void *pUser);
47};
48
49#endif
50