⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcrindex.py

📁 Python语言编译器
💻 PY
字号:
## A VCR index.#import osimport stringerror='VcrIndex.error'VERSION_STRING='#!VcrIndex 1.1\n'PREV_VERSION_STRING='#!VcrIndex 1.0\n'class VcrIndex:	def __init__(self, name):		self.curmovie = None		self.curscene = None		self.modified = 0		self.filename = name		self.basename = os.path.basename(name)		self.editable = []		if not name:			self.movies = {}			return		try:			fp = open(name, 'r')		except IOError:			self.movies = {}			return		header = fp.readline()		if header == PREV_VERSION_STRING:			print 'Converting old-format database...'			data = fp.read(100000)			self.movies = eval(data)			for m in self.movies.keys():				d = self.movies[m]				newd = {}				for s in d.keys():					newsd = {}					newsd['START'] = d[s]					if s == 'START':						s = '-ALL-'					newd[s] = newsd								self.movies[m] = newd			print 'Done.'			return		if header <> VERSION_STRING:			print 'VcrIndex: incorrect version string:', header			self.movies = {}			return		data = fp.read(100000)		self.movies = eval(data)	#	# Save database to given file (or same file as read from if no	# filename given).	# 	def save(self, name):		if not name:			name = self.filename		if not name:			raise error, 'No filename given'		self.filename = name		bupname = name + '~'		try:			os.unlink(bupname)		except os.error:			pass		try:			os.rename(name, bupname)		except os.error:			pass		fp = open(name, 'w')		data = str(self.movies)		fp.write(VERSION_STRING)		fp.write(data)		fp.write('\n')		fp.close()		self.modified = 0	#	# Get a list of movie names in tape order	#	def get_movienames(self):		names = self.movies.keys()		sorted = []		for name in names:			sorted.append(self.movies[name]['-ALL-']['START'], name)		sorted.sort()		rv = []		for pos, name in sorted:			rv.append(name)		return rv	#	# Get a list of scene names in tape order	#	def get_scenenames(self):		if not self.curmovie:			return []		scenedict = self.movies[self.curmovie]		names = scenedict.keys()		sorted = []		for name in names:			sorted.append(scenedict[name], name)		sorted.sort()		rv = []		for pos, name in sorted:			rv.append(name)		return rv	#	# Get a list of scene ids (format '00:02:32:12 name') in tape order	#	def get_sceneids(self):		if not self.curmovie:			return []		scenedict = self.movies[self.curmovie]		names = scenedict.keys()		sorted = []		for name in names:			sorted.append(scenedict[name]['START'], name)		sorted.sort()		rv = []		for pos, name in sorted:			str = '%02d:%02d:%02d:%02d ' % pos			rv.append(str + name)		return rv	#	# Does a movie exist?	#	def movie_exists(self, name):		return self.movies.has_key(name)	#	# Select a movie.	#	def movie_select(self, name):		if not self.movies.has_key(name):			raise error, 'No such movie: '+name		self.curmovie = name		self.curscene = None	#	# Get movie dictionary, or raise an error if no current movie.	#	def _getmoviedict(self):		if not self.curmovie:			raise error, 'No current movie'		return self.movies[self.curmovie]	#	# Rename a movie.	#	def movie_rename(self, newname):		scenedict = self._getmoviedict()		if self.movie_exists(newname):			raise error, 'Movie already exists: '+newname		del self.movies[self.curmovie]		self.movies[newname] = scenedict		self.curmovie = newname		self.modified = 1	#	# Copy a movie.	#	def movie_copy(self, newname):		scenedict = self._getmoviedict()		if self.movie_exists(newname):			raise error, 'Movie already exists: '+newname		newdict = {}		for k in scenedict.keys():			olddata = scenedict[k]			newdata = {}			for i in olddata.keys():				newdata[i] = olddata[i]			newdict[k] = newdata		self.movies[newname] = newdict		self.curmovie = newname		self.modified = 1	#	# Delete a movie.	#	def movie_delete(self):		if not self.curmovie:			raise error, 'No current movie'		del self.movies[self.curmovie]		self.curmovie = None		self.curscene = None		self.modified = 1	#	# Create a new movie.	#	def movie_new(self, name, pos):		if self.movie_exists(name):			raise error, 'Movie already exists: '+name		newdict = {}		newsdict = {}		newsdict['START'] = pos		newdict['-ALL-'] = newsdict		self.movies[name] = newdict		self.curmovie = name		self.curscene = None		self.modified = 1	#	# Does a scene exist?	#	def scene_exists(self, name):		scenedict = self._getmoviedict()		return scenedict.has_key(name)	#	# Select a current scene.	#	def scene_select(self, name):		scenedict = self._getmoviedict()		if not scenedict.has_key(name):			raise error, 'No such scene: '+name		self.curscene = name	#	# Rename a scene.	#	def scene_rename(self, newname):		scenedict = self._getmoviedict()		if not self.curscene:			raise error, 'No current scene'		if scenedict.has_key(newname):			raise error, 'Scene already exists: '+newname		if self.curscene == '-ALL-':			raise error, 'Cannot rename -ALL-'		scenedict[newname] = scenedict[self.curscene]		del scenedict[self.curscene]		self.curscene = newname		self.modified = 1	#	# Copy a scene.	#	def scene_copy(self, newname):		scenedict = self._getmoviedict()		if not self.curscene:			raise error, 'No current scene'		if scenedict.has_key(newname):			raise error, 'Scene already exists: '+newname		scenedict[newname] = scenedict[self.curscene]		self.curscene = newname		self.modified = 1	#	# Delete a scene.	#	def scene_delete(self):		scenedict = self._getmoviedict()		if not self.curscene:			raise error, 'No current scene'		if self.curscene == '-ALL-':			raise error, 'Cannot delete -ALL-'		del scenedict[self.curscene]		self.curscene = None		self.modified = 1	#	# Add a new scene.	#	def scene_new(self, newname, pos):		scenedict = self._getmoviedict()		if scenedict.has_key(newname):			raise error, 'Scene already exists: '+newname		newdict = {}		newdict['START'] = pos		scenedict[newname] = newdict		self.curscene = newname		self.modified = 1	#	# Get scene data.	#	def _getscenedata(self):		scenedict = self._getmoviedict()		if not self.curscene:			raise error, 'No current scene'		return scenedict[self.curscene]	#	# Data manipulation routines.	#	def pos_get(self):		return self._getscenedata()['START']	#	def pos_set(self, pos):		data = self._getscenedata()		data['START'] = pos		self.modified = 1	#	def comment_get(self):		data = self._getscenedata()		if data.has_key('COMMENT'):			return data['COMMENT']		else:			return ''	#	def comment_set(self, comment):		data = self._getscenedata()		data['COMMENT'] = comment		self.modified = 1	#	# Get the scene id of the current scene.	#	def get_cursceneid(self):		pos = self._getscenedata()['START']		str = '%02d:%02d:%02d:%02d ' % pos		return str + self.curscene	#	# Convert a scene id to a scene name.	#	def scene_id2name(self, id):		pos = string.find(id, ' ')		if pos <= 0:			raise error, 'Not a scene id: '+id		return id[pos+1:]	#	# Select a scene given a position.	#	def pos_select(self, pos):		prevmovie = None		movies = self.get_movienames()		for movie in movies:			mpos = self.movies[movie]['-ALL-']['START']			if mpos > pos:				break			prevmovie = movie		if not prevmovie:			raise error, 'Scene before BOT'					self.movie_select(prevmovie)		scenes = self.get_scenenames()		scenedict = self._getmoviedict()		prevscene = 'START'		for scene in scenes:			if scenedict[scene]['START'] > pos:				break			prevscene = scene		self.scene_select(prevscene)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -