-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSublimePlayer.py
More file actions
95 lines (72 loc) · 2.19 KB
/
SublimePlayer.py
File metadata and controls
95 lines (72 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
import subprocess
import threading
class RunAsync(threading.Thread):
def __init__(self, cb):
self.cb = cb
threading.Thread.__init__(self)
def run(self):
self.cb()
def run_async(cb):
res = RunAsync(cb)
res.start()
return res
class Player():
url = None
popen = None
_enabled = False
last_view = None
def __init__(self, url=None):
self.url = url
def _play(self):
self.popen = subprocess.Popen(["ffplay", "-nodisp", "-autoexit", self.url], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
out, err = self.popen.communicate()
def play(self):
if self.url is None:
return
self._enabled = True
self.load_to_view(sublime.active_window().active_view())
run_async(self._play)
def stop(self):
if self._enabled:
self._enabled = False
self.unload_view()
self.popen.kill()
self.popen = None
def set_url(self, url):
was_enabled = self._enabled
self.stop()
self.url = url
if was_enabled:
self.play()
def enabled(self):
return self._enabled
def unload_view(self):
if self.last_view is not None:
self.last_view.erase_status("SublimePlayer")
self.last_view = None
def load_to_view(self, view):
self.unload_view()
if not self._enabled:
return
view.set_status("SublimePlayer", "Playing: %s" % (self.url))
self.last_view = view
player = Player()
class SublimePlayerPlay(sublime_plugin.ApplicationCommand):
def run(self):
player.play()
def is_enabled(self):
return not player.enabled()
class SublimePlayerStop(sublime_plugin.ApplicationCommand):
def run(self):
player.stop()
def is_enabled(self):
return player.enabled()
class SublimePlayerSetUrl(sublime_plugin.WindowCommand):
def run(self):
self.window.show_input_panel("Select file:", "", self.set_url, None, None)
def set_url(self, url):
player.set_url(url)
def plugin_unloaded():
player.stop()