private async Task OnActivityDisabledAsync(ActivityContainer activity)
        {
            try
            {
                IMessageChannel channel = await _client.GetChannelAsync(activity.ChannelID) as IMessageChannel;

                await channel.DeleteMessageAsync(activity.ActivityID);
            }
            catch { }

            if (activity.PlannedDate > DateTime.UtcNow)
            {
                var builder = ParseActivityContainer(activity);

                foreach (var userID in activity.Users.Take(Activity.GetFireteamSize(activity.ActivityType)).Skip(1))
                {
                    try
                    {
                        var user = await _client.Rest.GetUserAsync(userID);

                        await user.SendMessageAsync($"Ґардіане, вашу активність було скасовано.", embed : builder.Build());
                    }
                    catch { }
                }
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="message"></param>
 /// <returns></returns>
 public static void Serialize(ActivityContainer container, string path)
 {
     using (Stream savestream = new FileStream(path, FileMode.Create))
     {
         XmlSerializer serializer = new XmlSerializer(typeof(ActivityContainer));
         serializer.Serialize(savestream, container);
     }
 }
Ejemplo n.º 3
0
    /* ------------------------------------ */
    /* General Functions */
    /* ------------------------------------ */

    // Use this for initialization
    void Start()
    {
        activityPos[0] = new Vector3(0, 0.10415f, 0);
        activityPos[1] = new Vector3(0, 0.0749f, 0);
        activityPos[2] = new Vector3(0, 0.04565f, 0);
        activityPos[3] = new Vector3(0, 0.0164f, 0);
        activityPos[4] = new Vector3(0, -0.01285f, 0);

        // load
        if (Application.isEditor)
        {
            container = ActivityContainer.Load(Path.Combine(Application.dataPath, "ActivityList.xml"));
        }
        else
        {
            container = ActivityContainer.Load(Path.Combine(Application.persistentDataPath, "ActivityList.xml"));
        }

        if (container == null)
        {
            container = new ActivityContainer();
        }

        foreach (Activity a in container.activities)
        {
            a.reInitializer();
        }

        UpdatePageAmount(storedAct);

        keywords.Add("return", () =>
        {
            this.GetComponent <AudioSource>().PlayOneShot(tap);
            Voice_Return();
        });
        keywords.Add("previous", () =>
        {
            this.GetComponent <AudioSource>().PlayOneShot(tap);
            isVoice = true;
            Voice_Previous();
        });
        keywords.Add("next", () =>
        {
            this.GetComponent <AudioSource>().PlayOneShot(tap);
            isVoice = true;
            Voice_Next();
        });
        keywords.Add("repeat", () =>
        {
            Voice_Repeat();
        });

        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        keywordRecognizer.Start();
    }
Ejemplo n.º 4
0
        public FixedActivityManageViewModel AssembleFixedActivityManageViewModel(EditDetails details)
        {
            bool?         optional = null;
            FixedActivity fixedActivity;

            using (var container = new ActivityContainer())
            {
                if (details.CalledFromEditor)
                {
                    optional = details.IsOptional;

                    if (details.IsOptional)
                    {
                        fixedActivity = container.ActivitySelectedByUserForOptional
                                        .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                        a.ActivityType == ActivityType.FixedActivity) as FixedActivity;
                    }
                    else
                    {
                        fixedActivity = container.ActivitySelectedByUserForSure
                                        .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                        a.ActivityType == ActivityType.FixedActivity) as FixedActivity;
                    }
                }
                else
                {
                    fixedActivity = _unitOfWork.FixedActivityRepository.Get(null, null, a => a.Category, a => a.Labels)
                                    .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                    a.CreationType == CreationType.ManuallyCreated);
                }
            }

            var fixedActivityViewModel = new FixedActivityManageViewModel()
            {
                Id       = details.ActivityId.ToString(),
                Category = fixedActivity.Category?.ToString(),
                CategorySourceCollection = details.Categories,
                Color = fixedActivity.Color.ToString(),
                ColorSourceCollection = details.Colors,
                Description           = fixedActivity.Description,
                EndTime = fixedActivity.End,
                LabelSourceCollection = details.Labels,
                Labels    = fixedActivity.Labels.Select(l => l.Name),
                Name      = fixedActivity.Name,
                Priority  = fixedActivity.Priority,
                StartTime = fixedActivity.Start.GetValueOrDefault(),
                RepeatTypeSourceCollection = details.RepeatTypes,
                EnableRepeatChange         = details.CalledFromEditor,
                RepeatType    = fixedActivity.Repeat?.RepeatPeriod.ToString(),
                RepeatEndDate = fixedActivity.Repeat?.EndDate ?? DateTime.Today.AddDays(7),
                IsOptional    = optional
            };

            return(fixedActivityViewModel);
        }
Ejemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static ActivityContainer Deserialize(string path)
        {
            ActivityContainer files = null;

            using (Stream loadstream = new FileStream(path, FileMode.Open))
            {
                XmlSerializer serializer = new XmlSerializer(typeof(ActivityContainer));
                files = (ActivityContainer)serializer.Deserialize(loadstream);
            }

            return(files);
        }
Ejemplo n.º 6
0
        private EmbedBuilder ParseActivityContainer(ActivityContainer container)
        {
            (var icon, var activityName) = Activity
                                           .GetActivityInfo(container.ActivityType, container.ActivityName);

            var ftSize = Activity.GetFireteamSize(container.ActivityType);

            var users = new List <EmbedFieldBuilder>();

            if (container.Users.Count() > 0)
            {
                var leader = container.Users.FirstOrDefault();
                users.Add(new EmbedFieldBuilder
                {
                    IsInline = false,
                    Name     = "Організатор збору",
                    Value    = $"<@{leader}>"
                });

                var fireteam = container.Users.Skip(1).Take(ftSize - 1);
                if (fireteam.Count() > 0)
                {
                    users.Add(new EmbedFieldBuilder
                    {
                        IsInline = false,
                        Name     = "Бойова група",
                        Value    = string.Join("\n", fireteam.Select(x => $"<@{x}>"))
                    });
                }

                var reserve = container.Users.Skip(ftSize);
                if (reserve.Count() > 0)
                {
                    users.Add(new EmbedFieldBuilder
                    {
                        IsInline = false,
                        Name     = "Лава запасних",
                        Value    = string.Join("\n", reserve.Select(x => $"<@{x}>"))
                    });
                }
            }

            return(new EmbedBuilder()
                   .WithColor(new Color(0xFFFFFF))
                   .WithThumbnailUrl(Emote.Parse(icon).Url)
                   .WithTitle($"{activityName} @ {container.PlannedDate.ToLocalTime().ToString("dd.MM.yyyy HH:mm")}")
                   .WithDescription(container.Description)
                   .WithFields(users));
        }
        private async Task OnActivityRescheduledAsync(ActivityContainer activity)
        {
            var builder = ParseActivityContainer(activity);

            foreach (var userID in activity.Users.Take(Activity.GetFireteamSize(activity.ActivityType)).Skip(1))
            {
                try
                {
                    var user = await _client.Rest.GetUserAsync(userID);

                    await user.SendMessageAsync($"Ґардіане, вашу активність було перенесено.", embed : builder.Build());
                }
                catch { }
            }
        }
        private async Task OnActivityUpdatedAsync(ActivityContainer activity)
        {
            IMessageChannel channel = _client.GetChannel(activity.ChannelID) as IMessageChannel;

            var builder = ParseActivityContainer(activity);

            var componentBuilder = new ComponentBuilder()
                                   .WithButton(customId: "ActivitierSubscribe", style: ButtonStyle.Primary, emote: new Emoji("\U00002795"));

            await channel.ModifyMessageAsync(activity.ActivityID, msg =>
            {
                msg.Content    = string.Join(", ", _destinyRoleIDs.Select(x => $"<@&{x}>"));
                msg.Embed      = builder.Build();
                msg.Components = componentBuilder.Build();
            });
        }
Ejemplo n.º 9
0
        private async Task InitActivityAsync(ActivityContainer container)
        {
            var builder = new EmbedBuilder()
                          .WithColor(0xFFFFFF)
                          .WithTitle(CommonData.DiscordEmoji.Emoji.Loading)
                          .WithDescription("Зачекайте, ініціалізую збір…");

            IMessageChannel channel = _client.GetChannel(container.ChannelID) as IMessageChannel;

            var message = await channel.SendMessageAsync(embed : builder.Build());

            container.ActivityID  = message.Id;
            container.PlannedDate = container.PlannedDate.ToUniversalTime();

            await _activityManager.AddActivityAsync(container);
        }
 public PlatformClient(Uri plusBaseUrl, Uri talkBaseUrl,
     System.Net.CookieContainer cookie, IApiAccessor accessor,
     ICacheDictionary<string, ProfileCache, ProfileData> profileCacheStorage,
     CacheDictionary<string, ActivityCache, ActivityData> activityCacheStorage)
 {
     var handler = new System.Net.Http.HttpClientHandler() { CookieContainer = cookie };
     Cookies = cookie;
     ServiceApi = accessor;
     PlusBaseUrl = plusBaseUrl;
     TalkBaseUrl = talkBaseUrl;
     NormalHttpClient = new System.Net.Http.HttpClient(handler);
     NormalHttpClient.DefaultRequestHeaders.Add("user-agent", ApiAccessorUtility.UserAgent);
     StreamHttpClient = new System.Net.Http.HttpClient(handler);
     StreamHttpClient.Timeout = TimeSpan.FromMinutes(15);
     StreamHttpClient.DefaultRequestHeaders.Add("user-agent", ApiAccessorUtility.UserAgent);
     People = new PeopleContainer(this, profileCacheStorage);
     Activity = new ActivityContainer(this, activityCacheStorage);
     Notification = new NotificationContainer(this);
 }
