Added basic photo uploader in wall posts. Description is not supported

This commit is contained in:
Manuel Cortez 2016-04-11 11:48:35 -05:00
parent c7874759b1
commit 64b4b5573a
7 changed files with 109 additions and 44 deletions

18
src/controller/attach.py Normal file
View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
import os
import widgetUtils
from wxUI.dialogs import attach as gui
class attach(object):
def __init__(self):
self.attachments = list()
self.dialog = gui.attachDialog()
widgetUtils.connect_event(self.dialog.photo, widgetUtils.BUTTON_PRESSED, self.upload_image)
self.dialog.get_response()
def upload_image(self, *args, **kwargs):
image, description = self.dialog.get_image()
if image != None:
self.attachments.append({"type": "photo", "file": image, "description": os.path.basename(image)})
info = [_(u"Photo"), os.path.basename(image)]
self.dialog.attachments.insert_item(False, *info)

View File

@ -11,6 +11,7 @@ from pubsub import pub
from sessionmanager import session from sessionmanager import session
from mysc.thread_utils import call_threaded from mysc.thread_utils import call_threaded
from wxUI import commonMessages from wxUI import commonMessages
from vk import upload
class baseBuffer(object): class baseBuffer(object):
""" a basic representation of a buffer. Other buffers should be derived from this class""" """ a basic representation of a buffer. Other buffers should be derived from this class"""
@ -63,9 +64,14 @@ class baseBuffer(object):
def post(self, *args, **kwargs): def post(self, *args, **kwargs):
p = messages.post(title=_(u"Write your post"), caption="", text="") p = messages.post(title=_(u"Write your post"), caption="", text="")
if p.message.get_response() == widgetUtils.OK: if p.message.get_response() == widgetUtils.OK:
call_threaded(self.do_last, p=p)
def do_last(self, p):
msg = p.message.get_text().encode("utf-8") msg = p.message.get_text().encode("utf-8")
privacy_opts = p.get_privacy_options() privacy_opts = p.get_privacy_options()
attachments = "" attachments = ""
if hasattr(p, "attachments"):
attachments = self.upload_attachments(p.attachments)
urls = utils.find_urls_in_text(msg) urls = utils.find_urls_in_text(msg)
if len(urls) != 0: if len(urls) != 0:
if len(attachments) == 0: attachments = urls[0] if len(attachments) == 0: attachments = urls[0]
@ -75,6 +81,21 @@ class baseBuffer(object):
pub.sendMessage("posted", buffer=self.name) pub.sendMessage("posted", buffer=self.name)
p.message.Destroy() p.message.Destroy()
def upload_attachments(self, attachments):
# To do: Check the caption and description fields for this kind of attachments.
local_attachments = ""
uploader = upload.VkUpload(self.session.vk.client)
for i in attachments:
if i["type"] == "photo":
photos = i["file"]
description = i["description"]
r = uploader.photo_wall(photos, caption=description)
id = r[0]["id"]
owner_id = r[0]["owner_id"]
# self.session.vk.client.photos.edit(photo_id=id, owner_id=owner_id, caption=description)
local_attachments += "photo{0}_{1},".format(owner_id, id)
return local_attachments
def connect_events(self): def connect_events(self):
widgetUtils.connect_event(self.tab.post, widgetUtils.BUTTON_PRESSED, self.post) widgetUtils.connect_event(self.tab.post, widgetUtils.BUTTON_PRESSED, self.post)
widgetUtils.connect_event(self.tab.list.list, widgetUtils.KEYPRESS, self.get_event) widgetUtils.connect_event(self.tab.list.list, widgetUtils.KEYPRESS, self.get_event)

View File

