Added some code for starting
This commit is contained in:
0
src/controller/__init__.py
Normal file
0
src/controller/__init__.py
Normal file
65
src/controller/buffers.py
Normal file
65
src/controller/buffers.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from sessionmanager import session
|
||||
import widgetUtils
|
||||
import messages
|
||||
from wxUI.tabs import home
|
||||
from pubsub import pub
|
||||
|
||||
class baseBuffer(object):
|
||||
def __init__(self, parent=None, name="", session=None, composefunc=None, *args, **kwargs):
|
||||
super(baseBuffer, self).__init__()
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
self.create_tab(parent)
|
||||
self.tab.name = name
|
||||
self.session = session
|
||||
self.compose_function = composefunc
|
||||
self.update_function = "get_page"
|
||||
self.name = name
|
||||
self.connect_events()
|
||||
|
||||
def create_tab(self, parent):
|
||||
self.tab = home.homeTab(parent)
|
||||
|
||||
|
||||
def insert(self, item, reversed=False):
|
||||
item_ = getattr(session, self.compose_function)(item, self.session)
|
||||
self.tab.list.insert_item(reversed, *item_)
|
||||
|
||||
def get_items(self, no_next=True):
|
||||
num = getattr(self.session, "get_newsfeed")(no_next=no_next, name=self.name, *self.args, **self.kwargs)
|
||||
print num
|
||||
if no_next == True:
|
||||
if self.tab.list.get_count() > 0 and num > 0:
|
||||
print "inserting a value"
|
||||
[self.insert(i, True) for i in self.session.db[self.name]["items"][-num:]]
|
||||
else:
|
||||
[self.insert(i) for i in self.session.db[self.name]["items"][:num]]
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
p = messages.post(title=_(u"Write your post"), caption="", text="")
|
||||
if p.message.get_response() == widgetUtils.OK:
|
||||
msg = p.message.get_text().encode("utf-8")
|
||||
privacy_opts = p.get_privacy_options()
|
||||
self.session.post_wall_status(message=msg, friends_only=privacy_opts)
|
||||
pub.sendMessage("posted", buffer=self.name)
|
||||
|
||||
|
||||
def connect_events(self):
|
||||
widgetUtils.connect_event(self.tab.post, widgetUtils.BUTTON_PRESSED, self.post)
|
||||
|
||||
class feedBuffer(baseBuffer):
|
||||
|
||||
def get_items(self, no_next=True):
|
||||
num = getattr(self.session, "get_page")(no_next=no_next, name=self.name, *self.args, **self.kwargs)
|
||||
print num
|
||||
if no_next == True:
|
||||
if self.tab.list.get_count() > 0 and num > 0:
|
||||
print "inserting a value"
|
||||
[self.insert(i, True) for i in self.session.db[self.name]["items"][-num:]]
|
||||
else:
|
||||
[self.insert(i) for i in self.session.db[self.name]["items"][:num]]
|
||||
|
||||
class audioBuffer(feedBuffer):
|
||||
def create_tab(self, parent):
|
||||
self.tab = home.audioTab(parent)
|
63
src/controller/mainController.py
Normal file
63
src/controller/mainController.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import widgetUtils
|
||||
import messages
|
||||
from wxUI import (mainWindow)
|
||||
import buffers
|
||||
from pubsub import pub
|
||||
from mysc.repeating_timer import RepeatingTimer
|
||||
from sessionmanager import session
|
||||
|
||||
class Controller(object):
|
||||
|
||||
def search(self, tab_name):
|
||||
for i in xrange(0, len(self.buffers)):
|
||||
if self.buffers[i].name == tab_name:
|
||||
return self.buffers[i]
|
||||
return False
|
||||
|
||||
def __init__(self):
|
||||
super(Controller, self).__init__()
|
||||
self.buffers = []
|
||||
self.window = mainWindow.mainWindow()
|
||||
self.window.change_status(_(u"Ready"))
|
||||
self.session = session.sessions[session.sessions.keys()[0]]
|
||||
# self.session.authorise()
|
||||
self.create_controls()
|
||||
self.window.Show()
|
||||
|
||||
def create_controls(self):
|
||||
home = buffers.baseBuffer(parent=self.window.tb, name="home_timeline", session=self.session, composefunc="compose_new", endpoint="newsfeed", identifier="id")
|
||||
self.buffers.append(home)
|
||||
self.window.add_buffer(home.tab, _(u"Home"))
|
||||
self.repeatedUpdate = RepeatingTimer(180, self.update_all_buffers)
|
||||
self.repeatedUpdate.start()
|
||||
|
||||
feed = buffers.feedBuffer(parent=self.window.tb, name="me_feed", composefunc="compose_status", session=self.session, endpoint="get", parent_endpoint="wall", identifier="id")
|
||||
self.buffers.append(feed)
|
||||
self.window.add_buffer(feed.tab, _(u"My wall"))
|
||||
audio = buffers.audioBuffer(parent=self.window.tb, name="me_audio", composefunc="compose_audio", session=self.session, endpoint="get", parent_endpoint="audio", full_list=True, identifier="aid")
|
||||
self.buffers.append(audio)
|
||||
self.window.add_buffer(audio.tab, _(u"My audios"))
|
||||
pub.subscribe(self.in_post, "posted")
|
||||
|
||||
def login(self):
|
||||
self.window.change_status(_(u"Logging in VK"))
|
||||
self.session.authorise()
|
||||
self.window.change_status(_(u"Ready"))
|
||||
for i in self.buffers:
|
||||
if hasattr(i, "get_items"):
|
||||
self.window.change_status(_(u"Loading items for {0}").format(i.name,))
|
||||
i.get_items()
|
||||
self.window.change_status(_(u"Ready"))
|
||||
|
||||
def in_post(self, buffer):
|
||||
buffer = self.search(buffer)
|
||||
buffer.get_items()
|
||||
buffer = self.search("home_timeline")
|
||||
buffer.get_items()
|
||||
|
||||
def update_all_buffers(self):
|
||||
for i in self.buffers:
|
||||
if hasattr(i, "get_items"):
|
||||
i.get_items()
|
||||
print "executed for %s" % (i.name)
|
118
src/controller/messages.py
Normal file
118
src/controller/messages.py
Normal file
@@ -0,0 +1,118 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import widgetUtils
|
||||
import output
|
||||
from pubsub import pub
|
||||
from wxUI.dialogs import message
|
||||
from extra import SpellChecker, translator
|
||||
|
||||
class post(object):
|
||||
def __init__(self, title, caption, text, post_type="post"):
|
||||
super(post, self).__init__()
|
||||
self.title = title
|
||||
self.message = getattr(message, post_type)(title, caption, text)
|
||||
self.message.set_title(title)
|
||||
widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck)
|
||||
widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate)
|
||||
# self.text_processor()
|
||||
self.image = None
|
||||
# widgetUtils.connect_event(self.message.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image)
|
||||
|
||||
def get_privacy_options(self):
|
||||
p = self.message.get("privacy")
|
||||
if p == _(u"Friends of friends"):
|
||||
privacy = 0
|
||||
elif p == _(u"All users"):
|
||||
privacy = 1
|
||||
return privacy
|
||||
|
||||
def translate(self, *args, **kwargs):
|
||||
dlg = translator.gui.translateDialog()
|
||||
if dlg.get_response() == widgetUtils.OK:
|
||||
text_to_translate = self.message.get_text().encode("utf-8")
|
||||
source = [x[0] for x in translator.translator.available_languages()][dlg.get("source_lang")]
|
||||
dest = [x[0] for x in translator.translator.available_languages()][dlg.get("dest_lang")]
|
||||
msg = translator.translator.translate(text_to_translate, source, dest)
|
||||
self.message.set_text(msg)
|
||||
self.message.text_focus()
|
||||
output.speak(_(u"Translated"))
|
||||
else:
|
||||
return
|
||||
|
||||
# def shorten(self, event=None):
|
||||
# urls = utils.find_urls_in_text(self.message.get_text())
|
||||
# if len(urls) == 0:
|
||||
# output.speak(_(u"There's no URL to be shortened"))
|
||||
# self.message.text_focus()
|
||||
# elif len(urls) == 1:
|
||||
# self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.shorten(urls[0])))
|
||||
# output.speak(_(u"URL shortened"))
|
||||
# self.message.text_focus()
|
||||
# elif len(urls) > 1:
|
||||
# list_urls = urlList.urlList()
|
||||
# list_urls.populate_list(urls)
|
||||
# if list_urls.get_response() == widgetUtils.OK:
|
||||
# self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.shorten(list_urls.get_string())))
|
||||
# output.speak(_(u"URL shortened"))
|
||||
# self.message.text_focus()
|
||||
|
||||
# def unshorten(self, event=None):
|
||||
# urls = utils.find_urls_in_text(self.message.get_text())
|
||||
# if len(urls) == 0:
|
||||
# output.speak(_(u"There's no URL to be expanded"))
|
||||
# self.message.text_focus()
|
||||
# elif len(urls) == 1:
|
||||
# self.message.set_text(self.message.get_text().replace(urls[0], url_shortener.unshorten(urls[0])))
|
||||
# output.speak(_(u"URL expanded"))
|
||||
# self.message.text_focus()
|
||||
# elif len(urls) > 1:
|
||||
# list_urls = urlList.urlList()
|
||||
# list_urls.populate_list(urls)
|
||||
# if list_urls.get_response() == widgetUtils.OK:
|
||||
# self.message.set_text(self.message.get_text().replace(urls[list_urls.get_item()], url_shortener.unshorten(list_urls.get_string())))
|
||||
# output.speak(_(u"URL expanded"))
|
||||
# self.message.text_focus()
|
||||
|
||||
# def text_processor(self, *args, **kwargs):
|
||||
# self.message.set_title(_(u"%s - %s of 140 characters") % (self.title, len(self.message.get_text())))
|
||||
# if len(self.message.get_text()) > 1:
|
||||
# self.message.enable_button("shortenButton")
|
||||
# self.message.enable_button("unshortenButton")
|
||||
# else:
|
||||
# self.message.disable_button("shortenButton")
|
||||
# self.message.disable_button("unshortenButton")
|
||||
# if len(self.message.get_text()) > 140:
|
||||
# self.session.sound.play("max_length.ogg")
|
||||
|
||||
def spellcheck(self, event=None):
|
||||
text = self.message.get_text()
|
||||
checker = SpellChecker.spellchecker.spellChecker(text, "")
|
||||
if hasattr(checker, "fixed_text"):
|
||||
self.message.set_text(checker.fixed_text)
|
||||
|
||||
# def attach(self, *args, **kwargs):
|
||||
# def completed_callback():
|
||||
# url = dlg.uploaderFunction.get_url()
|
||||
# pub.unsubscribe(dlg.uploaderDialog.update, "uploading")
|
||||
# dlg.uploaderDialog.destroy()
|
||||
# if url != 0:
|
||||
# self.message.set_text(self.message.get_text()+url+" #audio")
|
||||
# else:
|
||||
# output.speak(_(u"Unable to upload the audio"))
|
||||
# dlg.cleanup()
|
||||
# dlg = audioUploader.audioUploader(self.session.settings, completed_callback)
|
||||
|
||||
def upload_image(self, *args, **kwargs):
|
||||
if self.message.get("upload_image") == _(u"Discard image"):
|
||||
del self.image
|
||||
self.image = None
|
||||
output.speak(_(u"Discarded"))
|
||||
self.message.set("upload_image", _(u"Upload a picture"))
|
||||
else:
|
||||
self.image = self.message.get_image()
|
||||
if self.image != None:
|
||||
self.message.set("upload_image", _(u"Discard image"))
|
||||
|
||||
class comment(post):
|
||||
def __init__(self, title, caption, text):
|
||||
super(comment, self).__init__(title, caption, text, "comment")
|
||||
self.message.set_title(_(u"New comment"))
|
189
src/controller/posts.py
Normal file
189
src/controller/posts.py
Normal file
@@ -0,0 +1,189 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import arrow
|
||||
import messages
|
||||
import languageHandler
|
||||
import widgetUtils
|
||||
import output
|
||||
import wx
|
||||
import webbrowser
|
||||
from pubsub import pub
|
||||
from wxUI.dialogs import postDialogs, urlList
|
||||
from extra import SpellChecker, translator
|
||||
from mysc.thread_utils import call_threaded
|
||||
from wxUI import menus
|
||||
from utils import find_urls
|
||||
|
||||
class postController(object):
|
||||
def __init__(self, session, postObject):
|
||||
super(postController, self).__init__()
|
||||
self.session = session
|
||||
self.post = postObject
|
||||
self.dialog = postDialogs.post()
|
||||
self.dialog.comments.list.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.show_comment)
|
||||
from_ = self.session.get_user_name(self.post["from_id"])
|
||||
# if self.post.has_key("owner_id"):
|
||||
# to_ = [i["name"] for i in self.post["to"]["data"]]
|
||||
# title = _(u"Post from {0} in {1}").format(from_, "".join(to_))
|
||||
# else:
|
||||
title = _(u"Post from {0}").format(from_,)
|
||||
self.dialog.set_title(title)
|
||||
message = story = u""
|
||||
if self.post.has_key("message"):
|
||||
message = self.post["message"]
|
||||
if self.post.has_key("story"):
|
||||
story = self.post["story"]
|
||||
if self.post.has_key("name") and self.post.has_key("link"):
|
||||
message += u". {0}, {1}".format(self.post["name"], self.post["link"])
|
||||
if story != "":
|
||||
final_msg = u"{0} \n\n{1}".format(story, message)
|
||||
else:
|
||||
final_msg = message
|
||||
self.dialog.set_post(final_msg)
|
||||
# widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck)
|
||||
# widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate)
|
||||
# self.text_processor()
|
||||
widgetUtils.connect_event(self.dialog.like, widgetUtils.BUTTON_PRESSED, self.post_like)
|
||||
widgetUtils.connect_event(self.dialog.comment, widgetUtils.BUTTON_PRESSED, self.add_comment)
|
||||
widgetUtils.connect_event(self.dialog.tools, widgetUtils.BUTTON_PRESSED, self.show_tools_menu)
|
||||
self.dialog.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.show_menu, self.dialog.comments.list)
|
||||
self.dialog.Bind(wx.EVT_LIST_KEY_DOWN, self.show_menu_by_key, self.dialog.comments.list)
|
||||
call_threaded(self.load_all_components)
|
||||
|
||||
def load_all_components(self):
|
||||
self.get_likes()
|
||||
self.get_shares()
|
||||
self.get_comments()
|
||||
|
||||
def post_like(self, *args, **kwargs):
|
||||
lk = self.session.like(self.post["id"])
|
||||
self.get_likes()
|
||||
|
||||
def get_likes(self):
|
||||
self.likes = self.session.fb.client.get_connections(id=self.post["id"], connection_name="likes", summary=True)
|
||||
self.dialog.set_likes(self.likes["summary"]["total_count"])
|
||||
|
||||
def get_shares(self):
|
||||
self.shares = self.session.fb.client.get_connections(id=self.post["id"], connection_name="sharedposts")
|
||||
self.dialog.set_shares(str(len(self.shares["data"])))
|
||||
|
||||
def get_comments(self):
|
||||
self.comments = self.session.fb.client.get_connections(id=self.post["id"], connection_name="comments", filter="stream")
|
||||
comments = []
|
||||
for i in self.comments["data"]:
|
||||
from_ = i["from"]["name"]
|
||||
if len(i["message"]) > 100:
|
||||
comment = i["message"][:100]
|
||||
else:
|
||||
comment = i["message"]
|
||||
original_date = arrow.get(i["created_time"], "YYYY-MM-DTHH:m:sZ", locale="en")
|
||||
created_at = original_date.humanize(locale=languageHandler.getLanguage())
|
||||
likes = str(i["like_count"])
|
||||
comments.append([from_, comment, created_at, likes,])
|
||||
self.dialog.insert_comments(comments)
|
||||
|
||||
def add_comment(self, *args, **kwargs):
|
||||
comment = messages.comment(title=_(u"Add a comment"), caption="", text="")
|
||||
if comment.message.get_response() == widgetUtils.OK:
|
||||
msg = comment.message.get_text().encode("utf-8")
|
||||
try:
|
||||
self.session.fb.client.put_comment(self.post["id"], msg)
|
||||
output.speak(_(u"You've posted a comment"))
|
||||
if len(self.comments["data"]) < 25:
|
||||
self.clear_comments_list()
|
||||
self.get_comments()
|
||||
except Exception as msg:
|
||||
print msg
|
||||
|
||||
def clear_comments_list(self):
|
||||
self.dialog.comments.clear()
|
||||
|
||||
def show_comment(self, *args, **kwargs):
|
||||
c = comment(self.session, self.comments["data"][self.dialog.comments.get_selected()])
|
||||
c.dialog.get_response()
|
||||
|
||||
def show_menu(self, *args, **kwargs):
|
||||
if self.dialog.comments.get_count() == 0: return
|
||||
menu = menus.commentMenu()
|
||||
widgetUtils.connect_event(self.dialog, widgetUtils.MENU, self.show_comment, menuitem=menu.open)
|
||||
widgetUtils.connect_event(self.dialog, widgetUtils.MENU, self.comment_like, menuitem=menu.like)
|
||||
widgetUtils.connect_event(self.dialog, widgetUtils.MENU, self.comment_unlike, menuitem=menu.unlike)
|
||||
self.dialog.PopupMenu(menu, self.dialog.comments.list.GetPosition())
|
||||
|
||||
def show_menu_by_key(self, ev):
|
||||
if ev.GetKeyCode() == wx.WXK_WINDOWS_MENU:
|
||||
self.show_menu()
|
||||
|
||||
def show_tools_menu(self, *args, **kwargs):
|
||||
menu = menus.toolsMenu()
|
||||
widgetUtils.connect_event(self.dialog, widgetUtils.MENU, self.open_url, menuitem=menu.url)
|
||||
widgetUtils.connect_event(self.dialog, widgetUtils.MENU, self.translate, menuitem=menu.translate)
|
||||
widgetUtils.connect_event(self.dialog, widgetUtils.MENU, self.spellcheck, menuitem=menu.CheckSpelling)
|
||||
self.dialog.PopupMenu(menu, self.dialog.tools.GetPosition())
|
||||
|
||||
def comment_like(self, *args, **kwargs):
|
||||
comment_id = self.comments["data"][self.dialog.comments.get_selected()]["id"]
|
||||
self.session.like(comment_id)
|
||||
output.speak(_(u"You do like this comment"))
|
||||
|
||||
def comment_unlike(self, *args, **kwargs):
|
||||
comment_id = self.comments["data"][self.dialog.comments.get_selected()]["id"]
|
||||
self.session.unlike(comment_id)
|
||||
output.speak(_(u"You don't like this comment"))
|
||||
|
||||
def translate(self, *args, **kwargs):
|
||||
dlg = translator.gui.translateDialog()
|
||||
if dlg.get_response() == widgetUtils.OK:
|
||||
text_to_translate = self.dialog.post_view.GetValue().encode("utf-8")
|
||||
source = [x[0] for x in translator.translator.available_languages()][dlg.get("source_lang")]
|
||||
dest = [x[0] for x in translator.translator.available_languages()][dlg.get("dest_lang")]
|
||||
msg = translator.translator.translate(text_to_translate, source, dest)
|
||||
self.dialog.post_view.ChangeValue(msg)
|
||||
output.speak(_(u"Translated"))
|
||||
else:
|
||||
return
|
||||
|
||||
def spellcheck(self, *args, **kwargs):
|
||||
text = self.dialog.post_view.GetValue()
|
||||
checker = SpellChecker.spellchecker.spellChecker(text, "")
|
||||
if hasattr(checker, "fixed_text"):
|
||||
self.dialog.post_view.ChangeValue(checker.fixed_text)
|
||||
|
||||
def open_url(self, *args, **kwargs):
|
||||
text = self.dialog.post_view.GetValue()
|
||||
urls = find_urls(text)
|
||||
url = None
|
||||
if len(urls) == 0: return
|
||||
if len(urls) == 1:
|
||||
url = urls[0]
|
||||
elif len(urls) > 1:
|
||||
url_list = urlList.urlList()
|
||||
url_list.populate_list(urls)
|
||||
if url_list.get_response() == widgetUtils.OK:
|
||||
url = urls[url_list.get_item()]
|
||||
if url != None:
|
||||
output.speak(_(u"Opening URL..."), True)
|
||||
webbrowser.open_new_tab(url)
|
||||
|
||||
class comment(object):
|
||||
def __init__(self, session, comment_object):
|
||||
super(comment, self).__init__()
|
||||
self.session = session
|
||||
self.comment = comment_object
|
||||
self.dialog = postDialogs.comment()
|
||||
from_ = self.comment["from"]["name"]
|
||||
message = self.comment["message"]
|
||||
original_date = arrow.get(self.comment["created_time"], "YYYY-MM-DTHH:m:sZ", locale="en")
|
||||
created_at = original_date.humanize(locale=languageHandler.getLanguage())
|
||||
self.dialog.set_post(message)
|
||||
self.dialog.set_title(_(u"Comment from {0}").format(from_,))
|
||||
widgetUtils.connect_event(self.dialog.like, widgetUtils.BUTTON_PRESSED, self.post_like)
|
||||
call_threaded(self.get_likes)
|
||||
|
||||
def get_likes(self):
|
||||
self.likes = self.session.fb.client.get_connections(id=self.comment["id"], connection_name="likes", summary=True)
|
||||
self.dialog.set_likes(self.likes["summary"]["total_count"])
|
||||
|
||||
def post_like(self, *args, **kwargs):
|
||||
lk = self.session.like(self.comment["id"])
|
||||
self.get_likes()
|
||||
|
Reference in New Issue
Block a user