Added saving and loading legacy history. Optional, enabled by default

This commit is contained in:
Asmageddon 2012-05-30 15:28:57 +02:00
parent 555717b9a0
commit 3cc97accfc
3 changed files with 81 additions and 2 deletions

View File

@ -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",

View File

@ -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)

View File

@ -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)