132 lines
2.9 KiB
Python
132 lines
2.9 KiB
Python
|
import gc
|
||
|
import HydrusConstants as HC
|
||
|
import HydrusData
|
||
|
import os
|
||
|
import subprocess
|
||
|
import tempfile
|
||
|
import threading
|
||
|
|
||
|
def CleanUpTempPath( os_file_handle, temp_path ):
|
||
|
|
||
|
try:
|
||
|
|
||
|
os.close( os_file_handle )
|
||
|
|
||
|
except OSError:
|
||
|
|
||
|
gc.collect()
|
||
|
|
||
|
try:
|
||
|
|
||
|
os.close( os_file_handle )
|
||
|
|
||
|
except OSError:
|
||
|
|
||
|
print( 'Could not close the temporary file ' + temp_path )
|
||
|
|
||
|
return
|
||
|
|
||
|
|
||
|
|
||
|
try:
|
||
|
|
||
|
os.remove( temp_path )
|
||
|
|
||
|
except OSError:
|
||
|
|
||
|
gc.collect()
|
||
|
|
||
|
try:
|
||
|
|
||
|
os.remove( temp_path )
|
||
|
|
||
|
except OSError:
|
||
|
|
||
|
print( 'Could not delete the temporary file ' + temp_path )
|
||
|
|
||
|
|
||
|
|
||
|
def ConvertAbsPathToPortablePath( abs_path ):
|
||
|
|
||
|
if abs_path == '': return None
|
||
|
|
||
|
try: return os.path.relpath( abs_path, HC.BASE_DIR )
|
||
|
except: return abs_path
|
||
|
|
||
|
def CopyFileLikeToFileLike( f_source, f_dest ):
|
||
|
|
||
|
for block in ReadFileLikeAsBlocks( f_source ): f_dest.write( block )
|
||
|
|
||
|
def GetTempFile(): return tempfile.TemporaryFile()
|
||
|
def GetTempFileQuick(): return tempfile.SpooledTemporaryFile( max_size = 1024 * 1024 * 4 )
|
||
|
def GetTempPath(): return tempfile.mkstemp( prefix = 'hydrus' )
|
||
|
|
||
|
def LaunchDirectory( path ):
|
||
|
|
||
|
def do_it():
|
||
|
|
||
|
if HC.PLATFORM_WINDOWS:
|
||
|
|
||
|
os.startfile( path )
|
||
|
|
||
|
else:
|
||
|
|
||
|
if HC.PLATFORM_OSX: cmd = [ 'open' ]
|
||
|
elif HC.PLATFORM_LINUX: cmd = [ 'xdg-open' ]
|
||
|
|
||
|
cmd.append( path )
|
||
|
|
||
|
process = subprocess.Popen( cmd, startupinfo = HydrusData.GetSubprocessStartupInfo() )
|
||
|
|
||
|
process.wait()
|
||
|
|
||
|
process.communicate()
|
||
|
|
||
|
|
||
|
|
||
|
thread = threading.Thread( target = do_it )
|
||
|
|
||
|
thread.daemon = True
|
||
|
|
||
|
thread.start()
|
||
|
|
||
|
def LaunchFile( path ):
|
||
|
|
||
|
def do_it():
|
||
|
|
||
|
if HC.PLATFORM_WINDOWS:
|
||
|
|
||
|
os.startfile( path )
|
||
|
|
||
|
else:
|
||
|
|
||
|
if HC.PLATFORM_OSX: cmd = [ 'open' ]
|
||
|
elif HC.PLATFORM_LINUX: cmd = [ 'xdg-open' ]
|
||
|
|
||
|
cmd.append( path )
|
||
|
|
||
|
process = subprocess.Popen( cmd, startupinfo = HydrusData.GetSubprocessStartupInfo() )
|
||
|
|
||
|
process.wait()
|
||
|
|
||
|
process.communicate()
|
||
|
|
||
|
|
||
|
|
||
|
thread = threading.Thread( target = do_it )
|
||
|
|
||
|
thread.daemon = True
|
||
|
|
||
|
thread.start()
|
||
|
|
||
|
def ReadFileLikeAsBlocks( f ):
|
||
|
|
||
|
next_block = f.read( HC.READ_BLOCK_SIZE )
|
||
|
|
||
|
while next_block != '':
|
||
|
|
||
|
yield next_block
|
||
|
|
||
|
next_block = f.read( HC.READ_BLOCK_SIZE )
|
||
|
|
||
|
|