diff --git a/GUT.Schedule/GUTSchedule.Droid/Resources/Resource.designer.cs b/GUT.Schedule/GUTSchedule.Droid/Resources/Resource.designer.cs
index 8f3d861..fce2a8c 100644
--- a/GUT.Schedule/GUTSchedule.Droid/Resources/Resource.designer.cs
+++ b/GUT.Schedule/GUTSchedule.Droid/Resources/Resource.designer.cs
@@ -15,7 +15,7 @@ namespace GUTSchedule.Droid
{
- [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
public partial class Resource
{
diff --git a/GUT.Schedule/GUTSchedule.Droid/Resources/values-ru/strings.xml b/GUT.Schedule/GUTSchedule.Droid/Resources/values-ru/strings.xml
index d617661..a62db0a 100644
--- a/GUT.Schedule/GUTSchedule.Droid/Resources/values-ru/strings.xml
+++ b/GUT.Schedule/GUTSchedule.Droid/Resources/values-ru/strings.xml
@@ -51,7 +51,7 @@
Добавить расписание
- ©2020 Михаил Гордеев, ИКСС, ИКТ-907
+ ©2020 Михаил Гордеев, ИСиТ, ИСТ-942
Очистить расписание
Сообщить об ошибке
@@ -81,7 +81,7 @@
О приложении
Приложение для экспорта перподавательского и учебного расписаний Санкт-Петербургского Государственного Университета Телекоммуникаций им. проф. М.А. Бонч-Бруевича
- Разработано Михаилом Гордеевым, ИКТ-907, ИКСС в Научно-образовательном центре \"Технологии информационных образовательных систем\"
+ Разработано Михаилом Гордеевым, ИСТ-942, ИСиТ в Научно-образовательном центре \"Технологии информационных образовательных систем\"
Свой вклад в разработку внесли
Особые благодарности
diff --git a/GUT.Schedule/GUTSchedule.Droid/Resources/values/strings.xml b/GUT.Schedule/GUTSchedule.Droid/Resources/values/strings.xml
index 559620c..d6a6cf5 100644
--- a/GUT.Schedule/GUTSchedule.Droid/Resources/values/strings.xml
+++ b/GUT.Schedule/GUTSchedule.Droid/Resources/values/strings.xml
@@ -50,7 +50,7 @@
Add schedule
- ©2020 Michael Gordeev, INS, ICT-907
+ ©2020 Michael Gordeev, IST, IST-942
Clear schedule
Report error
@@ -79,7 +79,7 @@
About application
Application for SPbSUT professors\' and students\' schedule export
- Developed by Michael Gordeev (ICT-907, INS) in the \"Technologies of Informational and Educational Systems\" Research Facility
+ Developed by Michael Gordeev (IST-942, IST) in the \"Technologies of Informational and Educational Systems\" Research and Educational Center
Contributors
Special thanks
@@ -93,7 +93,7 @@
Useful links
Privacy policy
GitHub Repository
- \"TIES\" RF
+ \"TIES\" REC
SPbSUT
Leave feedback
diff --git a/GUT.Schedule/GUTSchedule.Test/AnonymousScheduleUnitTest.cs b/GUT.Schedule/GUTSchedule.Test/AnonymousScheduleUnitTest.cs
new file mode 100644
index 0000000..93b81f8
--- /dev/null
+++ b/GUT.Schedule/GUTSchedule.Test/AnonymousScheduleUnitTest.cs
@@ -0,0 +1,96 @@
+using System;
+using System.Threading.Tasks;
+using GUTSchedule.Models;
+using NUnit.Framework;
+
+namespace GUTSchedule.Test
+{
+ public class AnonymousScheduleUnitTest
+ {
+ [Test]
+ public async Task FacultiesListTest()
+ {
+ var list = await Parser.GetFaculties();
+ Assert.IsNotNull(list);
+ Assert.IsTrue(list.Count > 0);
+
+ Console.WriteLine("Faculties list:");
+ list.ForEach(i =>
+ Console.WriteLine($"{i.name} ({i.id})"));
+ }
+
+ [Test]
+ public async Task GroupListTest()
+ {
+ var faculties = await Parser.GetFaculties();
+ if (faculties == null || faculties.Count < 1)
+ {
+ Assert.Warn("No faculties found");
+ return;
+ }
+
+ var (id, name) = faculties[new Random().Next(0, faculties.Count)];
+ Console.WriteLine($"Randomly selected faculty: {name} ({id})");
+
+ var list = await Parser.GetGroups(id);
+ Assert.IsNotNull(list);
+ Assert.IsTrue(list.Count > 0);
+
+ Console.WriteLine("Groups list:");
+ list.ForEach(i =>
+ Console.WriteLine($"{i.name} ({i.id})"));
+ }
+
+ [Test]
+ public async Task ScheduleListTest()
+ {
+ var faculties = await Parser.GetFaculties();
+ if (faculties == null || faculties.Count < 1)
+ {
+ Assert.Warn("No faculties found");
+ return;
+ }
+ var faculty = faculties[new Random().Next(0, faculties.Count)];
+ Console.WriteLine($"Randomly selected faculty: {faculty.name} ({faculty.id})");
+
+ var groups = await Parser.GetGroups(faculty.id);
+ if (groups == null || groups.Count < 1)
+ {
+ Assert.Warn("No groups found");
+ return;
+ }
+ var group = groups[new Random().Next(0, groups.Count)];
+ Console.WriteLine($"Randomly selected group: {group.name} ({group.id})");
+
+ try
+ {
+ var list = await Parser.GetSchedule(new DefaultExportParameters
+ {
+ Course = "0",
+ FacultyId = faculty.id,
+ GroupId = group.id,
+ EndDate = DateTime.Today.AddDays(7),
+ StartDate = DateTime.Today
+ });
+
+ Assert.IsNotNull(list);
+ Assert.IsTrue(list.Count > 0);
+
+ Console.WriteLine("Events list:");
+ foreach (var i in list)
+ {
+ Console.WriteLine("--------------------------------------------------");
+ Console.WriteLine($"[{i.Group}] {i.Order}. {i.Name} ({i.Type})");
+ Console.WriteLine(i.Cabinet);
+ Console.WriteLine(i.StartTime.ToShortDateString());
+ Console.WriteLine($"{i.StartTime.ToShortTimeString()}-{i.EndTime.ToShortTimeString()}");
+ Console.WriteLine(i.Opponent);
+ }
+ }
+ catch (NullReferenceException e)
+ {
+ Assert.Warn(e.Message);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GUT.Schedule/GUTSchedule.Test/CabinetScheduleUnitTest.cs b/GUT.Schedule/GUTSchedule.Test/CabinetScheduleUnitTest.cs
new file mode 100644
index 0000000..d38022c
--- /dev/null
+++ b/GUT.Schedule/GUTSchedule.Test/CabinetScheduleUnitTest.cs
@@ -0,0 +1,40 @@
+using NUnit.Framework;
+using System.Threading.Tasks;
+using GUTSchedule.Models;
+using System;
+using Newtonsoft.Json;
+using System.IO;
+
+namespace GUTSchedule.Test
+{
+ public class CabinetScheduleUnitTest
+ {
+ [Test]
+ public async Task ScheduleListTest()
+ {
+ dynamic secrets = JsonConvert.DeserializeObject(File.ReadAllText(Directory.GetCurrentDirectory() + "\\TestCredential.json"));
+ var list = await Parser.GetSchedule(new CabinetExportParameters
+ {
+ Email = secrets.testEmail,
+ Password = secrets.testPassword,
+ EndDate = DateTime.Today.AddDays(7),
+ StartDate = DateTime.Today
+ });
+
+ Assert.IsNotNull(list);
+ Assert.IsTrue(list.Count > 0);
+
+
+ Console.WriteLine("Events list:");
+ foreach (var i in list)
+ {
+ Console.WriteLine("--------------------------------------------------");
+ Console.WriteLine($"[{i.Group}] {i.Order}. {i.Name} ({i.Type})");
+ Console.WriteLine(i.Cabinet);
+ Console.WriteLine(i.StartTime.ToShortDateString());
+ Console.WriteLine($"{i.StartTime.ToShortTimeString()}-{i.EndTime.ToShortTimeString()}");
+ Console.WriteLine(i.Opponent);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GUT.Schedule/GUTSchedule.Test/GUTSchedule.Test.csproj b/GUT.Schedule/GUTSchedule.Test/GUTSchedule.Test.csproj
new file mode 100644
index 0000000..54410f2
--- /dev/null
+++ b/GUT.Schedule/GUTSchedule.Test/GUTSchedule.Test.csproj
@@ -0,0 +1,28 @@
+
+
+
+ netcoreapp3.1
+
+ false
+
+ f8ba6b25-bdcb-442c-98aa-3bcf31300ad0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
diff --git a/GUT.Schedule/GUTSchedule.Test/TestCredential.json b/GUT.Schedule/GUTSchedule.Test/TestCredential.json
new file mode 100644
index 0000000..ec44eb0
--- /dev/null
+++ b/GUT.Schedule/GUTSchedule.Test/TestCredential.json
@@ -0,0 +1,4 @@
+{
+ "testEmail": "%EMAIL%",
+ "testPassword": "%PASSWORD%"
+}
\ No newline at end of file
diff --git a/GUT.Schedule/GUTSchedule.UWP/Strings/en/Resources.resw b/GUT.Schedule/GUTSchedule.UWP/Strings/en/Resources.resw
index 1267e8e..16bae3d 100644
--- a/GUT.Schedule/GUTSchedule.UWP/Strings/en/Resources.resw
+++ b/GUT.Schedule/GUTSchedule.UWP/Strings/en/Resources.resw
@@ -187,7 +187,7 @@
Contributors
- ©2020 Michael Gordeev, INS, ICT-907
+ ©2020 Michael Gordeev, IST, IST-942
Course
@@ -208,7 +208,7 @@
Destination calendar
- Developed by Michael Gordeev (ICT-907, INS) in the "Technologies of Informational and Educational Systems" Research Facility
+ Developed by Michael Gordeev (IST-942, IST) in the "Technologies of Informational and Educational Systems" Research and Educational Center
Done
@@ -274,7 +274,7 @@
None
- "TIES" RF
+ "TIES" REC
Password
diff --git a/GUT.Schedule/GUTSchedule.UWP/Strings/ru/Resources.resw b/GUT.Schedule/GUTSchedule.UWP/Strings/ru/Resources.resw
index 7e976d4..c5b327a 100644
--- a/GUT.Schedule/GUTSchedule.UWP/Strings/ru/Resources.resw
+++ b/GUT.Schedule/GUTSchedule.UWP/Strings/ru/Resources.resw
@@ -187,7 +187,7 @@
Свой вклад в разработку внесли
- ©2020 Михаил Гордеев, ИКСС, ИКТ-907
+ ©2020 Михаил Гордеев, ИСиТ, ИСТ-942
Курс
@@ -208,7 +208,7 @@
Конечный календарь
- Разработано Михаилом Гордеевым, ИКТ-907, ИКСС в Научно-образовательном центре "Технологии информационных образовательных систем"
+ Разработано Михаилом Гордеевым, ИСТ-942, ИСиТ в Научно-образовательном центре "Технологии информационных образовательных систем"
Готово
diff --git a/GUT.Schedule/GUTSchedule.sln b/GUT.Schedule/GUTSchedule.sln
index beff3d0..e3cae2b 100644
--- a/GUT.Schedule/GUTSchedule.sln
+++ b/GUT.Schedule/GUTSchedule.sln
@@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GUTSchedule.UWP", "GUTSched
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GUTSchedule", "GUTSchedule\GUTSchedule.csproj", "{A6F6DE35-0EB4-4D11-9FF9-F4601595B639}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GUTSchedule.Test", "GUTSchedule.Test\GUTSchedule.Test.csproj", "{B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -146,6 +148,36 @@ Global
{A6F6DE35-0EB4-4D11-9FF9-F4601595B639}.Release|x64.Build.0 = Release|Any CPU
{A6F6DE35-0EB4-4D11-9FF9-F4601595B639}.Release|x86.ActiveCfg = Release|Any CPU
{A6F6DE35-0EB4-4D11-9FF9-F4601595B639}.Release|x86.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|ARM.Build.0 = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|x64.Build.0 = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Debug|x86.Build.0 = Debug|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|Any CPU.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|Any CPU.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|ARM.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|ARM.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|ARM64.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|ARM64.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|x64.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|x64.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|x86.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release (APK)|x86.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|ARM.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|ARM64.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|x64.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|x64.Build.0 = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|x86.ActiveCfg = Release|Any CPU
+ {B5DD5664-E1B4-4F48-B0CD-C0A126C7E58D}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/GUT.Schedule/GUTSchedule/Parser.cs b/GUT.Schedule/GUTSchedule/Parser.cs
index 1e8805e..6869e8c 100644
--- a/GUT.Schedule/GUTSchedule/Parser.cs
+++ b/GUT.Schedule/GUTSchedule/Parser.cs
@@ -25,7 +25,7 @@ namespace GUTSchedule
await client.GetAsync("https://cabs.itut.ru/cabinet/");
- HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://cabs.itut.ru/cabinet/lib/autentificationok.php");
+ HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://lk.sut.ru/cabinet/lib/autentificationok.php");
request.SetContent(
("users", email),
("parole", password));
@@ -39,8 +39,9 @@ namespace GUTSchedule
if (!responseContent.StartsWith("1", StringComparison.OrdinalIgnoreCase))
{
Dictionary responseQuery = new Dictionary();
- foreach (string i in responseContent.Split('&'))
- responseQuery.Add(i.Split('=')[0], i.Split('=')[1]);
+ if (responseContent.Length > 1)
+ foreach (string i in responseContent.Split('&'))
+ responseQuery.Add(i.Split('=')[0], i.Split('=')[1]);
throw new System.Security.VerificationException(responseQuery["error"].Replace("|", "; "));
}
@@ -85,7 +86,7 @@ namespace GUTSchedule
schedule[k - 1].Name == schedule[k].Name &&
schedule[k - 1].Type == schedule[k].Type)
{
- schedule[k - 1].Opponent += $" ({schedule[k-1].Cabinet}) \n {schedule[k].Opponent} ({schedule[k].Cabinet})";
+ schedule[k - 1].Opponent += $" ({schedule[k-1].Cabinet}) \n{schedule[k].Opponent} ({schedule[k].Cabinet})";
schedule[k - 1].Cabinet += "; " + schedule[k].Cabinet;
schedule.RemoveAt(k--);
}
@@ -229,11 +230,11 @@ namespace GUTSchedule
int order = int.Parse(item.GetAttribute("pair")) - 1;
Occupation occupation = new Occupation
{
- Name = item.QuerySelector(".subect").TextContent,
+ Name = item.QuerySelector(".subect").TextContent.Replace(" (1)", "").Replace(" (2)", ""),
Type = item.QuerySelector(".type").TextContent.Replace("(", "").Replace(")", ""),
Group = groupName,
- Opponent = item.QuerySelector(".teacher")?.GetAttribute("title").Replace("; ", "\n") ?? "",
- Cabinet = item.QuerySelector(".aud")?.TextContent.Replace("ауд.: ", "").Replace("; Б22", "") ?? "СПбГУТ",
+ Opponent = item.QuerySelector(".teacher")?.GetAttribute("title").Replace("; ", "") ?? "",
+ Cabinet = item.QuerySelector(".aud")?.TextContent.Replace("ауд.: ", "").Replace("; Б22", "").Replace(" ", "") ?? "СПбГУТ",
Order = order > 50 ? $"Ф{order - 81}" : order.ToString()
};
@@ -309,10 +310,17 @@ namespace GUTSchedule
DateTime date = DateTime.Parse(item.FirstChild.FirstChild.TextContent, new CultureInfo("ru-RU"));
string rawTime = item.ChildNodes[2].TextContent;
- rawTime = rawTime.Substring(rawTime.IndexOf('(')).Replace(")", "").Replace('.', ':');
-
- occupation.StartTime = date.Add(TimeSpan.Parse(rawTime.Split('-')[0]));
- occupation.EndTime = date.Add(TimeSpan.Parse(rawTime.Split('-')[1]));
+ try
+ {
+ rawTime = rawTime.Substring(rawTime.IndexOf('(')).Replace(")", "").Replace('.', ':');
+ occupation.StartTime = date.Add(TimeSpan.Parse(rawTime.Split('-')[0]));
+ occupation.EndTime = date.Add(TimeSpan.Parse(rawTime.Split('-')[1]));
+ }
+ catch
+ {
+ occupation.StartTime = date;
+ occupation.EndTime = date;
+ }
schedule.Add(occupation);
}
@@ -355,7 +363,7 @@ namespace GUTSchedule
item.Opponent = i.QuerySelectorAll("i")[k].NextSibling.NextSibling.NextSibling?.NodeType == NodeType.Text ?
i.QuerySelectorAll("i")[k].NextSibling.NextSibling.NextSibling.TextContent : "";
- try { item.Cabinet = i.QuerySelectorAll("small")[k].NextSibling.TextContent.Replace("; Б22", ""); }
+ try { item.Cabinet = i.QuerySelectorAll("small")[k].NextSibling.TextContent.Replace(" ", "").Replace(";Б22", ""); }
catch { item.Cabinet = "СПбГУТ"; }
string rawTime = i.QuerySelectorAll("b")[k * 2 + 2].TextContent;
diff --git a/changelogs/android.xml b/changelogs/android.xml
deleted file mode 100644
index 06817cf..0000000
--- a/changelogs/android.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
- - Исправлена проблема с экспортом расписания без авторизации
-
\ No newline at end of file
diff --git a/changelogs/appMetadata/en/baseListing/releaseNotes.txt b/changelogs/appMetadata/en/baseListing/releaseNotes.txt
index 1d42810..6e27aa7 100644
--- a/changelogs/appMetadata/en/baseListing/releaseNotes.txt
+++ b/changelogs/appMetadata/en/baseListing/releaseNotes.txt
@@ -1 +1 @@
-- Fixed anonymous schedule loading
\ No newline at end of file
+- Fixed and improved parser
\ No newline at end of file
diff --git a/changelogs/appMetadata/en/changelogs/android-changelog.txt b/changelogs/appMetadata/en/changelogs/android-changelog.txt
new file mode 100644
index 0000000..6e27aa7
--- /dev/null
+++ b/changelogs/appMetadata/en/changelogs/android-changelog.txt
@@ -0,0 +1 @@
+- Fixed and improved parser
\ No newline at end of file
diff --git a/changelogs/appMetadata/ru/baseListing/releaseNotes.txt b/changelogs/appMetadata/ru/baseListing/releaseNotes.txt
index edb8530..36566e0 100644
--- a/changelogs/appMetadata/ru/baseListing/releaseNotes.txt
+++ b/changelogs/appMetadata/ru/baseListing/releaseNotes.txt
@@ -1 +1 @@
-- Исправлена проблема с экспортом расписания без авторизации
\ No newline at end of file
+- Исправлен и улучшен парсер расписания
\ No newline at end of file
diff --git a/changelogs/appMetadata/ru/changelogs/android-changelog.txt b/changelogs/appMetadata/ru/changelogs/android-changelog.txt
new file mode 100644
index 0000000..36566e0
--- /dev/null
+++ b/changelogs/appMetadata/ru/changelogs/android-changelog.txt
@@ -0,0 +1 @@
+- Исправлен и улучшен парсер расписания
\ No newline at end of file
diff --git a/changelogs/github.md b/changelogs/github.md
index 9d68c23..872ef90 100644
--- a/changelogs/github.md
+++ b/changelogs/github.md
@@ -1,2 +1,2 @@
## Core
-- Fixed anonymous schedule loading
\ No newline at end of file
+- Fixed and improved parser
\ No newline at end of file
diff --git a/pipelines/android-release.yml b/pipelines/android-release.yml
index c17fc08..cb32e5f 100644
--- a/pipelines/android-release.yml
+++ b/pipelines/android-release.yml
@@ -8,7 +8,8 @@ trigger:
exclude:
- '*'
include:
- - changelogs/android.xml
+ - changelogs/appMetadata/en/changelogs/*
+ - changelogs/appMetadata/ru/changelogs/*
pool:
vmImage: 'windows-latest'
@@ -33,6 +34,8 @@ steps:
script: |
(Get-Content AndroidManifest.xml -encoding UTF8 | Out-String) -replace '(?<=\bandroid:versionCode=")[^"]*', $(Build.BuildId) | set-content AndroidManifest.xml -encoding UTF8
(Get-Content AndroidManifest.xml -encoding UTF8 | Out-String) -replace '(?<=\bandroid:versionName=")[^"]*', $(Build.BuildNumber) | set-content AndroidManifest.xml -encoding UTF8
+ Rename-Item '$(Build.SourcesDirectory)/changelogs/appMetadata/en/changelogs/android-changelog.txt' '$(Build.BuildId).txt'
+ Rename-Item '$(Build.SourcesDirectory)/changelogs/appMetadata/ru/changelogs/android-changelog.txt' '$(Build.BuildId).txt'
workingDirectory: '$(Build.SourcesDirectory)\GUT.Schedule\GUTSchedule.Droid\Properties'
- task: XamarinAndroid@1
@@ -68,10 +71,8 @@ steps:
displayName: 'Copy changelog to output'
inputs:
SourceFolder: '$(Build.SourcesDirectory)/changelogs'
- Contents: |
- android.xml
- github.md
- TargetFolder: '$(outputDirectory)'
+ Contents: '**'
+ TargetFolder: '$(Build.ArtifactStagingDirectory)/changelogs'
- task: PowerShell@2
displayName: 'Update package name'
diff --git a/pipelines/validation.yml b/pipelines/validation.yml
index a310a64..cb7ec7a 100644
--- a/pipelines/validation.yml
+++ b/pipelines/validation.yml
@@ -43,4 +43,26 @@ steps:
platform: 'x64'
solution: '**/**.UWP.csproj'
configuration: '$(buildConfiguration)'
- msbuildArgs: '/p:AppxPackageSigningEnabled=false'
\ No newline at end of file
+ msbuildArgs: '/p:AppxPackageSigningEnabled=false'
+
+- task: FileTransform@2
+ displayName: 'Update test credential'
+ inputs:
+ folderPath: '$(System.DefaultWorkingDirectory)'
+ xmlTransformationRules:
+ jsonTargetFiles: '**/TestCredential.json'
+
+- task: VSBuild@1
+ displayName: 'Build Tests'
+ inputs:
+ solution: '**\*.Test.csproj'
+
+- task: VSTest@2
+ displayName: 'Run Tests'
+ inputs:
+ testSelector: 'testAssemblies'
+ testAssemblyVer2: |
+ **\*.Test.dll
+ !**\*TestAdapter.dll
+ !**\obj\**
+ searchFolder: '$(System.DefaultWorkingDirectory)'
\ No newline at end of file
diff --git a/pipelines/windows-release.yml b/pipelines/windows-release.yml
index 95558da..7e956ee 100644
--- a/pipelines/windows-release.yml
+++ b/pipelines/windows-release.yml
@@ -8,7 +8,8 @@ trigger:
exclude:
- '*'
include:
- - changelogs/appMetadata/*
+ - changelogs/appMetadata/en/baseListing/*
+ - changelogs/appMetadata/ru/baseListing/*
pool:
vmImage: 'windows-latest'