@ -2,6 +2,7 @@
import widgetUtils import widgetUtils
import output import output
from pubsub import pub from pubsub import pub
import attach
from wxUI.dialogs import message from wxUI.dialogs import message
from extra import SpellChecker, translator from extra import SpellChecker, translator
@ -13,8 +14,9 @@ class post(object):
self.message.set_title(title) self.message.set_title(title)
widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck) widgetUtils.connect_event(self.message.spellcheck, widgetUtils.BUTTON_PRESSED, self.spellcheck)
widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate) widgetUtils.connect_event(self.message.translateButton, widgetUtils.BUTTON_PRESSED, self.translate)
self.image = None self.images = []
# widgetUtils.connect_event(self.message.upload_image, widgetUtils.BUTTON_PRESSED, self.upload_image) if hasattr(self.message, "attach"):
widgetUtils.connect_event(self.message.attach, widgetUtils.BUTTON_PRESSED, self.show_attach_dialog)
def get_privacy_options(self): def get_privacy_options(self):
p = self.message.get("privacy") p = self.message.get("privacy")
@ -43,28 +45,10 @@ class post(object):
self.message.set_text(checker.fixed_text) self.message.set_text(checker.fixed_text)
checker.clean() checker.clean()
# def attach(self, *args, **kwargs): def show_attach_dialog(self, *args, **kwargs):
# def completed_callback(): a = attach.attach()
# url = dlg.uploaderFunction.get_url() if len(a.attachments) != 0:
# pub.unsubscribe(dlg.uploaderDialog.update, "uploading") self.attachments = a.attachments
# 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): class comment(post):
def __init__(self, title, caption, text): def __init__(self, title, caption, text):

View File

@ -78,7 +78,7 @@ class VkUpload(object):
return response return response
def photo_wall(self, photos, user_id=None, group_id=None): def photo_wall(self, photos, user_id=None, group_id=None, caption="No description"):
""" Загрузка изображений на стену пользователя или в группу """ Загрузка изображений на стену пользователя или в группу
:param photos: список путей к изображениям, либо путь к изображению :param photos: список путей к изображениям, либо путь к изображению
@ -93,7 +93,6 @@ class VkUpload(object):
elif group_id: elif group_id:
values['group_id'] = group_id values['group_id'] = group_id
response = self.vk.photos.getWallUploadServer(**values) response = self.vk.photos.getWallUploadServer(**values)
url = response['upload_url'] url = response['upload_url']
photos_files = open_photos(photos) photos_files = open_photos(photos)
response = self.session.post(url, files=photos_files) response = self.session.post(url, files=photos_files)

