From a63798c1b60eeb77352323ad4545630cdc5458f2 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Thu, 19 Jul 2012 07:47:08 +0000 Subject: Folders: changed folder structure git-svn-id: http://svn.miranda-ng.org/main/trunk@1032 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Folders/src/folderItem.cpp | 250 +++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 plugins/Folders/src/folderItem.cpp (limited to 'plugins/Folders/src/folderItem.cpp') diff --git a/plugins/Folders/src/folderItem.cpp b/plugins/Folders/src/folderItem.cpp new file mode 100644 index 0000000000..cf58e5feac --- /dev/null +++ b/plugins/Folders/src/folderItem.cpp @@ -0,0 +1,250 @@ +/* +Custom profile folders plugin for Miranda IM + +Copyright © 2005 Cristian Libotean + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "folderItem.h" +#include "commonheaders.h" +#include "services.h" + +CFolderItem::CFolderItem(const char *sectionName, const char *name, const char *format, const DWORD flags) +{ + strncpy(szSection, sectionName, sizeof(szSection)); + szFormat = NULL; + szOldFormat = NULL; + szFormatW = NULL; + szOldFormatW = NULL; + strncpy(szName, name, sizeof(szName)); + this->flags = flags; + GetDataFromDatabase(format); + FolderCreateDirectory(); +} + +void MyFree(void *data) +{ + if (data) + { + free(data); + } +} + +CFolderItem::~CFolderItem() +{ +// WriteDataToDatabase(); + if (IsUnicode()) + { + MyFree(szFormatW); + MyFree(szOldFormatW); + } + else{ + MyFree(szFormat); + MyFree(szOldFormat); + } +} + +const char *CFolderItem::GetSection() const +{ + return szSection; +} + +const char *CFolderItem::GetName() const +{ + return szName; +} + +const char *CFolderItem::GetFormat() const +{ + return szFormat; +} + +const wchar_t *CFolderItem::GetFormatW() const +{ + return szFormatW; +} + +void CFolderItem::SetFormat(const char *newFormat) +{ + MyFree(szOldFormat); + szOldFormat = szFormat; + szFormat = _strdup((strlen(newFormat) > 0) ? newFormat : MIRANDA_PATH); +} + +void CFolderItem::SetFormatW(const wchar_t *newFormat) +{ + MyFree(szOldFormatW); + szOldFormatW = szFormatW; + szFormatW = _wcsdup((wcslen(newFormat) > 0) ? newFormat : MIRANDA_PATHW); +} + +int CFolderItem::IsUnicode() const +{ + return (flags & FF_UNICODE); +} + +int CFolderItem::IsEqual(const CFolderItem *other) +{ + return (IsEqual(other->GetSection(), other->GetName())); +} + +int CFolderItem::IsEqual(const char *section, const char *name) +{ + return ((strcmp(szName, name) == 0) && (strcmp(szSection, section) == 0)); +} + +int CFolderItem::IsEqualTranslated(const char *trSection, const char *trName) +{ + return ((strcmp(Translate(szName), trName) == 0) && (strcmp(Translate(szSection), trSection) == 0)); +} + +int CFolderItem::operator ==(const CFolderItem *other) +{ + return IsEqual(other); +} + +void CFolderItem::Expand(char *buffer, int size) +{ + if (IsUnicode()) + { + ExpandPathW((wchar_t *) buffer, szFormatW, size); + } + else{ + ExpandPath(buffer, szFormat, size); + } +} + +void CFolderItem::Save() +{ + int res = FolderDeleteOldDirectory(FALSE); + //FolderCreateDirectory(!res); + FolderCreateDirectory(FALSE); + WriteDataToDatabase(); +} + +int CFolderItem::FolderCreateDirectory(int showFolder) +{ + int res = FOLDER_SUCCESS; + if (IsUnicode()) + { + wchar_t buffer[MAX_FOLDER_SIZE]; + if (szFormatW) + { + ExpandPathW(buffer, szFormatW, MAX_FOLDER_SIZE); + CreateDirectories(buffer); + if (showFolder) + { + ShellExecuteW(NULL, L"explore", buffer, NULL, NULL, SW_SHOW); + } + res = (DirectoryExists(buffer)) ? FOLDER_SUCCESS : FOLDER_FAILURE; + } + } + else{ + char buffer[MAX_FOLDER_SIZE]; + if (szFormat) + { + ExpandPath(buffer, szFormat, MAX_FOLDER_SIZE); + CreateDirectories(buffer); + if (showFolder) + { + ShellExecuteA(NULL, "explore", buffer, NULL, NULL, SW_SHOW); + } + res = (DirectoryExists(buffer)) ? FOLDER_SUCCESS : FOLDER_FAILURE; + } + } + return res; +} + +int CFolderItem::FolderDeleteOldDirectory(int showFolder) +{ + int res = FOLDER_SUCCESS; + if (IsUnicode()) + { + wchar_t buffer[MAX_FOLDER_SIZE]; + if (szOldFormatW) + { + if (wcscmp(szFormatW, szOldFormatW) == 0) //format wasn't changed + { + return res; + } + ExpandPathW(buffer, szOldFormatW, MAX_FOLDER_SIZE); + RemoveDirectories(buffer); + res = (DirectoryExists(buffer)) ? FOLDER_FAILURE : FOLDER_SUCCESS; + if ((res == FOLDER_FAILURE) && (showFolder)) + { + ShellExecuteW(NULL, L"explore", buffer, NULL, NULL, SW_SHOW); + } + } + } + else{ + char buffer[MAX_FOLDER_SIZE]; + if (szOldFormat) + { + if (strcmp(szFormat, szOldFormat) == 0) //format wasn't changed + { + return res; + } + ExpandPath(buffer, szOldFormat, MAX_FOLDER_SIZE); + RemoveDirectories(buffer); + res = (DirectoryExists(buffer)) ? FOLDER_FAILURE : FOLDER_SUCCESS; + if ((res == FOLDER_FAILURE) && (showFolder)) + { + ShellExecuteA(NULL, "explore", buffer, NULL, NULL, SW_SHOW); + } + } + } + return res; +} + +void CFolderItem::GetDataFromDatabase(const char *szNotFound) +{ + char name[256]; + strcpy(name, szSection); + strcat(name, szName); + + if (IsUnicode()) + { + wchar_t buffer[MAX_FOLDER_SIZE]; + GetStringFromDatabase(name, (const wchar_t *) szNotFound, buffer, MAX_FOLDER_SIZE); + SetFormatW(buffer); + } + else{ + char buffer[MAX_FOLDER_SIZE]; + GetStringFromDatabase(name, szNotFound, buffer, MAX_FOLDER_SIZE); + SetFormat(buffer); + } +} + +void CFolderItem::WriteDataToDatabase() +{ + char name[256]; + strcpy(name, szSection); + strcat(name, szName); + + if (IsUnicode()) + { + if (szFormatW) + { + WriteStringToDatabase(name, szFormatW); + } + } + else{ + if (szFormat) + { + WriteStringToDatabase(name, szFormat); + } + } +} \ No newline at end of file -- cgit v1.2.3