Index: src/libchcore/TSQLiteSerializerFactory.cpp =================================================================== diff -u -N -rd32a79f0e9220bad2c6eeb5e8a986228b6e832fb -r30297d6aab17483da8e7b8323b4d17ff1a9f78d6 --- src/libchcore/TSQLiteSerializerFactory.cpp (.../TSQLiteSerializerFactory.cpp) (revision d32a79f0e9220bad2c6eeb5e8a986228b6e832fb) +++ src/libchcore/TSQLiteSerializerFactory.cpp (.../TSQLiteSerializerFactory.cpp) (revision 30297d6aab17483da8e7b8323b4d17ff1a9f78d6) @@ -39,7 +39,7 @@ { } -ISerializerPtr TSQLiteSerializerFactory::CreateSerializer(EObjectType eObjType, const TString& strNameHint) +ISerializerPtr TSQLiteSerializerFactory::CreateSerializer(EObjectType eObjType, const TString& strNameHint, bool bForceRecreate) { switch(eObjType) { @@ -53,28 +53,54 @@ strName = boost::lexical_cast(u).c_str(); } - if(!strName.EndsWithNoCase(_T(".sqlite"))) - strName += _T(".sqlite"); + TSmartPath pathTask = PathFromString(strNameHint); + if(!pathTask.HasFileRoot()) + { + if(!strName.EndsWithNoCase(_T(".sqlite"))) + strName += _T(".sqlite"); - TSmartPath pathTask(m_pathSerializeDir); - pathTask += PathFromString(strName); + TSmartPath pathTask(m_pathSerializeDir); + pathTask += PathFromString(strName); + } + if(bForceRecreate) + { + if(!DeleteFile(pathTask.ToString())) + { + DWORD dwLastError = GetLastError(); + if(dwLastError != ERROR_FILE_NOT_FOUND) + THROW_CORE_EXCEPTION_WIN32(eErr_CannotDeleteFile, dwLastError); + } + } + TSQLiteSerializerPtr spSerializer(new TSQLiteSerializer( pathTask, TSQLiteTaskSchemaPtr(new TSQLiteTaskSchema))); return spSerializer; } + case ISerializerFactory::eObj_TaskManager: { TSmartPath pathTaskManager = m_pathSerializeDir + PathFromString(_T("tasks.sqlite")); + if(bForceRecreate) + { + if(!DeleteFile(pathTaskManager.ToString())) + { + DWORD dwLastError = GetLastError(); + if(dwLastError != ERROR_FILE_NOT_FOUND) + THROW_CORE_EXCEPTION_WIN32(eErr_CannotDeleteFile, dwLastError); + } + } + TSQLiteSerializerPtr spSerializer(new TSQLiteSerializer( pathTaskManager, TTaskManagerSchemaPtr(new TSQLiteTaskManagerSchema))); return spSerializer; } + default: THROW_CORE_EXCEPTION(eErr_InvalidArgument); }