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

View File

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

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