feat(SublimeText2.GitPackages): cache packages
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
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
|
||||
Reference in New Issue
Block a user