mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2024-11-22 19:28:09 -06:00
cleaned scan controller and made progress dialog to work
This commit is contained in:
parent
6e80b320c9
commit
02e1793d08
@ -1,17 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
""" Scanning code for autocompletion feature on TWBlue. This module can retrieve user objects from the selected Twitter account automatically. """
|
||||
import time
|
||||
import wx
|
||||
import widgetUtils
|
||||
import output
|
||||
from tweepy.cursor import Cursor
|
||||
from tweepy.errors import TweepyException
|
||||
from pubsub import pub
|
||||
from mysc.thread_utils import call_threaded
|
||||
from . import wx_scan
|
||||
from . import manage
|
||||
from . import storage
|
||||
from mysc.thread_utils import call_threaded
|
||||
|
||||
class autocompletionScan(object):
|
||||
def __init__(self, config, buffer, window):
|
||||
""" Class constructor. This class will take care of scanning the selected Twitter account to populate the database with users automatically upon request.
|
||||
|
||||
:param config: Config for the session that will be scanned in search for users.
|
||||
:type config: dict
|
||||
:param buffer: home buffer for the focused session.
|
||||
:type buffer: controller.buffers.twitter.base.baseBuffer
|
||||
:param window: Main Window of TWBlue.
|
||||
:type window:wx.Frame
|
||||
"""
|
||||
super(autocompletionScan, self).__init__()
|
||||
self.config = config
|
||||
self.buffer = buffer
|
||||
@ -22,16 +33,16 @@ class autocompletionScan(object):
|
||||
if self.dialog.get_response() == widgetUtils.OK:
|
||||
confirmation = wx_scan.confirm()
|
||||
if confirmation == True:
|
||||
self.progress_dialog = wx_scan.get_progress_dialog()
|
||||
call_threaded(self.scan)
|
||||
# connect method to update progress dialog
|
||||
pub.subscribe(self.on_update_progress, "on-update-progress")
|
||||
self.progress_dialog = wx_scan.get_progress_dialog(parent=self.dialog)
|
||||
# connect method to update progress dialog
|
||||
pub.subscribe(self.on_update_progress, "on-update-progress")
|
||||
scanner = call_threaded(self.scan)
|
||||
|
||||
def on_update_progress(self, percent):
|
||||
print(percent)
|
||||
if percent > 100:
|
||||
percent = 100
|
||||
self.progress_dialog.Update(percent)
|
||||
wx.CallAfter(self.progress_dialog.Update, percent)
|
||||
|
||||
def scan(self):
|
||||
""" Attempts to add all users selected by current user to the autocomplete database. """
|
||||
@ -40,27 +51,17 @@ class autocompletionScan(object):
|
||||
self.config["mysc"]["save_followers_in_autocompletion_db"] = self.dialog.get("followers")
|
||||
output.speak(_("Updating database... You can close this window now. A message will tell you when the process finishes."))
|
||||
database = storage.storage(self.buffer.session.session_id)
|
||||
total_steps = 0
|
||||
if self.dialog.get("friends") == True:
|
||||
total_steps = total_steps + 2
|
||||
if self.dialog.get("followers") == True:
|
||||
total_steps = total_steps + 2
|
||||
max_per_stage = 100/total_steps
|
||||
percent = 0
|
||||
# Retrieve ids of all following users
|
||||
if self.dialog.get("friends") == True:
|
||||
for i in Cursor(self.buffer.session.twitter.get_friend_ids, count=5000).items():
|
||||
if str(i) not in ids:
|
||||
ids.append(str(i))
|
||||
percent = percent + (100*max_per_stage/100)
|
||||
pub.sendMessage("on-update-progress", percent=percent)
|
||||
# same step, but for followers.
|
||||
if self.dialog.get("followers") == True:
|
||||
for i in Cursor(self.buffer.session.twitter.get_follower_ids, count=5000).items():
|
||||
if str(i) not in ids:
|
||||
ids.append(str(i))
|
||||
percent = percent + (100*max_per_stage/100)
|
||||
pub.sendMessage("on-update-progress", percent=percent)
|
||||
# As next step requires batches of 100s users, let's split our user Ids so we won't break the param rules.
|
||||
split_users = [ids[i:i + 100] for i in range(0, len(ids), 100)]
|
||||
# store returned users in this list.
|
||||
@ -73,37 +74,13 @@ class autocompletionScan(object):
|
||||
results = self.buffer.session.twitter.lookup_users(user_id=z)
|
||||
users.extend(results)
|
||||
time.sleep(1)
|
||||
percent = percent + (max_per_stage/len(split_users))
|
||||
percent = percent + (100/len(split_users))
|
||||
pub.sendMessage("on-update-progress", percent=percent)
|
||||
for user in users:
|
||||
database.set_user(user.screen_name, user.name, 1)
|
||||
self.progress_dialog.Destroy()
|
||||
wx_scan.show_success_dialog()
|
||||
self.dialog.Destroy()
|
||||
|
||||
def add_users_to_database(self):
|
||||
self.config["mysc"]["save_friends_in_autocompletion_db"] = self.dialog.get("friends_buffer")
|
||||
self.config["mysc"]["save_followers_in_autocompletion_db"] = self.dialog.get("followers_buffer")
|
||||
output.speak(_(u"Updating database... You can close this window now. A message will tell you when the process finishes."))
|
||||
database = storage.storage(self.buffer.session.session_id)
|
||||
if self.dialog.get("followers_buffer") == True:
|
||||
buffer = self.window.search_buffer("followers", self.config["twitter"]["user_name"])
|
||||
for i in buffer.session.db[buffer.name]:
|
||||
database.set_user(i.screen_name, i.name, 1)
|
||||
else:
|
||||
database.remove_by_buffer(1)
|
||||
if self.dialog.get("friends_buffer") == True:
|
||||
buffer = self.window.search_buffer("friends", self.config["twitter"]["user_name"])
|
||||
for i in buffer.session.db[buffer.name]:
|
||||
database.set_user(i.screen_name, i.name, 2)
|
||||
else:
|
||||
database.remove_by_buffer(2)
|
||||
wx_settings.show_success_dialog()
|
||||
self.dialog.destroy()
|
||||
|
||||
def view_list(self, ev):
|
||||
q = manage.autocompletionManager(self.buffer.session)
|
||||
q.show_settings()
|
||||
wx.CallAfter(self.progress_dialog.Destroy)
|
||||
wx.CallAfter(self.dialog.Destroy)
|
||||
pub.unsubscribe(self.on_update_progress, "on-update-progress")
|
||||
|
||||
def execute_at_startup(window, buffer, config):
|
||||
database = storage.storage(buffer.session.session_id)
|
||||
@ -118,7 +95,4 @@ def execute_at_startup(window, buffer, config):
|
||||
for i in buffer.session.db[buffer.name]:
|
||||
database.set_user(i.screen_name, i.name, 2)
|
||||
else:
|
||||
database.remove_by_buffer(2)
|
||||
|
||||
def __del__(self):
|
||||
pub.unsubscribe(self.on_update_progress, "on-update-progress")
|
||||
database.remove_by_buffer(2)
|
Loading…
Reference in New Issue
Block a user