summary refs log tree commit diff stats
path: root/ranger/fsobject/loader.py
diff options
context:
space:
mode:
authorhut <hut@lavabit.com>2009-12-23 01:18:31 +0100
committerhut <hut@lavabit.com>2009-12-23 01:18:31 +0100
commit0115ab105d160c6923f7a3449dbd9345d0fe4a65 (patch)
treeff229528344968dc01247ad79c91a66c91d59dd0 /ranger/fsobject/loader.py
parent85f45f481311ff3fb241c89c824ccc80583cd99a (diff)
downloadranger-0115ab105d160c6923f7a3449dbd9345d0fe4a65.tar.gz
fixed / improved loader
Diffstat (limited to 'ranger/fsobject/loader.py')
-rw-r--r--ranger/fsobject/loader.py39
1 files changed, 20 insertions, 19 deletions
diff --git a/ranger/fsobject/loader.py b/ranger/fsobject/loader.py
index a1ebcc97..ef91aae3 100644
--- a/ranger/fsobject/loader.py
+++ b/ranger/fsobject/loader.py
@@ -14,7 +14,8 @@ def delayfunc(n):
 	if n < 4:
 		return 0.05
 	else:
-		return math.log(n-2) * 0.2
+		return 0.3
+#		return math.log(n-2) * 0.2
 
 class Loader(object):
 	seconds_of_work_time = 0.1
@@ -25,37 +26,37 @@ class Loader(object):
 		self.status_generator = status_generator()
 		self.tick = 0
 		self.rotate()
+		self.old_item = None
 	
 	def rotate(self):
 		self.status = next(self.status_generator)
 	
 	def add(self, obj):
-		self.queue.append(obj)
+		while obj in self.queue:
+			self.queue.remove(obj)
+		self.queue.appendleft(obj)
 
 	def work(self):
-		if self.item is None:
-			try:
-				self.item = self.queue.popleft()
-			except IndexError:
-				return
+		if not self.queue:
+			return
 
-			self.load_generator = self.item.load_bit_by_bit()
-			self.tick = 0
+		item = self.queue[0]
+		if item.load_generator is None:
+			self.queue.popleft()
 
 		self.rotate()
 		self.tick += 1
-		start_time = time()
-		end_time = time() + delayfunc(self.tick)
+		if item != self.old_item:
+			self.tick = 0
+			self.old_item = item
 
-		log(tuple(map(str, self.queue)))
+		end_time = time() + delayfunc(self.tick)
 		try:
-#			log("loading " + self.item.basename)
 			while time() < end_time:
-				next(self.load_generator)
-
+				next(item.load_generator)
 		except StopIteration:
-			self.item = None
-			self.load_generator = None
+			item.load_generator = None
+			self.queue.popleft()
 	
-	def __nonzero__(self):
-		return bool(self.queue or self.item is not None)
+	def has_work(self):
+		return bool(self.queue)