def __init__(self, options, db, initial_filter=None):
        self._filter_text = ""
        if initial_filter:
            self._filter_text = initial_filter
        self._db = db
        self._frontend_status = None
        self._backend_status = DBStatus()
        self._can_process_queries = False
        self._db_is_up_to_date = True
        self._last_search_query = None
        self._pending_search = None
        self._options = options
        self._print_results_cb = None
        if initial_filter:
            self.should_position_cursor_for_replace = False
        else:
            self.should_position_cursor_for_replace = True

        # First tick should be fast.
        message_loop.post_delayed_task(self.on_tick, 0)
    def __init__(self, options, db, initial_filter=None):
        self._filter_text = ""
        if initial_filter:
            self._filter_text = initial_filter
        self._db = db
        self._frontend_status = None
        self._backend_status = DBStatus()
        self._can_process_queries = False
        self._db_is_up_to_date = True
        self._last_search_query = None
        self._pending_search = None
        self._options = options
        self._print_results_cb = None
        if initial_filter:
            self.should_position_cursor_for_replace = False
        else:
            self.should_position_cursor_for_replace = True

        # First tick should be fast.
        message_loop.post_delayed_task(self.on_tick, 0)
Exemple #3
0
  def __init__(self, settings, options, db, initial_filter = None):
    settings.register("filter_text", str, "")
    settings.register("query_log", str, "") 
    if initial_filter:
      settings.filter_text = initial_filter
    else:
      had_position = False
    self._filter_text = settings.filter_text
    self._settings = settings
    self._db = db
    self._can_process_queries = False
    self._last_search_query = None
    self._pending_search = None
    self._options = options
    if initial_filter:
      self.should_position_cursor_for_replace = False
    else:
      self.should_position_cursor_for_replace = True

    message_loop.post_delayed_task(self.on_tick, 0.1)
    def on_tick(self, *args):
        @traced
        def begin_search():
            self.frontend_status = "searching"

            q = self._create_query()
            self._pending_search = self._db.search_async(q)
            self._last_search_query = q

        @traced
        def on_ready():
            try:
                res = self._pending_search.result
            except db_proxy.AsyncSearchError:
                res = None
            self.frontend_status = None
            self._pending_search = None
            trace_begin("update_results_list")
            if res:
                self.update_results_list(res.filenames, res.ranks)
            else:
                self.update_results_list([], [])
            trace_end("update_results_list")
            self._pending_search = None

        @traced
        def update_backend_status():
            self.backend_status = self._db.status()

        if self._pending_search:
            if self._pending_search.ready:
                on_ready()

        # re-check the self._pending_search since we might have cleared it
        if not self._pending_search:
            # kick off a query
            if self._last_search_query:
                need_to_begin_search = self._filter_text != self._last_search_query.text
            else:
                need_to_begin_search = True

            if need_to_begin_search and self._can_process_queries:
                begin_search()
            else:
                # poll backend status
                update_backend_status()

        # renew the tick
        if self._pending_search:
            message_loop.post_delayed_task(self.on_tick,
                                           TICK_RATE_WHEN_SEARCHING)
        elif self._db_is_up_to_date:
            message_loop.post_delayed_task(self.on_tick,
                                           TICK_RATE_WHEN_UP_TO_DATE)
        else:
            message_loop.post_delayed_task(self.on_tick,
                                           TICK_RATE_WHEN_NOT_UP_TO_DATE)
    def on_tick(self, *args):
        @traced
        def begin_search():
            self.frontend_status = "searching"

            q = self._create_query()
            self._pending_search = self._db.search_async(q)
            self._last_search_query = q

        @traced
        def on_ready():
            try:
                res = self._pending_search.result
            except db_proxy.AsyncSearchError:
                res = None
            self.frontend_status = None
            self._pending_search = None
            trace_begin("update_results_list")
            if res:
                self.update_results_list(res.filenames, res.ranks)
            else:
                self.update_results_list([], [])
            trace_end("update_results_list")
            self._pending_search = None

        @traced
        def update_backend_status():
            self.backend_status = self._db.status()

        if self._pending_search:
            if self._pending_search.ready:
                on_ready()

        # re-check the self._pending_search since we might have cleared it
        if not self._pending_search:
            # kick off a query
            if self._last_search_query:
                need_to_begin_search = self._filter_text != self._last_search_query.text
            else:
                need_to_begin_search = True

            if need_to_begin_search and self._can_process_queries:
                begin_search()
            else:
                # poll backend status
                update_backend_status()

        # renew the tick
        if self._pending_search:
            message_loop.post_delayed_task(self.on_tick, TICK_RATE_WHEN_SEARCHING)
        elif self._db_is_up_to_date:
            message_loop.post_delayed_task(self.on_tick, TICK_RATE_WHEN_UP_TO_DATE)
        else:
            message_loop.post_delayed_task(self.on_tick, TICK_RATE_WHEN_NOT_UP_TO_DATE)
    def test_post_delayed_task(self):
        def step2():
            message_loop.quit_main_loop()

        message_loop.post_delayed_task(step2, 0.1)
 def _invalidate(self):
   if self._refresh_pending:
     return
   self._refresh_pending = True
   message_loop.post_delayed_task(self._refresh, 0.005)
