forked from yauhen-l/remember-last-position-totem-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathremember-last-position.py
86 lines (69 loc) · 3.08 KB
/
remember-last-position.py
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
# -*- coding: utf-8 -*-
from gi.repository import GObject, Peas, Totem # pylint: disable-msg=E0611
from threading import Timer
from os.path import expanduser, exists
class StarterPlugin (GObject.Object, Peas.Activatable):
__gtype_name__ = 'StarterPlugin'
object = GObject.property (type = GObject.Object)
def __init__ (self):
GObject.Object.__init__ (self)
self.data_path = "%s/.local/share/totem/plugins/remember-last-position/data" % expanduser("~")
self._totem = None
self.last_file = ""
self.last_time = 0
# totem.Plugin methods
def do_activate (self):
self._totem = self.object
self._totem.connect('file-closed', self.file_closed)
self._totem.get_main_window().connect('destroy', self.file_closed)
self._totem.connect('file-has-played', self.file_played)
self._totem.connect('file-opened', self.file_opened)
if exists(self.data_path):
data_file = open(self.data_path, 'r')
last = data_file.read().split('\n')
print("Last played is: %s" % last)
self.last_file = last[0]
self.last_time = int(last[1])
data_file.close()
self.restore_last_file_timer = Timer(3.0, self.restore_last_file)
self.restore_last_file_timer.start()
print("Remember position plugin activated")
def do_deactivate (self):
self._totem = None
def get_current_time(self):
self.update_time_timer = Timer(3.0, self.get_current_time)
self.update_time_timer.start()
self.time = self._totem.get_property('current_time')
print("Time updated: %d, seekable: %s" % (self.time, self.object.is_seekable()))
def file_opened(self, to, f):
if hasattr(self, 'restore_last_file_timer'):
self.restore_last_file_timer.cancel()
print("Opened file: %s" % f)
if f == self.last_file:
print("Restoring position in file to %d" % self.last_time)
print(to.get_current_mrl())
self.go_to_last_position()
def go_to_last_position(self):
if self.object.is_seekable():
print("Finally go to %d" % self.last_time)
self._totem.seek_time(self.last_time, False)
else:
print("Stream is still not seekable...")
Timer(0.5, self.go_to_last_position).start()
def file_closed(self, to):
if hasattr(self, 'update_time_timer'):
self.update_time_timer.cancel()
self.last_file = self.file
self.last_time = self.time
self._write_last_time()
def file_played(self, to, path):
self.get_current_time()
print("Playng file: %s" % path)
self.file = path
def restore_last_file(self):
self._totem.remote_command(Totem.RemoteCommand.REPLACE, self.last_file)
def _write_last_time(self):
print("Saving file position: %s - %d" % (self.last_file, self.last_time))
data_file = open(self.data_path, 'w')
data_file.write("%s\n%d" % (self.last_file, self.last_time))
data_file.close()