source: filezilla/trunk/fuentes/src/interface/recentserverlist.cpp @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 2.6 KB
Line 
1#include <filezilla.h>
2#include "recentserverlist.h"
3#include "ipcmutex.h"
4#include "filezillaapp.h"
5#include "Options.h"
6#include "xmlfunctions.h"
7
8const std::list<CServer> CRecentServerList::GetMostRecentServers(bool lockMutex /*=true*/)
9{
10        std::list<CServer> mostRecentServers;
11
12        CInterProcessMutex mutex(MUTEX_MOSTRECENTSERVERS, false);
13        if (lockMutex)
14                mutex.Lock();
15
16        CXmlFile xmlFile(wxGetApp().GetSettingsFile(_T("recentservers")));
17        auto element = xmlFile.Load();
18        if (!element || !(element = element.child("RecentServers")))
19                return mostRecentServers;
20
21        bool modified = false;
22        auto xServer = element.child("Server");
23        while (xServer) {
24                CServer server;
25                if (!GetServer(xServer, server) || mostRecentServers.size() >= 10) {
26                        auto xRemove = xServer;
27                        xServer = xServer.next_sibling("Server");
28                        element.remove_child(xRemove);
29                        modified = true;
30                }
31                else {
32                        std::list<CServer>::const_iterator iter;
33                        for (iter = mostRecentServers.begin(); iter != mostRecentServers.end(); ++iter) {
34                                if (*iter == server)
35                                        break;
36                        }
37                        if (iter == mostRecentServers.end())
38                                mostRecentServers.push_back(server);
39                        xServer = xServer.next_sibling("Server");
40                }
41        }
42
43        if (modified) {
44                xmlFile.Save(false);
45        }
46
47        return mostRecentServers;
48}
49
50void CRecentServerList::SetMostRecentServer(const CServer& server)
51{
52        CInterProcessMutex mutex(MUTEX_MOSTRECENTSERVERS);
53
54        // Make sure list is initialized
55        auto mostRecentServers = GetMostRecentServers(false);
56
57        bool relocated = false;
58        for (auto iter = mostRecentServers.begin(); iter != mostRecentServers.end(); ++iter) {
59                if (iter->EqualsNoPass(server)) {
60                        mostRecentServers.erase(iter);
61                        mostRecentServers.push_front(server);
62                        relocated = true;
63                        break;
64                }
65        }
66        if (!relocated) {
67                mostRecentServers.push_front(server);
68                if (mostRecentServers.size() > 10)
69                        mostRecentServers.pop_back();
70        }
71
72        if (COptions::Get()->GetOptionVal(OPTION_DEFAULT_KIOSKMODE) == 2)
73                return;
74
75        CXmlFile xmlFile(wxGetApp().GetSettingsFile(_T("recentservers")));
76        auto element = xmlFile.CreateEmpty();
77        if (!element)
78                return;
79
80        auto servers = element.child("RecentServers");
81        if (!servers) {
82                servers = element.append_child("RecentServers");
83        }
84
85        for (std::list<CServer>::const_iterator iter = mostRecentServers.begin(); iter != mostRecentServers.end(); ++iter) {
86                auto server = servers.append_child("Server");
87                SetServer(server, *iter);
88        }
89
90        xmlFile.Save(true);
91}
92
93void CRecentServerList::Clear()
94{
95        CInterProcessMutex mutex(MUTEX_MOSTRECENTSERVERS);
96
97        CXmlFile xmlFile(wxGetApp().GetSettingsFile(_T("recentservers")));
98        xmlFile.CreateEmpty();
99        xmlFile.Save(true);
100}
Note: See TracBrowser for help on using the repository browser.