Exemple #8
0
 def _invalidate(self):
     if self._refresh_pending:
         return
     self._refresh_pending = True
     message_loop.post_delayed_task(self._refresh, 0.005)
Exemple #9
0
class OpenDialogBase(object):
  def __init__(self, settings, options, db, initial_filter = None):
    settings.register("filter_text", str, "")
    settings.register("query_log", str, "") 
    if initial_filter:
      settings.filter_text = initial_filter
    else:
      had_position = False
    self._filter_text = settings.filter_text
    self._settings = settings
    self._db = db
    self._can_process_queries = False
    self._last_search_query = None
    self._pending_search = None
    self._options = options
    if initial_filter:
      self.should_position_cursor_for_replace = False
    else:
      self.should_position_cursor_for_replace = True

    message_loop.post_delayed_task(self.on_tick, 0.1)
    
  def set_can_process_queries(self, can_process):
    could_process = self._can_process_queries
    self._can_process_queries = can_process

    self.set_results_enabled(can_process)

  @trace
  def set_filter_text(self, text):
    self._filter_text = text
    if self._settings.query_log != "":
      try:
        f = open(os.path.expanduser(self._settings.query_log), 'a')
        f.write(json.dumps({"ts": time.time(), "query": text}))
        f.write("\n");
        f.close()
      except IOError:
        import traceback; traceback.print_exc()
        pass

  def on_reindex_clicked(self):
    self._db.begin_reindex()

  def on_tick(self,*args):
    def begin_search():
      self.set_status("DB Status: %s" % "searching")
      self._last_search_query = self._filter_text
      self._pending_search = self._db.search_async(self._last_search_query)

    def on_ready():
      try:
        res = self._pending_search.result
      except db_proxy.AsyncSearchError:
        res = None
      self._pending_search = None
      if res:
        self.update_results_list(res.hits,res.ranks)
      else:
        self.update_results_list([],[])
      self._pending_search = None

    def check_status():
      try:
        stat = self._db.status()
        status = stat.status
        enabled = stat.has_index
      except Exception, ex:
        status = "quickopend not running"
        enabled = False
      self.set_status("DB Status: %s" % status)
      self.set_can_process_queries(enabled)

    if self._pending_search:
      self.set_status("DB Status: %s" % "searching")
      if self._pending_search.ready:
        on_ready()

    # re-check the self._pending_search since we might have cleared it
    if not self._pending_search:
      # kick off a query
      if self._filter_text != self._last_search_query and self._can_process_queries:
        begin_search()
      else:
        # poll status
        check_status()

    # renew the tick
    message_loop.post_delayed_task(self.on_tick, 0.1)
Exemple #10
0
 def test_post_delayed_task(self):
   def step2():
     message_loop.quit_main_loop()
   message_loop.post_delayed_task(step2, 0.1)