Refacotry code with create_app function.

master
Andy Stewart 8 years ago
parent 422ae925bd
commit 5eab98b979
  1. 16
      HACKING.md
  2. 2
      app/browser/buffer.py
  3. 2
      app/camera/buffer.py
  4. 2
      app/demo/buffer.py
  5. 2
      app/imageviewer/buffer.py
  6. 2
      app/pdfviewer/buffer.py
  7. 2
      app/videoplayer/buffer.py
  8. 62
      eaf.py

@ -13,7 +13,7 @@ Python is a perfect language to develop Qt program and it can call pretty much i
M-x eaf-open
```
Then type "eaf demo" as input, will pop hello world window in emacs like below:
Then type "eaf-demo" as input, will pop hello world window in emacs like below:
![img](./screenshot/hello_world.png)
@ -34,7 +34,7 @@ from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QPushButton
from core.buffer import Buffer
class DemoBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, True, QColor(0, 0, 0, 255))
@ -56,11 +56,11 @@ class DemoBuffer(Buffer):
```Python
@dbus.service.method(EAF_DBUS_NAME, in_signature="ss", out_signature="s")
def new_buffer(self, buffer_id, url):
if url == "eaf demo":
self.create_buffer(buffer_id, DemoBuffer(buffer_id, url))
if url == "eaf-demo":
return self.create_app(buffer_id, url, "app.demo.buffer")
```
Replace "eaf demo" to "eaf rocks!"
Replace "eaf-demo" to "eaf rocks!"
3. Test
```
@ -80,7 +80,9 @@ Above are all you need, happy hacking!
### Read user's input
Below is code example from pdfviewer:
```Python
class PdfViewerBuffer(Buffer):
...
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, False, QColor(0, 0, 0, 255))
@ -93,6 +95,8 @@ class PdfViewerBuffer(Buffer):
def handle_input_message(self, result_type, result_content):
if result_type == "jump_page":
self.buffer_widget.jump_to_page(int(result_content))
...
```
If you want read input from emacs minibuffer then call back to python.

@ -27,7 +27,7 @@ from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKit import QWebSettings
from core.buffer import Buffer
class BrowserBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, False, QColor(255, 255, 255, 255))

@ -28,7 +28,7 @@ from PyQt5.QtWidgets import QGraphicsScene, QGraphicsView
from PyQt5.QtWidgets import QWidget, QVBoxLayout
from core.buffer import Buffer
class CameraBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, True, QColor(0, 0, 0, 255))

@ -23,7 +23,7 @@ from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QPushButton
from core.buffer import Buffer
class DemoBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, True, QColor(0, 0, 0, 255))

@ -26,7 +26,7 @@ from PyQt5.QtWidgets import QWidget
import os
from core.buffer import Buffer
class ImageViewerBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, False, QColor(0, 0, 0, 255))

@ -27,7 +27,7 @@ from PyQt5.QtWidgets import QWidget
import fitz
from core.buffer import Buffer
class PdfViewerBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, False, QColor(0, 0, 0, 255))

@ -26,7 +26,7 @@ from PyQt5.QtMultimediaWidgets import QGraphicsVideoItem
from PyQt5.QtWidgets import QWidget, QGraphicsScene, QGraphicsView, QVBoxLayout
from core.buffer import Buffer
class VideoPlayerBuffer(Buffer):
class AppBuffer(Buffer):
def __init__(self, buffer_id, url):
Buffer.__init__(self, buffer_id, url, True, QColor(0, 0, 0, 255))

@ -25,6 +25,7 @@ from core.utils import file_is_image, file_is_video
from core.view import View
from dbus.mainloop.glib import DBusGMainLoop
from pymediainfo import MediaInfo
import importlib
import dbus
import dbus.service
import os
@ -50,17 +51,9 @@ class EAF(dbus.service.Object):
@dbus.service.method(EAF_DBUS_NAME, in_signature="ss", out_signature="s")
def new_buffer(self, buffer_id, url):
if url == "eaf-demo":
try:
from app.demo.buffer import DemoBuffer
self.create_buffer(buffer_id, DemoBuffer(buffer_id, url))
except ImportError:
return "Something wrong when import app.demo.buffer"
return self.create_app(buffer_id, url, "app.demo.buffer")
elif url == "eaf-camera":
try:
from app.camera.buffer import CameraBuffer
self.create_buffer(buffer_id, CameraBuffer(buffer_id, url))
except ImportError:
return "Something wrong when import app.camera.buffer"
return self.create_app(buffer_id, url, "app.camera.buffer")
else:
url = os.path.expanduser(url)
@ -69,46 +62,39 @@ class EAF(dbus.service.Object):
(_, extension) = os.path.splitext(url)
if extension in [".pdf", ".xps", ".oxps", ".cbz", ".epub", ".fb2", "fbz"]:
try:
from app.pdfviewer.buffer import PdfViewerBuffer
self.create_buffer(buffer_id, PdfViewerBuffer(buffer_id, url))
except ImportError:
return "Something wrong when import app.pdfviewer.buffer"
return self.create_app(buffer_id, url, "app.pdfviewer.buffer")
else:
file_info = MediaInfo.parse(url)
if file_is_image(file_info):
try:
from app.imageviewer.buffer import ImageViewerBuffer
self.create_buffer(buffer_id, ImageViewerBuffer(buffer_id, url))
except ImportError:
return "Something wrong when import app.imageviewer.buffer"
return self.create_app(buffer_id, url, "app.imageviewer.buffer")
elif file_is_video(file_info):
try:
from app.videoplayer.buffer import VideoPlayerBuffer
self.create_buffer(buffer_id, VideoPlayerBuffer(buffer_id, url))
except ImportError:
return "Something wrong when import app.videoplayer.buffer"
return self.create_app(buffer_id, url, "app.videoplayer.buffer")
else:
return "Don't know how to open {0}".format(url)
else:
return "Path {0} not exists.".format(url)
else:
try:
from app.browser.buffer import BrowserBuffer
from urllib.parse import urlparse
result = urlparse(url)
if len(result.scheme) != 0:
self.create_buffer(buffer_id, BrowserBuffer(buffer_id, result.geturl()))
from urllib.parse import urlparse
result = urlparse(url)
if len(result.scheme) != 0:
return self.create_app(buffer_id, result.geturl(), "app.browser.buffer")
else:
result = urlparse("{0}:{1}".format("http", url))
if result.scheme != "":
return self.create_app(buffer_id, result.geturl(), "app.browser.buffer")
else:
result = urlparse("{0}:{1}".format("http", url))
if result.scheme != "":
self.create_buffer(buffer_id, BrowserBuffer(buffer_id, result.geturl()))
else:
return "{0} is not valid url".format(url)
except ImportError:
return "Something wrong when import app.browser.buffer"
return "{0} is not valid url".format(url)
return ""
def create_app(self, buffer_id, url, module_path):
if importlib.util.find_spec(module_path) is not None:
module = importlib.import_module(module_path)
self.create_buffer(buffer_id, module.AppBuffer(buffer_id, url))
return ""
else:
return "Something wrong when import {0}".format(module_path)
def create_buffer(self, buffer_id, app_buffer):
global emacs_width, emacs_height

Loading…
Cancel
Save