Skip to content

Commit

Permalink
core.loader: added pause()
Browse files Browse the repository at this point in the history
  • Loading branch information
hut committed Apr 2, 2012
1 parent 85dd701 commit e8bbfe6
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 5 deletions.
3 changes: 3 additions & 0 deletions ranger/core/actions.py
Expand Up @@ -454,6 +454,9 @@ def pager_move(self, narg=None, **kw):
def taskview_move(self, narg=None, **kw):
self.ui.taskview.move(narg=narg, **kw)

def pause_tasks(self):
self.loader.pause(-1)

def pager_close(self):
if self.ui.pager.visible:
self.ui.close_pager()
Expand Down
2 changes: 1 addition & 1 deletion ranger/core/fm.py
Expand Up @@ -189,7 +189,7 @@ def loop(self):

ui.redraw()

ui.set_load_mode(loader.has_work())
ui.set_load_mode(not loader.paused and loader.has_work())

ui.handle_input()

Expand Down
39 changes: 35 additions & 4 deletions ranger/core/loader.py
Expand Up @@ -111,17 +111,17 @@ def pause(self):
self.process.send_signal(20)
except:
pass
Loadable.pause(self)
self.signal_emit('pause', process=self.process, loader=self)
Loadable.pause(self)
self.signal_emit('pause', process=self.process, loader=self)

def unpause(self):
if not self.finished and self.paused:
try:
self.process.send_signal(18)
except:
pass
Loadable.unpause(self)
self.signal_emit('unpause', process=self.process, loader=self)
Loadable.unpause(self)
self.signal_emit('unpause', process=self.process, loader=self)

def destroy(self):
self.signal_emit('destroy', process=self.process, loader=self)
Expand All @@ -142,6 +142,8 @@ def safeDecode(string):
class Loader(FileManagerAware):
seconds_of_work_time = 0.03
throbber_chars = r'/-\|'
throbber_paused = '#'
paused = False

def __init__(self):
self.queue = deque()
Expand All @@ -166,6 +168,10 @@ def add(self, obj):
while obj in self.queue:
self.queue.remove(obj)
self.queue.appendleft(obj)
if self.paused:
obj.pause()
else:
obj.unpause()

def move(self, _from, to):
try:
Expand Down Expand Up @@ -201,11 +207,34 @@ def remove(self, item=None, index=None):
item.destroy()
del self.queue[index]

def pause(self, state):
"""
Change the pause-state to 1 (pause), 0 (no pause) or -1 (toggle)
"""
if state == -1:
state = not self.paused
elif state == self.paused:
return

self.paused = state

if not self.queue:
return

if state:
self.queue[0].pause()
else:
self.queue[0].unpause()

def work(self):
"""
Load items from the queue if there are any.
Stop after approximately self.seconds_of_work_time.
"""
if self.paused:
self.status = self.throbber_paused
return

while True:
# get the first item with a proper load_generator
try:
Expand All @@ -217,6 +246,8 @@ def work(self):
except IndexError:
return

item.unpause()

self.rotate()
if item != self.old_item:
if self.old_item:
Expand Down

0 comments on commit e8bbfe6

Please sign in to comment.