同步功能做好,还没测试!
This commit is contained in:
parent
14b7c03a7c
commit
1a34e470fd
7 changed files with 247 additions and 28 deletions
12
test/SyncTest.py
Normal file
12
test/SyncTest.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
import os
|
||||
|
||||
work_path = os.path.expandvars('$HOME') + '/.config/PyQtToDoList'
|
||||
# sync_path = os.walk(work_path)
|
||||
# print(sync_path)
|
||||
|
||||
for root, dirs, files in os.walk(work_path, topdown=False):
|
||||
for name in files:
|
||||
print(os.path.join(root, name).split('/')[-1])
|
||||
for name in dirs:
|
||||
# print(os.path.join(root, name))
|
||||
print(os.path.join(root, name).split('/')[-1])
|
46
test/WatchDog.py
Normal file
46
test/WatchDog.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
from watchdog.observers import Observer
|
||||
from watchdog.events import *
|
||||
import time
|
||||
|
||||
|
||||
# todo : 实时检测文件变化,来同步文件
|
||||
class FileEventHandler(FileSystemEventHandler):
|
||||
def __init__(self):
|
||||
FileSystemEventHandler.__init__(self)
|
||||
|
||||
def on_moved(self, event):
|
||||
if event.is_directory:
|
||||
print("directory moved from {0} to {1}".format(event.src_path, event.dest_path))
|
||||
else:
|
||||
print("file moved from {0} to {1}".format(event.src_path, event.dest_path))
|
||||
|
||||
def on_created(self, event):
|
||||
if event.is_directory:
|
||||
print("directory created:{0}".format(event.src_path))
|
||||
else:
|
||||
print("file created:{0}".format(event.src_path))
|
||||
|
||||
def on_deleted(self, event):
|
||||
if event.is_directory:
|
||||
print("directory deleted:{0}".format(event.src_path))
|
||||
else:
|
||||
print("file deleted:{0}".format(event.src_path))
|
||||
|
||||
def on_modified(self, event):
|
||||
if event.is_directory:
|
||||
print("directory modified:{0}".format(event.src_path))
|
||||
else:
|
||||
print("file modified:{0}".format(event.src_path))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
observer = Observer()
|
||||
event_handler = FileEventHandler()
|
||||
observer.schedule(event_handler, os.path.expandvars('$HOME') + '/.config/PyQtToDoList/', True)
|
||||
observer.start()
|
||||
try:
|
||||
while True:
|
||||
time.sleep(1)
|
||||
except KeyboardInterrupt:
|
||||
observer.stop()
|
||||
observer.join()
|
41
test/threadTest.py
Normal file
41
test/threadTest.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
# import os
|
||||
#
|
||||
# for root, dir, files in os.walk(os.path.expandvars('$HOME') + '/.config/PyQtToDoList/'):
|
||||
# for i in files:
|
||||
# print(root, dir, files)
|
||||
# # print(root)
|
||||
# # print(dir)
|
||||
import os
|
||||
|
||||
|
||||
# 直接读取配置文件获取ToDo列表来选择备份文件,不再选择同时获取文件和文件夹了
|
||||
|
||||
def file_name_walk(file_dir):
|
||||
for root, dirs, files in os.walk(file_dir):
|
||||
# print("root", root) # 当前目录路径
|
||||
# print("dirs", dirs) # 当前路径下所有子目录
|
||||
# print("files", files) # 当前路径下所有非目录子文件
|
||||
print(len(files))
|
||||
if dirs and files:
|
||||
# print(True)
|
||||
print(str(files[0]))
|
||||
elif dirs and not files:
|
||||
print(dirs[i] for i in range(len(dirs)))
|
||||
else:
|
||||
print(str(files[j] for j in range(len(files))))
|
||||
|
||||
# print(False)
|
||||
# if
|
||||
# if files :
|
||||
# print(root + str(dirs[0]) + '/' + str(files[0]))
|
||||
# else:
|
||||
# print(root + str(files[0]))
|
||||
|
||||
|
||||
file_name_walk(os.path.expandvars('$HOME') + '/.config/PyQtToDoList/')
|
||||
# root ./
|
||||
# dirs ['test']
|
||||
# files ['200-2000(1).txt', '200-2000(2).txt', '200-2000(3).txt', 'getFileName.py']
|
||||
# root ./test
|
||||
# dirs []
|
||||
# files ['test.txt']
|
|
@ -1,3 +1,64 @@
|
|||
import configparser
|
||||
import platform
|
||||
import os
|
||||
|
||||
|
||||
# todo : 用来创建软件的配置信息
|
||||
# todo : 用来创建软件的配置信息
|
||||
class CreateConfigure:
|
||||
"""
|
||||
:param login_type : 登录方式 有 NextCloud、JianGuoYun、WebDav
|
||||
:param webdav_login : 登录用户名
|
||||
:param webdav_password : 登录密码
|
||||
:param webdav_hostname : 服务地址
|
||||
"""
|
||||
|
||||
def __init__(self, login_type, webdav_login, webdav_password, webdav_hostname=None):
|
||||
config_file = self.return_config_file()
|
||||
config = configparser.ConfigParser()
|
||||
if not os.path.exists(config_file):
|
||||
# print(config_file)
|
||||
options = {}
|
||||
if login_type == 'NextCloud':
|
||||
webdav_hostname = webdav_hostname + '/' if webdav_hostname[-1] != '/' else webdav_hostname
|
||||
options = {
|
||||
'webdav_hostname': webdav_hostname + "remote.php/dav/files/admin/",
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password,
|
||||
'type': login_type
|
||||
}
|
||||
|
||||
elif login_type == 'JianGuoYun':
|
||||
options = {
|
||||
'webdav_hostname': "https://dav.jianguoyun.com/dav/",
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password,
|
||||
'type': login_type
|
||||
|
||||
}
|
||||
elif login_type == 'WebDav':
|
||||
webdav_hostname = webdav_hostname + '/' if webdav_hostname[-1] != '/' else webdav_hostname
|
||||
options = {
|
||||
'webdav_hostname': webdav_hostname,
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password,
|
||||
'type': login_type
|
||||
|
||||
}
|
||||
config['Account'] = options
|
||||
config['ToDoList'] = {}
|
||||
|
||||
with open(config_file, 'w') as f:
|
||||
config.write(f)
|
||||
print('create complete!', config_file)
|
||||
|
||||
def return_config_file(self):
|
||||
if platform.system() == 'Linux':
|
||||
work_path = os.path.expandvars('$HOME') + '/.config/PyQtToDoList'
|
||||
if not os.path.exists(work_path):
|
||||
os.mkdir(work_path)
|
||||
return os.path.expandvars('$HOME') + '/.config/PyQtToDoList/PyQtToDoList.ini'
|
||||
elif platform.system() == 'Windows':
|
||||
return os.getcwd() + '/PyQtToDoList.ini'
|
||||
|
||||
|
||||
CreateConfigure('NextCloud', 'admin', '19990903@lyp', 'https://cloud.liyp.cc')
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from webdav3.client import Client
|
||||
import configparser
|
||||
|
||||
|
||||
class LoginAction:
|
||||
|
@ -10,28 +11,11 @@ class LoginAction:
|
|||
"""
|
||||
|
||||
def __init__(self, login_type, webdav_login, webdav_password, webdav_hostname=None):
|
||||
options = {}
|
||||
if login_type == 'NextCloud':
|
||||
webdav_hostname = webdav_hostname + '/' if webdav_hostname[-1] == '/' else webdav_hostname
|
||||
options = {
|
||||
'webdav_hostname': webdav_hostname + "remote.php/dav/files/admin/",
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password
|
||||
}
|
||||
elif login_type == 'JianGuoYun':
|
||||
options = {
|
||||
'webdav_hostname': "https://dav.jianguoyun.com/dav/",
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password
|
||||
}
|
||||
elif login_type == 'WebDav':
|
||||
webdav_hostname = webdav_hostname + '/' if webdav_hostname[-1] == '/' else webdav_hostname
|
||||
options = {
|
||||
'webdav_hostname': webdav_hostname,
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password
|
||||
}
|
||||
|
||||
options = {
|
||||
'webdav_hostname': webdav_hostname + "remote.php/dav/files/admin/",
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password,
|
||||
}
|
||||
client = Client(options)
|
||||
# client.execute_request('list')
|
||||
list1 = client.list('/')
|
||||
|
|
|
@ -1,13 +1,88 @@
|
|||
import os
|
||||
import platform
|
||||
from webdav3.exceptions import LocalResourceNotFound
|
||||
from webdav3.client import Client
|
||||
import configparser
|
||||
|
||||
|
||||
# todo : 需要的参数有同步类型
|
||||
# todo : 暂时只有手动同步,没有做自动同步,暂时不需要传递参数
|
||||
class Sync:
|
||||
"""
|
||||
:param type 同步的账号类型
|
||||
"""
|
||||
|
||||
def __init__(self, type):
|
||||
def __init__(self):
|
||||
super(Sync, self).__init__()
|
||||
types = ['NextCloud', 'JianGuoYun', 'WebDav']
|
||||
# 根据不同的账号类型调用不同的方式
|
||||
config = configparser.ConfigParser()
|
||||
try:
|
||||
config.read(self.read_config_file())
|
||||
webdav_hostname = config['Account']['webdav_hostname']
|
||||
webdav_login = config['Account']['webdav_login']
|
||||
webdav_password = config['Account']['webdav_password']
|
||||
options = {
|
||||
'webdav_hostname': webdav_hostname,
|
||||
'webdav_login': webdav_login,
|
||||
'webdav_password': webdav_password,
|
||||
'disable_check': True
|
||||
}
|
||||
self.upload_file(options)
|
||||
except FileNotFoundError as e:
|
||||
print(e)
|
||||
|
||||
def upload_file(self, options):
|
||||
client = Client(options)
|
||||
# client.execute_request('list')
|
||||
list1 = client.list('/')
|
||||
print(list1)
|
||||
exist = client.check('OpenTodoList')
|
||||
print(exist)
|
||||
if not exist:
|
||||
client.mkdir('OpenTodoList')
|
||||
try:
|
||||
# todo : 需要完善 Windows 上传的分片
|
||||
config_file, upload_files, upload_dirs = self.get_sync_path()
|
||||
client.upload('OpenTodoList/', config_file)
|
||||
for upload_dir in upload_dirs:
|
||||
upload_dir_name = upload_dir.split('/')[-1]
|
||||
client.mkdir('OpenTodoList/' + upload_dir_name)
|
||||
for upload_file in upload_files:
|
||||
upload_dir = upload_file.split('/')[-2]
|
||||
upload_file_name = upload_file.split('/')[-1]
|
||||
client.upload('OpenTodoList/' + upload_dir + upload_file_name, upload_file)
|
||||
# client.pull('OpenTodoList', '')
|
||||
# client.push('OpenTodoList', self.get_sync_path())
|
||||
except LocalResourceNotFound as e:
|
||||
print('An error happen: LocalResourceNotFound ---')
|
||||
|
||||
"""
|
||||
程序的配置文件和数据根据不同系统,保存在不同文件夹
|
||||
Linux在 ~/.config/PyQtToDoList下
|
||||
Windows在 程序目录/config/下
|
||||
"""
|
||||
|
||||
def get_sync_path(self):
|
||||
work_path = ''
|
||||
if platform.system() == 'Linux':
|
||||
work_path = os.path.expandvars('$HOME') + '/.config/PyQtToDoList'
|
||||
elif platform.system() == 'Windows':
|
||||
work_path = os.getcwd() + 'config'
|
||||
upload_files = []
|
||||
upload_dirs = []
|
||||
if not os.path.exists(work_path):
|
||||
os.mkdir(work_path)
|
||||
for root, dirs, files in os.walk(work_path, topdown=False):
|
||||
for name in files:
|
||||
upload_files.append(os.path.join(root, name))
|
||||
print(upload_files)
|
||||
for name in dirs:
|
||||
upload_dirs.append(os.path.join(root, name))
|
||||
print(upload_dirs)
|
||||
return work_path + 'PyQtToDoList.ini', upload_files, upload_dirs
|
||||
|
||||
def read_config_file(self):
|
||||
if platform.system() == 'Linux':
|
||||
return os.path.expandvars('$HOME') + '/.config/PyQtToDoList/PyQtToDoList.ini'
|
||||
elif platform.system() == 'Windows':
|
||||
config_path = os.getcwd() + 'config'
|
||||
if not os.path.exists(config_path):
|
||||
os.mkdir(config_path)
|
||||
return config_path + 'PyQtToDoList.ini'
|
||||
|
|
Loading…
Reference in a new issue