예제 #1
0
        ///========================================================================
        /// Method : publishToolStripMenuItem_Click
        ///
        /// <summary>
        ///     The Publish operation
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ///========================================================================
        private void publishToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PublishForm lForm = new PublishForm(this);

            if (RootChunk is VersionList)
            {
                //=====================================================================
                // Use the properties saved on the VersionList as defaults
                //=====================================================================
                VersionList lVersionList = (VersionList)RootChunk;

                if (lVersionList.CDFilename != null && lVersionList.CDFilename != "")
                {
                    lForm.CourseDropDown.SelectedItem = MMCD.Courses.Find(new Predicate <MMCD.Course>(
                                                                              delegate(MMCD.Course xiCourse) { return(xiCourse.FileName == lVersionList.CDFilename); }));
                }

                if (lVersionList.BinaryFilename != null && lVersionList.BinaryFilename != "")
                {
                    lForm.BinaryFileTextBox.Text = lVersionList.BinaryFilename;
                }

                if (lVersionList.CourseName != null && lVersionList.CourseName != "")
                {
                    lForm.NameTextBox.Text = lVersionList.CourseName;
                }
            }

            if (lForm.ShowDialog() == DialogResult.OK)
            {
                FileInfo lBinaryFile = new FileInfo(lForm.BinaryFileTextBox.Text);

                //=====================================================================
                // If we want to keep backups, make one now
                //=====================================================================
                if (lForm.BackupsCheckBox.Checked && lBinaryFile.Exists)
                {
                    string lBackupExtension = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss.bak");
                    string lBackupPath      = Path.Combine(Path.GetDirectoryName(lForm.BinaryFileTextBox.Text), "Backups");

                    if (!Directory.Exists(lBackupPath))
                    {
                        Directory.CreateDirectory(lBackupPath);
                    }

                    string lBackupFile = Path.Combine(lBackupPath,
                                                      Path.GetFileNameWithoutExtension(lForm.BinaryFileTextBox.Text) + "." + lBackupExtension);
                    lBinaryFile.CopyTo(lBackupFile);

                    //===================================================================
                    // Remove any outdated backups
                    //===================================================================
                    FileInfo[] lAllBackups = Array.ConvertAll <string, FileInfo>(Directory.GetFiles(lBackupPath,
                                                                                                    Path.GetFileNameWithoutExtension(lForm.BinaryFileTextBox.Text) + ".*.bak"),
                                                                                 new Converter <string, FileInfo>(delegate(string xiFilename)
                    {
                        return(new FileInfo(xiFilename));
                    }));
                    Utils.ArrayStableSort(lAllBackups, x => x.CreationTime);

                    for (int ii = (int)lForm.BackupCountUpDown.Value; ii < lAllBackups.Length; ii++)
                    {
                        lAllBackups[ii].Delete();
                    }
                }

                //=====================================================================
                // Save the binary file
                //=====================================================================
                using (FileStream lFileStream = lBinaryFile.Create())
                {
                    CurrentLevel.Serialise(lFileStream);
                }

                if (lForm.UpdateCDImageCheckBox.Checked)
                {
                    //===================================================================
                    // Update the CD image
                    //===================================================================
                    FileInfo    lCDFile     = new FileInfo(lForm.CDImageTextBox.Text);
                    CDImage     lImage      = new CDImage(lCDFile);
                    MMCD.Course lCourse     = (MMCD.Course)lForm.CourseDropDown.SelectedItem;
                    byte[]      lBinaryData = new byte[lCourse.CDLength];

                    lBinaryFile.Refresh();
                    if (lBinaryFile.Length != lCourse.CDLength)
                    {
                        MessageBox.Show("File is the wrong length! It will be padded with zeros or truncated to fit on the CD.", "Publish Course", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }

                    using (FileStream lFileStream = lBinaryFile.OpenRead())
                    {
                        lFileStream.Read(lBinaryData, 0, (int)Math.Min(lBinaryData.Length, lBinaryFile.Length));
                    }

                    lImage.Replace(lBinaryData, lCourse.CDOffset);
                    lImage.WriteFile(lCDFile);

                    byte[] lCourseNameForCD = Encoding.ASCII.GetBytes(lCourse.GetCDCourseName(lForm.NameTextBox.Text));

                    foreach (long lNameOffset in lCourse.NameOffsets)
                    {
                        lImage.Replace(lCourseNameForCD, lNameOffset);
                        lImage.WriteFile(lCDFile);
                    }
                }

                if (RootChunk is VersionList)
                {
                    //===================================================================
                    // Update the properties saved on the VersionList
                    //===================================================================
                    VersionList lVersionList = (VersionList)RootChunk;
                    lVersionList.BinaryFilename = lForm.BinaryFileTextBox.Text;

                    if (lForm.UpdateCDImageCheckBox.Checked)
                    {
                        lVersionList.CDFilename = ((MMCD.Course)lForm.CourseDropDown.SelectedItem).FileName;
                        lVersionList.CourseName = lForm.NameTextBox.Text;
                    }

                    //===================================================================
                    // Save the VersionList
                    //===================================================================
                    if (mCurrentFile != null)
                    {
                        SaveInternal(mCurrentFileMode, mCurrentFile);
                    }
                }
            }
        }
