119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sublime
 | |
| import re
 | |
| import os
 | |
| 
 | |
| class SideBarProject:
 | |
| 
 | |
| 	def getDirectories(self):
 | |
| 		return sublime.active_window().folders()
 | |
| 
 | |
| 	def hasOpenedProject(self):
 | |
| 		return self.getProjectFile() != None
 | |
| 
 | |
| 	def getDirectoryFromPath(self, path):
 | |
| 		for directory in self.getDirectories():
 | |
| 			maybe_path = path.replace(directory, '', 1)
 | |
| 			if maybe_path != path:
 | |
| 				return directory
 | |
| 
 | |
| 	def getProjectFile(self):
 | |
| 		if not self.getDirectories():
 | |
| 			return None
 | |
| 		import json
 | |
| 		data = file(os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'Session.sublime_session')), 'r').read()
 | |
| 		data = data.replace('\t', ' ')
 | |
| 		data = json.loads(data, strict=False)
 | |
| 		projects = data['workspaces']['recent_workspaces']
 | |
| 
 | |
| 		if os.path.lexists(os.path.join(sublime.packages_path(), '..', 'Settings', 'Auto Save Session.sublime_session')):
 | |
| 			data = file(os.path.normpath(os.path.join(sublime.packages_path(), '..', 'Settings', 'Auto Save Session.sublime_session')), 'r').read()
 | |
| 			data = data.replace('\t', ' ')
 | |
| 			data = json.loads(data, strict=False)
 | |
| 			if 'workspaces' in data and 'recent_workspaces' in data['workspaces'] and data['workspaces']['recent_workspaces']:
 | |
| 				projects += data['workspaces']['recent_workspaces']
 | |
| 			projects = list(set(projects))
 | |
| 		for project_file in projects:
 | |
| 			project_file = re.sub(r'^/([^/])/', '\\1:/', project_file);
 | |
| 			project_json = json.loads(file(project_file, 'r').read(), strict=False)
 | |
| 			if 'folders' in project_json:
 | |
| 				folders = project_json['folders']
 | |
| 				found_all = True
 | |
| 				for directory in self.getDirectories():
 | |
| 					found = False
 | |
| 					for folder in folders:
 | |
| 						folder_path = re.sub(r'^/([^/])/', '\\1:/', folder['path']);
 | |
| 						if folder_path == directory.replace('\\', '/'):
 | |
| 							found = True
 | |
| 							break;
 | |
| 					if found == False:
 | |
| 						found_all = False
 | |
| 						break;
 | |
| 			if found_all:
 | |
| 				return project_file
 | |
| 		return None
 | |
| 
 | |
| 	def getProjectJson(self):
 | |
| 		if not self.hasOpenedProject():
 | |
| 			return None
 | |
| 		import json
 | |
| 		return json.loads(file(self.getProjectFile(), 'r').read(), strict=False)
 | |
| 
 | |
| 	def excludeDirectory(self, path):
 | |
| 		import json
 | |
| 		project_file = self.getProjectFile();
 | |
| 		project = self.getProjectJson()
 | |
| 
 | |
| 		path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
 | |
| 
 | |
| 		for folder in project['folders']:
 | |
| 			if path.find(folder['path']) == 0:
 | |
| 				try:
 | |
| 					folder['folder_exclude_patterns'].append(re.sub(r'/+$', '', path.replace(folder['path']+'/', '', 1)))
 | |
| 				except:
 | |
| 					folder['folder_exclude_patterns'] = [re.sub(r'/+$', '', path.replace(folder['path']+'/', '', 1))]
 | |
| 				file(project_file, 'w+').write(json.dumps(project, indent=1))
 | |
| 				return
 | |
| 
 | |
| 	def excludeFile(self, path):
 | |
| 		import json
 | |
| 		project_file = self.getProjectFile();
 | |
| 		project = self.getProjectJson()
 | |
| 
 | |
| 		path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
 | |
| 
 | |
| 		for folder in project['folders']:
 | |
| 			if path.find(folder['path']) == 0:
 | |
| 				try:
 | |
| 					folder['file_exclude_patterns'].append(path.replace(folder['path']+'/', '', 1))
 | |
| 				except:
 | |
| 					folder['file_exclude_patterns'] = [path.replace(folder['path']+'/', '', 1)]
 | |
| 				file(project_file, 'w+').write(json.dumps(project, indent=1))
 | |
| 				return
 | |
| 
 | |
| 	def rootAdd(self, path):
 | |
| 		import json
 | |
| 		project_file = self.getProjectFile();
 | |
| 		project = self.getProjectJson()
 | |
| 
 | |
| 		path = re.sub(r'^([^/])\:/', '/\\1/', path.replace('\\', '/'))
 | |
| 		project['folders'].append({'path':path});
 | |
| 
 | |
| 		file(project_file, 'w+').write(json.dumps(project, indent=1))
 | |
| 
 | |
| 	def refresh(self):
 | |
| 		try:
 | |
| 			sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 200);
 | |
| 			sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 600);
 | |
| 			sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 1300);
 | |
| 			sublime.set_timeout(lambda:sublime.active_window().run_command('refresh_folder_list'), 2300);
 | |
| 		except:
 | |
| 			pass
 | |
| 
 | |
| 	def getPreference(self, name):
 | |
| 		if not self.hasOpenedProject():
 | |
| 			return None
 | |
| 		project = self.getProjectJson()
 | |
| 		try:
 | |
| 			return project[name]
 | |
| 		except:
 | |
| 			return None |