Ejemplo n.º 1
0
        private void MetadataMerger_DragDrop(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                return;
            }

            string[] filenames = e.Data.GetData(DataFormats.FileDrop) as string[];
            if (filenames.Length > 1 && Master == null)
            {
                MessageBox.Show("The first file must be dragged in by itself.");
                return;
            }

            foreach (string f in filenames)
            {
                FileInfo file = new FileInfo(f);
                if (file.Extension.ToLower() == ".lnk")
                {
                    file = new FileInfo(WindowsShell.Shortcut.Resolve(f));
                }

                if (!new List <string> {
                    ".xml", ".synthesia"
                }.Contains(file.Extension.ToLower()))
                {
                    Log($"SKIPPING file with unknown extension: {file.Name}");
                    continue;
                }

                RawMetadataFile metadata = new RawMetadataFile(file);
                if (Master == null)
                {
                    Master = metadata;
                    Log($"Setting \"{file.Name}\" as master ({metadata.Statistics})");
                }
                else
                {
                    Log($"Adding contents of \"{file.Name}\" to master ({metadata.Statistics})");
                    if (Master.AddRange(metadata, Log))
                    {
                        Dirty = true;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds all the songs from the passed in metadata file to this one.  Returns true if changes were made to this file.
        /// </summary>
        public bool AddRange(RawMetadataFile other, Action <string> log)
        {
            var theirSongs = other.Raw.XPathSelectElements("/SynthesiaMetadata/Songs/Song");

            if (!theirSongs.Any())
            {
                log("SKIPPING: No songs found.");
                return(false);
            }

            var ourSongs = Raw.Root.Element("Songs");

            bool madeChanges = false;

            foreach (XElement s in theirSongs)
            {
                string id = s.AttributeOrDefault("UniqueId");
                if (string.IsNullOrWhiteSpace(id))
                {
                    log("SKIPPING song without a UniqueId.");
                    continue;
                }

                if (Raw.XPathSelectElement($"/SynthesiaMetadata/Songs/Song[@UniqueId='{id}']") != null)
                {
                    log($"SKIPPING duplicate song \"{s.AttributeOrDefault("Title", "(No Title)")}\"!");
                    continue;
                }

                ourSongs.Add(s);
                madeChanges = true;
            }

            var groups = (from s in other.StatisticsList where s.Key == "Groups" select s.Value).SingleOrDefault();

            if (groups > 0)
            {
                log($"SKIPPING {groups} groups.  Groups must be migrated manually!");
            }

            return(madeChanges);
        }