WINAPI: Gajim now can detects file lock and does not allow sending the file.
This commit is contained in:
parent
48dd04a228
commit
36cc5bfa5d
|
@ -273,10 +273,16 @@ _('Connection with peer cannot be established.'))
|
||||||
|
|
||||||
def send_file(self, account, contact, file_path):
|
def send_file(self, account, contact, file_path):
|
||||||
''' start the real transfer(upload) of the file '''
|
''' start the real transfer(upload) of the file '''
|
||||||
if type(contact) == str:
|
if gtkgui_helpers.file_is_locked(file_path):
|
||||||
|
pritext = _('Gajim cannot access this file')
|
||||||
|
sextext = _('This file is being used by another process.')
|
||||||
|
dialogs.ErrorDialog(pritext, sextext).get_response()
|
||||||
|
return
|
||||||
|
|
||||||
|
if isinstance(contact, str):
|
||||||
if contact.find('/') == -1:
|
if contact.find('/') == -1:
|
||||||
return
|
return
|
||||||
(jid, resource) = contact.split("/", 1)
|
(jid, resource) = contact.split('/', 1)
|
||||||
contact = gajim.Contact(jid = jid, resource = resource)
|
contact = gajim.Contact(jid = jid, resource = resource)
|
||||||
(file_dir, file_name) = os.path.split(file_path)
|
(file_dir, file_name) = os.path.split(file_path)
|
||||||
file_props = self.get_send_file_props(account, contact,
|
file_props = self.get_send_file_props(account, contact,
|
||||||
|
@ -785,7 +791,7 @@ _('Connection with peer cannot be established.'))
|
||||||
rect = self.tree.get_cell_area(props[0],props[1])
|
rect = self.tree.get_cell_area(props[0],props[1])
|
||||||
position = widget.window.get_origin()
|
position = widget.window.get_origin()
|
||||||
self.tooltip.show_tooltip(file_props , (pointer[0], rect.height ),
|
self.tooltip.show_tooltip(file_props , (pointer[0], rect.height ),
|
||||||
(position[0], position[1] + rect.y + self.height_diff))
|
(position[0], position[1] + rect.y + self.height_diff))
|
||||||
else:
|
else:
|
||||||
self.tooltip.hide_tooltip()
|
self.tooltip.hide_tooltip()
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,12 @@ import gobject
|
||||||
import pango
|
import pango
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
if os.name == 'nt':
|
||||||
|
import win32file
|
||||||
|
import win32con
|
||||||
|
import pywintypes
|
||||||
|
|
||||||
from common import i18n
|
from common import i18n
|
||||||
i18n.init()
|
i18n.init()
|
||||||
_ = i18n._
|
_ = i18n._
|
||||||
|
@ -83,7 +89,7 @@ def get_default_font():
|
||||||
line[start:line.find('"', start)])
|
line[start:line.find('"', start)])
|
||||||
except:
|
except:
|
||||||
#we talk about file
|
#we talk about file
|
||||||
print _('error: cannot open %s for reading') % xfce_config_file
|
print >> sys.stderr, _('Error: cannot open %s for reading') % xfce_config_file
|
||||||
|
|
||||||
elif os.path.exists(kde_config_file):
|
elif os.path.exists(kde_config_file):
|
||||||
try:
|
try:
|
||||||
|
@ -98,7 +104,7 @@ def get_default_font():
|
||||||
return helpers.ensure_unicode_string(font_string)
|
return helpers.ensure_unicode_string(font_string)
|
||||||
except:
|
except:
|
||||||
#we talk about file
|
#we talk about file
|
||||||
print _('error: cannot open %s for reading') % kde_config_file
|
print >> sys.stderr, _('Error: cannot open %s for reading') % kde_config_file
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -344,4 +350,28 @@ def possibly_move_window_in_current_desktop(window):
|
||||||
# we are in another VD that the window was
|
# we are in another VD that the window was
|
||||||
# so show it in current VD
|
# so show it in current VD
|
||||||
window.show()
|
window.show()
|
||||||
|
|
||||||
|
def file_is_locked(path_to_file):
|
||||||
|
'''returns True if file is locked (WINDOWS ONLY)'''
|
||||||
|
if os.name != 'nt': # just in case
|
||||||
|
return
|
||||||
|
|
||||||
|
secur_att = pywintypes.SECURITY_ATTRIBUTES()
|
||||||
|
secur_att.Initialize()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# try make a handle for READING the file
|
||||||
|
hfile = win32file.CreateFile(
|
||||||
|
path_to_file, # path to file
|
||||||
|
win32con.GENERIC_READ, # open for reading
|
||||||
|
0, # do not share with other proc
|
||||||
|
secur_att,
|
||||||
|
win32con.OPEN_EXISTING, # existing file only
|
||||||
|
win32con.FILE_ATTRIBUTE_NORMAL, # normal file
|
||||||
|
0 # no attr. template
|
||||||
|
)
|
||||||
|
except pywintypes.error, e:
|
||||||
|
return True
|
||||||
|
else: # in case all went ok, close file handle (go to hell WinAPI)
|
||||||
|
hfile.Close()
|
||||||
|
return False
|
||||||
|
|
Loading…
Reference in New Issue