Skip to content

Commit

Permalink
#346 #143 ネットワークリソース対象のハードリンク作成をブロック
Browse files Browse the repository at this point in the history
  • Loading branch information
yamahubuki committed Jul 19, 2020
1 parent b314f6a commit 72015a9
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 5 deletions.
17 changes: 15 additions & 2 deletions browsableObjects.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,13 @@ class FalconBrowsableBase():
"""全ての閲覧可能オブジェクトに共通する基本クラス。"""
__slots__=["attributes","attributesString","log","longAttributesString"]

canLnkTarget=True
canHardLinkTarget=True
canSynLinkTarget=True

def __init__(self):
self.log=logging.getLogger("falcon.browsableObjects")

def GetAttributesString(self):
"""属性の文字列を設定する。"""
attrib=self.attributes
Expand Down Expand Up @@ -57,10 +62,10 @@ def __repr__(self):

class File(FalconBrowsableBase):
"""ファイルを表す。このオブジェクトは情報を保持するだけで、指し示すファイルにアクセスすることはない。フルパスは計算可能なのだが、二重に値を生成したくはないので、あえて値を渡すようにしている。"""
__slots__=["basename","creationDate","directory","fullpath","modDate","shortName","size","typeString","hIcon"]
__slots__=["basename","creationDate","directory","fullpath","modDate","shortName","size","typeString","hIcon","canHardLinkTarget"]

def Initialize(self,directory="", basename="", fullpath="", size=-1, modDate=None, attributes=-1, typeString="",creationDate=None,shortName="",hIcon=-1):
"""必要な情報をセットする"""
"""必要な情報をセットする。継承しているクラスのうち、grepItemだけはここを通らないので注意。"""
self.directory=directory
self.basename=basename
self.fullpath=directory+"\\"+basename
Expand All @@ -73,6 +78,9 @@ def Initialize(self,directory="", basename="", fullpath="", size=-1, modDate=Non
self.shortName=shortName
self.hIcon=hIcon

if self.fullpath[0:2]=="\\\\":
self.canHardLinkTarget=False

def GetListTuple(self):
"""表示に必要なタプルを返す。"""
return (self.basename, misc.ConvertBytesTo(self.size,misc.UNIT_AUTO,True), misc.PTime2string(self.modDate), self.attributesString, self.typeString)
Expand Down Expand Up @@ -139,6 +147,9 @@ def Initialize(self,ln,preview,fileobject):
self.hits=0#とりあえず入れておく
self.hIcon=fileobject.hIcon

if fullpath[0:2]=="\\\\":
self.canHardLinkTarget=False

def SetHitCount(self,h):
"""ヒット数を設定する。"""
self.hits=h
Expand Down Expand Up @@ -215,6 +226,8 @@ def GetRootDrivePath(self):

class NetworkResource(FalconBrowsableBase):
"""ネットワーク上のディスクリソースを表す。このオブジェクトは情報を保持するだけで、指し示すリソースにアクセスすることはない。フルパスは計算可能なのだが、二重に値を生成したくはないので、あえて値を渡すようにしている。"""
canHardLinkTarget=False

def Initialize(self,basename="", fullpath="", address="",hIcon=-1):
"""
必要な情報をセットする
Expand Down
2 changes: 1 addition & 1 deletion views/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ def OnMenuSelect(self,event):
return
if selected==menuItemsStore.getRef("FILE_MAKESHORTCUT"):
target=self.parent.activeTab.GetSelectedItems().GetElement(0) #browsableObjects
d=views.makeShortcut.Dialog(target.basename)
d=views.makeShortcut.Dialog(target.basename,target.canLnkTarget,target.canHardLinkTarget,target.canSynLinkTarget)
d.Initialize()
ret=d.Show()
if ret==wx.ID_CANCEL: return
Expand Down
15 changes: 13 additions & 2 deletions views/makeShortcut.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,18 @@ class Dialog(BaseDialog):
LINK_ABSOLUTE=0
LINK_RELATIVE=1

#作成先初期値を決めるためのターゲットの名前とタイプ
def __init__(self,targetName):
#作成先初期値を決めるためのターゲットの名前、作成できないタイプがあれば指定
def __init__(self,targetName,canMakeLnk=True,canMakeHardLink=True,canMakeSynLink=True):
if not canMakeLnk and not canMakeSynLink and not canMakeHardLink:
raise ValueError(_("makeShortcutDialogを表示するには、少なくとも1種類のショートカットの作成が有効化されている必要があります。"))

super().__init__()
#対象オブジェクトの拡張子を除く名前
self.targetName=targetName
self.canMakeLnk=canMakeLnk
self.canMakeSynLink=canMakeSynLink
self.canMakeHardLink=canMakeHardLink
print(self.canMakeHardLink)

def Initialize(self):
t=misc.Timer()
Expand All @@ -51,6 +58,10 @@ def InstallControls(self):
self.creator=views.ViewCreator.ViewCreator(1,self.panel,self.mainArea,wx.VERTICAL,20)
self.type=self.creator.radiobox(_("作成方式"),_typeChoices,self.typeChangeEvent,1,wx.VERTICAL)

self.type.EnableItem(self.TYPE_LNK,self.canMakeLnk)
self.type.EnableItem(self.TYPE_HARDLINK,self.canMakeHardLink)
self.type.EnableItem(self.TYPE_SYNLINK,self.canMakeSynLink)

self.creator=views.ViewCreator.ViewCreator(1,self.panel,self.sizer,wx.HORIZONTAL,0,"",wx.EXPAND)
self.destination,tmp=self.creator.inputbox(_("作成先")+":",-1,self.targetName+".lnk")

Expand Down

0 comments on commit 72015a9

Please sign in to comment.