2010-07-06 21:39:08 +00:00
|
|
|
/**********************************************************************
|
|
|
|
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
Audacity(R) is copyright (c) 1999-2010 Audacity Team.
|
|
|
|
License: GPL v2. See License.txt.
|
|
|
|
|
|
|
|
AutoRecovery.h
|
|
|
|
|
|
|
|
*******************************************************************/
|
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
#ifndef __AUDACITY_AUTORECOVERY__
|
|
|
|
#define __AUDACITY_AUTORECOVERY__
|
|
|
|
|
|
|
|
#include "xml/XMLTagHandler.h"
|
|
|
|
|
2018-11-14 16:48:46 +00:00
|
|
|
#include <wx/mstream.h> // member variables
|
2010-01-23 19:44:49 +00:00
|
|
|
|
2018-01-08 21:38:52 +00:00
|
|
|
#include <unordered_map>
|
2019-02-28 17:22:25 +00:00
|
|
|
#include "audacity/Types.h"
|
2018-01-08 21:38:52 +00:00
|
|
|
|
2018-11-14 20:01:44 +00:00
|
|
|
class wxFFile;
|
2018-10-16 21:23:10 +00:00
|
|
|
class AudacityProject;
|
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
//
|
|
|
|
// XML Handler for a <recordingrecovery> tag
|
|
|
|
//
|
2016-02-24 06:06:39 +00:00
|
|
|
class RecordingRecoveryHandler final : public XMLTagHandler
|
2010-01-23 19:44:49 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
RecordingRecoveryHandler(AudacityProject* proj);
|
2016-02-24 06:06:47 +00:00
|
|
|
bool HandleXMLTag(const wxChar *tag, const wxChar **attrs) override;
|
|
|
|
void HandleXMLEndTag(const wxChar *tag) override;
|
|
|
|
XMLTagHandler *HandleXMLChild(const wxChar *tag) override;
|
2014-06-03 20:30:19 +00:00
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
// This class only knows reading tags
|
|
|
|
|
|
|
|
private:
|
2016-02-03 17:56:21 +00:00
|
|
|
|
|
|
|
int FindTrack() const;
|
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
AudacityProject* mProject;
|
|
|
|
int mChannel;
|
|
|
|
int mNumChannels;
|
2015-04-17 21:42:30 +00:00
|
|
|
int mAutoSaveIdent;
|
|
|
|
};
|
|
|
|
|
|
|
|
///
|
|
|
|
/// AutoSaveFile
|
|
|
|
///
|
|
|
|
|
|
|
|
// Should be plain ASCII
|
|
|
|
#define AutoSaveIdent "<?xml autosave>"
|
|
|
|
|
2018-01-08 21:38:52 +00:00
|
|
|
using NameMap = std::unordered_map<wxString, short>;
|
|
|
|
using IdMap = std::unordered_map<short, wxString>;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-12-01 22:03:40 +00:00
|
|
|
// This class's overrides do NOT throw AudacityException.
|
2016-02-24 06:06:39 +00:00
|
|
|
class AUDACITY_DLL_API AutoSaveFile final : public XMLWriter
|
2015-04-17 21:42:30 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
2019-12-07 19:30:07 +00:00
|
|
|
static TranslatableString FailureMessage( const FilePath &filePath );
|
2019-04-29 00:51:24 +00:00
|
|
|
|
2015-04-17 21:42:30 +00:00
|
|
|
AutoSaveFile(size_t allocSize = 1024 * 1024);
|
|
|
|
virtual ~AutoSaveFile();
|
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
void StartTag(const wxString & name) override;
|
|
|
|
void EndTag(const wxString & name) override;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
void WriteAttr(const wxString & name, const wxString &value) override;
|
|
|
|
void WriteAttr(const wxString & name, const wxChar *value) override;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
void WriteAttr(const wxString & name, int value) override;
|
|
|
|
void WriteAttr(const wxString & name, bool value) override;
|
|
|
|
void WriteAttr(const wxString & name, long value) override;
|
|
|
|
void WriteAttr(const wxString & name, long long value) override;
|
|
|
|
void WriteAttr(const wxString & name, size_t value) override;
|
|
|
|
void WriteAttr(const wxString & name, float value, int digits = -1) override;
|
|
|
|
void WriteAttr(const wxString & name, double value, int digits = -1) override;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
void WriteData(const wxString & value) override;
|
|
|
|
void Write(const wxString & data) override;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
// Non-override functions
|
|
|
|
void WriteSubTree(const AutoSaveFile & value);
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
bool Write(wxFFile & file) const;
|
|
|
|
bool Append(wxFFile & file) const;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2016-02-24 06:06:47 +00:00
|
|
|
bool IsEmpty() const;
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2019-03-07 19:50:22 +00:00
|
|
|
bool Decode(const FilePath & fileName);
|
2015-04-17 21:42:30 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
void WriteName(const wxString & name);
|
|
|
|
void CheckSpace(wxMemoryOutputStream & buf);
|
|
|
|
|
|
|
|
private:
|
|
|
|
wxMemoryOutputStream mBuffer;
|
|
|
|
wxMemoryOutputStream mDict;
|
|
|
|
NameMap mNames;
|
|
|
|
size_t mAllocSize;
|
2010-01-23 19:44:49 +00:00
|
|
|
};
|
|
|
|
|
2015-04-17 21:42:30 +00:00
|
|
|
|
2010-01-23 19:44:49 +00:00
|
|
|
#endif
|