Beispiel #1
0
        static void Main(string[] args)
        {
            string configfile = Path.Combine(Environment.CurrentDirectory, "packagerconfig.xml");

            if (args.Length > 0)
            {
                if (File.Exists(args[0]))
                {
                    configfile = args[0];
                }
                else if (Directory.Exists(args[0]))
                {
                    configfile = Path.Combine(args[0], "packagerconfig.xml");
                }
            }

            //if (!File.Exists(configfile) && File.Exists(Path.Combine(Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName), "packagerconfig.xml")))
            //  configfile = Path.Combine(Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName), "packagerconfig.xml");

            PackagerConfig config = PackagerConfig.Load(configfile);

            config.Save(configfile);

            if (config.CreateUpdateInfo || true)
            {
                String DropboxPath = Environment.ExpandEnvironmentVariables(Path.Combine(config.ExportPath, config.ProjectNameWebFriendly));
                Directory.CreateDirectory(DropboxPath);

                String    indexFile  = Path.Combine(DropboxPath, config.ProjectName + ".index");
                XDocument index      = File.Exists(indexFile) ? XDocument.Load(indexFile) : new XDocument(new XElement("PartIndex"));
                XElement  UpdateInfo = index.Root.Element("UpdateInfo");
                if (UpdateInfo == null)
                {
                    index.Root.AddFirst(UpdateInfo =
                                            new XElement("UpdateInfo",
                                                         new XElement("Version", File.Exists(indexFile.Replace(".index", ".txt")) ? File.ReadAllText(indexFile.Replace(".index", ".txt")) : "0"),
                                                         new XElement("Filename", Path.GetFileName(indexFile)),
                                                         new XElement("PartAddress", config.Url + config.ProjectNameWebFriendly + "/" + Path.GetFileName(indexFile)),
                                                         new XElement("VersionAddress", config.Url + config.ProjectNameWebFriendly + "/" + Path.GetFileNameWithoutExtension(Path.GetFileName(indexFile)) + ".txt")
                                                         )
                                        );
                }
                List <string> Parts = new List <string>();
                foreach (string file in Directory.EnumerateFiles(Path.GetDirectoryName(configfile), "*.part"))
                {
                    String VersionlessName = Path.GetFileName(file);
                    if (VersionlessName.Contains("(v"))
                    {
                        VersionlessName  = VersionlessName.Substring(0, VersionlessName.IndexOf("(v")).Trim();
                        VersionlessName += ".part";
                    }
                    Parts.Add(VersionlessName);
                    String DropboxFile = Path.Combine(DropboxPath, VersionlessName);
                    if (File.Exists(DropboxFile) && File.ReadAllText(DropboxFile) == File.ReadAllText(file))
                    {
                        continue;
                    }
                    Console.WriteLine("Updating " + VersionlessName);

                    XDocument part = XDocument.Load(file);
                    UpdateInfo = part.Root.Element("UpdateInfo");
                    if (UpdateInfo == null)
                    {
                        part.Root.AddFirst(UpdateInfo =
                                               new XElement("UpdateInfo",
                                                            new XElement("Version", File.Exists(DropboxFile.Replace(".part", ".txt")) ? File.ReadAllText(DropboxFile.Replace(".part", ".txt")) : "0"),
                                                            new XElement("Filename", VersionlessName),
                                                            new XElement("PartAddress", config.Url + config.ProjectNameWebFriendly + "/" + VersionlessName),
                                                            new XElement("VersionAddress", config.Url + config.ProjectNameWebFriendly + "/" + Path.GetFileNameWithoutExtension(VersionlessName) + ".txt")
                                                            )
                                           );
                    }
                    if (File.Exists(DropboxFile))
                    {
                        try
                        {
                            XDocument dbver = XDocument.Load(DropboxFile);
                            XElement  obsolete;
                            if ((obsolete = dbver.Root.Element("Obselete")) != null)
                            {
                                obsolete.Name = "Obsolete";
                                Console.WriteLine("Corrected misspelt Obsolete within " + VersionlessName);
                            }
                            if ((obsolete = dbver.Root.Element("Obsolete")) != null)
                            {
                                UpdateInfo.AddAfterSelf(obsolete);
                            }
                        }
                        catch (Exception)
                        {  } // Meh.
                    }
                    UpdateInfo.Element("Version").Value = (int.Parse(UpdateInfo.Element("Version").Value) + 1).ToString();

                    part.Save(file);
                    part.Save(DropboxFile);
                    File.WriteAllText(DropboxFile.Replace(".part", ".txt"), UpdateInfo.Element("Version").Value);
                    if ((index.Root.Elements().FirstOrDefault(xe => xe.Element("Filename").Value == UpdateInfo.Element("Filename").Value)) == null)
                    {
                        index.Root.Add(new XElement("Part", UpdateInfo.Element("Filename"), UpdateInfo.Element("PartAddress")));
                    }
                }
                foreach (XElement part in index.Root.Elements("Part"))
                {
                    if (!Parts.Contains(part.Element("Filename").Value) && Path.GetExtension(part.Element("Filename").Value) == "part")
                    {
                        part.Name = "Obsolete";
                    }
                }
                foreach (XElement part in index.Root.Elements("Obselete"))
                {
                    part.Name = "Obsolete";
                    Console.WriteLine("Corrected misspelt Obsolete for " + part.Element("Filename").Value + " in index.");
                }
                if (!File.Exists(indexFile) || XDocument.Load(indexFile).ToString() != index.ToString())
                {
                    UpdateInfo = index.Root.Element("UpdateInfo");
                    UpdateInfo.Element("Version").Value = (int.Parse(UpdateInfo.Element("Version").Value) + 1).ToString();
                    File.WriteAllText(indexFile.Replace(".index", ".txt"), UpdateInfo.Element("Version").Value);
                    index.Save(indexFile);
                }
            }
            #region DCupdater

            /*
             * if (config.CreateDCUpdaterFile)
             * {
             *  String VersionInfoFile;
             *  XDocument VersionInfo = new XDocument();
             *
             *  if (File.Exists(VersionInfoFile = Environment.ExpandEnvironmentVariables(Path.Combine(config.ExportPath, config.ProjectNameWebFriendly + "Version.xml"))))
             *      VersionInfo = XDocument.Load(VersionInfoFile);
             *  else
             *      VersionInfo = XDocument.Parse(@"<root>
             * <Program_Version>0</Program_Version>
             * <Program_Release_Month></Program_Release_Month>
             * <Program_Release_Day></Program_Release_Day>
             * <Program_Release_Year></Program_Release_Year>
             * </root>");
             *  XElement node;
             *  node = VersionInfo.Root.Element("Program_Version");
             *  int VersionNum = int.Parse(node.Value);
             *  VersionNum++;
             *  node.Value = VersionNum.ToString();
             *  node = VersionInfo.Root.Element("Program_Release_Month");
             *  node.Value = DateTime.UtcNow.Date.Month.ToString();
             *  node = VersionInfo.Root.Element("Program_Release_Day");
             *  node.Value = DateTime.UtcNow.Date.Day.ToString();
             *  node = VersionInfo.Root.Element("Program_Release_Year");
             *  node.Value = DateTime.UtcNow.Date.Year.ToString();
             *  VersionInfo.Save(VersionInfoFile);
             *
             *  String wdpath = Environment.ExpandEnvironmentVariables(Path.Combine("%temp%", new Random().Next().ToString()));
             *  String wdinner;
             *  Directory.CreateDirectory(wdpath);
             *  Directory.CreateDirectory(wdinner = Path.Combine(wdpath, config.FolderName));
             *  foreach (string file in Directory.EnumerateFiles(Path.GetDirectoryName(configfile), "*.part"))
             *  {
             *      String VersionlessName = Path.GetFileName(file);
             *      if (VersionlessName.Contains("(v"))
             *      {
             *          VersionlessName = VersionlessName.Substring(0, VersionlessName.IndexOf("(v")).Trim();
             *          VersionlessName += ".part";
             *      }
             *      File.Copy(file, Path.Combine(wdinner, VersionlessName));
             *  }
             *  foreach (string file in Directory.EnumerateFiles(Path.GetDirectoryName(configfile), "*.dcupdate"))
             *  {
             *      String VersionlessName = Path.GetFileName(file);
             *      File.Copy(file, Path.Combine(wdpath, VersionlessName));
             *  }
             *  foreach (string file in Directory.EnumerateFiles(Path.GetDirectoryName(configfile), "*.bat"))
             *  {
             *      String VersionlessName = Path.GetFileName(file);
             *      File.Copy(file, Path.Combine(wdinner, VersionlessName));
             *  }
             *
             *  String path = Environment.ExpandEnvironmentVariables(Path.Combine(config.ExportPath, config.ProjectNameWebFriendly, config.ProjectName + ".index"));
             *  if (File.Exists(path))
             *      File.Copy(path, Path.Combine(wdinner, config.ProjectName + ".index"));
             *  XmlDocument dcupdate = new XmlDocument();
             *  dcupdate.LoadXml("<?xml version=\"1.0\" ?><Local><Label>" + config.ProjectName
             + " </Label><IconFile>CBLoader.exe</IconFile><Version>" + VersionNum
             + "</Version><VersionFileRemote>" + config.Url + config.ProjectNameWebFriendly + "Version.xml"
             + "</VersionFileRemote><WebPage>" + (config.Webpage != "" ? config.Webpage : config.Url) + "</WebPage><UpdateMethod>unzip</UpdateMethod><CloseForUpdate>CBLoader.exe</CloseForUpdate><UpdateFile>" + config.Url + config.ProjectNameWebFriendly + ".zip" + "</UpdateFile></Local>");
             +  dcupdate.Save(Path.Combine(wdpath, config.ProjectNameWebFriendly + ".dcupdate"));
             +  f.CreateZip(Path.Combine(Environment.ExpandEnvironmentVariables(config.ExportPath), config.ProjectNameWebFriendly + ".zip"), wdpath, true, "");
             +
             +  Directory.Delete(wdpath, true);
             + }
             */
            #endregion
            Console.Write("Done.");
            Console.ReadKey();
        }