diff --git a/client.py b/client.py
index 0bccdd3..9a4a97f 100755
--- a/client.py
+++ b/client.py
@@ -158,14 +158,12 @@ class MunyalClient(Icon):
if delete:
print("Cosas eliminadas:")
print(delete)
- delete = flatten_dirs(delete, action="delete")
for f in delete:
f["action"] = "delete"
self.stack.extend(delete)
if add:
print("Cosas agregadas:")
print(add)
- add = flatten_dirs(add, action="add")
for f in add:
f["action"] = "add"
self.stack.extend(add)
diff --git a/compare_json.py b/compare_json.py
index 0890ea9..75a24e9 100644
--- a/compare_json.py
+++ b/compare_json.py
@@ -1,9 +1,40 @@
import json
from dir_to_json import get_json
+from misc import flatten_dirs
-def compare_json(json1, json2):
+def compare_json(json_1, json_2):
+ json_1 = flatten_dirs(json_1)
+ json_2 = flatten_dirs(json_2)
+
+ items_1 = set(json_1)
+ items_2 = set(json_2)
+
+ delete = items_1 - items_2
+ add = items_2 - items_1
+ update = items_1 & items_2
+
+ add_files = []
+ for key, value in json_2.items():
+ if key in add:
+ add_files.append(value)
+
+ delete_files = []
+ for key, value in json_1.items():
+ if key in delete:
+ delete_files.append(value)
+
+ for name in update:
+ if not json_1[name]["is_file"] or not json_2[name]["is_file"]:
+ continue
+ if json_1[name]["checksum"] != json_2[name]["checksum"]:
+ delete_files.append(json_2[name])
+ add_files.append(json_1[name])
+
+ return list(delete_files), list(add_files)
+
+def compare_json_old(json1, json2):
items1 = list(enumerate(json1))
items2 = list(enumerate(json2))
for i, item1 in items1:
diff --git a/first_test.py b/first_test.py
deleted file mode 100644
index 6d4fd7a..0000000
--- a/first_test.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-from copy import deepcopy
-from time import sleep
-
-from compare_json import compare_json
-from dir_to_json import get_json
-
-ORIGINAL = "/home/kirbylife/Proyectos/munyal_test/original"
-
-def main(args):
- actual = get_json(ORIGINAL)
- new = deepcopy(actual)
-
- while True:
- delete, add = compare_json(deepcopy(actual), deepcopy(new))
- for item in delete:
- if item.get("tag"):
- if item.get("tag") == "update":
- print("Actualizado el archivo {}".format(item.get("name")))
- else:
- print("borrado el archivo {}".format(item.get("name")))
-
- for item in add:
- print("Agregado el archivo {}".format(item.get("name")))
- actual = deepcopy(new)
- new = get_json(ORIGINAL)
- return 0
-
-if __name__ == '__main__':
- import sys
- sys.exit(main(sys.argv))
diff --git a/http_server.py b/http_server.py
deleted file mode 100644
index 84f6e62..0000000
--- a/http_server.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-import json
-from hashlib import md5
-from random import randint
-from time import time
-
-import rethinkdb as r
-from flask import Flask, jsonify, request
-
-app = Flask(__name__)
-
-
-def md5sum(filename):
- try:
- hash = md5()
- with open(filename, "rb") as f:
- for chunk in iter(lambda: f.read(128 * hash.block_size), b""):
- hash.update(chunk)
- return hash.hexdigest()
- except:
- return None
-
-
-@app.route("/", methods=["GET"])
-def index():
- return ('''
-
-
- Munyal API
-
-
- Munyal private API
-
-
- ''')
-
-
-@app.route("/upload", methods=["POST"])
-def upload():
- try:
- r.connect("localhost", 28015).repl()
- cursor = r.table("changes")
-
- host = request.form.get("host")
- action = request.form.get("action")
- route = request.form.get("route")
- obj = {
- 'id': str(time()).split('.')[0] + str(randint(1, 1000000)),
- 'action': action,
- 'route': route,
- 'host': host
- }
- status = 'ok'
- try:
- cursor.insert(obj).run()
- except:
- status = 'error'
- except:
- status = 'error'
- obj['status'] = status
- return jsonify(obj)
-
-
-if __name__ == '__main__':
- app.run(debug=True)
diff --git a/misc.py b/misc.py
index 41ae169..419370b 100644
--- a/misc.py
+++ b/misc.py
@@ -36,7 +36,25 @@ def alert(window, message, title="Munyal"):
button.pack()
-def flatten_dirs(content, path="", action=""):
+def _flatten_dirs(content, path=""):
+ for item in content:
+ item["name"] = path_join(path, item["name"])
+ if item["is_file"]:
+ yield item
+ else:
+ yield from _flatten_dirs(item["content"], item["name"])
+ del item["content"]
+ yield item
+
+def flatten_dirs(content, path=""):
+ dirs = _flatten_dirs(content, path=path)
+
+ output = {}
+ for item in dirs:
+ output[item["name"]] = item
+ return output
+
+def flatten_dirs_old(content, path="", action=""):
output = []
for item in content:
if item["is_file"]:
@@ -56,3 +74,16 @@ def flatten_dirs(content, path="", action=""):
def path_join(*items):
return os.path.join(*items).replace("\\", "/")
+
+if __name__ == "__main__":
+ from dir_to_json import get_json
+ import json
+ folder = sys.argv[1]
+ action = sys.argv[2]
+ try:
+ json_1 = get_json(folder)
+ except Exception as e:
+ print(e)
+ print("error outside")
+ sys.exit(1)
+ print(json.dumps(list(flatten_dirs(json_1)), indent=2))
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..02c6b3e
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,4 @@
+websocket-client="*"
+tcping="*"
+requests="*"
+pystray="*"
diff --git a/screen.png b/screen.png
deleted file mode 100644
index 24cc5b6..0000000
Binary files a/screen.png and /dev/null differ
diff --git a/second_test.py b/second_test.py
deleted file mode 100644
index f15444e..0000000
--- a/second_test.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-import ftplib
-import json
-import os
-import socket
-from copy import deepcopy
-from time import sleep
-
-from requests import post
-
-from compare_json import compare_json
-from dir_to_json import get_json
-
-
-def need_deleted(items, route):
- out = []
- for item in items:
- if item.get("is_file"):
- out.append({"action": "delete", "route": os.path.join(route, item.get('name'))})
- else:
- if item.get('content'):
- out = out + need_deleted(item.get("content"), os.path.join(route, item.get('name')))
- else:
- out.append({"action": "delete_folder", "route": os.path.join(route, item.get('name'))})
- return out
-
-def need_added(items, route):
- out = []
- for item in items:
- if item.get("is_file"):
- out.append({"action": "add", "route": os.path.join(route, item.get('name'))})
- else:
- if item.get('content'):
- out = out + need_added(item.get("content"), os.path.join(route, item.get('name')))
- else:
- out.append({"action": "add_folder", "route": os.path.join(route, item.get('name'))})
- return out
-
-def get_changes(jsons, route=''):
- delete, add = jsons
- out = need_deleted(delete, route) + need_added(add, route)
- return out
- '''
- out = []
-
- delete, add = jsons
- for item in delete:
- if item.get("is_file"):
-
- if item.get("tag"):
- if item.get("tag") == "update":
- out.append({"action": "update", "file": os.path.join(route, item.get('name'))})
- elif item.get("tag") == "delete":##### Caso hipotetico imposible #####
- if item.get("is_file"):
- out.append({"action": "delete", "file": os.path.join(route, item.get('name'))})
- else:
- out.append({"action": "delete_folder", "file": os.path.join(route, item.get('name'))})
-
- else:
- out.append({"action": "delete", "file": os.path.join(route, item.get('name'))})
-
- out.append({"action": "delete", "file": os.path.join(route, item.get('name'))})
- else:
- return out
- '''
-
-ORIGINAL = "/home/kirbylife/Proyectos/munyal_test/original"
-
-def main(args):
- ftp = ftplib.FTP('localhost', 'munyal', '123')
- actual = get_json(ORIGINAL)
- new = deepcopy(actual)
- switch = lambda x,o,d=None: o.get(x) if o.get(x) else d if d else lambda *args: None
- while True:
- sleep(1)
- jsons = compare_json(deepcopy(actual), deepcopy(new))
- changes = get_changes(jsons)
- for change in changes:
- route = os.path.join(ORIGINAL, change['route'])
- success = False
- while not success:
- # ~ try:
- x = change['route']
- if change['action'] == 'add':
- print("Agregar archivo")
- with open(route, "rb") as f:
- ftp.storbinary("STOR /" + x, f)
- elif change['action'] == 'add_folder':
- print("Agregar carpeta")
- ftp.mkd(x)
- elif change['action'] == 'delete':
- print("Borrar archivo")
- ftp.delete(x)
- elif change['action'] == 'delete_folder':
- print("Borrar carpeta")
- ftp.rmd(x)
- else:
- print("Unexpected action")
- r = post('http://127.0.0.1:5000/upload', data={
- 'host': socket.gethostname(),
- 'action': change['action'],
- 'route': change['route']
- }
- )
- r = json.loads(r.text)
- print(json.dumps(r, indent=4))
- success = r['status'] == 'ok'
- # ~ except:
- # ~ print("Error uploading, retrying again\n")
- actual = deepcopy(new)
- new = get_json(ORIGINAL)
- return 0
-
-if __name__ == '__main__':
- import sys
- sys.exit(main(sys.argv))