localized/more/update_plugin.py
changeset 0 93b25987d3e5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localized/more/update_plugin.py	Tue May 01 12:26:35 2007 +0200
@@ -0,0 +1,59 @@
+#$ neutron_plugin 01
+
+import httplib
+
+UPDATE_HOST = 'www.jabber.ru'
+UPDATE_PATH = '/projects/neutron/files/'
+
+VERSIONS_FILE = 'dynamic/versions.txt'
+
+def update_download(file):
+	httpcon = httplib.HTTPConnection(UPDATE_HOST)
+	httpcon.request('GET', UPDATE_PATH + file)
+	response = httpcon.getresponse()
+	if response.status == 200:
+		reply = response.read()
+	else:
+		reply = None
+	httpcon.close()
+	return reply
+
+def handler_update_update(type, source, parameters):
+	try:
+		server_versions = eval(update_download('dynamic/versions.txt'))
+	except:
+		smsg(type, source, 'Server Error')
+		return
+	my_versions = eval(read_file(VERSIONS_FILE))
+	to_update = []
+	to_remove = []
+	for filename in my_versions:
+		if server_versions.has_key(filename):
+			if my_versions[filename] < server_versions[filename]:
+				to_update.append(filename)
+		else:
+			to_remove.append(filename)
+	for filename in server_versions:
+		if not my_versions.has_key(filename):
+			to_update.append(filename)
+	if not (to_update or to_remove):
+		smsg(type, source, 'Neutron is already completely up to date. Finished')
+		return
+	for filename in to_remove:
+		smsg(type, source, 'Removing: ' + filename)
+		os.remove(filename)
+		del my_versions[filename]
+	for filename in to_update:
+		smsg(type, source, 'Updating: ' + filename)
+		new_file_data = update_download(filename)
+		if new_file_data == 'None':
+			smsg(type, source, 'Error Updating: ' + filename)
+			continue
+		update_fp = file(filename, 'wb')
+		update_fp.write(new_file_data)
+		update_fp.close()
+		my_versions[filename] = server_versions[filename]
+	write_file(VERSIONS_FILE, str(my_versions))
+	smsg(type, source, 'Neutron is now completely up to date. Finished')
+
+register_command_handler(handler_update_update, '!update', 100, 'Updates Neutron from Internet.', '!update', ['!update'])