File: RemotyConfig.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (71 lines) | stat: -rw-r--r-- 2,231 bytes parent folder | download | duplicates (3)
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
#include "RemotyConfig.hpp"

#include "cl_config.h"

#include <algorithm>

namespace
{
size_t MAX_ITEMS = 15;
const wxString REMOTY_RECENT_WORKSPACES = "remoty/recent_remote_workspaces";
const wxString REMOTY_OPEN_WORKSPACE_TYPE = "remoty/open_workspace_type";
} // namespace

RemotyConfig::RemotyConfig() {}

RemotyConfig::~RemotyConfig() {}

std::vector<RemoteWorkspaceInfo> RemotyConfig::GetRecentWorkspaces() const
{
    std::vector<RemoteWorkspaceInfo> res;
    clConfig::Get().Read(REMOTY_RECENT_WORKSPACES, [&res](const JSONItem& item) {
        size_t count = item.arraySize();
        if(count) {
            res.reserve(count);
        }
        for(size_t i = 0; i < count; ++i) {
            JSONItem n = item.arrayItem(i);
            RemoteWorkspaceInfo d;
            d.account = n["account"].toString();
            d.path = n["path"].toString();
            res.emplace_back(std::move(d));
        }
    });
    return res;
}

void RemotyConfig::UpdateRecentWorkspaces(const RemoteWorkspaceInfo& workspaceInfo)
{
    if(workspaceInfo.path.empty() || workspaceInfo.account.empty()) {
        return;
    }

    auto curitems = GetRecentWorkspaces();
    auto where = find_if(curitems.begin(), curitems.end(), [&workspaceInfo](const RemoteWorkspaceInfo& d) {
        return d.path == workspaceInfo.path && d.account == workspaceInfo.account;
    });
    if(where != curitems.end()) {
        curitems.erase(where);
    }

    curitems.insert(curitems.begin(), std::move(workspaceInfo));
    if(curitems.size() > MAX_ITEMS) {
        // shrink the list
        curitems.resize(MAX_ITEMS);
    }

    // serialise the items
    clConfig::Get().Write(REMOTY_RECENT_WORKSPACES, [&curitems]() -> JSONItem {
        JSONItem arr = JSONItem::createArray();
        for(const auto& wi : curitems) {
            auto d = arr.AddObject(wxEmptyString);
            d.addProperty("account", wi.account);
            d.addProperty("path", wi.path);
        }
        return arr;
    });
}

bool RemotyConfig::IsOpenWorkspaceTypeLocal() const { return clConfig::Get().Read(REMOTY_OPEN_WORKSPACE_TYPE, true); }

void RemotyConfig::SetOpenWorkspaceTypeLocal(bool local) { clConfig::Get().Write(REMOTY_OPEN_WORKSPACE_TYPE, local); }