Ejemplo n.º 11
0
        public DeadlineActivityManageViewModel AssembleDeadlineActivityViewModel(EditDetails details)
        {
            DeadlineActivity deadlineActivity;
            var milestoneStringBuilder = new StringBuilder();

            using (var container = new ActivityContainer())
            {
                if (details.CalledFromEditor)
                {
                    deadlineActivity = container.ActivitySelectedByUserForSure
                                       .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                       a.ActivityType == ActivityType.DeadlineActivity) as DeadlineActivity;
                }
                else
                {
                    deadlineActivity = _unitOfWork.DeadlineActivityRepository.Get(null, null, a => a.Milestones)
                                       .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                       a.CreationType == CreationType.ManuallyCreated);
                }

                foreach (var milestone in deadlineActivity.Milestones)
                {
                    milestoneStringBuilder.Append($"{milestone.Name};{milestone.Time}|");
                }
            }

            var deadlineActivityViewModel = new DeadlineActivityManageViewModel()
            {
                Id               = details.ActivityId.ToString(),
                Description      = deadlineActivity.Description,
                Name             = deadlineActivity.Name,
                EndDate          = deadlineActivity.End.Date,
                StartDate        = deadlineActivity.Start.Date,
                EndTime          = deadlineActivity.End,
                StartTime        = deadlineActivity.Start,
                Milestones       = milestoneStringBuilder.ToString(),
                CalledFromEditor = details.CalledFromEditor
            };

            return(deadlineActivityViewModel);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 在应用程序由最终用户正常启动时进行调用。
        /// 将在启动应用程序以打开特定文件等情况下使用。
        /// </summary>
        /// <param name="e">有关启动请求和过程的详细信息。</param>
        protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
            // 不要在窗口已包含内容时重复应用程序初始化,
            // 只需确保窗口处于活动状态
            if (!(Window.Current.Content is ActivityContainer rootFrame))
            {
                // 创建要充当导航上下文的框架,并导航到第一页
                rootFrame = new ActivityContainer
                {
                    ActivityTransition = new AlphaAnimation()
                };
                rootFrame.Navigated += RootFrameOnNavigated;
                SystemNavigationManager.GetForCurrentView().BackRequested += (sender, args) => rootFrame.GoBack();

                //rootFrame.NavigationFailed += OnNavigationFailed;

                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                {
                    //TODO: 从之前挂起的应用程序加载状态
                }

                // 将框架放在当前窗口中
                Window.Current.Content = rootFrame;
            }

            if (e.PrelaunchActivated == false)
            {
                if (rootFrame.Content == null)
                {
                    // 当导航堆栈尚未还原时,导航到第一页,
                    // 并通过将所需信息作为导航参数传入来配置
                    // 参数
                    rootFrame.Navigate(typeof(MainPage), e.Arguments);
                }
                // 确保当前窗口处于活动状态
                Window.Current.Activate();
            }
        }
Ejemplo n.º 13
0
        public UndefinedActivityManageViewModel AssembleUndefinedActivityViewModel(EditDetails details)
        {
            UndefinedActivity undefinedActivity;

            using (var container = new ActivityContainer())
            {
                if (details.CalledFromEditor)
                {
                    undefinedActivity = container.ActivitySelectedByUserForOptional
                                        .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                        a.ActivityType == ActivityType.UndefinedActivity) as UndefinedActivity;
                }
                else
                {
                    undefinedActivity = _unitOfWork.UndefinedActivityRepository.Get(null, null, a => a.Category, a => a.Labels)
                                        .FirstOrDefault(a => a.Id == details.ActivityId &&
                                                        a.CreationType == CreationType.ManuallyCreated);
                }
            }

            var undefinedActivityViewModel = new UndefinedActivityManageViewModel()
            {
                Id       = details.ActivityId.ToString(),
                Category = undefinedActivity.Category?.ToString(),
                CategorySourceCollection = details.Categories,
                Color = undefinedActivity.Color.ToString(),
                ColorSourceCollection = details.Colors,
                Description           = undefinedActivity.Description,
                LabelSourceCollection = details.Labels,
                Labels           = undefinedActivity.Labels.Select(x => x.Name),
                Name             = undefinedActivity.Name,
                CalledFromEditor = details.CalledFromEditor,
                MaximumTime      = undefinedActivity.MaximumTime,
                MinimumTime      = undefinedActivity.MinimumTime
            };

            return(undefinedActivityViewModel);
        }
