예제 #1
0
        private static async Task ProcessaAtividades(ProjectType tipo)
        {
            var projeto = Services.Data.RecuperarDadosProjeto(tipo);

            var parametros = new List <string>
            {
                $"date_from=",
                //$"date_from={DateTime.Now.Date:yyyy-MM-dd}+00%3A00%3A00",
                $"date_to=",
                //$"date_to={DateTime.Now.Date:yyyy-MM-dd}+23%3A59%3A59",
                "user_id=0",
                $"project_id={projeto.ProjectId}",
                "language_id=0",
                "type=0",
                "translation_id=0",
                "after_build=0",
                "before_build=0",
                "request=4"
            };

            Console.WriteLine($"Ultimo ID: {projeto.LastMessageId}");
            Console.WriteLine($"Processando as atividades do {tipo.AsString(EnumFormat.Description)}");

            Console.WriteLine("Criando WebRequest...");
            var url          = @"https://crowdin.com/backend/project_actions/activity_stream?" + string.Join("&", parametros);
            var requiscaoWeb = WebRequest.CreateHttp(url);

            requiscaoWeb.Method = "GET";
            requiscaoWeb.Headers.Add(HttpRequestHeader.Cookie, "cid = p6rub4sco6ppa8u0mabaqvs5e4; csrf_token=oe8d08chu6;");
            requiscaoWeb.Headers.Add("x-csrf-token", "oe8d08chu6");
            Console.WriteLine("Criado WebRequest...");

            Console.WriteLine("Lendo WebRequest...");
            using (var resposta = requiscaoWeb.GetResponse())
            {
                var streamDados = resposta.GetResponseStream();

                Console.WriteLine("Obtido informações do WebRequest...");
                StreamReader reader      = new StreamReader(streamDados);
                object       objResponse = reader.ReadToEnd();
                Console.WriteLine("Lido informações do WebRequest...");

                var activityStream = JsonConvert.DeserializeObject <ActivityStreamDTO>(objResponse.ToString());
                Console.WriteLine("Deserializado informações do WebRequest...");

                var quantidade = activityStream.Activity.Count;
                var skip       = 0;
                Console.WriteLine($"Atividades encontradas: {quantidade}");

                while (quantidade > skip)
                {
                    var mensagens = new StringBuilder();

                    foreach (var atividade in activityStream.Activity.Skip(skip).Take(5))
                    {
                        // Comentado temporariamente
                        if (atividade.Id == projeto.LastMessageId)
                        {
                            skip = quantidade;
                            break;
                        }

                        atividade.Message = $"{atividade.Message} no dia {atividade.DateTime.ToShortDateString()} às {atividade.DateTime.TimeOfDay.Add(new TimeSpan(1, 0, 0))}";

                        Console.WriteLine(atividade.Message);

                        mensagens.AppendLine(Tradutor(Regex.Replace(atividade.Message, "<.*?>", string.Empty)));

                        Console.WriteLine(mensagens.ToString());
                    }

                    if (mensagens.Length == 0)
                    {
                        streamDados.Close();
                        resposta.Close();

                        Console.WriteLine("Não há mensagens para serem processadas!");
                        return;
                    }

                    // Comentado temporariamente
                    Services.Data.AtualizarProjeto(tipo, activityStream.Activity.First().Id);
                    EnviarMensagemDiscord(mensagens.ToString(), projeto.UrlDiscord, projeto.UrlCrowdin).Wait();
                    skip += 5;
                }

                streamDados.Close();
                resposta.Close();
            }

            Console.WriteLine("Fim do processamento da mensagem");
        }