Changed backups to use new .rmskin format

This commit is contained in:
Birunthan Mohanathas 2012-06-10 10:48:07 +03:00
parent a9b7347a7e
commit 5e3d266c25
6 changed files with 53 additions and 34 deletions

View File

@ -19,6 +19,7 @@
#include "StdAfx.h"
#include "Application.h"
#include "DialogBackup.h"
#include "DialogInstall.h"
#include "resource.h"
#include "../Version.h"
@ -190,10 +191,9 @@ void CDialogBackup::StartBackup()
bool CDialogBackup::CreateBackup()
{
m_WriteBuffer = new char[c_WriteBufferSize];
std::wstring addonsPath = g_Data.programPath + L"Addons";
std::wstring fontsPath = g_Data.programPath + L"Fonts";
std::wstring pluginsPath = g_Data.programPath + L"Plugins";
std::wstring addonsPath = g_Data.settingsPath + L"Addons";
std::wstring pluginsPath = g_Data.settingsPath + L"Plugins";
std::wstring themesPath = g_Data.settingsPath + L"Themes";
std::wstring skinsPath = g_Data.skinsPath;
@ -207,9 +207,26 @@ bool CDialogBackup::CreateBackup()
return false;
}
// Create and add the options file
{
WCHAR tempFile[MAX_PATH];
GetTempPath(MAX_PATH, tempFile);
GetTempFileName(tempFile, L"ini", 0, tempFile);
WCHAR userName[UNLEN + 1];
DWORD userNameSize = UNLEN + 1;
GetUserName(userName, &userNameSize);
WritePrivateProfileString(L"rmskin", L"Name", L"Backup", tempFile);
WritePrivateProfileString(L"rmskin", L"Author", userName, tempFile);
WritePrivateProfileString(L"rmskin", L"Version", m_BackupTime.c_str(), tempFile);
WritePrivateProfileString(L"rmskin", L"MinimumRainmeter", L"2.3", tempFile);
AddFileToBackup(ConvertToAscii(tempFile).c_str(), "RMSKIN.ini");
DeleteFile(tempFile);
}
if ((_waccess(addonsPath.c_str(), 0) == 0 && !AddFolderToBackup(addonsPath, L"", "Addons", true)) ||
(_waccess(fontsPath.c_str(), 0) == 0 && !AddFolderToBackup(themesPath, L"", "Fonts", true)) ||
(_waccess(skinsPath.c_str(), 0) == 0 && !AddFolderToBackup(skinsPath, L"", "Skins", true)) ||
//(_waccess(skinsPath.c_str(), 0) == 0 && !AddFolderToBackup(skinsPath, L"", "Skins", true)) ||
(_waccess(themesPath.c_str(), 0) == 0 && !AddFolderToBackup(themesPath, L"", "Themes", true)) ||
#ifdef _WIN64
(_waccess(pluginsPath.c_str(), 0) == 0 && !AddFolderToBackup(pluginsPath, L"", "Plugins\\64bit", false)))
@ -221,30 +238,22 @@ bool CDialogBackup::CreateBackup()
return false;
}
// Create and add the config file
WCHAR tempFile[MAX_PATH];
GetTempPath(MAX_PATH, tempFile);
GetTempFileName(tempFile, L"ini", 0, tempFile);
std::wstring tmpSz = m_TargetFile;
std::wstring::size_type pos = m_TargetFile.find_last_of(L'\\');
if (pos != std::wstring::npos)
{
tmpSz.erase(0, ++pos);
}
WritePrivateProfileString(L"Rainstaller", L"Name", tmpSz.c_str(), tempFile);
WritePrivateProfileString(L"Rainstaller", L"RainmeterFonts", L"1", tempFile);
WritePrivateProfileString(L"Rainstaller", L"MinRainmeterVer", L"2.2", tempFile);
AddFileToBackup(ConvertToAscii(tempFile).c_str(), "Rainstaller.cfg");
DeleteFile(tempFile);
if (zipClose(m_ZipFile, NULL) != ZIP_OK)
{
MessageBox(NULL, L"Unable to access backup .rmskin file.", NULL, MB_OK | MB_TOPMOST);
return false;
}
// Add footer
FILE* file = _wfopen(m_TargetFile.c_str(), L"r+b");
if (file)
{
fseek(file, 0, SEEK_END);
CDialogInstall::PackageFooter footer = { _ftelli64(file), CDialogInstall::PackageFlag::Backup, "RMSKIN" };
fwrite(&footer, sizeof(footer), 1, file);
fclose(file);
}
delete m_WriteBuffer;
return true;
}
@ -431,10 +440,16 @@ void CDialogBackup::CTabBackup::Initialize()
if (SUCCEEDED(hr))
{
c_Dialog->m_TargetFile = buffer;
SYSTEMTIME lt;
GetLocalTime(&lt);
_snwprintf_s(buffer, _TRUNCATE, L"\\Backup-%02d.%02d.%02d-%02d.%02d.rmskin", lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute);
c_Dialog->m_TargetFile += buffer;
_snwprintf_s(buffer, _TRUNCATE, L"%02d.%02d.%02d-%02d.%02d", lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute);
c_Dialog->m_BackupTime = buffer;
c_Dialog->m_TargetFile += L"\\Backup-";
c_Dialog->m_TargetFile += c_Dialog->m_BackupTime;
c_Dialog->m_TargetFile += L".rmskin";
HWND item = GetDlgItem(m_Window, IDC_BACKUP_FILE_TEXT);
SetWindowText(item, c_Dialog->m_TargetFile.c_str());

View File

@ -62,6 +62,7 @@ private:
CTabBackup m_TabBackup;
std::wstring m_TargetFile;
std::wstring m_BackupTime;
HANDLE m_ThreadHandle;

View File

@ -264,7 +264,7 @@ bool CDialogInstall::ReadPackage()
__int64 fileSize = 0;
if (file)
{
fseek(file, sizeof(footer), SEEK_END);
fseek(file, -(long)sizeof(footer), SEEK_END);
fileSize = _ftelli64(file);
fread(&footer, sizeof(footer), 1, file);
fclose(file);
@ -331,15 +331,15 @@ bool CDialogInstall::ReadPackage()
if (!path)
{
path = buffer;
}
else
{
if (m_PackageFormat == PackageFormat::New)
{
// New package files must be in root of archive
continue;
}
}
else
{
++path; // Skip slash
}

View File

@ -40,6 +40,8 @@ protected:
virtual CTab& GetActiveTab();
private:
friend class CDialogBackup;
class CTabInstall : public CTab
{
public:

View File

@ -64,12 +64,12 @@ IDD_BACKUP_TABDIALOG DIALOGEX 15, 30, 250, 58
STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg 2"
{
LTEXT "A backup allows you to save a complete copy of your setup, including skins and statistics.\n\nThe backup will be created at:", IDC_BACKUP_DESCRIPTION_TEXT, 0, 0, 245, 39
LTEXT "A backup allows you to save a complete copy of your current Rainmeter skins and themes.\n\nThe backup will be created at:", IDC_BACKUP_DESCRIPTION_TEXT, 0, 0, 245, 39
EDITTEXT IDC_BACKUP_FILE_TEXT, 0, 42, 220, 14, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL | ES_READONLY
PUSHBUTTON "...", IDC_BACKUP_BROWSE_BUTTON, 225, 42, 25, 14, WS_TABSTOP
LTEXT "Backup in progress...", IDC_BACKUP_INPROGRESS_TEXT, 0, 0, 245, 9, NOT WS_VISIBLE
CONTROL "", IDC_BACKUP_PROGRESS, "msctls_progress32", PBS_MARQUEE | NOT WS_VISIBLE | WS_BORDER, 0, 42, 250, 11
LTEXT "Backup in progress...", IDC_BACKUP_INPROGRESS_TEXT, 0, 0, 245, 39, NOT WS_VISIBLE
CONTROL "", IDC_BACKUP_PROGRESS, "msctls_progress32", PBS_MARQUEE | NOT WS_VISIBLE | WS_BORDER, 0, 15, 250, 11
}
IDD_INSTALL_DIALOG DIALOGEX 0, 0, 266, 270

View File

@ -24,6 +24,7 @@
#include <Windows.h>
#include <Windowsx.h>
#include <Commdlg.h>
#include <Lmcons.h>
#include <Shlobj.h>
#include <Shlwapi.h>
#include <Shellapi.h>