file: Set version number on a per-file basis
I'm about to bump the version number for the deck layer, so it makes senes that different files need different version numbers. Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
ddfdc7d6f6
commit
a96e6f6f2d
16
DESIGN
16
DESIGN
|
@ -95,9 +95,6 @@ On-disk files:
|
||||||
- Notation:
|
- Notation:
|
||||||
"File << aaaaa << bbbbb << endl" is translated into "aaaaa bbbbb\n"
|
"File << aaaaa << bbbbb << endl" is translated into "aaaaa bbbbb\n"
|
||||||
|
|
||||||
- File version:
|
|
||||||
#define FILE_VERSION 0
|
|
||||||
|
|
||||||
- Open mode:
|
- Open mode:
|
||||||
enum OpenMode {
|
enum OpenMode {
|
||||||
OPEN_READ,
|
OPEN_READ,
|
||||||
|
@ -109,11 +106,12 @@ On-disk files:
|
||||||
class File : public std::fstream {
|
class File : public std::fstream {
|
||||||
private:
|
private:
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
|
unsigned int prev_version;
|
||||||
OpenMode mode;
|
OpenMode mode;
|
||||||
string filename;
|
string filename;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
File(const std::string &);
|
File(const std::string &, unsigned int);
|
||||||
~File();
|
~File();
|
||||||
const std::string get_filepath();
|
const std::string get_filepath();
|
||||||
const unsigned int get_version();
|
const unsigned int get_version();
|
||||||
|
@ -128,8 +126,8 @@ On-disk files:
|
||||||
File << <OTHER_DATA>;
|
File << <OTHER_DATA>;
|
||||||
|
|
||||||
- API:
|
- API:
|
||||||
File :: File(const std::string &filename);
|
File :: File(const std::string &filename, unsigned int version);
|
||||||
Store the name of the file.
|
Store the name of the file and the file version.
|
||||||
|
|
||||||
File :: ~File();
|
File :: ~File();
|
||||||
Close the file stream if it is open.
|
Close the file stream if it is open.
|
||||||
|
@ -146,7 +144,9 @@ On-disk files:
|
||||||
and return the result.
|
and return the result.
|
||||||
|
|
||||||
const unsigned int File :: get_version();
|
const unsigned int File :: get_version();
|
||||||
Return the file version number.
|
if mode == OPEN_READ:
|
||||||
|
return prev_version
|
||||||
|
return version
|
||||||
|
|
||||||
bool File :: exists();
|
bool File :: exists();
|
||||||
Return true if the file exists in the filesystem.
|
Return true if the file exists in the filesystem.
|
||||||
|
@ -161,7 +161,7 @@ On-disk files:
|
||||||
When opening a file for reading (mode == OPEN_READ),
|
When opening a file for reading (mode == OPEN_READ),
|
||||||
- Return false if the file does not exist
|
- Return false if the file does not exist
|
||||||
- Open the file
|
- Open the file
|
||||||
- Read in version from the start of the file
|
- Read in prev_version from the start of the file
|
||||||
|
|
||||||
When opening a file for writing (mode == OPEN_WRITE),
|
When opening a file for writing (mode == OPEN_WRITE),
|
||||||
- Create missing directories as needed
|
- Create missing directories as needed
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
Database<T> :: Database(std::string filepath, bool autosave)
|
Database<T> :: Database(std::string filepath, bool autosave)
|
||||||
: _size(0), _autosave(autosave), _file(filepath)
|
: _size(0), _autosave(autosave), _file(filepath, 0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#define FILE_VERSION 0
|
|
||||||
|
|
||||||
enum OpenMode {
|
enum OpenMode {
|
||||||
OPEN_READ,
|
OPEN_READ,
|
||||||
|
@ -15,18 +14,21 @@ enum OpenMode {
|
||||||
NOT_OPEN,
|
NOT_OPEN,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class File : public std::fstream {
|
class File : public std::fstream {
|
||||||
private:
|
private:
|
||||||
OpenMode mode;
|
OpenMode mode;
|
||||||
std::string filename;
|
std::string filename;
|
||||||
unsigned int version;
|
unsigned int version;
|
||||||
|
unsigned int prev_version;
|
||||||
|
|
||||||
const std::string find_dir();
|
const std::string find_dir();
|
||||||
bool open_read();
|
bool open_read();
|
||||||
bool open_write();
|
bool open_write();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
File(const std::string &);
|
|
||||||
|
File(const std::string &, unsigned int);
|
||||||
~File();
|
~File();
|
||||||
const std::string get_filepath();
|
const std::string get_filepath();
|
||||||
const unsigned int get_version();
|
const unsigned int get_version();
|
||||||
|
|
|
@ -19,7 +19,7 @@ static bool o_pause_enabled = false;
|
||||||
static unsigned int o_pause_count = 0;
|
static unsigned int o_pause_count = 0;
|
||||||
static bool o_should_pause = false;
|
static bool o_should_pause = false;
|
||||||
|
|
||||||
static File f_cur_track("cur_track");
|
static File f_cur_track("cur_track", 0);
|
||||||
|
|
||||||
|
|
||||||
class RecentQueue : public Queue
|
class RecentQueue : public Queue
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
static std::list<Queue> playqueue_deck;
|
static std::list<Queue> playqueue_deck;
|
||||||
static File deck_file("deck");
|
static File deck_file("deck", 0);
|
||||||
|
|
||||||
void deck :: init()
|
void deck :: init()
|
||||||
{
|
{
|
||||||
|
|
10
lib/file.cpp
10
lib/file.cpp
|
@ -14,8 +14,8 @@ const std::string OCARINA_DIR = "ocarina-debug";
|
||||||
const std::string OCARINA_DIR = "ocarina";
|
const std::string OCARINA_DIR = "ocarina";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
File :: File(const std::string &name)
|
File :: File(const std::string &name, unsigned int vers)
|
||||||
: mode(NOT_OPEN), filename(name), version(FILE_VERSION)
|
: mode(NOT_OPEN), filename(name), version(vers), prev_version(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,8 @@ const std::string File :: get_filepath()
|
||||||
|
|
||||||
const unsigned int File :: get_version()
|
const unsigned int File :: get_version()
|
||||||
{
|
{
|
||||||
|
if (mode == OPEN_READ)
|
||||||
|
return prev_version;
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +64,7 @@ bool File :: open_read()
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mode = OPEN_READ;
|
mode = OPEN_READ;
|
||||||
std::fstream::operator>>(version);
|
std::fstream::operator>>(prev_version);
|
||||||
getline();
|
getline();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -77,7 +79,7 @@ bool File :: open_write()
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mode = OPEN_WRITE;
|
mode = OPEN_WRITE;
|
||||||
std::fstream::operator<<(FILE_VERSION) << std::endl;
|
std::fstream::operator<<(version) << std::endl;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
LibraryQueue() : Queue(Q_ENABLED | Q_REPEAT), f("library.q")
|
LibraryQueue() : Queue(Q_ENABLED | Q_REPEAT), f("library.q", 0)
|
||||||
{
|
{
|
||||||
Queue :: sort(SORT_ARTIST, true);
|
Queue :: sort(SORT_ARTIST, true);
|
||||||
Queue :: sort(SORT_YEAR, false);
|
Queue :: sort(SORT_YEAR, false);
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
|
|
||||||
static void test_filepath()
|
static void test_filepath()
|
||||||
{
|
{
|
||||||
File a("");
|
File a("", 0);
|
||||||
File b("file.txt");
|
File b("file.txt", 0);
|
||||||
|
|
||||||
test_equal(a.get_version(), (unsigned)0);
|
test_equal(a.get_version(), (unsigned)0);
|
||||||
test_equal((std::string)a.get_filepath(), (std::string)"");
|
test_equal((std::string)a.get_filepath(), (std::string)"");
|
||||||
|
@ -23,12 +23,12 @@ static void test_filepath()
|
||||||
|
|
||||||
static void test_open()
|
static void test_open()
|
||||||
{
|
{
|
||||||
File a("");
|
File a("", 0);
|
||||||
|
|
||||||
test_equal(a.open(OPEN_READ), false);
|
test_equal(a.open(OPEN_READ), false);
|
||||||
test_equal(a.open(OPEN_WRITE), false);
|
test_equal(a.open(OPEN_WRITE), false);
|
||||||
|
|
||||||
File b("file.txt");
|
File b("file.txt", 0);
|
||||||
test_equal(b.open(NOT_OPEN), false);
|
test_equal(b.open(NOT_OPEN), false);
|
||||||
test_equal(b.open(OPEN_READ), false);
|
test_equal(b.open(OPEN_READ), false);
|
||||||
test_equal(b.open(OPEN_WRITE), true);
|
test_equal(b.open(OPEN_WRITE), true);
|
||||||
|
@ -40,17 +40,18 @@ static void test_open()
|
||||||
|
|
||||||
static void test_io()
|
static void test_io()
|
||||||
{
|
{
|
||||||
File a("file.txt");
|
File a("file.txt", 1);
|
||||||
|
|
||||||
test_equal(a.open(OPEN_WRITE), true);
|
test_equal(a.open(OPEN_WRITE), true);
|
||||||
a << "ABCDE FGHIJ KLMNO PQRST UVWXYZ" << std::endl;
|
a << "ABCDE FGHIJ KLMNO PQRST UVWXYZ" << std::endl;
|
||||||
a.close();
|
a.close();
|
||||||
test_equal(a.exists(), true);
|
test_equal(a.exists(), true);
|
||||||
|
|
||||||
File b("file.txt");
|
File b("file.txt", 0);
|
||||||
std::string res;
|
std::string res;
|
||||||
|
|
||||||
test_equal(b.open(OPEN_READ), true);
|
test_equal(b.open(OPEN_READ), true);
|
||||||
|
test_equal(b.get_version(), (unsigned)1);
|
||||||
b >> res;
|
b >> res;
|
||||||
test_equal(res, (std::string)"ABCDE");
|
test_equal(res, (std::string)"ABCDE");
|
||||||
b >> res;
|
b >> res;
|
||||||
|
|
Loading…
Reference in New Issue