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 "StdAfx.h"
#include "Application.h" #include "Application.h"
#include "DialogBackup.h" #include "DialogBackup.h"
#include "DialogInstall.h"
#include "resource.h" #include "resource.h"
#include "../Version.h" #include "../Version.h"
@ -191,9 +192,8 @@ bool CDialogBackup::CreateBackup()
{ {
m_WriteBuffer = new char[c_WriteBufferSize]; m_WriteBuffer = new char[c_WriteBufferSize];
std::wstring addonsPath = g_Data.programPath + L"Addons"; std::wstring addonsPath = g_Data.settingsPath + L"Addons";
std::wstring fontsPath = g_Data.programPath + L"Fonts"; std::wstring pluginsPath = g_Data.settingsPath + L"Plugins";
std::wstring pluginsPath = g_Data.programPath + L"Plugins";
std::wstring themesPath = g_Data.settingsPath + L"Themes"; std::wstring themesPath = g_Data.settingsPath + L"Themes";
std::wstring skinsPath = g_Data.skinsPath; std::wstring skinsPath = g_Data.skinsPath;
@ -207,9 +207,26 @@ bool CDialogBackup::CreateBackup()
return false; 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)) || 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)) || (_waccess(themesPath.c_str(), 0) == 0 && !AddFolderToBackup(themesPath, L"", "Themes", true)) ||
#ifdef _WIN64 #ifdef _WIN64
(_waccess(pluginsPath.c_str(), 0) == 0 && !AddFolderToBackup(pluginsPath, L"", "Plugins\\64bit", false))) (_waccess(pluginsPath.c_str(), 0) == 0 && !AddFolderToBackup(pluginsPath, L"", "Plugins\\64bit", false)))
@ -221,30 +238,22 @@ bool CDialogBackup::CreateBackup()
return false; 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) if (zipClose(m_ZipFile, NULL) != ZIP_OK)
{ {
MessageBox(NULL, L"Unable to access backup .rmskin file.", NULL, MB_OK | MB_TOPMOST); MessageBox(NULL, L"Unable to access backup .rmskin file.", NULL, MB_OK | MB_TOPMOST);
return false; 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; delete m_WriteBuffer;
return true; return true;
} }
@ -431,10 +440,16 @@ void CDialogBackup::CTabBackup::Initialize()
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
c_Dialog->m_TargetFile = buffer; c_Dialog->m_TargetFile = buffer;
SYSTEMTIME lt; SYSTEMTIME lt;
GetLocalTime(&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); _snwprintf_s(buffer, _TRUNCATE, L"%02d.%02d.%02d-%02d.%02d", lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute);
c_Dialog->m_TargetFile += buffer;
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); HWND item = GetDlgItem(m_Window, IDC_BACKUP_FILE_TEXT);
SetWindowText(item, c_Dialog->m_TargetFile.c_str()); SetWindowText(item, c_Dialog->m_TargetFile.c_str());

View File

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

View File

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

View File

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

View File

@ -64,12 +64,12 @@ IDD_BACKUP_TABDIALOG DIALOGEX 15, 30, 250, 58
STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
FONT 8, "MS Shell Dlg 2" 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 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 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 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, 42, 250, 11 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 IDD_INSTALL_DIALOG DIALOGEX 0, 0, 266, 270

View File

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