Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'blenderkit/tasks_queue.py')
-rw-r--r--blenderkit/tasks_queue.py125
1 files changed, 0 insertions, 125 deletions
diff --git a/blenderkit/tasks_queue.py b/blenderkit/tasks_queue.py
deleted file mode 100644
index 248e9be7..00000000
--- a/blenderkit/tasks_queue.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-
-from blenderkit import utils
-
-import bpy
-from bpy.app.handlers import persistent
-
-import queue
-import logging
-bk_logger = logging.getLogger('blenderkit')
-
-@persistent
-def scene_load(context):
- user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
- if user_preferences.use_timers and not bpy.app.background:
- if not (bpy.app.timers.is_registered(queue_worker)):
- bpy.app.timers.register(queue_worker)
-
-
-def get_queue():
- # we pick just a random one of blender types, to try to get a persistent queue
- t = bpy.types.Scene
-
- if not hasattr(t, 'task_queue'):
- t.task_queue = queue.Queue()
- return t.task_queue
-
-class task_object:
- def __init__(self, command = '', arguments = (), wait = 0, only_last = False, fake_context = False, fake_context_area = 'VIEW_3D'):
- self.command = command
- self.arguments = arguments
- self.wait = wait
- self.only_last = only_last
- self.fake_context = fake_context
- self.fake_context_area = fake_context_area
-
-def add_task(task, wait = 0, only_last = False, fake_context = False, fake_context_area = 'VIEW_3D'):
- q = get_queue()
- taskob = task_object(task[0],task[1], wait = wait, only_last = only_last, fake_context = fake_context, fake_context_area = fake_context_area)
- q.put(taskob)
-
-
-def queue_worker():
- # utils.p('start queue worker timer')
-
- #bk_logger.debug('timer queue worker')
- time_step = 2.0
- q = get_queue()
-
- back_to_queue = [] #delayed events
- stashed = {}
- # first round we get all tasks that are supposed to be stashed and run only once (only_last option)
- # stashing finds tasks with the property only_last and same command and executes only the last one.
- while not q.empty():
- # print('queue while 1')
-
- task = q.get()
- if task.only_last:
- #this now makes the keys not only by task, but also first argument.
- # by now stashing is only used for ratings, where the first argument is url.
- # This enables fast rating of multiple assets while allowing larger delay for uploading of ratings.
- # this avoids a duplicate request error on the server
- stashed[str(task.command)+str(task.arguments[0])] = task
- else:
- back_to_queue.append(task)
- if len(stashed.keys())>1:
- bk_logger.debug('task queue stashed task:' +str(stashed))
- #return tasks to que except for stashed
- for task in back_to_queue:
- q.put(task)
- #return stashed tasks to queue
- for k in stashed.keys():
- q.put(stashed[k])
- #second round, execute or put back waiting tasks.
- back_to_queue = []
- while not q.empty():
- # print('window manager', bpy.context.window_manager)
- task = q.get()
-
- if task.wait>0:
- task.wait-=time_step
- back_to_queue.append(task)
- else:
- bk_logger.debug('task queue task:'+ str( task.command) +str( task.arguments))
- try:
- if task.fake_context:
- fc = utils.get_fake_context(bpy.context, area_type = task.fake_context_area)
- task.command(fc,*task.arguments)
- else:
- task.command(*task.arguments)
- except Exception as e:
- bk_logger.error('task queue failed task:'+ str(task.command)+str(task.arguments)+ str(e))
- # bk_logger.exception('Got exception on main handler')
- # raise
- # print('queue while 2')
- for task in back_to_queue:
- q.put(task)
- # utils.p('end queue worker timer')
-
- return 2.0
-
-
-def register():
- bpy.app.handlers.load_post.append(scene_load)
-
-
-def unregister():
- bpy.app.handlers.load_post.remove(scene_load)