mirror of
				https://github.com/KevinMidboe/transatlanticTorrentExpress.git
				synced 2025-10-29 18:00:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python3
 | |
| import os, sys
 | |
| from subprocess import check_output, Popen, PIPE
 | |
| 
 | |
| # Local files
 | |
| from logger import logger
 | |
| from utils import getConfig
 | |
| 
 | |
| def getFiles(path, host=None, user=None):
 | |
|   logger.info('Getting filenames from path: {}'.format(path))
 | |
|   if (host and user):
 | |
|     cmd = 'ssh {}@{} ls {}'.format(user, host, path)
 | |
|   else:
 | |
|     cmd = 'ls {}'.format(path)
 | |
| 
 | |
|   contents = check_output(cmd, shell=True)
 | |
| 
 | |
|   if (contents):
 | |
|     contents = contents.decode('utf-8').split('\n')
 | |
|     contents = list(filter(lambda x: len(x) > 0, contents))
 | |
| 
 | |
|   return contents
 | |
| 
 | |
| def filesNotShared(local, remote):
 | |
|   c = set(local) - set(remote)
 | |
|   if c == set():
 | |
|     return False
 | |
|   
 | |
|   return list(c)
 | |
| 
 | |
| def transferFiles(files, localPath, remotePath, host=None, user=None):
 | |
|   transferedFiles = []
 | |
| 
 | |
|   for file in files:
 | |
|     logger.info('Moving file: {}'.format(file))
 | |
|     file = os.path.join(localPath, file)
 | |
| 
 | |
|     if (host and user):
 | |
|       cmd = "rsync -rz '{}' {}@{}:{}".format(file, user, host, remotePath)
 | |
|     else:
 | |
|       cmd = "rsync -rz '{}' {}".format(file, remotePath)
 | |
| 
 | |
|     rsyncProcess = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
 | |
|     stdout, stderr = rsyncProcess.communicate()
 | |
| 
 | |
|     if stderr:
 | |
|       logger.error('Rsync error: {}'.format(stderr))
 | |
| 
 | |
|     logger.debug('Rsync output: {}'.format(stdout))
 | |
|     transferedFiles.append(file)
 | |
| 
 | |
|   return transferedFiles
 | |
| 
 | |
| def removeFromDeluge(execScript, files):
 | |
|   execPython = '/usr/bin/python2'
 | |
| 
 | |
|   for file in files:
 | |
|     file = file.split('/')[-1]
 | |
| 
 | |
|     logger.info('Removing {} from deluge'.format(file))
 | |
|     cmd = "{} {} rm '{}'".format(execPython, execScript, file)
 | |
| 
 | |
|     delugeProcess = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
 | |
|     stdout, stderr = delugeProcess.communicate()
 | |
| 
 | |
|     if stderr:
 | |
|       logger.error('Deluge error: {}'.format(stderr))
 | |
| 
 | |
|     logger.debug('Deluge output: {}'.format(stdout))
 | |
|     logger.info('Successfully removed: {}'.format(file))
 | |
| 
 | |
| def main():
 | |
|   config = getConfig()
 | |
|   host = config['SSH']['host']
 | |
|   user = config['SSH']['user']
 | |
|   remotePath = config['FILES']['remote']
 | |
|   localPath = config['FILES']['local']
 | |
|   delugeScript = config['DELUGE']['script']
 | |
| 
 | |
|   remoteFiles = getFiles(remotePath, host, user)
 | |
|   if len(remoteFiles) > 0:
 | |
|     logger.info('Remote files found: {}'.format(remoteFiles))
 | |
|   else:
 | |
|     logger.info('No remote files found')
 | |
|   # print('Remote found: {}'.format(remoteFiles))
 | |
|   
 | |
|   localFiles = getFiles(localPath)
 | |
|   # print('Local files: {}'.format(localFiles))
 | |
|   if len(localFiles > 0):
 | |
|     logger.info('Local files found: {}'.format(localFiles))
 | |
|   else:
 | |
|     logger.info('No local files found')
 | |
| 
 | |
|   newFiles = filesNotShared(localFiles, remoteFiles)
 | |
|   if (newFiles):
 | |
|     logger.info('New files: {}'.format(newFiles))
 | |
|     logger.info('Existing files: {}'.format(list(set(remoteFiles).intersection(localFiles))))
 | |
| 
 | |
|     transferedFiles = transferFiles(newFiles, localPath, remotePath, host, user)
 | |
|     removeFromDeluge(delugeScript, transferedFiles)
 | |
| 
 | |
| 
 | |
|   else:
 | |
|     # print('No new files found to travel on the great transatlantic express')
 | |
|     logger.info('No new files found to travel on the great transatlantic express')
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|   main()
 |