-
Notifications
You must be signed in to change notification settings - Fork 6
/
consolescreensettings.lua
124 lines (104 loc) · 3.39 KB
/
consolescreensettings.lua
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
114
115
116
117
118
119
120
121
122
123
124
local MAX_SAVED_COMMANDS = 20
ConsoleScreenSettings = Class(function(self)
self.persistdata = {}
self.profanityservers = {}
self.dirty = true
end)
function ConsoleScreenSettings:Reset()
self.persistdata = {}
self.dirty = true
self:Save()
end
function ConsoleScreenSettings:GetConsoleHistory()
return self.persistdata["historylines"] or {}
end
function ConsoleScreenSettings:AddLastExecutedCommand(command_str, toggle_remote_execute)
--trim whitespace
command_str = command_str:gsub("^%s*(.-)%s*$", "%1")
if #command_str <= 0 or command_str == "c_repeatlastcommand()" then
--Don't record history for c_repeatlastcommand() or empty strings
return
end
toggle_remote_execute = toggle_remote_execute == true or nil
local history = self.persistdata["historylines"]
if history == nil then
history = {}
self.persistdata["historylines"] = history
else
for i = #history, 1, -1 do
local v = history[i]
if v.str == command_str then
if v.remote ~= toggle_remote_execute then
v.remote = toggle_remote_execute
self.dirty = true
end
if i ~= #history then
table.remove(history, i)
table.insert(history, v)
self.dirty = true
end
--duplicate found and shifted to the bottom
return
end
end
while #history >= MAX_SAVED_COMMANDS do
table.remove(history, 1)
end
end
table.insert(history, { str = command_str, remote = toggle_remote_execute })
self.dirty = true
end
function ConsoleScreenSettings:IsWordPredictionWidgetExpanded()
return self.persistdata["expanded"] or false
end
function ConsoleScreenSettings:SetWordPredictionWidgetExpanded(value)
self.persistdata["expanded"] = value
self.dirty = true
end
----------------------------
function ConsoleScreenSettings:GetSaveName()
return BRANCH ~= "dev" and "consolescreen" or ("consolescreen_"..BRANCH)
end
function ConsoleScreenSettings:Save(callback)
if self.dirty then
self.dirty = false
local str = json.encode(self.persistdata)
local insz, outsz = SavePersistentString(self:GetSaveName(), str, ENCODE_SAVES, callback)
else
if callback then
callback(true)
end
end
end
function ConsoleScreenSettings:Load(callback)
TheSim:GetPersistentString(self:GetSaveName(),
function(load_success, str)
-- Can ignore the successfulness cause we check the string
self:OnLoad( str, callback )
end, false)
end
function ConsoleScreenSettings:OnLoad(str, callback)
if str == nil or string.len(str) == 0 then
print ("ConsoleScreenSettings could not load ".. self:GetSaveName())
if callback then
callback(false)
end
else
print ("ConsoleScreenSettings loaded ".. self:GetSaveName(), #str)
self.persistdata = TrackedAssert("TheSim:GetPersistentString ConsoleScreenSettings", json.decode, str)
self.dirty = false
--V2C: #CONSOLE_HISTORY_REFACTOR convert old savedata
if self.persistdata["history"] then
self.persistdata["historylines"] = {}
for i, v in ipairs(self.persistdata["history"]) do
v = v:gsub("^%s*(.-)%s*$", "%1")
if #v > 0 then
table.insert(self.persistdata["historylines"], { str = v, remote = self.persistdata["localremotehistory"][i] or nil })
end
end
self.persistdata["history"] = nil
self.persistdata["localremotehistory"] = nil
self.dirty = true
end
end
end