Example #1
0
        internal void PopulateEditorList(AchievementScriptInterpreter interpreter)
        {
            var editors = new List <ViewerViewModelBase>();

            if (Script != null)
            {
                editors.Add(Script);
            }

            var selectedEditor = (SelectedEditor != null) ? SelectedEditor.Title : null;

            if (interpreter != null)
            {
                GeneratedAchievementCount = interpreter.Achievements.Count();
                editors.Capacity         += GeneratedAchievementCount;

                if (!String.IsNullOrEmpty(interpreter.RichPresence))
                {
                    var richPresenceViewModel = new RichPresenceViewModel(this, interpreter.RichPresence);
                    if (richPresenceViewModel.Lines.Any())
                    {
                        richPresenceViewModel.SourceLine = interpreter.RichPresenceLine;
                        editors.Add(richPresenceViewModel);
                    }
                }

                foreach (var achievement in interpreter.Achievements)
                {
                    var achievementViewModel = new AchievementViewModel(this);
                    achievementViewModel.Generated.Asset = achievement;
                    editors.Add(achievementViewModel);
                }

                foreach (var leaderboard in interpreter.Leaderboards)
                {
                    var leaderboardViewModel = new LeaderboardViewModel(this);
                    leaderboardViewModel.Generated.Asset = leaderboard;
                    editors.Add(leaderboardViewModel);
                }
            }
            else
            {
                GeneratedAchievementCount = 0;
            }

            if (_publishedAchievements.Count > 0 || _publishedLeaderboards.Count > 0)
            {
                MergePublished(editors);
            }

            if (_localAssets != null)
            {
                MergeLocal(editors);
            }

            UpdateTemporaryIds(editors);

            SelectedEditor = editors.FirstOrDefault(e => e.Title == selectedEditor);
            Editors        = editors;
        }
Example #2
0
        private void MergeAchievements(List <ViewerViewModelBase> editors, IEnumerable <AssetBase> assets,
                                       Action <AssetViewModelBase, AssetBase> assign)
        {
            var mergeAssets = new List <AssetBase>(assets);

            if (mergeAssets.Count == 0)
            {
                return;
            }

            var assetEditors = new List <AssetViewModelBase>();

            if (assets.First() is Achievement)
            {
                assetEditors.AddRange(editors.OfType <AchievementViewModel>());
            }
            else
            {
                assetEditors.AddRange(editors.OfType <LeaderboardViewModel>());
            }

            // first pass - look for ID matches
            for (int i = assetEditors.Count - 1; i >= 0; i--)
            {
                AssetBase mergeAsset  = null;
                var       assetEditor = assetEditors[i];

                if (assetEditor.Generated.Id > 0)
                {
                    mergeAsset = mergeAssets.FirstOrDefault(a => a.Id == assetEditor.Generated.Id);
                }
                if (mergeAsset == null && assetEditor.Published.Id > 0)
                {
                    mergeAsset = mergeAssets.FirstOrDefault(a => a.Id == assetEditor.Published.Id);
                }

                if (mergeAsset != null)
                {
                    assign(assetEditor, mergeAsset);

                    mergeAssets.Remove(mergeAsset);
                    assetEditors.RemoveAt(i);
                }
            }

            // second pass - look for title matches
            for (int i = mergeAssets.Count - 1; i >= 0; i--)
            {
                var mergeAsset  = mergeAssets[i];
                var assetEditor = assetEditors.FirstOrDefault(a =>
                                                              (String.Compare(a.Generated.Title.Text, mergeAsset.Title, StringComparison.InvariantCultureIgnoreCase) == 0 ||
                                                               String.Compare(a.Published.Title.Text, mergeAsset.Title, StringComparison.InvariantCultureIgnoreCase) == 0)
                                                              );

                if (assetEditor != null)
                {
                    assign(assetEditor, mergeAsset);

                    mergeAssets.RemoveAt(i);
                    assetEditors.Remove(assetEditor);
                }
            }

            // third pass - look for description matches
            for (int i = mergeAssets.Count - 1; i >= 0; i--)
            {
                var mergeAsset  = mergeAssets[i];
                var assetEditor = assetEditors.FirstOrDefault(a =>
                                                              String.Compare(a.Generated.Description.Text, mergeAsset.Description, StringComparison.InvariantCultureIgnoreCase) == 0);

                if (assetEditor != null)
                {
                    assign(assetEditor, mergeAsset);

                    mergeAssets.RemoveAt(i);
                    assetEditors.Remove(assetEditor);
                }
            }

            // TODO: attempt to match requirements

            // create new entries for each remaining unmerged achievement
            foreach (var mergeAsset in mergeAssets)
            {
                AssetViewModelBase assetEditor;

                if (mergeAsset is Achievement)
                {
                    assetEditor = new AchievementViewModel(this);
                }
                else
                {
                    assetEditor = new LeaderboardViewModel(this);
                }

                assign(assetEditor, mergeAsset);
                editors.Add(assetEditor);
            }
        }