update eaf package

This commit is contained in:
2021-01-30 14:52:51 +01:00
parent 84eb4929ee
commit 5207af83cb
4981 changed files with 11795 additions and 761570 deletions

View File

@@ -19,36 +19,63 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QColor
from PyQt5 import QtCore
from PyQt5.QtCore import QUrl, QFileSystemWatcher, QTimer
from retrying import retry
from core.browser import BrowserBuffer
from core.utils import PostGui, get_free_port
from core.utils import get_free_port
from urllib.error import URLError
from urllib.request import urlopen
from urllib.parse import urlencode
import os
import subprocess
import threading
import tempfile
class AppBuffer(BrowserBuffer):
def __init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path):
BrowserBuffer.__init__(self, buffer_id, url, config_dir, arguments, emacs_var_dict, module_path, False)
# Get free port to render markdown.
self.port = get_free_port()
self.url = url
self.preview_file = tempfile.mkstemp(prefix='eaf-', suffix='.html', text=True)[1]
self.render_js = os.path.join(os.path.dirname(__file__), "render.js")
self.server_port = get_free_port()
self.dark_mode = "false"
if emacs_var_dict["eaf-markdown-dark-mode"] == "true" or \
(emacs_var_dict["eaf-markdown-dark-mode"] == "follow" and emacs_var_dict["eaf-emacs-theme-mode"] == "dark"):
self.dark_mode = "true"
# Start markdown render process.
if arguments == "":
subprocess.Popen("grip {0} {1}".format(url, self.port), shell=True)
else:
subprocess.Popen("grip --pass {0} {1} {2}".format(arguments, url, self.port), shell=True)
self.draw_progressbar = True
# Add timer make load markdown preview link after grip process start finish.
timer = threading.Timer(2, self.load_markdown_server)
timer.start()
self.run_render_server()
self.render()
@PostGui()
def load_markdown_server(self):
self.buffer_widget.setUrl(QUrl("http://localhost:{0}".format(self.port)))
self.file_watcher = QFileSystemWatcher()
self.file_watcher.fileChanged.connect(self.on_file_changed)
self.file_watcher.addPath(url)
paths = os.path.split(self.url)
if len(paths) > 0:
self.change_title(paths[-1])
def run_render_server(self):
args = ["node", self.render_js, str(self.server_port)]
subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False)
def on_file_changed(self, *args):
self.render()
def retry_if_connection_refused(ex):
return isinstance(ex, URLError) and isinstance(ex.reason, ConnectionRefusedError)
@retry(wait_fixed=500, stop_max_attempt_number=10, retry_on_exception=retry_if_connection_refused)
def render(self):
params = {
"input_file": self.url,
"output_file": self.preview_file,
"dark_mode": self.dark_mode
}
url = 'http://localhost:{}?{}'.format(self.server_port, urlencode(params))
with urlopen(url) as f:
resp = f.read().decode("utf-8")
if resp == "ok":
self.buffer_widget.load(QUrl.fromLocalFile(self.preview_file))
else:
self.message_to_emacs.emit("preview failed: {}".format(resp))