Added saving and loading legacy history. Optional, enabled by default
This commit is contained in:
parent
555717b9a0
commit
3cc97accfc
|
@ -176,7 +176,8 @@ DEFAULT_PREFS = {
|
|||
"sort_primary": "queue",
|
||||
"sort_secondary": "name",
|
||||
"separate_complete": True,
|
||||
"ring_bell": False
|
||||
"ring_bell": False,
|
||||
"save_legacy_history": True
|
||||
}
|
||||
|
||||
column_pref_names = ["queue","name","size","state",
|
||||
|
|
|
@ -45,6 +45,7 @@ import deluge.ui.console.colors as colors
|
|||
from twisted.internet import defer, reactor
|
||||
from deluge.ui.client import client
|
||||
import deluge.component as component
|
||||
import deluge.configmanager
|
||||
|
||||
from deluge.ui.console.modes import format_utils
|
||||
strwidth = format_utils.strwidth
|
||||
|
@ -57,6 +58,8 @@ import re
|
|||
LINES_BUFFER_SIZE = 5000
|
||||
INPUT_HISTORY_SIZE = 500
|
||||
|
||||
MAX_HISTFILE_SIZE = 2000
|
||||
|
||||
def complete_line(line, possible_matches):
|
||||
"Find the common prefix of possible matches, proritizing matching-case elements"
|
||||
|
||||
|
@ -113,7 +116,6 @@ class Legacy(BaseMode, component.Component):
|
|||
component.Component.__init__(self, "LegacyUI")
|
||||
|
||||
self.batch_write = False
|
||||
self.lines = []
|
||||
|
||||
# A list of strings to be displayed based on the offset (scroll)
|
||||
self.lines = []
|
||||
|
@ -137,6 +139,56 @@ class Legacy(BaseMode, component.Component):
|
|||
|
||||
self.console_config = component.get("AllTorrents").config
|
||||
|
||||
#To avoid having to truncate the file every time we're writing
|
||||
# or doing it on exit(and therefore relying on an error-less
|
||||
# or in other words clean exit, we're going to have two files
|
||||
# that we swap around based on length
|
||||
config_dir = deluge.configmanager.get_config_dir()
|
||||
self.history_file = [
|
||||
os.path.join(config_dir, "legacy.hist1"),
|
||||
os.path.join(config_dir, "legacy.hist2")
|
||||
]
|
||||
self._hf_lines = [0, 0]
|
||||
|
||||
if self.console_config["save_legacy_history"]:
|
||||
try:
|
||||
lines1 = open(self.history_file[0], 'r').read().splitlines()
|
||||
self._hf_lines[0] = len(lines1)
|
||||
except:
|
||||
lines1 = []
|
||||
self._hf_lines[0] = 0
|
||||
|
||||
try:
|
||||
lines2 = open(self.history_file[1], 'r').read().splitlines()
|
||||
self._hf_lines[1] = len(lines2)
|
||||
except:
|
||||
lines2 = []
|
||||
self._hf_lines[1] = 0
|
||||
|
||||
#The non-full file is the active one
|
||||
if self._hf_lines[0] > self._hf_lines[1]:
|
||||
self.lines = lines1 + lines2
|
||||
else:
|
||||
self.lines = lines2 + lines1
|
||||
|
||||
if len(self.lines) > MAX_HISTFILE_SIZE:
|
||||
self.lines = self.lines[-MAX_HISTFILE_SIZE:]
|
||||
|
||||
#Instead of having additional input history file, we can
|
||||
# simply scan for lines beginning with ">>> "
|
||||
for line in self.lines:
|
||||
line = format_utils.remove_formatting(line)
|
||||
if line.startswith(">>> "):
|
||||
self.input_history.append( line[4:] )
|
||||
|
||||
self.input_history_index = len(self.input_history)
|
||||
|
||||
#if len(self.lines) >= 5:
|
||||
#if any(self.lines[-5:]):
|
||||
#for i in range(5):
|
||||
#self.add_line(" ", False)
|
||||
|
||||
|
||||
# show the cursor
|
||||
curses.curs_set(2)
|
||||
|
||||
|
@ -398,6 +450,30 @@ class Legacy(BaseMode, component.Component):
|
|||
|
||||
"""
|
||||
|
||||
if self.console_config["save_legacy_history"]:
|
||||
#Determine which file is the active one
|
||||
#If both are under maximum, it's first, otherwise it's the one not full
|
||||
if self._hf_lines[0] < MAX_HISTFILE_SIZE and self._hf_lines[1] < MAX_HISTFILE_SIZE:
|
||||
active_file = 0
|
||||
if self._hf_lines[0] > self._hf_lines[1]:
|
||||
active_file = 1
|
||||
else:
|
||||
active_file = 0
|
||||
|
||||
#Write the line
|
||||
f = open(self.history_file[active_file], 'a')
|
||||
f.write( text + os.linesep )
|
||||
|
||||
#And increment line counter
|
||||
self._hf_lines[active_file] += 1
|
||||
|
||||
#If the active file reaches max size, we truncate it
|
||||
# therefore swapping the currently active file
|
||||
if self._hf_lines[active_file] == MAX_HISTFILE_SIZE:
|
||||
self._hf_lines[1 - active_file] = 0
|
||||
f = open(self.history_file[1 - active_file], 'w')
|
||||
f.truncate(0)
|
||||
|
||||
def get_line_chunks(line):
|
||||
"""
|
||||
Returns a list of 2-tuples (color string, text)
|
||||
|
@ -573,6 +649,7 @@ class Legacy(BaseMode, component.Component):
|
|||
:param line: str, the line to print
|
||||
|
||||
"""
|
||||
|
||||
self.add_line(line, not self.batch_write)
|
||||
|
||||
|
||||
|
|
|
@ -318,6 +318,7 @@ class InterfacePane(BasePane):
|
|||
self.add_checked_input("third_tab_lists_all","Third tab lists all remaining torrents in legacy mode",parent.console_config["third_tab_lists_all"])
|
||||
self.add_int_spin_input("torrents_per_tab_press","Torrents per tab press",parent.console_config["torrents_per_tab_press"], 5, 100)
|
||||
self.add_checked_input("ring_bell","Ring system bell when a download finishes",parent.console_config["ring_bell"])
|
||||
self.add_checked_input("save_legacy_history","Store and load command line history in Legacy mode",parent.console_config["save_legacy_history"])
|
||||
|
||||
self.add_header("Columns To Display", True)
|
||||
|
||||
|
|
Loading…
Reference in New Issue