93 lines
3.9 KiB
Python
93 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
import widgetUtils
|
|
from pubsub import pub
|
|
from wxUI.dialogs import selector
|
|
from wxUI.menus import attachMenu
|
|
from . import base
|
|
|
|
class attachInteractor(base.baseInteractor):
|
|
|
|
def insert_attachment(self, attachment):
|
|
self.view.attachments.insert_item(False, *attachment)
|
|
|
|
def remove_attachment(self, attachment):
|
|
self.view.attachments.remove_item(attachment)
|
|
|
|
def install(self, *args, **kwargs):
|
|
super(attachInteractor, self).install(*args, **kwargs)
|
|
widgetUtils.connect_event(self.view.photo, widgetUtils.BUTTON_PRESSED, self.on_image)
|
|
widgetUtils.connect_event(self.view.audio, widgetUtils.BUTTON_PRESSED, self.on_audio)
|
|
widgetUtils.connect_event(self.view.document, widgetUtils.BUTTON_PRESSED, self.on_document)
|
|
if hasattr(self.view, "voice_message"):
|
|
widgetUtils.connect_event(self.view.voice_message, widgetUtils.BUTTON_PRESSED, self.on_upload_voice_message)
|
|
widgetUtils.connect_event(self.view.remove, widgetUtils.BUTTON_PRESSED, self.on_remove_attachment)
|
|
pub.subscribe(self.insert_attachment, self.modulename+"_insert_attachment")
|
|
pub.subscribe(self.remove_attachment, self.modulename+"_remove_attachment")
|
|
|
|
def uninstall(self):
|
|
super(attachInteractor, self).uninstall()
|
|
pub.unsubscribe(self.insert_attachment, self.modulename+"_insert_attachment")
|
|
pub.unsubscribe(self.remove_attachment, self.modulename+"_remove_attachment")
|
|
|
|
def on_image(self, *args, **kwargs):
|
|
""" display menu for adding image attachments. """
|
|
m = attachMenu()
|
|
# disable add from VK as it is not supported in images, yet.
|
|
m.add.Enable(False)
|
|
widgetUtils.connect_event(m, widgetUtils.MENU, self.on_upload_image, menuitem=m.upload)
|
|
self.view.PopupMenu(m, self.view.photo.GetPosition())
|
|
|
|
def on_audio(self, *args, **kwargs):
|
|
""" display menu to add audio attachments."""
|
|
m = attachMenu()
|
|
widgetUtils.connect_event(m, widgetUtils.MENU, self.on_upload_audio, menuitem=m.upload)
|
|
widgetUtils.connect_event(m, widgetUtils.MENU, self.on_add_audio, menuitem=m.add)
|
|
self.view.PopupMenu(m, self.view.audio.GetPosition())
|
|
|
|
def on_document(self, *args, **kwargs):
|
|
""" display menu for adding document attachments. """
|
|
m = attachMenu()
|
|
# disable add from VK as it is not supported in documents, yet.
|
|
m.add.Enable(False)
|
|
widgetUtils.connect_event(m, widgetUtils.MENU, self.on_upload_document, menuitem=m.upload)
|
|
self.view.PopupMenu(m, self.view.photo.GetPosition())
|
|
|
|
def on_upload_image(self, *args, **kwargs):
|
|
""" allows uploading an image from the computer.
|
|
"""
|
|
image, description = self.view.get_image()
|
|
if image != None:
|
|
self.presenter.upload_image(image, description)
|
|
|
|
def on_upload_audio(self, *args, **kwargs):
|
|
""" Allows uploading an audio file from the computer. Only mp3 files are supported. """
|
|
audio = self.view.get_audio()
|
|
if audio != None:
|
|
self.presenter.upload_audio(audio)
|
|
|
|
def on_upload_document(self, *args, **kwargs):
|
|
""" allows uploading a document from the computer.
|
|
"""
|
|
document = self.view.get_document()
|
|
if document != None:
|
|
if document.endswith(".mp3") or document.endswith(".exe"):
|
|
self.view.invalid_attachment()
|
|
return
|
|
self.presenter.upload_document(document)
|
|
|
|
def on_upload_voice_message(self, *args, **kwargs):
|
|
self.presenter.upload_voice_message()
|
|
|
|
def on_add_audio(self, *args, **kwargs):
|
|
""" Allow adding an audio directly from the user's audio library."""
|
|
audios = self.presenter.get_available_audios()
|
|
select = selector.selectAttachment(_("Select the audio files you want to send"), audios)
|
|
if select.get_response() == widgetUtils.OK and select.attachments.GetCount() > 0:
|
|
attachments = select.get_all_attachments()
|
|
self.presenter.take_audios(attachments)
|
|
|
|
def on_remove_attachment(self, *args, **kwargs):
|
|
""" Remove the currently focused item from the attachments list."""
|
|
current_item = self.view.attachments.get_selected()
|
|
self.presenter.remove_attachment(current_item) |