Ejemplo n.º 14
0
        private async Task OnActivityNotificationAsync(ActivityContainer activity)
        {
            var builder = ParseActivityContainer(activity);

            var ftSize = Activity.GetFireteamSize(activity.ActivityType);

            string notes = "!";

            if (ftSize > activity.Users.Count())
            {
                notes = ", але необхідна кількість ґардіанів не назбиралася!";
            }

            foreach (var userID in activity.Users.Take(ftSize))
            {
                try
                {
                    var user = await _client.Rest.GetUserAsync(userID);

                    await user.SendMessageAsync($"Ґардіане, незабаром у вас розпочнеться активність{notes}", embed : builder.Build());
                }
                catch { }
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used such as when the application is launched to open a specific file.
        /// </summary>
        /// <param name="e">Details about the launch request and process.</param>
        protected override void OnLaunched(LaunchActivatedEventArgs e)
        {
            var rootFrame = Window.Current.Content as ActivityContainer;

            // Do not repeat app initialization when the Window already has content,
            // just ensure that the window is active
            if (rootFrame == null)
            {
                // Create a Frame to act as the navigation context and navigate to the first page
                rootFrame = new ActivityContainer();

                //rootFrame.NavigationFailed k+= OnNavigationFailed;
                rootFrame.Navigated += RootFrameOnNavigated;
                SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                {
                    //TODO: Load state from previously suspended application
                }

                // Place the frame in the current Window
                Window.Current.Content = rootFrame;
            }

            if (e.PrelaunchActivated == false)
            {
                if (rootFrame.Content == null)
                {
                    // When the navigation stack isn't restored navigate to the first page,
                    // configuring the new page by passing required information as a navigation
                    // parameter
                    rootFrame.Navigate(typeof(StorageActivity));
                }
                // Ensure the current window is active
                Window.Current.Activate();
            }
        }
Ejemplo n.º 16
0
 private void InitActivityContainer()
 {
     activityContainer = new ActivityContainer(this, "Mario");
 }
Ejemplo n.º 17
0
 public void Save(ActivityContainer container)
 {
     Serialize(container, _filePath);
 }
Ejemplo n.º 18
0
        public ActivityContainer GetContainer()
        {
            ActivityContainer container = Deserialize(_filePath);

            return(container);
        }
Ejemplo n.º 19
0
 protected override void OnCreate(Bundle savedInstanceState)
 {
     base.OnCreate(savedInstanceState);
     _rootActivityContainer = new ActivityContainer(this);
     SetContentView(_rootActivityContainer);
 }
Ejemplo n.º 20
0
        private async Task ActivitySelectMenuExecutedAsync(SocketMessageComponent component)
        {
            switch (component.Data.CustomId)
            {
            case "QuickActivitySelector":
            {
                var builder = new EmbedBuilder()
                              .WithColor(new Color(0xFFFFFF))
                              .WithDescription("Оберіть зручний час");

                var menuBuilder = new SelectMenuBuilder()
                                  .WithPlaceholder("Оберіть час")
                                  .WithCustomId(string.Join(',', component.Data.Values))
                                  .WithMinValues(1).WithMaxValues(1);

                var startDate = DateTime.Now;
                var endDate   = startDate.AddHours(12);
                var tmpDate   = startDate.AddMinutes(30);

                while (tmpDate < endDate)
                {
                    menuBuilder = menuBuilder.AddOption(tmpDate.ToString("dd.MM HH:mm"), tmpDate.ToString("dd.MM_HH:mm"));
                    tmpDate     = tmpDate.AddMinutes(30);
                }

                var componentBuilder = new ComponentBuilder()
                                       .WithSelectMenu(menuBuilder);

                await component.RespondAsync(embed : builder.Build(), components : componentBuilder.Build(), ephemeral : true);
            }
            break;

            case string c
                when c.StartsWith("QuickActivity_"):
            {
                var raid = new ActivityContainer()
                {
                    ChannelID    = component.Channel.Id,
                    ActivityType = Enum.Parse <BungieSharper.Entities.Destiny.HistoricalStats.Definitions.DestinyActivityModeType>(c.Split('_')[1]),
                    PlannedDate  = DateTime.ParseExact(string.Join(',', component.Data.Values), "dd.MM_HH:mm", CultureInfo.CurrentCulture),
                    ActivityName = null,
                    Description  = null,
                    Users        = new ulong[] { component.User.Id }
                };

                await component.DeferAsync();

                await InitActivityAsync(raid);
            }
            break;

            case string c
                when c.StartsWith("QuickRaid_"):
            {
                var raid = new ActivityContainer()
                {
                    ChannelID    = component.Channel.Id,
                    ActivityType = BungieSharper.Entities.Destiny.HistoricalStats.Definitions.DestinyActivityModeType.Raid,
                    PlannedDate  = DateTime.ParseExact(string.Join(',', component.Data.Values), "dd.MM_HH:mm", CultureInfo.CurrentCulture),
                    ActivityName = c.Split('_')[1],
                    Description  = null,
                    Users        = new ulong[] { component.User.Id }
                };

                await component.DeferAsync();

                await InitActivityAsync(raid);
            }
            break;

            default: break;
            }
        }
Ejemplo n.º 21
0
 public void SetContainer(ActivityContainer activityContainer)
 {
     this.container = activityContainer;
 }
Ejemplo n.º 22
0
 // Update is called once per frame
 private void InitActivityContainer()
 {
     activityContainer = new ActivityContainer(this, "Enemy");
 }
Ejemplo n.º 23
0
        /// <summary>
        /// 在应用程序由最终用户正常启动时进行调用。
        /// 将在启动应用程序以打开特定文件等情况下使用。
        /// </summary>
        /// <param name="e">有关启动请求和过程的详细信息。</param>
        protected override async void OnLaunched(LaunchActivatedEventArgs e)
        {
            var titleBar = ApplicationView.GetForCurrentView().TitleBar;

            titleBar.BackgroundColor               = Color.FromArgb(255, 63, 81, 181);
            titleBar.InactiveBackgroundColor       = Color.FromArgb(255, 63, 81, 181);
            titleBar.ButtonForegroundColor         = Colors.White;
            titleBar.ButtonBackgroundColor         = Color.FromArgb(255, 63, 81, 181);
            titleBar.ButtonInactiveBackgroundColor = Color.FromArgb(255, 63, 81, 181);
            titleBar.ForegroundColor               = Colors.White;
            ImageCache.Instance.CacheDuration      = TimeSpan.FromDays(7);
            ImageCache.Instance.InitializeAsync(ApplicationData.Current.TemporaryFolder,
                                                "CachePics").Wait();
            var localSettings = ApplicationData.Current.LocalSettings;

            if (localSettings.Values["Cookies"] != null)
            {
                var cookiesHeader = (string)localSettings.Values["Cookies"];
                var container     = ApiClient.Handler.CookieContainer;
                foreach (var item in Regex.Split(cookiesHeader, "; "))
                {
                    var index = item.IndexOf('=');
                    if (index < 0)
                    {
                        continue;
                    }
                    var name  = item.Substring(0, index);
                    var value = item.Substring(index + 1);
                    container.Add(new Uri("https://www.v2ex.com"), new Cookie(name, value));
                }
            }
            var rootFrame = Window.Current.Content as ActivityContainer;

            // 不要在窗口已包含内容时重复应用程序初始化,
            // 只需确保窗口处于活动状态
            if (rootFrame == null)
            {
                // 创建要充当导航上下文的框架,并导航到第一页
                rootFrame = new ActivityContainer();
                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
                {
                    //TODO: 从之前挂起的应用程序加载状态
                }

                // 将框架放在当前窗口中
                Window.Current.Content = rootFrame;
            }

            if (e.PrelaunchActivated == false)
            {
                if (rootFrame.Content == null)
                {
                    // 当导航堆栈尚未还原时,导航到第一页,
                    // 并通过将所需信息作为导航参数传入来配置
                    // 参数
                    try
                    {
                        var html = await ApiClient.GetMainPage();

                        var r = new HtmlParser().ParseDocument(html).GetElementById("Top").TextContent.Contains("登出");
                        rootFrame.Navigate(r ? typeof(MainPage) : typeof(UserLoginView));
                    }
                    catch
                    {
                        rootFrame.Navigate(typeof(UserLoginView));
                    }
                }
                // 确保当前窗口处于活动状态
                Window.Current.Activate();
            }
        }