bool CQueueStorage::Impl::SaveServer(const CServerItem& item) { bool kiosk_mode = COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) != 0; const CServer& server = item.GetServer(); Bind(insertServerQuery_, server_table_column_names::host, server.GetHost()); Bind(insertServerQuery_, server_table_column_names::port, static_cast<int>(server.GetPort())); Bind(insertServerQuery_, server_table_column_names::protocol, static_cast<int>(server.GetProtocol())); Bind(insertServerQuery_, server_table_column_names::type, static_cast<int>(server.GetType())); enum LogonType logonType = server.GetLogonType(); if (server.GetLogonType() != ANONYMOUS) { Bind(insertServerQuery_, server_table_column_names::user, server.GetUser()); if (server.GetLogonType() == NORMAL || server.GetLogonType() == ACCOUNT) { if (kiosk_mode) { logonType = ASK; BindNull(insertServerQuery_, server_table_column_names::password); BindNull(insertServerQuery_, server_table_column_names::account); } else { Bind(insertServerQuery_, server_table_column_names::password, server.GetPass()); if (server.GetLogonType() == ACCOUNT) Bind(insertServerQuery_, server_table_column_names::account, server.GetAccount()); else BindNull(insertServerQuery_, server_table_column_names::account); } } else { BindNull(insertServerQuery_, server_table_column_names::password); BindNull(insertServerQuery_, server_table_column_names::account); } } else { BindNull(insertServerQuery_, server_table_column_names::user); BindNull(insertServerQuery_, server_table_column_names::password); BindNull(insertServerQuery_, server_table_column_names::account); } Bind(insertServerQuery_, server_table_column_names::logontype, static_cast<int>(logonType)); Bind(insertServerQuery_, server_table_column_names::timezone_offset, server.GetTimezoneOffset()); switch (server.GetPasvMode()) { case MODE_PASSIVE: Bind(insertServerQuery_, server_table_column_names::transfer_mode, _T("passive")); break; case MODE_ACTIVE: Bind(insertServerQuery_, server_table_column_names::transfer_mode, _T("active")); break; default: Bind(insertServerQuery_, server_table_column_names::transfer_mode, _T("default")); break; } Bind(insertServerQuery_, server_table_column_names::max_connections, server.MaximumMultipleConnections()); switch (server.GetEncodingType()) { default: case ENCODING_AUTO: Bind(insertServerQuery_, server_table_column_names::encoding, _T("Auto")); break; case ENCODING_UTF8: Bind(insertServerQuery_, server_table_column_names::encoding, _T("UTF-8")); break; case ENCODING_CUSTOM: Bind(insertServerQuery_, server_table_column_names::encoding, server.GetCustomEncoding()); break; } if (CServer::SupportsPostLoginCommands(server.GetProtocol())) { const std::vector<wxString>& postLoginCommands = server.GetPostLoginCommands(); if (!postLoginCommands.empty()) { wxString commands; for (std::vector<wxString>::const_iterator iter = postLoginCommands.begin(); iter != postLoginCommands.end(); ++iter) { if (!commands.empty()) commands += _T("\n"); commands += *iter; } Bind(insertServerQuery_, server_table_column_names::post_login_commands, commands); } else BindNull(insertServerQuery_, server_table_column_names::post_login_commands); } else BindNull(insertServerQuery_, server_table_column_names::post_login_commands); Bind(insertServerQuery_, server_table_column_names::bypass_proxy, server.GetBypassProxy() ? 1 : 0); if (!server.GetName().empty()) Bind(insertServerQuery_, server_table_column_names::name, server.GetName()); else BindNull(insertServerQuery_, server_table_column_names::name); int res; do { res = sqlite3_step(insertServerQuery_); } while (res == SQLITE_BUSY); sqlite3_reset(insertServerQuery_); bool ret = res == SQLITE_DONE; if (ret) { sqlite3_int64 serverId = sqlite3_last_insert_rowid(db_); Bind(insertFileQuery_, file_table_column_names::server, static_cast<int64_t>(serverId)); const std::vector<CQueueItem*>& children = item.GetChildren(); for (std::vector<CQueueItem*>::const_iterator it = children.begin() + item.GetRemovedAtFront(); it != children.end(); ++it) { CQueueItem & childItem = **it; if (childItem.GetType() == QueueItemType::File) ret &= SaveFile(serverId, static_cast<CFileItem&>(childItem)); else if (childItem.GetType() == QueueItemType::Folder) ret &= SaveDirectory(serverId, static_cast<CFolderItem&>(childItem)); } } return ret; }