From 03ef0b51103c735077c784c7df81ae2bcc1599ab Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期四, 13 二月 2025 18:33:56 +0800
Subject: [PATCH] update

---
 jrj/xframe/devloper/XDevEditPage.hpp |  143 ++++++++++++++++++++++++++++++++---------------
 1 files changed, 97 insertions(+), 46 deletions(-)

diff --git a/jrj/xframe/devloper/XDevEditPage.hpp b/jrj/xframe/devloper/XDevEditPage.hpp
index d9a4f38..b2bac45 100644
--- a/jrj/xframe/devloper/XDevEditPage.hpp
+++ b/jrj/xframe/devloper/XDevEditPage.hpp
@@ -8,6 +8,8 @@
 #include <vbusiness/vutil/publiccode.vutil.vbusiness.hpp>
 #include <win32/xfile.hpp>
 
+#include <tchar.h>
+
 using xml = KXMLDOMDocument;
 class export XDevEditPage : public xwin
 {
@@ -16,17 +18,7 @@
 public:
 	xstring ProcessDevCmd(xstring cmd, xstring ext)
 	{
-		//trace(ext);
-		int nlen = 0;
-		BYTE* pdata;
-		xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext, pdata, nlen);
-		if (nlen > 0)
-		{
-			xstring str = ((wchar_t*)pdata);
-			return str.mid(1, 9999999);
-		}
-		else
-			return L"";
+		return  xaserver::ProcessCmd(GetServerUrl(), (L"uri.hxsoft.com/xaserver/developer " + cmd).c_str(), ext);
 	}
 
 	HTREEITEM GetProjectItem(xtreeview tv_folder, HTREEITEM hItem )
@@ -116,11 +108,10 @@
 		return GetData(0);
 	}
 
-	int SaveContentEx(xstring content, int bcode)
+	int SaveContentEx(HTREEITEM hItem,xstring content, int bcode)
 	{
 		xwin w = GetFrameWindow();
 		xtreeview tv_folder = w.GetControl(L"DevExplorer");
-		HTREEITEM hItem  = (HTREEITEM)GetWinParam();
 		KXMLDOMElement e = tv_folder.GetItemData(hItem);
 		xstring node = e.tagName();
 		if (node == L"File" || node == L"file")
@@ -139,7 +130,7 @@
 
 			//find project folder
 			xstring prjguid = L"";
-			HTREEITEM pitem  = GetProjectItem(tv_folder, hItem);
+			HTREEITEM pitem = GetProjectItem(tv_folder, hItem);
 			if (pitem)
 				prjguid = ((KXMLDOMElement)tv_folder.GetItemData(pitem)).getAttribute(L"guid");
 
@@ -168,9 +159,34 @@
 		}
 		return 1;
 	}
+
+	int SaveContentEx(xstring content, int bcode)
+	{
+		HTREEITEM hItem  = (HTREEITEM)GetWinParam();
+		return SaveContentEx(hItem,content,bcode);
+	}
+
+	int SaveContent(HTREEITEM hItem,xstring content)
+	{
+		return SaveContentEx(hItem,content, 0);
+	}
+
 	int SaveContent(xstring content)
 	{
 		return SaveContentEx(content, 0);
+	}
+
+	int SaveContentEx(xstring prjguid, xstring domainguid, xstring rootguid, xstring guid,xstring content, int bcode)
+	{
+		xaserverarg arg;
+		arg.AddArg(L"project.guid", prjguid);
+		arg.AddArg(L"root.guid", rootguid);
+		arg.AddArg(L"domain.guid", domainguid);
+		arg.AddArg(L"guid", guid);
+		arg.AddArg(L"content", content);
+		if (bcode)arg.AddArg(L"iscode", L"yes");
+		ProcessDevCmd(L"saveobject", arg.GetString());
+		return 1;
 	}
 
 	xstring GetGuid()
@@ -178,18 +194,19 @@
 		return publiccode::GetGuid();
 	}
 