예제 #2
0
        ///========================================================================
        /// Method : publishToolStripMenuItem_Click
        /// 
        /// <summary>
        /// 	The Publish operation
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ///========================================================================
        private void publishToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PublishForm lForm = new PublishForm(this);

              if (RootChunk is VersionList)
              {
            //=====================================================================
            // Use the properties saved on the VersionList as defaults
            //=====================================================================
            VersionList lVersionList = (VersionList)RootChunk;

            if (lVersionList.CDFilename != null && lVersionList.CDFilename != "")
            {
              lForm.CourseDropDown.SelectedItem = MMCD.Courses.Find(new Predicate<MMCD.Course>(
            delegate (MMCD.Course xiCourse) { return xiCourse.FileName == lVersionList.CDFilename; }));
            }

            if (lVersionList.BinaryFilename != null && lVersionList.BinaryFilename != "")
            {
              lForm.BinaryFileTextBox.Text = lVersionList.BinaryFilename;
            }

            if (lVersionList.CourseName != null && lVersionList.CourseName != "")
            {
              lForm.NameTextBox.Text = lVersionList.CourseName;
            }
              }

              if (lForm.ShowDialog() == DialogResult.OK)
              {
            FileInfo lBinaryFile = new FileInfo(lForm.BinaryFileTextBox.Text);

            //=====================================================================
            // If we want to keep backups, make one now
            //=====================================================================
            if (lForm.BackupsCheckBox.Checked && lBinaryFile.Exists)
            {
              string lBackupExtension = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss.bak");
              string lBackupPath = Path.Combine(Path.GetDirectoryName(lForm.BinaryFileTextBox.Text), "Backups");

              if (!Directory.Exists(lBackupPath))
              {
            Directory.CreateDirectory(lBackupPath);
              }

              string lBackupFile = Path.Combine(lBackupPath,
            Path.GetFileNameWithoutExtension(lForm.BinaryFileTextBox.Text) + "." + lBackupExtension);
              lBinaryFile.CopyTo(lBackupFile);

              //===================================================================
              // Remove any outdated backups
              //===================================================================
              FileInfo[] lAllBackups = Array.ConvertAll<string, FileInfo>(Directory.GetFiles(lBackupPath,
            Path.GetFileNameWithoutExtension(lForm.BinaryFileTextBox.Text) + ".*.bak"),
            new Converter<string, FileInfo>(delegate(string xiFilename)
            {
              return new FileInfo(xiFilename);
            }));
              Utils.ArrayStableSort(lAllBackups, x => x.CreationTime);

              for (int ii = (int)lForm.BackupCountUpDown.Value; ii < lAllBackups.Length; ii++)
              {
            lAllBackups[ii].Delete();
              }
            }

            //=====================================================================
            // Save the binary file
            //=====================================================================
            using (FileStream lFileStream = lBinaryFile.Create())
            {
              CurrentLevel.Serialise(lFileStream);
            }

            if (lForm.UpdateCDImageCheckBox.Checked)
            {
              //===================================================================
              // Update the CD image
              //===================================================================
              FileInfo lCDFile = new FileInfo(lForm.CDImageTextBox.Text);
              CDImage lImage = new CDImage(lCDFile);
              MMCD.Course lCourse = (MMCD.Course)lForm.CourseDropDown.SelectedItem;
              byte[] lBinaryData = new byte[lCourse.CDLength];

              lBinaryFile.Refresh();
              if (lBinaryFile.Length != lCourse.CDLength)
              {
            MessageBox.Show("File is the wrong length! It will be padded with zeros or truncated to fit on the CD.", "Publish Course", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
              }

              using (FileStream lFileStream = lBinaryFile.OpenRead())
              {
            lFileStream.Read(lBinaryData, 0, (int)Math.Min(lBinaryData.Length, lBinaryFile.Length));
              }

              lImage.Replace(lBinaryData, lCourse.CDOffset);
              lImage.WriteFile(lCDFile);

              byte[] lCourseNameForCD = Encoding.ASCII.GetBytes(lCourse.GetCDCourseName(lForm.NameTextBox.Text));

              foreach (long lNameOffset in lCourse.NameOffsets)
              {
            lImage.Replace(lCourseNameForCD, lNameOffset);
            lImage.WriteFile(lCDFile);
              }
            }

            if (RootChunk is VersionList)
            {
              //===================================================================
              // Update the properties saved on the VersionList
              //===================================================================
              VersionList lVersionList = (VersionList)RootChunk;
              lVersionList.BinaryFilename = lForm.BinaryFileTextBox.Text;

              if (lForm.UpdateCDImageCheckBox.Checked)
              {
            lVersionList.CDFilename = ((MMCD.Course)lForm.CourseDropDown.SelectedItem).FileName;
            lVersionList.CourseName = lForm.NameTextBox.Text;
              }

              //===================================================================
              // Save the VersionList
              //===================================================================
              if (mCurrentFile != null)
              {
            SaveInternal(mCurrentFileMode, mCurrentFile);
              }
            }
              }
        }