Esempio n. 1
0
        //分时读入,一次性读入会造成界面没有响应
        public ImportResult Import(string importInf)
        {
            DateTime start  = DateTime.Now;
            long     offset = 0;

            try
            {
                if (!File.Exists(importInf))
                {
                    TipsCenter.Ins.TagImportInf = "SqlTagDB Import Finished! == FileNotExist";
                    return(ImportResult.Finished);
                }

                string tmp = File.ReadAllText(CfgUserPath.Offset_SQLite);

                long.TryParse(tmp, out offset);
                System.IO.FileInfo fi = new System.IO.FileInfo(importInf);
                //如果文件已经读到尾部,直接返回
                if (offset >= fi.Length - 2)
                {
                    TipsCenter.Ins.TagImportInf = "SqlTagDB Import Finished!";
                    return(ImportResult.Finished);
                }
                TipsCenter.Ins.TagImportInf = string.Format("SqlTagDB Import:{0}/{1}", offset, fi.Length);

                FileStream   fs = new FileStream(importInf, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader r  = new StreamReader(fs);
                r.SetPosition(offset);
                //r.BaseStream.Seek(offset, SeekOrigin.Begin);
                //for (int i = 0; i < 10; i++)
                while ((DateTime.Now - start).TotalMilliseconds < 1000)
                {
                    string ln = r.ReadLine();
                    if (ln != null && ln.Trim().Length > 0 &&
                        ln.Trim()[0] == '{' && ln.Trim().EndsWith("}")) //是一个json
                    {
                        TagDBCmd cmd = JsonConvert.DeserializeObject <TagDBCmd>(ln);
                        if (cmd != null)
                        {
                            Run(cmd);
                            offset = r.GetPosition();
                            int next = r.Peek();
                            if (next != '{' && next != ' ' && next != -1)//下一个cmd应该是{开头
                            {
                                //TODO ,如何自动恢复?
                                System.Diagnostics.Debug.Assert(false);
                            }
                            r.SetPosition(offset);
                            next = r.Peek();
                            if (next != '{' && next != ' ' && next != -1)//下一个cmd应该是{开头
                            {
                                //TODO ,如何自动恢复?
                                System.Diagnostics.Debug.Assert(false);
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                r.Close();
                fs.Close();
            }
            catch (Exception ee)
            {
                Logger.E(ee);
            }
            File.WriteAllText(CfgUserPath.Offset_SQLite, offset.ToString());
            ChangeNotify();
            //if (!File.Exists(importInf)) return 0;

            //int newCnt = 0, uptCnt = 0;
            //Hashtable title2GUtag = new Hashtable();
            //string[] lns = File.ReadAllLines(importInf);
            //List<GUTag> oldGUTags = new List<GUTag>();
            //foreach (string ln in lns)
            //{
            //    GUTag iTag = JsonConvert.DeserializeObject<GUTag>(ln);
            //    if (iTag != null)
            //    {
            //        GUTag oTag = QueryTag(iTag.Id);
            //        if(oTag==null)
            //        {
            //            SaveAndUpdateCache(iTag);
            //            newCnt++;
            //        }
            //        else if(!iTag.IsSame(oTag))
            //        {
            //            SaveAndUpdateCache(GUTag.MergeTag(iTag, oTag));
            //            uptCnt++;
            //        }
            //        else
            //        {
            //            //两边完全相同,不用处理
            //        }
            //    }

            //}
            //ChangeNotify();
            return(ImportResult.NotFinished);
        }
Esempio n. 2
0
        public int Run(TagDBCmd cmd)
        {
            if (CmdGuidDB.Ins.Exist(cmd.GetOptID()))
            {
                return(0);
            }
            lock (this)
            {
                SuspendChangeNotify = true;
                try
                {
                    switch (cmd.Type)
                    {
                    case TagDBCmdType.NewTag:
                        if (cmd.Args.Count == 1)
                        {
                            NewTag(GUTag.Parse(cmd.Args[0]));
                        }
                        break;

                    case TagDBCmdType.RemoveTag:
                        if (cmd.Args.Count == 1)
                        {
                            RemoveTag(GUTag.Parse(cmd.Args[0]));
                        }
                        break;

                    case TagDBCmdType.SetParent:
                        if (cmd.Args.Count == 2)
                        {
                            SetParent(GUTag.Parse(cmd.Args[0]), GUTag.Parse(cmd.Args[1]));
                        }
                        break;

                    case TagDBCmdType.ResetParent:
                        if (cmd.Args.Count == 2)
                        {
                            ResetParent(GUTag.Parse(cmd.Args[0]), GUTag.Parse(cmd.Args[1]));
                        }
                        break;

                    case TagDBCmdType.ChangeTitle:
                        if (cmd.Args.Count == 2)
                        {
                            ChangeTitle(GUTag.Parse(cmd.Args[0]), cmd.Args[1]);
                        }
                        break;

                    case TagDBCmdType.MergeAlias:
                        if (cmd.Args.Count == 2)
                        {
                            ResetParent(GUTag.Parse(cmd.Args[0]), GUTag.Parse(cmd.Args[1]));
                        }
                        break;

                    case TagDBCmdType.ChangeChildPos:
                        if (cmd.Args.Count == 2)
                        {
                            ChangeChildPos(GUTag.Parse(cmd.Args[0]), int.Parse(cmd.Args[1]));
                        }
                        break;

                    case TagDBCmdType.SetParentWithPreBrother:
                        if (cmd.Args.Count == 3)
                        {
                            SetParentWithPreBrother(GUTag.Parse(cmd.Args[0]), GUTag.Parse(cmd.Args[1]), GUTag.Parse(cmd.Args[2]));
                        }
                        break;

                    case TagDBCmdType.SetPath:
                        if (cmd.Args.Count == 2)
                        {
                            SetPath(GUTag.Parse(cmd.Args[0]), cmd.Args[1]);
                        }
                        break;

                    case TagDBCmdType.ReplacePath:
                        if (cmd.Args.Count == 2)
                        {
                            ReplacePath(cmd.Args[0], cmd.Args[1]);
                        }
                        break;
                    }
                }
                finally
                {
                    SuspendChangeNotify = false;
                }

                return(0);
            }
        }
Esempio n. 3
0
 private void SaveCmd(TagDBCmd cmd)
 {
     CmdHistory.Ins.Save(LogType.TagLog, cmd);
 }