fix: publish items

- Pass image data as a json
- ignore duplicates while creating Hub Tracked Item
diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py
index 0c9af1a..a8958ab 100644
--- a/erpnext/hub_node/api.py
+++ b/erpnext/hub_node/api.py
@@ -56,7 +56,7 @@
 			'item_code': item_code,
 			'hub_category': item.get('hub_category'),
 			'image_list': item.get('image_list')
-		}).insert()
+		}).insert(ignore_if_duplicate=True)
 
 	try:
 		hub_settings = frappe.get_doc('Hub Settings')
diff --git a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
index 0b6b2bc..eb57f3a 100644
--- a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
+++ b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
@@ -1,19 +1,26 @@
-import frappe, io, base64, urllib, os
+import frappe, io, base64, urllib, os, json
+from frappe.utils.file_manager import get_file_path
 
 def pre_process(doc):
 
-	# file_path = doc.image
-	# file_name = os.path.basename(file_path)
+	file_path = doc.image
+	file_name = os.path.basename(file_path)
 
-	# if file_path.startswith('http'):
-	# 	url = file_path
-	# 	file_path = os.path.join('/tmp', file_name)
-	# 	urllib.urlretrieve(url, file_path)
+	if file_path.startswith('http'):
+		url = file_path
+		file_path = os.path.join('/tmp', file_name)
+		urllib.urlretrieve(url, file_path)
+	else:
+		file_path = os.path.abspath(get_file_path(file_path))
 
-	# with io.open(file_path, 'rb') as f:
-	# 	doc.image = base64.b64encode(f.read())
-
-	# doc.image_file_name = file_name
+	try:
+		with io.open(file_path, 'rb') as f:
+			doc.image = json.dumps({
+				'file_name': file_name,
+				'base64': base64.b64encode(f.read())
+			})
+	except Exception as e:
+		frappe.log_error(title='Hub Sync Error')
 
 	cached_details = frappe.get_doc('Hub Tracked Item', doc.item_code)
 
diff --git a/erpnext/hub_node/doctype/hub_settings/hub_settings.py b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
index 8ec3d56..0044cef 100644
--- a/erpnext/hub_node/doctype/hub_settings/hub_settings.py
+++ b/erpnext/hub_node/doctype/hub_settings/hub_settings.py
@@ -81,6 +81,7 @@
 	def create_hub_connector(self, message):
 		if frappe.db.exists('Data Migration Connector', 'Hub Connector'):
 			hub_connector = frappe.get_doc('Data Migration Connector', 'Hub Connector')
+			hub_connector.hostname = self.get_hub_url()
 			hub_connector.username = message['email']
 			hub_connector.password = message['password']
 			hub_connector.save()
diff --git a/erpnext/hub_node/doctype/hub_tracked_item/test_hub_tracked_item.js b/erpnext/hub_node/doctype/hub_tracked_item/test_hub_tracked_item.js
deleted file mode 100644
index 9f7314d..0000000
--- a/erpnext/hub_node/doctype/hub_tracked_item/test_hub_tracked_item.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* eslint-disable */
-// rename this file from _test_[name] to test_[name] to activate
-// and remove above this line
-
-QUnit.test("test: Hub Tracked Item", function (assert) {
-	let done = assert.async();
-
-	// number of asserts
-	assert.expect(1);
-
-	frappe.run_serially([
-		// insert a new Hub Tracked Item
-		() => frappe.tests.make('Hub Tracked Item', [
-			// values to be set
-			{key: 'value'}
-		]),
-		() => {
-			assert.equal(cur_frm.doc.key, 'value');
-		},
-		() => done()
-	]);
-
-});
diff --git a/erpnext/public/js/hub/pages/publish.js b/erpnext/public/js/hub/pages/publish.js
index 98b0a61..ce73d63 100644
--- a/erpnext/public/js/hub/pages/publish.js
+++ b/erpnext/public/js/hub/pages/publish.js
@@ -187,7 +187,7 @@
 	show_publish_progress() {
 		const items_to_publish = this.items_data_to_publish.length
 			? this.items_data_to_publish
-			: JSON.parse(hub.settings.custom_data);
+			: JSON.parse(hub.settings.custom_data || '[]');
 
 		const $publish_progress = $(`<div class="sync-progress">
 			<p><b>${__(`Syncing ${items_to_publish.length} Products`)}</b></p>