LiFan
2025-04-29 6c8c9ddaeb2bc6245a374c9354296bcfc2d96c06
jrj/project/business/SystemSettings/Developer.Synch.cpp
@@ -1,45 +1,60 @@
use "xcontrol.vframe.vbusiness.vd"
use "xbase.vframe.vbusiness.vd"
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
unit trade
[
   class DeveloperSynch :  public xframe
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
   class  __declspec(dllexport) DeveloperSynch :  public xframe
   {
   public:
      xtreeview   tv_gs;
      xsedit dw_log;
   
      int[100] nItems;
      int nItems;
      int nCount;
   
      string sContent;
      string ProcessDevCmd(string cmd,string ext, string aurl="", bool needlogin=false)
      xstring sContent;
   public:
      DeveloperSynch(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
   public:
      static DeveloperSynch* CreateInstance(void* implPtr, void* hWnd)
      {
         if(aurl == "") aurl = GetServerUrl();
         DeveloperSynch* pWin = new DeveloperSynch(implPtr, (HWND)hWnd);
         return pWin;
      }
      xstring ProcessDevCmd(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
      {
         if(aurl == L"") aurl = GetServerUrl();
         //alert(aurl);
         string d = xaserver::ProcessCmd(aurl,"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin);
         xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin);
         return d;
      }
   
      string ProcessDevCmd2(string cmd,string ext, string aurl="", bool needlogin=false)
      xstring ProcessDevCmd2(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
      {
         if(aurl == "") aurl = GetServerUrl();
         if(aurl == L"") aurl = GetServerUrl();
         //alert(aurl);
         string d = xaserver::ProcessCmd(aurl,"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin);
         xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin);
         return d;
      }
      int GetProjectItem(int hItem)
      {
         int pitem = hItem;
         string typ;
         xstring typ;
         while(true)
         {
            int h = xtreeview::GetItemData(tv_gs.GetId(), pitem);
            msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
            typ = GetEleString(e, "@tagname");
            if(typ=="project")break;
            pitem = xtreeview::GetParentItem(tv_gs.GetId(), pitem);
            int h =tv_gs.GetItemData(tv_gs.GetId(), pitem);
            KXMLDOMElement e = trust(h as KXMLDOMElement);
            typ = GetEleString(e, L"@tagname");
            if(typ==L"project")break;
            pitem =tv_gs.GetParentItem(tv_gs.GetId(), pitem);
            if(pitem<=0)break;
         }
         return pitem;
@@ -51,68 +66,68 @@
         int hP2Item = hItem;
         while(true)
         {
            hDomainItem = xtreeview::GetParentItem(tv_gs.GetId(), hP2Item);
            hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
            if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break;
            hP2Item = hDomainItem;
         }
         return hP2Item;
      }
         
      string GetItemGuid(int hItem)
      xstring GetItemGuid(int hItem)
      {
         int h = xtreeview::GetItemData(tv_gs.GetId(), hItem);
         msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
         string guid = e.GetAttribute("guid");
         int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
         KXMLDOMElement e = trust(h as KXMLDOMElement);
         xstring guid = e.GetAttribute(L"guid");
         return guid;
      }
         
      xaserverarg GetDataArg(int hItem, xaserverarg arg)
      {
         int h = xtreeview::GetItemData(tv_gs.GetId(), hItem);
         msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
         string node = GetEleString(e, "@tagname");
         int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
         KXMLDOMElement e = trust(h as KXMLDOMElement);
         xstring node = GetEleString(e, L"@tagname");
         //WriteLog(e.xml);
         if(node=="File" || node=="file")
         if(node==L"File" || node==L"file")
         {
            string caption = e.getAttribute("caption");
            xstring caption = e.getAttribute(L"caption");
            
            int hP2Item = 0;
            int hDomainItem = 0;
            if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0)
            if(tv_gs.GetParentItem(hItem)<=0)
            {
               hDomainItem = hItem;
            }else
            {
               hP2Item = GetP2Item(hItem);
               hDomainItem = xtreeview::GetParentItem(tv_gs.GetId(), hP2Item);
               hDomainItem =tv_gs.GetParentItem(hP2Item);
            }   
            //find project folder
            string prjguid="";
            int pitem = this.GetProjectItem(hItem);
            xstring prjguid=L"";
            int pitem = GetProjectItem(hItem);
            if(pitem > 0)
               prjguid = GetItemGuid(pitem);
            //xaserverarg arg = new xaserverarg;
            //arg.setNativePointer(arg.CreateInstance());
            arg.AddArg("project.guid",prjguid);
            //xaserverarg arg ;
            //;
            arg.AddArg(L"project.guid",prjguid);
            if(hP2Item)
            {
               if(hP2Item != hItem)
               {
                  string guid = e.getAttribute("guid");
                  arg.AddArg("guid",guid);
                  xstring guid = e.getAttribute(L"guid");
                  arg.AddArg(L"guid",guid);
               }
               string guid2 = GetItemGuid(hP2Item);
               arg.AddArg("root.guid",guid2);
               xstring guid2 = GetItemGuid(hP2Item);
               arg.AddArg(L"root.guid",guid2);
            }else if(hDomainItem > 0)
            {
               string guid3 = GetItemGuid(hDomainItem);
               arg.AddArg("domain.guid",guid3);
               xstring guid3 = GetItemGuid(hDomainItem);
               arg.AddArg(L"domain.guid",guid3);
            }
            return 1;
         }
         else if(node=="folder" || node=="project")
         else if(node==L"folder" || node==L"project")
            return 2;
         else
            return 0;         
@@ -120,103 +135,103 @@
      int SaveData(int hItem)
      {
         xcontrol xc = GetControl("surl");
         string surl = xc.GetText();
         if(surl == "")
         xcontrol xc = GetControl(L"surl");
         xstring surl = xc.GetText();
         if(surl == L"")
         {
            alert("请输入同步服务器地址");
            alert(L"请输入同步服务器地址");
            return 1;
         }
         
         string name = xtreeview::GetItemLabel(tv_gs.GetId(), hItem);
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         xstring name =tv_gs.GetItemLabel(hItem);
         xaserverarg arg ;
         ;
         int ret = GetDataArg(hItem, arg);
         //alert(arg.GetString());
         if(ret == 0) 
         {
            WriteLog(name+" 失败, 原因:获取工程或文件夹失败!");
            WriteLog(name+L" 失败, 原因:获取工程或文件夹失败!");
            return -1;
         }
         else if(ret == 2) 
         {
            ret = SynchFolder(hItem);
            if(ret == -1)
               WriteLog(name+" 失败, 原因:获取文件数据失败!");
               WriteLog(name+L" 失败, 原因:获取文件数据失败!");
            else if(ret == 0)
               WriteLog(name+" 失败, 原因:复制文件失败!");
               WriteLog(name+L" 失败, 原因:复制文件失败!");
            else
               WriteLog(name);
            return -1;
         }
         SynchFolder(hItem);
         arg.AddArg("__name",name);
         arg.AddArg("__url",surl);
         arg.AddArg(L"__name",name);
         arg.AddArg(L"__url",surl);
         synchServer(arg);
         if(name.right(3) == ".vx" || name.right(5) == ".xpage")
         if(name.right(3) == L".vx" || name.right(5) == L".xpage")
         {
            arg.AddArg("__name",name + "[Code]");
            arg.AddArg("iscode","yes");
            arg.AddArg(L"__name",name + L"[Code]");
            arg.AddArg(L"iscode",L"yes");
            synchServer(arg);
         }
         return 1;
      }
         
      string GetFolderPath(int hItem)
      xstring GetFolderPath(int hItem)
      {
         int k = hItem;
         if(k == 0) return "";
         string src = "";
         //string name = "";
         if(k == 0) return L"";
         xstring src = L"";
         //xstring name = L"";
         while(k > 0)
         {
            int h = xtreeview::GetItemData(tv_gs.GetId(), k);
            k = xtreeview::GetParentItem(tv_gs.GetId(), k);
            msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
            string node = GetEleString(e, "@tagname");
            if(node != "File" && node != "file")
            int h =tv_gs.GetItemData(tv_gs.GetId(), k);
            k =tv_gs.GetParentItem(tv_gs.GetId(), k);
            KXMLDOMElement e = trust(h as KXMLDOMElement);
            xstring node = GetEleString(e, L"@tagname");
            if(node != L"File" && node != L"file")
            {
               string tmp = GetEleString(e, "@src");
               //if(name == "") name = GetEleString(e, "@caption");
               if(tmp != "")
               xstring tmp = GetEleString(e, L"@src");
               //if(name == L"") name = GetEleString(e, L"@caption");
               if(tmp != L"")
               {
                  SynchFolder(k);
                  if(src == "") src = tmp;
                  if(src == L"") src = tmp;
                  else
                  {
                     int j = 1;
                     int s =  tmp.length();
                     string t = tmp.right(j).left(1);
                     while(t != "\\" && j < s)
                     int s =  tmp.length()();
                     xstring t = tmp.right(j).left(1);
                     while(t != L"\\" && j < s)
                     {
                        //WriteLog(t);
                        j++;
                        t = tmp.right(j).left(1);
                     }
                     if(j >= s)
                        src = tmp+ "\\" + src;
                        src = tmp+ L"\\" + src;
                     else
                        src = tmp.left(s - j)+ "\\" + src;
                        src = tmp.left(s - j)+ L"\\" + src;
                  }
               }
            }
         }
         if(src == "")
         if(src == L"")
         {
            //WriteLog(name+" 同步失败, 原因:获取文件数据失败0!");
            return "";
            //WriteLog(name+L" 同步失败, 原因:获取文件数据失败0!");
            return L"";
         }
         //if(src.left(9) =="Projects\\") src = src.mid(9, src.length());
         src = "\\" + src;//.replace("Projects\\","");
         //if(src.left(9) ==L"Projects\\") src = src.mid(9, src.length()());
         src = L"\\" + src;//.replace(L"Projects\\",L"");
         //WriteLog(src);
         return src;
      }
         
      int SynchFolder(int hItem)
      {
         string src =  GetFolderPath(hItem);
         if(src== "") return -1;
         if(xaserver::FileCopy("devfolder8001", src, "devfolder5001", src) != 1)
         xstring src =  GetFolderPath(hItem);
         if(src== L"") return -1;
         if(xaserver::FileCopy(L"devfolder8001", src, L"devfolder5001", src) != 1)
            return 0;
         //WriteLog(src);
         return 1;
@@ -224,34 +239,34 @@
         
      int synchServer(xaserverarg arg)
      {
         string name = arg.GetArgString("__name");
         string surl = arg.GetArgString("__url");
         string d =  ProcessDevCmd("getobject",arg.GetString());
         if(d == "")
         xstring name = arg.GetArgString(L"__name");
         xstring surl = arg.GetArgString(L"__url");
         xstring d =  ProcessDevCmd(L"getobject",arg.GetString());
         if(d == L"")
         {
            WriteLog(name+" 失败, 原因:获取文件数据失败!");
            WriteLog(name+L" 失败, 原因:获取文件数据失败!");
            return -1;
         }
         //WriteLog(d);
         arg.AddArg("content",d);
         ProcessDevCmd("saveobject",arg.GetString(), surl,true);
         arg.AddArg(L"content",d);
         ProcessDevCmd(L"saveobject",arg.GetString(), surl,true);
         WriteLog(name);
         return 1;
      }
         
      int WriteLog(string str)
      int WriteLog(xstring str)
      {
         if(sContent == "")
         if(sContent == L"")
            sContent = str;
         else
            sContent += "\r\n" + str;
            sContent += L"\r\n" + str;
         //alert(sContent);
         dw_log.SetContent(sContent, "");
         dw_log.SetContent(sContent, L"");
         return 1;
      }
   
      //焦点激活处理函数
      int OnSetFocus(ref TEvent evt,int param)
      int OnSetFocus(TEvent* evt, LPARAM param)
      {
         //重置工具条
         SetAgent();
@@ -262,7 +277,7 @@
      {   
         if(nCount >99)
         {
            alert("同时同步的数量不能大于100个!");
            alert(L"同时同步的数量不能大于100个!");
            return 1;
         }
         nItems[nCount] = hItem; 
@@ -290,17 +305,17 @@
      }
      //命令发布函数
      int OnCmdDispatch(string comdid)
      int OnCmdDispatch(xstring comdid)
      {
         if(comdid != "synch") return 1;
         if(comdid != L"synch") return 1;
         
         int hCursor = xutil::SetCursorWait();
         sContent = "";
         HCURSOR hCursor = xutil::SetCursorWait();
         sContent = L"";
         for(int i=0; i<nCount; i++)
         {
            int p = nItems[i];
            //int h = xtreeview::GetItemData(tv_gs.GetId(), p);
            //msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement);
            //int h =tv_gs.GetItemData(tv_gs.GetId(), p);
            //KXMLDOMElement e = trust(h as KXMLDOMElement);
            //alert(e.xml);
            SaveData(p);
            xtreeview::SetChecked(tv_gs.GetId(), p,0);
@@ -310,13 +325,16 @@
         return 0;
      }
   
      int OnTreeCheckBoxSel(ref TNotifyEvent evt,int p)
      int OnTreeCheckBoxSel(TEvent* evt, LPARAM p)
      {
         ref TVNNMHDR nmtv = trust(evt.pnmh as ref TVNNMHDR);
         TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
         int hItem = nmtv.FromItem;
         int hCursor = xutil::SetCursorWait();
         HCURSOR hCursor = xutil::SetCursorWait();
         int hwnd = nmtv.hwndFrom;
         int c = 1 - xtreeview::GetChecked(hwnd, hItem);
         int c = 1 -tv_gs.GetChecked(hwnd, hItem);
         if(c == 1)
            Add(hItem);
         else
@@ -326,52 +344,52 @@
      }   
      
      //命令处理事件
      int OnXCommand(ref TXCommandEvent evt,int param)
      int OnXCommand(TEvent* evt, LPARAM param)
      {
         return OnCmdDispatch(evt.pStrID);
         return OnCmdDispatch(evt->xcommand.pStrID);
      }
      
      int OnAttachEvent()
      {
         //绑定工具条点击事件
         AttachEvent("WM_XCOMMAND",OnXCommand);
         AttachEvent(L"WM_XCOMMAND", (FEvent)&DeveloperSynch::OnXCommand);
         //获取焦点事件,用于重置工具条
         //AttachEvent("WM_SETFOCUS",OnSetFocus);
         AttachEvent("DevExplorer","TVN_CHECKBOXSEL",OnTreeCheckBoxSel);
         AttachEvent("DevExplorer", "TVN_ITEMEXPANDING",OnTreeExpanding);
         //AttachEvent(L"WM_SETFOCUS",OnSetFocus);
         AttachEvent(L"DevExplorer",L"TVN_CHECKBOXSEL", (FEvent)&DeveloperSynch::OnTreeCheckBoxSel);
         AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING", (FEvent)&DeveloperSynch::OnTreeExpanding);
         return 1;
      }
      
      int OnTreeExpanding(ref TNotifyEvent evt,int lparam)
      int OnTreeExpanding(TEvent* evt, LPARAM lparam)
      {
         ref NMTREEVIEW nmtv = trust(evt.pnmh as ref NMTREEVIEW);
         TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
         int hItem = nmtv.itemNew.hItem;
         int cItem=xtreeview::GetChildItem(tv_gs.GetId(), hItem);
         if(cItem > 0) return 1;
         int p = xtreeview::GetItemData(tv_gs.GetId(), hItem);
         msxml::IXMLDOMElement ele = trust(p as msxml::IXMLDOMElement);
         string src =GetEleString(ele, "@src");
         string tagname =GetEleString(ele, "@tagname");
         if (src == "" || tagname == "file" || tagname == "File") return 1;
         int p =tv_gs.GetItemData(tv_gs.GetId(), hItem);
         KXMLDOMElement ele = trust(p as KXMLDOMElement);
         xstring src =GetEleString(ele, L"@src");
         xstring tagname =GetEleString(ele, L"@tagname");
         if (src == L"" || tagname == L"file" || tagname == L"File") return 1;
         OnSetTree(hItem, GetFolderPath(hItem));
         
         return 1;
      }      
         
      int OnSetTree(int pItem, msxml::IXMLDOMElement e)
      int OnSetTree(int pItem, KXMLDOMElement e)
      {
         msxml::IXMLDOMNodeList li=e.selectNodes("*");
         KXMLDOMNodeList li=e.selectNodes(L"*");
         int i=0;
         int s=li.length;
         int s=li.length();
         for (i=0;i<s;i++){
            msxml::IXMLDOMElement  ele= li.item(s - i - 1);
            string caption = GetEleString(ele, "@caption");
            string src =GetEleString(ele, "@src");
            string image =GetEleString(ele, "@image");
            KXMLDOMElement  ele= li.item(s - i - 1);
            xstring caption = GetEleString(ele, L"@caption");
            xstring src =GetEleString(ele, L"@src");
            xstring image =GetEleString(ele, L"@image");
            int p = trust(ele as int);
            int hItem=xtreeview::InsertItem(tv_gs.GetId(), pItem,0,caption,p,image.toInt());
            string tagname =GetEleString(ele, "@tagname");
            if (src != "" && tagname != "file" && tagname != "File")
            xstring tagname =GetEleString(ele, L"@tagname");
            if (src != L"" && tagname != L"file" && tagname != L"File")
               xtreeview::SetItemChild1(tv_gs.GetId(), hItem,1);
            OnSetTree(hItem, ele);
         }
@@ -379,19 +397,19 @@
         return 1;
      }
         
      int OnSetTree(int hItem, string src)
      int OnSetTree(int hItem, xstring src)
      {
         xml x=new xml;
         x.setNativePointer(xml::CreateInstance());
         xaserverarg arg=new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         arg.AddArg("src",src);
         if(xaserver::ExecXQuery(GetServerUrl(),"[Developer.Tree.xq]",arg.GetString(),x)!=1)
         xml x;
         xaserverarg arg;
         ;
         arg.AddArg(L"src",src);
         if(xaserver::ExecXQuery(GetServerUrl(),L"[Developer.Tree.xq]",arg.GetString(),x)!=1)
         {
            alert("读取节点失败!");
            alert(L"读取节点失败!");
            return 1;
         }
         msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
         KXMLDOMElement e = x.documentElement();
         OnSetTree(hItem, e);
         return 1;
      }
@@ -399,8 +417,8 @@
      int onload()
      {
         nCount = 0;
         tv_gs = GetControl("DevExplorer");
         dw_log = GetControl("xlog");
         tv_gs = GetControl(L"DevExplorer");
         dw_log = GetControl(L"xlog");
         OnAttachEvent();   
         
         return 1;
@@ -408,8 +426,7 @@
      
      int onloaded()
      {
         OnSetTree(0, "Projects/projects.xhw");
         OnSetTree(0, L"Projects/projects.xhw");
         return 1;
      }      
   };
]
   };