-	int ImportItem(HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid)
+	int ImportItem(xstring baseFolder,HTREEITEM hItem, KXMLDOMElement ele, xstring prjguid, xstring domainguid, xstring rootguid)
 	{
 		xwin w = GetFrameWindow();
 		xtreeview tv_folder = w.GetControl(L"DevExplorer");
 		xstring caption = ele.getAttribute(L"src");
+		xstring uri = ele.getAttribute(L"uri");
 		xstring guid = ((KXMLDOMElement)tv_folder.GetItemData(hItem)).getAttribute(L"guid");
 		xstring typ = ele.tagName();
 		KXMLDOMElement e = tv_folder.GetItemData(hItem);
 
 
 		xaserverarg arg;
-		KXMLDOMNode node = e.selectSingleNode(typ + L"[@caption='" + caption + L"']");
+		KXMLDOMNode node = e.selectSingleNode(typ + L"[not(@delete) and @caption='" + caption + L"']");
 		if (!node)
 		{
 			//add file folder
@@ -217,42 +234,71 @@
 				int himage = xstring(e1.getAttribute(L"image")).toInt();
 				HTREEITEM hNewItem = tv_folder.InsertChildItem(hItem, arg.GetArgString(L"name"), e1, himage);
 
-				/*
-				int GENERIC_READ = 0x80000000;
-				int GENERIC_WRITE = 0x40000000;
-				int FILE_SHARE_READ = 0x00000001;
-				int FILE_SHARE_WRITE = 0x00000002;
-				int OPEN_EXISTING = 3;
-				int FILE_ATTRIBUTE_ARCHIVE = 0x00000020;
-				HANDLE hFile = xfile::CreateFile(L"D:\\jrjhome\\developer-yh\\projects\\mherp.com.cn\\前端策略\works\\供应链\\" + sTemplName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
-				if (hFile > 0)
-				{
-					//int GMEM_MOVEABLE=0x0002;
-					//int GMEM_ZEROINIT=0x0040;
-					//int MEMSIZE;
-					//int hMemory = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,MEMSIZE);
-					//int pMemory = GlobalLock(hMemory);
-					//int SizeReadWrite;
-					//xwin::ReadFile(hFile,pMemory,MEMSIZE - 1,SizeReadWrite,0);
-					DWORD FileSizeHigh = 0;
-					int filesize = xfile::GetFileSize(hFile,FileSizeHigh);
-					char * buffer = new char[filesize+2];
-					DWORD readsize;
-					xfile:ReadFile(hFile, buffer, filesize, &readsize, 0);
-					xfile::CloseHandle(hFile);
-				}*/
-
 
 				int lens;
-				KXMLDOMNodeList nodes = ele.selectNodes(L"node()");
+				KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]");
 				lens = nodes.length();
 				for (int i = 0; i < lens; i++)
 				{
 					KXMLDOMElement child = nodes.item(i);
-					ImportItem(hNewItem, child, prjguid, domainguid, rootguid);
+					ImportItem(baseFolder,hNewItem, child, prjguid, domainguid, rootguid);
 				}
 			}
 			return 1;
+		}
+		else
+		{
+			//update content
+			if (typ == L"file" && node.selectSingleNode(L"@guid") && node.selectSingleNode(L"@src"))
+			{
+				wchar_t path[MAX_PATH]=L"";
+				xstring src = node.selectSingleNode(L"@src").text();
+				trace(L"\r\n" + src);
+				wcscat_s(path, MAX_PATH, baseFolder);
+				wcscat_s(path, MAX_PATH, L"/");
+				wcscat_s(path, MAX_PATH, src.c_str());
+				xstring xs = xfile::GetString(path);
+				const wchar_t* val = xs.c_str();
+				xstring myguid = node.selectSingleNode(L"@guid").text();
+				xstring mytype = node.selectSingleNode(L"@type") ? node.selectSingleNode(L"@type").text() : L"";
+
+				if (xs != L"")
+				{
+					this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, false);
+					if (mytype == L"xpage")
+					{
+						::PathRemoveExtensionW(path);
+						wcscat_s(path, MAX_PATH, L".xss");
+						xs = xfile::GetString(path);
+						if (xs != L"")this->SaveContentEx(prjguid, domainguid, rootguid, myguid, xs, true);
+					}
+				}
+			}
+			
+			HTREEITEM hNewItem = tv_folder.GetChildItem(hItem);
+			KXMLDOMElement e2 = node;
+			xstring url2 = e2.getAttribute(L"uri");
+			while (hNewItem)
+			{
+				KXMLDOMElement e1 = tv_folder.GetItemData(hNewItem);
+				wchar_t* uri1 = e1.getAttribute(L"uri");
+				wchar_t* uri2 = e2.getAttribute(L"uri");
+				if (url2 == e1.getAttribute(L"uri"))break;
+				hNewItem = tv_folder.GetNextItem(hNewItem);
+			}
+
+			if (hNewItem)
+			{
+				int lens;
+				KXMLDOMNodeList nodes = ele.selectNodes(L"node()[not(@delete)]");
+				lens = nodes.length();
+				for (int i = 0; i < lens; i++)
+				{
+					KXMLDOMElement child = nodes.item(i);
+					ImportItem(baseFolder, hNewItem, child, prjguid, domainguid, rootguid);
+				}
+			}
+
 		}
 		return 1;
 	}
@@ -266,7 +312,12 @@
 
 		xml src;
 		src.load(srcfile);
-		xstring path = L"//*[(name()='file' or name()='folder') and @src='" + id + L"']";
+
+		TCHAR szPath[MAX_PATH]=L"";
+		wcscat_s(szPath, MAX_PATH,srcfile.c_str());
+		::PathRemoveExtensionW(szPath);
+
+		xstring path = L"//*[(name()='file' or name()='folder') and not(@delete) and @src='" + id + L"']";
 		const wchar_t* str = src.xml();
 		KXMLDOMElement srcele = src.selectSingleNode(path);
 		if (!srcele) return 1;
@@ -305,12 +356,12 @@
 			domainguid = d.getAttribute(L"guid");
 		}
 		int lens;
-		KXMLDOMNodeList nodes = srcele.selectNodes(L"node()");
+		KXMLDOMNodeList nodes = srcele.selectNodes(L"node()[not(@delete)]");
 		lens = nodes.length();
 		for (int i = 0; i < lens; i++)
 		{
 			KXMLDOMElement child = nodes.item(i);
-			ImportItem(hItem, child, prjguid, domainguid, rootguid);
+			ImportItem(szPath,hItem, child, prjguid, domainguid, rootguid);
 		}
 
 		return 1;

--
Gitblit v1.9.3