mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-14 05:26:28 +00:00
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_primary": "queue",
|
||||||
"sort_secondary": "name",
|
"sort_secondary": "name",
|
||||||
"separate_complete": True,
|
"separate_complete": True,
|
||||||
"ring_bell": False
|
"ring_bell": False,
|
||||||
|
"save_legacy_history": True
|
||||||
}
|
}
|
||||||
|
|
||||||
column_pref_names = ["queue","name","size","state",
|
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 twisted.internet import defer, reactor
|
||||||
from deluge.ui.client import client
|
from deluge.ui.client import client
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
|
import deluge.configmanager
|
||||||
|
|
||||||
from deluge.ui.console.modes import format_utils
|
from deluge.ui.console.modes import format_utils
|
||||||
strwidth = format_utils.strwidth
|
strwidth = format_utils.strwidth
|
||||||
@ -57,6 +58,8 @@ import re
|
|||||||
LINES_BUFFER_SIZE = 5000
|
LINES_BUFFER_SIZE = 5000
|
||||||
INPUT_HISTORY_SIZE = 500
|
INPUT_HISTORY_SIZE = 500
|
||||||
|
|
||||||
|
MAX_HISTFILE_SIZE = 2000
|
||||||
|
|
||||||
def complete_line(line, possible_matches):
|
def complete_line(line, possible_matches):
|
||||||
"Find the common prefix of possible matches, proritizing matching-case elements"
|
"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")
|
component.Component.__init__(self, "LegacyUI")
|
||||||
|
|
||||||
self.batch_write = False
|
self.batch_write = False
|
||||||
self.lines = []
|
|
||||||
|
|
||||||
# A list of strings to be displayed based on the offset (scroll)
|
# A list of strings to be displayed based on the offset (scroll)
|
||||||
self.lines = []
|
self.lines = []
|
||||||
@ -137,6 +139,56 @@ class Legacy(BaseMode, component.Component):
|
|||||||
|
|
||||||
self.console_config = component.get("AllTorrents").config
|
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
|
# show the cursor
|
||||||
curses.curs_set(2)
|
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):
|
def get_line_chunks(line):
|
||||||
"""
|
"""
|
||||||
Returns a list of 2-tuples (color string, text)
|
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
|
:param line: str, the line to print
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.add_line(line, not self.batch_write)
|
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_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_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("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)
|
self.add_header("Columns To Display", True)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user