feat(SublimeText2.GitPackages): cache packages
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
# coding=utf8
|
||||
import sublime
|
||||
import os
|
||||
import re
|
||||
|
||||
from SideBarProject import SideBarProject
|
||||
from SideBarItem import SideBarItem
|
||||
|
||||
class SideBarSelection:
|
||||
|
||||
def __init__(self, paths = []):
|
||||
|
||||
if len(paths) < 1:
|
||||
try:
|
||||
path = sublime.active_window().active_view().file_name()
|
||||
if self.isNone(path):
|
||||
paths = []
|
||||
else:
|
||||
paths = [path]
|
||||
except:
|
||||
paths = []
|
||||
self._paths = paths
|
||||
self._paths.sort()
|
||||
self._obtained_selection_information_basic = False
|
||||
self._obtained_selection_information_extended = False
|
||||
|
||||
def len(self):
|
||||
return len(self._paths)
|
||||
|
||||
def hasDirectories(self):
|
||||
self._obtainSelectionInformationBasic()
|
||||
return self._has_directories
|
||||
|
||||
def hasFiles(self):
|
||||
self._obtainSelectionInformationBasic()
|
||||
return self._has_files
|
||||
|
||||
def hasOnlyDirectories(self):
|
||||
self._obtainSelectionInformationBasic()
|
||||
return self._only_directories
|
||||
|
||||
def hasOnlyFiles(self):
|
||||
self._obtainSelectionInformationBasic()
|
||||
return self._only_files
|
||||
|
||||
def hasProjectDirectories(self):
|
||||
if self.hasDirectories():
|
||||
project_directories = SideBarProject().getDirectories()
|
||||
for item in self.getSelectedDirectories():
|
||||
if item.path() in project_directories:
|
||||
return True
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def hasItemsUnderProject(self):
|
||||
for item in self.getSelectedItems():
|
||||
if item.isUnderCurrentProject():
|
||||
return True
|
||||
return False
|
||||
|
||||
def hasImages(self):
|
||||
return self.hasFilesWithExtension('gif|jpg|jpeg|png')
|
||||
|
||||
def hasFilesWithExtension(self, extensions):
|
||||
extensions = re.compile('('+extensions+')$', re.I);
|
||||
for item in self.getSelectedFiles():
|
||||
if extensions.search(item.path()):
|
||||
return True;
|
||||
return False
|
||||
|
||||
def getSelectedItems(self):
|
||||
self._obtainSelectionInformationExtended()
|
||||
return self._files + self._directories;
|
||||
|
||||
def getSelectedItemsWithoutChildItems(self):
|
||||
self._obtainSelectionInformationExtended()
|
||||
items = []
|
||||
for item in self._items_without_containing_child_items:
|
||||
items.append(SideBarItem(item, os.path.isdir(item)))
|
||||
return items
|
||||
|
||||
def getSelectedDirectories(self):
|
||||
self._obtainSelectionInformationExtended()
|
||||
return self._directories;
|
||||
|
||||
def getSelectedFiles(self):
|
||||
self._obtainSelectionInformationExtended()
|
||||
return self._files;
|
||||
|
||||
def getSelectedDirectoriesOrDirnames(self):
|
||||
self._obtainSelectionInformationExtended()
|
||||
return self._directories_or_dirnames;
|
||||
|
||||
def getSelectedImages(self):
|
||||
return self.getSelectedFilesWithExtension('gif|jpg|jpeg|png')
|
||||
|
||||
def getSelectedFilesWithExtension(self, extensions):
|
||||
items = []
|
||||
extensions = re.compile('('+extensions+')$', re.I);
|
||||
for item in self.getSelectedFiles():
|
||||
if extensions.search(item.path()):
|
||||
items.append(item)
|
||||
return items
|
||||
|
||||
def _obtainSelectionInformationBasic(self):
|
||||
if not self._obtained_selection_information_basic:
|
||||
self._obtained_selection_information_basic = True
|
||||
|
||||
self._has_directories = False
|
||||
self._has_files = False
|
||||
self._only_directories = False
|
||||
self._only_files = False
|
||||
|
||||
for path in self._paths:
|
||||
if self._has_directories == False and os.path.isdir(path):
|
||||
self._has_directories = True
|
||||
if self._has_files == False and os.path.isdir(path) == False:
|
||||
self._has_files = True
|
||||
if self._has_files and self._has_directories:
|
||||
break
|
||||
|
||||
if self._has_files and self._has_directories:
|
||||
self._only_directories = False
|
||||
self._only_files = False
|
||||
elif self._has_files:
|
||||
self._only_files = True
|
||||
elif self._has_directories:
|
||||
self._only_directories = True
|
||||
|
||||
def _obtainSelectionInformationExtended(self):
|
||||
if not self._obtained_selection_information_extended:
|
||||
self._obtained_selection_information_extended = True
|
||||
|
||||
self._directories = []
|
||||
self._files = []
|
||||
self._directories_or_dirnames = []
|
||||
self._items_without_containing_child_items = []
|
||||
|
||||
_directories = []
|
||||
_files = []
|
||||
_directories_or_dirnames = []
|
||||
_items_without_containing_child_items = []
|
||||
|
||||
for path in self._paths:
|
||||
if os.path.isdir(path):
|
||||
item = SideBarItem(path, True)
|
||||
if item.path() not in _directories:
|
||||
_directories.append(item.path())
|
||||
self._directories.append(item)
|
||||
if item.path() not in _directories_or_dirnames:
|
||||
_directories_or_dirnames.append(item.path())
|
||||
self._directories_or_dirnames.append(item)
|
||||
_items_without_containing_child_items = self._itemsWithoutContainingChildItems(_items_without_containing_child_items, item.path())
|
||||
else:
|
||||
item = SideBarItem(path, False)
|
||||
if item.path() not in _files:
|
||||
_files.append(item.path())
|
||||
self._files.append(item)
|
||||
_items_without_containing_child_items = self._itemsWithoutContainingChildItems(_items_without_containing_child_items, item.path())
|
||||
item = SideBarItem(os.path.dirname(path), True)
|
||||
if item.path() not in _directories_or_dirnames:
|
||||
_directories_or_dirnames.append(item.path())
|
||||
self._directories_or_dirnames.append(item)
|
||||
|
||||
self._items_without_containing_child_items = _items_without_containing_child_items
|
||||
|
||||
def _itemsWithoutContainingChildItems(self, items, item):
|
||||
new_list = []
|
||||
add = True
|
||||
for i in items:
|
||||
if i.find(item+'\\') == 0 or i.find(item+'/') == 0:
|
||||
continue
|
||||
else:
|
||||
new_list.append(i)
|
||||
if (item+'\\').find(i+'\\') == 0 or (item+'/').find(i+'/') == 0:
|
||||
add = False
|
||||
if add:
|
||||
new_list.append(item)
|
||||
return new_list
|
||||
|
||||
def isNone(self, path):
|
||||
if path == None or path == '' or path == '.' or path == '..' or path == './' or path == '/' or path == '//' or path == '\\' or path == '\\\\' or path == '\\\\\\\\':
|
||||
return True
|
||||
else:
|
||||
return False
|
Reference in New Issue
Block a user