예제 #1
0
        public static void RunStrongAlgorithm <TInternal, TExternal, TInternalKey, TExternalKey>(
            IEnumerable <TInternal> internals,
            IEnumerable <TExternal> externals,
            MatchHandlersAndKeys <TInternal, TExternal, TInternalKey, TExternalKey> handlers)
            where TInternal : class
            where TExternal : class
        {
            var manualMatchViewModel = new ManualMatchViewModel <TInternal, TExternal>(handlers.Handlers);
            var pendingData          = new MatchingPendingData <TInternal, TExternal>(internals, externals);

            var idMatch       = new TwoDirectionalIdMatch <TInternal, TExternal, TInternalKey, TExternalKey>(pendingData, handlers.KeySet);
            var idMatchResult = idMatch.Run();

            manualMatchViewModel.Pull(idMatchResult);
            pendingData = idMatchResult.GetPendingData();

            var nameMatch       = new NameMatch <TInternal, TExternal>(pendingData, handlers.Handlers);
            var nameMatchResult = nameMatch.Run();

            manualMatchViewModel.Pull(nameMatchResult);
            pendingData = nameMatchResult.GetPendingData();

            manualMatchViewModel.Pull(pendingData);

            manualMatchViewModel.Prepare();
            var window = new Tuto.Publishing.Views.ManualMatch();

            window.DataContext = manualMatchViewModel;
            window.ShowDialog();

            if (window.DialogResult == true)
            {
                manualMatchViewModel.Push(handlers.Updaters);
            }
        }
예제 #2
0
        void PullClips(Item root)
        {
            var clips = GetYoutubeClips();

            if (clips == null)
            {
                return;
            }

            var lectures = root.Subtree().OfType <VideoWrap>();

            var clipHandler    = new Matching.MatchItemHandler <YoutubeClip>(z => z.GetProperName(), z => z.Name, z => Process.Start(z.VideoURLFull));
            var lectureHandler = new Matching.MatchItemHandler <VideoWrap>(z => z.Caption, z => z.Caption, z => { });
            var updaters       = new Matching.MatchUpdater <VideoWrap, YoutubeClip>(
                (wrap, clip) => wrap.Store <YoutubeClip>(clip),
                (clip, wrap) => { clip.UpdateGuid(wrap.Guid); YoutubeApisProcessor.Current.UpdateVideo(clip); },
                wrap => wrap.Store <YoutubeClip>(null),
                clip => { clip.UpdateGuid(null); YoutubeApisProcessor.Current.UpdateVideo(clip); }
                );

            var handlers = new Matching.MatchHandlers <VideoWrap, YoutubeClip>(lectureHandler, clipHandler);

            var keys = new Matching.MatchKeySet <VideoWrap, YoutubeClip, Guid?, string>(
                wrap => wrap.Guid,
                wrap => { var c = wrap.Get <YoutubeClip>(); if (c != null)
                          {
                              return(c.Id);
                          }
                          return(null); },
                clip => clip.GetGuid(),
                clip => clip.Id,
                guid => !guid.HasValue,
                id => id == null
                );
            var allData = new Matching.MatchHandlersAndKeys <VideoWrap, YoutubeClip, Guid?, string>(handlers, keys, updaters);

            Matching.MatchingAlgorithm.RunStrongAlgorithm(lectures, clips, allData);
        }