summaryrefslogtreecommitdiff
path: root/plugins/FTPFileYM/src/serverlist.cpp
blob: 6169b1f86b9fbf7006a39fdd25d63de0df48299f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
FTP File YM plugin
Copyright (C) 2007-2010 Jan Holub

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 version 2
of the License.

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, see <http://www.gnu.org/licenses/>.
*/

#include "stdafx.h"

ServerList *ServerList::instance = nullptr;
ServerList &ftpList = ServerList::getInstance();

extern Options &opt;

void ServerList::init()
{
	for (int i = 0; i < FTP_COUNT; i++) {
		ServerList::FTP *ftp = new ServerList::FTP(i);
		ftpList.add(ftp);
	}
}

void ServerList::deinit()
{
	for (UINT i = 0; i < ftpList.size(); i++)
		delete ftpList[i];

	delete this;
}

void ServerList::saveToDb() const
{
	ServerList::FTP *ftp = ftpList.getSelected();
	char buff[256];

	mir_snprintf(buff, "Password%d", opt.selected);
	DB::setAStringF(0, MODULE, buff, opt.selected, ftp->m_szPass);

	DB::setStringF(0, MODULE, "Name%d", opt.selected, ftp->m_stzName);
	DB::setAStringF(0, MODULE, "Server%d", opt.selected, ftp->m_szServer);
	DB::setAStringF(0, MODULE, "User%d", opt.selected, ftp->m_szUser);
	DB::setAStringF(0, MODULE, "Url%d", opt.selected, ftp->m_szUrl);
	DB::setAStringF(0, MODULE, "Dir%d", opt.selected, ftp->m_szDir);
	DB::setAStringF(0, MODULE, "Chmod%d", opt.selected, ftp->m_szChmod);
	DB::setWordF(0, MODULE, "FtpProto%d", opt.selected, ftp->m_ftpProto);
	DB::setWordF(0, MODULE, "Port%d", opt.selected, ftp->m_iPort);
	DB::setByteF(0, MODULE, "Passive%d", opt.selected, ftp->m_bPassive);
	DB::setByteF(0, MODULE, "Enabled%d", opt.selected, ftp->m_bEnabled);
	db_set_b(0, MODULE, "Selected", opt.selected);
	db_set_b(0, MODULE, "Default", opt.defaultFTP);
}

ServerList::FTP::FTP(int index)
{
	ptrA Name(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "Name%d", index)));
	if (Name)
		mir_snwprintf(m_stzName, TranslateT("FTP Server %d"), index + 1);
	ptrA Pass(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "Password%d", index)));
	if (Pass)
		strncpy_s(m_szPass, Pass, _TRUNCATE);
	ptrA Server(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "Server%d", index)));
	if (Server)
		strncpy_s(m_szServer, Server, _TRUNCATE);
	ptrA User(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "User%d", index)));
	if (User)
		strncpy_s(m_szUser, User, _TRUNCATE);
	ptrA Url(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "Url%d", index)));
	if (Url)
		strncpy_s(m_szUrl, Url, _TRUNCATE);
	ptrA Dir(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "Dir%d", index)));
	if (Dir)
		strncpy_s(m_szDir, Dir, _TRUNCATE);
	ptrA Chmod(db_get_sa(NULL, MODULE, CMStringA(FORMAT, "Chmod%d", index)));
	if (Chmod)
		strncpy_s(m_szChmod, Chmod, _TRUNCATE);
	m_ftpProto = (FTP::EProtoType)DB::getWordF(0, MODULE, "FtpProto%d", index, FTP::FT_STANDARD);
	m_iPort = DB::getWordF(0, MODULE, "Port%d", index, 21);
	m_bPassive = DB::getByteF(0, MODULE, "Passive%d", index, 0) ? true : false;
	m_bEnabled = DB::getByteF(0, MODULE, "Enabled%d", index, 0) ? true : false;
}

ServerList::FTP* ServerList::getSelected() const
{
	return ftpList[opt.selected];
}

bool ServerList::FTP::isValid() const
{
	return (m_bEnabled && m_szServer[0] && m_szUser[0] && m_szPass[0] && m_szUrl[0]) ? true : false;
}

char* ServerList::FTP::getProtoString() const
{
	switch (m_ftpProto) {
	case FT_STANDARD:
	case FT_SSL_EXPLICIT:	return "ftp://";
	case FT_SSL_IMPLICIT:	return "ftps://";
	case FT_SSH:			return "sftp://";
	}

	return nullptr;
}