View File

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
import wx
import widgetUtils
class attachDialog(widgetUtils.BaseDialog):
def __init__(self):
super(attachDialog, self).__init__(None, title=_(u"Add an attachment"))
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
lbl1 = wx.StaticText(panel, wx.NewId(), _(u"Attachments"))
self.attachments = widgetUtils.list(panel, _(u"Type"), _(u"Title"), style=wx.LC_REPORT)
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(lbl1, 0, wx.ALL, 5)
box.Add(self.attachments.list, 0, wx.ALL, 5)
sizer.Add(box, 0, wx.ALL, 5)
static = wx.StaticBox(panel, label=_(u"Add attachments"))
self.photo = wx.Button(panel, wx.NewId(), _(u"&Photo"))
btnsizer = wx.StaticBoxSizer(static, wx.HORIZONTAL)
btnsizer.Add(self.photo, 0, wx.ALL, 5)
sizer.Add(btnsizer, 0, wx.ALL, 5)
ok = wx.Button(panel, wx.ID_OK)
ok.SetDefault()
cancelBtn = wx.Button(panel, wx.ID_CANCEL)
btnSizer = wx.BoxSizer()
btnSizer.Add(ok, 0, wx.ALL, 5)
btnSizer.Add(cancelBtn, 0, wx.ALL, 5)
sizer.Add(btnSizer, 0, wx.ALL, 5)
panel.SetSizer(sizer)
self.SetClientSize(sizer.CalcMin())
def get_image(self):
openFileDialog = wx.FileDialog(self, _(u"Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if openFileDialog.ShowModal() == wx.ID_CANCEL:
return None
dsc = ""
return (openFileDialog.GetPath(), dsc)
def ask_description(self):
dlg = wx.TextEntryDialog(self, _(u"please provide a description"), _(u"Description"), defaultValue="")
dlg.ShowModal()
result = dlg.GetValue()
dlg.Destroy()
return result

View File

@ -58,15 +58,14 @@ class post(textMessage):
self.mainBox.Add(self.textBox, 0, wx.ALL, 5) self.mainBox.Add(self.textBox, 0, wx.ALL, 5)
self.create_privacy_box() self.create_privacy_box()
self.mainBox.Add(self.privacyBox, 0, wx.ALL, 5) self.mainBox.Add(self.privacyBox, 0, wx.ALL, 5)
self.upload_image = wx.Button(self.panel, -1, _(u"Upload a &picture"), size=wx.DefaultSize) self.attach = wx.Button(self.panel, -1, _(u"Attach"), size=wx.DefaultSize)
self.upload_image.Enable(False)
self.spellcheck = wx.Button(self.panel, -1, _("Spelling &correction"), size=wx.DefaultSize) self.spellcheck = wx.Button(self.panel, -1, _("Spelling &correction"), size=wx.DefaultSize)
self.translateButton = wx.Button(self.panel, -1, _(u"&Translate message"), size=wx.DefaultSize) self.translateButton = wx.Button(self.panel, -1, _(u"&Translate message"), size=wx.DefaultSize)
self.okButton = wx.Button(self.panel, wx.ID_OK, _(u"Send"), size=wx.DefaultSize) self.okButton = wx.Button(self.panel, wx.ID_OK, _(u"Send"), size=wx.DefaultSize)
self.okButton.SetDefault() self.okButton.SetDefault()
cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _(u"Close"), size=wx.DefaultSize) cancelButton = wx.Button(self.panel, wx.ID_CANCEL, _(u"Close"), size=wx.DefaultSize)
self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL) self.buttonsBox1 = wx.BoxSizer(wx.HORIZONTAL)
self.buttonsBox1.Add(self.upload_image, 0, wx.ALL, 10) self.buttonsBox1.Add(self.attach, 0, wx.ALL, 10)
self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10) self.buttonsBox1.Add(self.spellcheck, 0, wx.ALL, 10)
self.buttonsBox1.Add(self.translateButton, 0, wx.ALL, 10) self.buttonsBox1.Add(self.translateButton, 0, wx.ALL, 10)
self.mainBox.Add(self.buttonsBox1, 0, wx.ALL, 10) self.mainBox.Add(self.buttonsBox1, 0, wx.ALL, 10)
@ -86,11 +85,6 @@ class post(textMessage):
self.createControls(message, title, text) self.createControls(message, title, text)
self.SetClientSize(self.mainBox.CalcMin()) self.SetClientSize(self.mainBox.CalcMin())
def get_image(self):
openFileDialog = wx.FileDialog(self, _(u"Select the picture to be uploaded"), "", "", _("Image files (*.png, *.jpg, *.gif)|*.png; *.jpg; *.gif"), wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
if openFileDialog.ShowModal() == wx.ID_CANCEL:
return None
return openFileDialog.GetPath()
class comment(textMessage): class comment(textMessage):
def createControls(self, title, message, text): def createControls(self, title, message, text):

View File

@ -52,3 +52,9 @@ class toolsMenu(wx.Menu):
self.AppendItem(self.translate) self.AppendItem(self.translate)
self.CheckSpelling = wx.MenuItem(self, -1, _(u"Check Spelling")) self.CheckSpelling = wx.MenuItem(self, -1, _(u"Check Spelling"))
self.AppendItem(self.CheckSpelling) self.AppendItem(self.CheckSpelling)
class attachMenu(wx.Menu):
def __init__(self):
super(attachMenu, self).__init__()
self.photo = wx.MenuItem(self, wx.NewId(), _(u"Picture"))
self.AppendItem(self.photo)