Add project files.

This commit is contained in:
2018-06-21 18:18:04 +02:00
parent 017735cabb
commit 5695d2aa2c
62 changed files with 1645 additions and 0 deletions

43
myRoRo.sln Normal file
View File

@@ -0,0 +1,43 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27428.2002
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "myRoRo", "myRoRo\myRoRo.csproj", "{69838279-964F-45BF-B6CE-85B782710430}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{69838279-964F-45BF-B6CE-85B782710430}.Debug|ARM.ActiveCfg = Debug|ARM
{69838279-964F-45BF-B6CE-85B782710430}.Debug|ARM.Build.0 = Debug|ARM
{69838279-964F-45BF-B6CE-85B782710430}.Debug|ARM.Deploy.0 = Debug|ARM
{69838279-964F-45BF-B6CE-85B782710430}.Debug|x64.ActiveCfg = Debug|x64
{69838279-964F-45BF-B6CE-85B782710430}.Debug|x64.Build.0 = Debug|x64
{69838279-964F-45BF-B6CE-85B782710430}.Debug|x64.Deploy.0 = Debug|x64
{69838279-964F-45BF-B6CE-85B782710430}.Debug|x86.ActiveCfg = Debug|x86
{69838279-964F-45BF-B6CE-85B782710430}.Debug|x86.Build.0 = Debug|x86
{69838279-964F-45BF-B6CE-85B782710430}.Debug|x86.Deploy.0 = Debug|x86
{69838279-964F-45BF-B6CE-85B782710430}.Release|ARM.ActiveCfg = Release|ARM
{69838279-964F-45BF-B6CE-85B782710430}.Release|ARM.Build.0 = Release|ARM
{69838279-964F-45BF-B6CE-85B782710430}.Release|ARM.Deploy.0 = Release|ARM
{69838279-964F-45BF-B6CE-85B782710430}.Release|x64.ActiveCfg = Release|x64
{69838279-964F-45BF-B6CE-85B782710430}.Release|x64.Build.0 = Release|x64
{69838279-964F-45BF-B6CE-85B782710430}.Release|x64.Deploy.0 = Release|x64
{69838279-964F-45BF-B6CE-85B782710430}.Release|x86.ActiveCfg = Release|x86
{69838279-964F-45BF-B6CE-85B782710430}.Release|x86.Build.0 = Release|x86
{69838279-964F-45BF-B6CE-85B782710430}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {468B6ACF-3977-4DC6-8BEE-A0EDD9BFFE90}
EndGlobalSection
EndGlobal

7
myRoRo/App.xaml Normal file
View File

@@ -0,0 +1,7 @@
<Application
x:Class="myRoRo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:myRoRo">
</Application>

100
myRoRo/App.xaml.cs Normal file
View File

@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace myRoRo
{
/// <summary>
/// Provides application-specific behavior to supplement the default Application class.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}
/// <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)
{
Frame rootFrame = Window.Current.Content as Frame;
// 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 Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
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(MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
/// <summary>
/// Invoked when Navigation to a certain page fails
/// </summary>
/// <param name="sender">The Frame which failed navigation</param>
/// <param name="e">Details about the navigation failure</param>
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">The source of the suspend request.</param>
/// <param name="e">Details about the suspend request.</param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Save application state and stop any background activity
deferral.Complete();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 951 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

160
myRoRo/DatabaseHelper.cs Normal file
View File

@@ -0,0 +1,160 @@
using Microsoft.Data.Sqlite;
using System;
using System.Collections.Generic;
#if DEBUG
using System.Diagnostics;
#endif
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
namespace myRoRo
{
class DatabaseHelper
{
public static string DATABASE_NAME = "schedule.db";
public static string TABLE_NAME = "day";
public string COL_1 = "kl",
COL_2 = "std",
COL_3 = "fach",
COL_4 = "raum",
COL_5 = "vlehrer",
COL_6 = "vfach",
COL_7 = "vraum",
COL_8 = "info";
public DatabaseHelper()
{
using (SqliteConnection db = new SqliteConnection("Filename=" + DATABASE_NAME))
{
db.Open();
try
{
EnsureTableExists(1, db).ExecuteReader();
}
catch (SqliteException e)
{
#if DEBUG
Debug.WriteLine("SQLite Exception: " + e.Message + e.StackTrace);
#endif
}
db.Close();
}
}
public void DeleteTable(int index)
{
using (SqliteConnection db = new SqliteConnection("Filename=" + DATABASE_NAME))
{
db.Open();
SqliteCommand insertCommand = new SqliteCommand
{
Connection = db,
CommandText = "DROP TABLE IF EXISTS " + TABLE_NAME + index
};
try
{
insertCommand.ExecuteReader();
}
catch (SqliteException e)
{
#if DEBUG
Debug.WriteLine("SQLite Exception: " + e.Message + e.StackTrace);
#endif
}
db.Close();
}
}
private SqliteCommand EnsureTableExists(int index, SqliteConnection db)
{
return new SqliteCommand
{
Connection = db,
CommandText = "create table if not exists " + TABLE_NAME + index + "(ID INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COL_1 + " TEXT,"
+ COL_2 + " TEXT,"
+ COL_3 + " TEXT,"
+ COL_4 + " TEXT,"
+ COL_5 + " TEXT,"
+ COL_6 + " TEXT,"
+ COL_7 + " TEXT,"
+ COL_8 + " TEXT)"
};
}
public bool InsertData(int tableIndex,
string kl,
string std,
string fach,
string raum,
string vlehrer,
string vfach,
string vraum,
string info)
{
using (SqliteConnection db = new SqliteConnection("Filename=" + DATABASE_NAME))
{
db.Open();
SqliteCommand insertCommand = new SqliteCommand
{
Connection = db,
CommandText = "INSERT INTO " + TABLE_NAME + tableIndex + " ("
+ COL_1 + ", "
+ COL_2 + ", "
+ COL_3 + ", "
+ COL_4 + ", "
+ COL_5 + ", "
+ COL_6 + ", "
+ COL_7 + ", "
+ COL_8
+ ") VALUES (@0, @1 , @2, @3, @4, @5, @6, @7)"
};
insertCommand.Parameters.AddWithValue("@0", kl);
insertCommand.Parameters.AddWithValue("@1", std);
insertCommand.Parameters.AddWithValue("@2", fach);
insertCommand.Parameters.AddWithValue("@3", raum);
insertCommand.Parameters.AddWithValue("@4", vlehrer);
insertCommand.Parameters.AddWithValue("@5", vfach);
insertCommand.Parameters.AddWithValue("@6", vraum);
insertCommand.Parameters.AddWithValue("@7", info);
try
{
EnsureTableExists(tableIndex, db).ExecuteReader();
insertCommand.ExecuteNonQuery();
}
catch (SqliteException e)
{
#if DEBUG
Debug.WriteLine("SQLite Exception: " + e.Message + e.StackTrace);
/*ContentDialog noWifiDialog = new ContentDialog()
{
Title = "Verbindungsfehler",
Content = "Bitte Netzwerk überprüfen und erneut versuchen. Fehlermeldung:\n" + e.Message + e.StackTrace,
CloseButtonText = "Ok"
};
noWifiDialog.ShowAsync();*/
#endif
return false;
}
db.Close();
}
return true;
}
}
}

38
myRoRo/MainPage.xaml Normal file
View File

@@ -0,0 +1,38 @@
<Page
x:Class="myRoRo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="using:myRoRo"
xmlns:data="using:myRoRo"
mc:Ignorable="d">
<!--="{ThemeResource SystemControlDisabledBaseLowBrush}">-->
<Grid>
<Pivot Name="pivot1" Title="" ItemsSource="{Binding schedules}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="data:Schedule">
<TextBlock Text="{Binding DayName}"></TextBlock>
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate x:DataType="data:Schedule">
<ListView ItemsSource="{Binding ScheduleEntries}" IsItemClickEnabled="False" SelectionMode="None" HorizontalAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate x:DataType="data:ScheduleEntry">
<StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock Text="{Binding ClassName}" HorizontalAlignment="Left" FontWeight="SemiBold" VerticalAlignment="Stretch"></TextBlock>
<TextBlock Text="{Binding Entries }" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
<ProgressRing Name="LoadingProcessProgressRing" Width="50" Height="50" Background="Transparent" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Page>

87
myRoRo/MainPage.xaml.cs Normal file
View File

@@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
#if DEBUG
using System.Diagnostics;
#endif
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel.Background;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace myRoRo
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
private ObservableCollection<Schedule> schedules;
public MainPage()
{
#if DEBUG
Debug.WriteLine("Starting App...");
#endif
InitializeComponent();
LoadingProcessProgressRing.IsActive = true;
LoadingProcessProgressRing.Visibility = Windows.UI.Xaml.Visibility.Visible;
InitLoadSequence();
#if DEBUG
Debug.WriteLine("Initialization Complete.");
#endif
//Setting up byckground sync
/*TimeTrigger backgroundSync = new TimeTrigger(15, false);
BackgroundExecutionManager.RequestAccessAsync();
string entryPoint = "myRoRo.Sync";
string taskName = "NotificationSync";
BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, backgroundSync);*/
}
private async void InitLoadSequence()
{
#if DEBUG
Debug.WriteLine("Network Task created!");
#endif
await ScheduleNetwork.Refresh();
#if DEBUG
Debug.WriteLine("Loading Schedule Complete.");
#endif
schedules = null;
schedules = ScheduleManager.GetSchedules();
//Updating Bindings (the data behind the Pivot)
Binding binding = new Binding();
binding.Source = schedules;
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(pivot1, Pivot.ItemsSourceProperty, binding);
LoadingProcessProgressRing.IsActive = false;
LoadingProcessProgressRing.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
pivot1.Title = (string)localSettings.Values["UpdateDate"];
}
}
}

137
myRoRo/NameShortcuts.cs Normal file
View File

@@ -0,0 +1,137 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace myRoRo
{
class NameShortcuts
{
public static string GetRealName(string fakeName)
{
//Not sure if I am allowed to do this, so it will not make it into release...
#if DEBUG
switch (fakeName) {
case "Thei":
return "Frau Theiss";
case "Mitt":
return "Herrn Mittag";
case "Otti":
return "Herrn Ottink";
case "MoßF":
return "Frau Moß";
case "Conr":
return "Frau Conrad";
case "Vökl":
return "Frau Völker-Klatte";
case "Häne":
return "Herrn Hänel";
case "vPar":
return "Herrn von Paris";
case "Wala":
return "Frau Walachowitz";
case "Beye":
return "Herrn Beyerle";
case "Gres":
return "Frau Gresch";
case "Gegu":
return "Herrn Gegusch";
case "Kühn":
return "Frau Kühne";
case "Jahn":
return "Frau Jahn";
case "Drew":
return "Frau Drews";
case "Siek":
return "Herrn Siek";
case "Bett":
return "Herrn Bettencourt";
case "Hüls":
return "Herrn Hülsmann";
case "Pösc":
return "Herrn Pöschl";
case "Toka":
return "Frau Tokarik";
case "Krab":
return "Frau Krabbe";
case "Fisc":
return "Frau Fischer";
case "Pill":
return "Frau Pillin";
case "Möbi":
return "Herrn Möbius";
case "Jehl":
return "Herrn Jehle";
case "Deut":
return "Frau Deutschmann";
case "Rex":
return "Frau Rex";
case "Wese":
return "Herrn Weser";
case "Bern":
return "Frau Bernd";
case "Kans":
return "Herrn Kanstinger";
case "Köni":
return "Herrn König";
case "MoßH":
return "Herrn Moß";
case "Brem":
return "Herrn Bremert";
case "Miko":
return "Frau Mikoleiwski";
case "Rapp":
return "Herrn Rapp";
case "Habe":
return "Frau Habermann-Lange";
case "Bahr":
return "Frau Bahr";
case "Lehn":
return "Frau Lehne";
default:
return "[" + fakeName + "]";
}
# endif
return fakeName;
}
public static string GetRealClass(string fakeClass)
{
switch (fakeClass)
{
case "Ma":
return "Mathe";
case "Mu":
return "Musik";
case "NaWi":
return fakeClass;
case "Ku":
return "Kunst";
case "Sp/m":
return "Sport Jungen";
case "Sp/w":
return "Sport Mädchen";
case "Eth":
return "Ethik";
case "Ge":
return "Geschichte";
case "Ev.R":
return "Religion (Ev)";
case "De":
return "Deutsch";
case "Ch":
return "Chemie";
case "Ek":
return "Erdkunde";
case "Ph":
return "Physik";
case "Bi":
return "Bio";
default:
return /*"[" + */fakeClass/* + "]"*/;
}
}
}
}

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
<Identity Name="5aac8e66-fe19-4cdf-99b5-f61762619ea1" Publisher="CN=wulka" Version="0.1.6.0" />
<mp:PhoneIdentity PhoneProductId="5aac8e66-fe19-4cdf-99b5-f61762619ea1" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
<Properties>
<DisplayName>myRoRo</DisplayName>
<PublisherDisplayName>wulka</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="myRoRo.App">
<uap:VisualElements DisplayName="myRoRo" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="myRoRo" BackgroundColor="transparent">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" ShortName="myRoRo" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
<uap:ShowOn Tile="square310x310Logo" />
</uap:ShowNameOnTiles>
</uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
</Capabilities>
</Package>

View File

@@ -0,0 +1,29 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("myRoRo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("myRoRo")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]

View File

@@ -0,0 +1,31 @@
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Serialize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
</Application>
</Directives>

93
myRoRo/Schedule.cs Normal file
View File

@@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
#if DEBUG
using System.Diagnostics;
#endif
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace myRoRo
{
public class ScheduleEntry
{
public string ClassName
{
get;
set;
}
public string Entries
{
get;
set;
}
public int Height
{
get;
set;
}
}
public class Schedule
{
public string DayName
{
get;
set;
}
public List<ScheduleEntry> ScheduleEntries
{
get;
set;
}
}
public class ScheduleManager
{
public static ObservableCollection<Schedule> GetSchedules()
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
#if DEBUG
Debug.WriteLine("Creating ScheduleManager");
#endif
ObservableCollection<Schedule> outList = new ObservableCollection<Schedule>();
int pagesCount = (int) localSettings.Values[ScheduleNetwork.PAGES_COUNT];
for (int i = 1; i <= pagesCount; i++)
{
List<ScheduleEntry> entries = new List<ScheduleEntry>();
string date = ScheduleNetwork.GetDate(i);
ScheduleHandler handler = new ScheduleHandler(i);
List<string> classes = handler.getClassList();
foreach (string classStr in classes)
{
entries.Add(new ScheduleEntry
{
ClassName = classStr,
Entries = handler.GetClassInfo(classStr)
});
}
outList.Add(new Schedule
{
DayName = date,
ScheduleEntries = entries
});
}
return outList;
}
}
}

437
myRoRo/ScheduleHandler.cs Normal file
View File

@@ -0,0 +1,437 @@
using System;
using System.Collections.Generic;
#if DEBUG
using System.Diagnostics;
#endif
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Data.Sqlite;
using Microsoft.Data.Sqlite.Internal;
namespace myRoRo
{
class ScheduleHandler
{
private DatabaseHelper helper;
private string lineBreak = "\n";
int index;
public ScheduleHandler(int index)
{
this.index = index;
helper = new DatabaseHelper();
}
public List<string> getClassList()
{
List<string> outputList = new List<string>(); //this is the List which will be put out. at the end it will contain all Classes that are appearing in the schedule
using (SqliteConnection db = new SqliteConnection("Filename=" + DatabaseHelper.DATABASE_NAME))
{
db.Open();
SqliteCommand selectCommand = new SqliteCommand("SELECT " + helper.COL_1 + " FROM " + DatabaseHelper.TABLE_NAME + index + " GROUP BY " + helper.COL_1, db);
SqliteDataReader query;
try
{
query = selectCommand.ExecuteReader();
}
catch (SqliteException e)
{
#if DEBUG
Debug.WriteLine("SQLite Exception: " + e.Message + e.StackTrace);
#endif
return null;
}
while (query.Read())
{
outputList.Add(query.GetString(0));
}
db.Close();
}
return outputList;
}
public List<string> GetForSQL(string SQL)
{
List<string> output = new List<string>();
using (SqliteConnection db = new SqliteConnection("Filename=" + DatabaseHelper.DATABASE_NAME))
{
SqliteCommand command = new SqliteCommand(SQL, db);
SqliteDataReader query;
try
{
query = command.ExecuteReader();
}
catch (SqliteException e)
{
#if DEBUG
Debug.WriteLine("SQLite Exception: " + e.Message + e.StackTrace);
#endif
return null;
}
int i = 0;
while (query.Read())
{
try
{
query.GetString(i);
}
catch (Exception e)
{
break;
}
i++;
}
db.Close();
}
return output;
}
/*public List<string> GetClassListCustom()
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor res;
SharedPreferences pref = context.getSharedPreferences("Tralala", MODE_PRIVATE);
ArrayList<String> outputList = new ArrayList<>();
res = db.rawQuery("SELECT kl FROM " + databaseHelper.TABLE_NAME + index + " WHERE " + pref.getString(SettingsActivity.CUSTOMSQL_NAME, "") + " GROUP BY " + databaseHelper.COL_1, null);
while (res.moveToNext()) {
outputList.add(res.getString(0));
}
res.close();
return outputList;
}
public ArrayList<android.text.Spanned> getClassInfoCustom(String thisClass) throws Exception {
SharedPreferences pref = context.getSharedPreferences("Tralala", MODE_PRIVATE);
return getClassInfoForSQL("SELECT * FROM " + databaseHelper.TABLE_NAME + index + " WHERE (" + pref.getString(SettingsActivity.CUSTOMSQL_NAME, "")+ ") and " + databaseHelper.COL_1 + " = '" + thisClass + "'");
}
public ArrayList<String> getClassListPersonalized(int id) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor res;
SharedPreferences pref = context.getSharedPreferences("Tralala", MODE_PRIVATE);
String coursesRaw = pref.getString(SettingsActivity.CLASSES_NAME, "");
ArrayList<String> outputList = new ArrayList<>();
if (coursesRaw == "")
return outputList;
ArrayList<String> extraArguments = new ArrayList<>();
String buffer = "";
for(int i = 0; i < coursesRaw.length(); i++) {
if ((coursesRaw.charAt(i) == ';') || (i == (coursesRaw.length() - 1))) {
if (i == (coursesRaw.length() - 1))
buffer = buffer + coursesRaw.charAt(i);
extraArguments.add(databaseHelper.COL_1 + " = '" + buffer.trim() + "' COLLATE NOCASE");
buffer = "";
} else {
buffer = buffer + coursesRaw.charAt(i);
}
}
String extraArgumentsSQL = "";
if (extraArguments.size() != 0)
extraArgumentsSQL = " WHERE ";
for(int i = 0; i < extraArguments.size(); i++) {
extraArgumentsSQL = extraArgumentsSQL + extraArguments.get(i) + " COLLATE NOCASE";
if(i < (extraArguments.size() - 1))
extraArgumentsSQL = extraArgumentsSQL + " or ";
}
res = db.rawQuery("SELECT kl FROM " + databaseHelper.TABLE_NAME + index + extraArgumentsSQL + " GROUP BY " + databaseHelper.COL_1, null);
try {
while (res.moveToNext()) {
outputList.add(res.getString(0));
}
} finally {
res.close();
}
return outputList;
}
/**
* The basic idea of this method is that you have go a String in SharedPreferences. It will look like this: "gen 1;gku 1;Fr 2" The ; seperates them from each other. So this method returns
* a ArrayList of Spannable Strings with the Class you want and in addition only the courses you want. When the user puts in all the Info, first he will be asked to put in all the classes
* which potentially could fit the rules
* @param thisClass
* @return
public ArrayList<android.text.Spanned> getClassInfoPersonalized(String thisClass)
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor res;
SharedPreferences pref = context.getSharedPreferences("Tralala", MODE_PRIVATE);
String coursesRaw = pref.getString("Courses", "");
/*if (coursesRaw == "")
return new ArrayList<>();
ArrayList<String> extraArguments = new ArrayList<>();
String buffer = "";
boolean moreThanZero = false;
if (coursesRaw != "" && coursesRaw.length() > 0)
{
for (int i = 0; i < coursesRaw.length(); i++)
{
if ((coursesRaw.charAt(i) == ';') || (i == (coursesRaw.length() - 1)))
{
if (i == (coursesRaw.length() - 1))
buffer = buffer + coursesRaw.charAt(i);
extraArguments.add(databaseHelper.COL_3 + " = '" + buffer.trim() + "' COLLATE NOCASE or " + databaseHelper.COL_6 + " = '" + buffer.trim() + "' COLLATE NOCASE");
buffer = "";
}
else
{
buffer = buffer + coursesRaw.charAt(i);
}
}
moreThanZero = true;
}
else
{
moreThanZero = false;
}
String extraArgumentsSQL = "";
if (moreThanZero)
{
if (extraArguments.size() > 0)
if (extraArguments != null)
{
extraArgumentsSQL = " and (";
moreThanZero = true;
}
else
moreThanZero = false;
else
moreThanZero = false;
}
for (int i = 0; i < extraArguments.size(); i++)
{
extraArgumentsSQL = extraArgumentsSQL + extraArguments.get(i);
if (i < (extraArguments.size() - 1))
extraArgumentsSQL = extraArgumentsSQL + " or ";
}
if (moreThanZero)
{
return getClassInfoForSQL("SELECT * FROM " + databaseHelper.TABLE_NAME + index + " WHERE " + databaseHelper.COL_1 + " = '" + thisClass + "'" + extraArgumentsSQL + ")");
}
else
{
return getClassInfoForSQL("SELECT * FROM " + databaseHelper.TABLE_NAME + index + " WHERE " + databaseHelper.COL_1 + " = '" + thisClass + "'"/* + extraArgumentsSQL);
}
}
public ArrayList<android.text.Spanned> getClassInfo(String thisClass)
{
return getClassInfoForSQL("SELECT * FROM " + databaseHelper.TABLE_NAME + index + " WHERE " + databaseHelper.COL_1 + " = '" + thisClass + "'");
}*/
public string GetClassInfo(string thisClass)
{
return GetClassInfoForSQL("SELECT * FROM " + DatabaseHelper.TABLE_NAME + index + " WHERE " + helper.COL_1 + " = '" + thisClass + "'");
}
public string GetClassInfoForSQL(string sql)
{
bool forInfo = true;
List<string> outList = new List<string>();
SqliteDataReader reader;
using (SqliteConnection db = new SqliteConnection("Filename=" + DatabaseHelper.DATABASE_NAME))
{
SqliteCommand command = new SqliteCommand(sql, db);
db.Open();
try
{
reader = command.ExecuteReader();
}
catch (SqliteException e)
{
#if DEBUG
Debug.WriteLine("SQLite Exception: " + e.Message + e.StackTrace);
#endif
return null;
}
db.Close();
}
String currentLesson = "x";
#if DEBUG
int t = 0;
#endif
while (reader.Read())
{
#if DEBUG
t++;
#endif
forInfo = true;
StringBuilder line = new StringBuilder();
if (reader.GetString(2).Contains(currentLesson))
line.Append(Spaces(5));
else if (currentLesson.Contains("10"))
line.Append(RemLB(reader.GetString(2)) + "." + Spaces(1));
else
line.Append(RemLB(reader.GetString(2)) + "." + Spaces(2));
if (reader.GetString(6).Contains("\u00A0"))
{
if (reader.GetString(3).Contains("\u00A0"))
line.Append("[Fach]");
else
line.Append(NameShortcuts.GetRealClass(RemLB(reader.GetString(3))));
}
else
{
line.Append(NameShortcuts.GetRealClass(RemLB(reader.GetString(6))));
}
if (reader.GetString(5).Contains("*Frei"))
{
line.Append(" entfällt");
forInfo = false;
}
else if (reader.GetString(5).Contains("Raumänderung"))
{
line.Append(": Raumänderung in Raum " + RemLB(reader.GetString(7)));
forInfo = false;
}
else if (reader.GetString(5).Contains("*Stillarbeit"))
{
//if (myList.get(3) == "null") //TODO: Stillarbeit Teacher
if (reader.GetString(4).Contains("\u00A0"))
line.Append(": " + "Stillarbeit");
else
line.Append(": " + "Stillarbeit in Raum " + RemLB(reader.GetString(4)));
forInfo = false;
}
if (forInfo)
{
line.Append(" bei ");
if (reader.GetString(5).Contains("\u00A0"))
{
line.Append("[Lehrer]");
}
else
{
line.Append(NameShortcuts.GetRealName(RemLB(reader.GetString(5))));
}
if (reader.GetString(7).Contains("\u00A0"))
{
if (reader.GetString(4).Contains("\u00A0"))
line.Append(" in " + "[Raum]");
else
{
line.Append(" in Raum " + RemLB(reader.GetString(4)));
}
}
else
{
line.Append(" in Raum ");
line.Append(RemLB(reader.GetString(7)));
}
}
if (reader.GetString(8).Contains("verschoben"))
{
if (reader.GetString(2).Contains(currentLesson))
line = new StringBuilder(Spaces(5) + NameShortcuts.GetRealClass(RemLB(reader.GetString(3))) + " wird " + RemLB(reader.GetString(8)));
else if (currentLesson.Contains("10"))
line = new StringBuilder(RemLB(reader.GetString(2)) + "." + Spaces(1) + NameShortcuts.GetRealClass(RemLB(reader.GetString(3))) + " wird " + RemLB(reader.GetString(8)));
else
line = new StringBuilder(RemLB(reader.GetString(2)) + "." + Spaces(2) + NameShortcuts.GetRealClass(RemLB(reader.GetString(3))) + " wird " + RemLB(reader.GetString(8))); //[Fach] wird [verschoben auf Datum]
}
else if (reader.GetString(8).Contains("anstatt"))
{
line.Append(" " + RemLB(reader.GetString(8)));
}
else if (reader.GetString(8).Contains("Aufg. erteilt"))
{
line.Append(lineBreak + Spaces(5) + "Aufgaben erteilt");
}
else if (reader.GetString(8).Contains("Aufg. für zu Hause erteilt"))
{
line.Append(lineBreak + Spaces(5) + "Aufgaben für Zuhause erteilt");
}
else if (reader.GetString(8).Contains("Aufg. für Stillarbeit erteilt"))
{
line.Append(lineBreak + Spaces(5) + "Aufgaben für Stillarbeit erteilt");
//} else if (myList.get(six).contains("ganze Klasse")) {
}
else if (!reader.GetString(8).Contains("\u00A0"))
{
line.Append(lineBreak + Spaces(5) + RemLB(reader.GetString(8)));
}
if (!reader.GetString(2).Contains("&nbsp;"))
currentLesson = RemLB(reader.GetString(2));
outList.Add(line.ToString());
}
string outStr = "";
foreach (string str in outList)
{
outStr = outStr + "\n" + str;
}
#if DEBUG
Debug.WriteLine("Iterations | READ " + t);
#endif
return outStr.Replace(System.Environment.NewLine, "<HERE>");
}
public static string RemLB(string removeLineBreaks)
{
return removeLineBreaks.Replace(System.Environment.NewLine, "");
}
private string Spaces(int count)
{
string outStr = "";
for (int i = 0; i < count; i++)
{
outStr = outStr + ' ';
}
return outStr;
}
}
}

234
myRoRo/ScheduleNetwork.cs Normal file
View File

@@ -0,0 +1,234 @@
using HtmlAgilityPack;
using Microsoft.Data.Sqlite;
using System;
using System.Collections.Generic;
#if DEBUG
using System.Diagnostics;
#endif
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
namespace myRoRo
{
class ScheduleNetwork
{
public static string PAGES_COUNT = "pgs_count";
private static async Task<List<string>> GetURLs(string url, string usrName, string pw)
{
try
{
#if DEBUG
Debug.WriteLine("Attempting to load initial page.");
#endif
HttpClient http = new HttpClient();
string authInfo = usrName + ":" + pw;
authInfo = Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo));
http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authInfo);
var response = await http.GetByteArrayAsync(url);
String source = Encoding.GetEncoding("utf-8").GetString(response, 0, response.Length - 1);
source = WebUtility.HtmlDecode(source);
HtmlDocument result = new HtmlDocument();
result.LoadHtml(source);
#if DEBUG
Debug.WriteLine("Complete.");
#endif
List<string> outList = new List<string>();
foreach (HtmlNode link in result.DocumentNode.SelectNodes("//a[@href]"))
{
string hrefValue = link.GetAttributeValue("href", string.Empty);
outList.Add("http://www.romain-rolland-gymnasium.eu/schuelerbereich/svplaneinseitig/" + hrefValue);
#if DEBUG
Debug.WriteLine(hrefValue);
#endif
}
outList.RemoveAt(outList.Count - 1);
string date = ScheduleHandler.RemLB(result.DocumentNode.SelectSingleNode("//h1").InnerText);
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["UpdateDate"] = date;
return outList;
}
catch (Exception e)
{
#if DEBUG
Debug.WriteLine("PAGE NOT LOADED: " + e.Message + e.StackTrace);
#endif
ContentDialog noWifiDialog = new ContentDialog()
{
Title = "Verbindungsfehler",
Content = "Bitte Netzwerk überprüfen und erneut versuchen.\n\n Fehlermeldung:\n" + e.Message + e.StackTrace,
CloseButtonText = "Ok"
};
await noWifiDialog.ShowAsync();
return null;
}
}
public static async Task Refresh()
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
#if DEBUG
Debug.WriteLine("Refresh() called.");
#endif
DatabaseHelper helper = new DatabaseHelper();
string username = "wieland.schoebl";
string password = "bawo2";
string URL = "http://www.romain-rolland-gymnasium.eu/schuelerbereich/svplaneinseitig/Index.html";
List<string> URLs = await GetURLs(URL, username, password);
int pagesCount = 0;
#if DEBUG
Debug.WriteLine("URL Count: " + URLs.Count);
#endif
for (int i = 1; i <= URLs.Count; i++)
{
String url = URLs.ElementAt(i - 1);
try
{
HttpClient http = new HttpClient();
string authInfo = username + ":" + password;
authInfo = Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo));
http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authInfo);
var response = await http.GetByteArrayAsync(url);
String source = Encoding.GetEncoding("ISO8859-1").GetString(response, 0, response.Length - 1);
source = WebUtility.HtmlDecode(source);
HtmlDocument result = new HtmlDocument();
result.LoadHtml(source);
helper.DeleteTable(i);
//START SQL
String currentClass = "Aufsicht";
String currentLesson = "";
#if DEBUG
Debug.WriteLine("One URL loaded.");
int t = 0;
#endif
foreach (HtmlNode table in result.DocumentNode.SelectNodes("//table"))
{
foreach (HtmlNode row in table.SelectNodes("tr"))
{
#if DEBUG
t++;
#endif
List<string> rowText = new List<string>();
List<string> rowHtml = new List<string>();
foreach (HtmlNode cell in row.SelectNodes("td"))
{
rowText.Add(cell.InnerText);
rowHtml.Add(cell.OuterHtml);
}
#if DEBUG
//Debug.WriteLine(rowHtml.ElementAt(0));
#endif
if (!(rowText.ElementAt(0).Contains(" ")))
{ //All rows will need a class name, otherwise it will be much more difficult to parse the data
if (!rowText.ElementAt(0).Contains("Kl"))
{ //checking for irrelevant data (such as KL., which appears at the top.)
currentClass = rowText.ElementAt(0);
if (rowText.ElementAt(1).Contains(" "))
helper.InsertData(i, rowText.ElementAt(0), currentLesson, rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7)); //inserting all the data into the SQL database
else
{
helper.InsertData(i, rowText.ElementAt(0), rowText.ElementAt(1), rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7));
currentLesson = rowText.ElementAt(1);
}
}
}
else
{
if (rowText.ElementAt(1).Contains(" "))
helper.InsertData(i, currentClass, currentLesson, rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7)); //inserting all the data into the SQL database
else
{
helper.InsertData(i, currentClass, rowText.ElementAt(1), rowText.ElementAt(2), rowText.ElementAt(3), rowText.ElementAt(4), rowText.ElementAt(5), rowText.ElementAt(6), rowText.ElementAt(7));
currentLesson = rowText.ElementAt(1);
}
}
}
}
#if DEBUG
Debug.WriteLine("Iterations: " + t);
#endif
//END SQL
string outStr = ScheduleHandler.RemLB(result.DocumentNode.SelectSingleNode("//h2").InnerText);
if (!outStr.Contains("erscheint")) {
localSettings.Values["Day" + i + "_Date"] = outStr;
outStr = ScheduleHandler.RemLB(result.DocumentNode.SelectSingleNode("//h1").InnerText);
localSettings.Values["Day" + i + "_UpdateDate"] = outStr;
//END SAVING DATES
pagesCount = i;
}
}
catch (Exception e)
{
#if DEBUG
Debug.WriteLine("Error loading individual page: " + e.Message + e.StackTrace);
#endif
//ContentDialog noWifiDialog = new ContentDialog()
//{
// Title = "Merkwürdiger Fehler",
// Content = "Fehler beim laden einer einzelnen Seite.\n\n Fehlermeldung:\n" + e.Message + e.StackTrace,
// CloseButtonText = "Ok"
//};
//await noWifiDialog.ShowAsync();
}
}
localSettings.Values[PAGES_COUNT] = pagesCount;
}
public static string GetDate(int index)
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
return (string) localSettings.Values["Day" + index + "_Date"];
}
public static string GetUpdateDate()
{
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
return (string) localSettings.Values["UpdateDate"];
}
}
}

12
myRoRo/Sync.cs Normal file
View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace myRoRo
{
class Sync
{
}
}

204
myRoRo/myRoRo.csproj Normal file
View File

@@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{69838279-964F-45BF-B6CE-85B782710430}</ProjectGuid>
<OutputType>AppContainerExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>myRoRo</RootNamespace>
<AssemblyName>myRoRo</AssemblyName>
<DefaultLanguage>de-DE</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.16299.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.14393.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
<PackageCertificateKeyFile>myRoRo_TemporaryKey.pfx</PackageCertificateKeyFile>
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
<AppxBundle>Always</AppxBundle>
<AppxBundlePlatforms>arm</AppxBundlePlatforms>
<AppxPackageDir>D:\wulka\Desktop\</AppxPackageDir>
<AppxSymbolPackageEnabled>False</AppxSymbolPackageEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="DatabaseHelper.cs" />
<Compile Include="MainPage.xaml.cs">
<DependentUpon>MainPage.xaml</DependentUpon>
</Compile>
<Compile Include="NameShortcuts.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Schedule.cs" />
<Compile Include="ScheduleHandler.cs" />
<Compile Include="ScheduleNetwork.cs" />
<Compile Include="Sync.cs" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
<None Include="myRoRo_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\LargeTile.scale-100.png" />
<Content Include="Assets\LargeTile.scale-125.png" />
<Content Include="Assets\LargeTile.scale-150.png" />
<Content Include="Assets\LargeTile.scale-200.png" />
<Content Include="Assets\LargeTile.scale-400.png" />
<Content Include="Assets\SmallTile.scale-100.png" />
<Content Include="Assets\SmallTile.scale-125.png" />
<Content Include="Assets\SmallTile.scale-150.png" />
<Content Include="Assets\SmallTile.scale-200.png" />
<Content Include="Assets\SmallTile.scale-400.png" />
<Content Include="Assets\SplashScreen.scale-100.png" />
<Content Include="Assets\SplashScreen.scale-125.png" />
<Content Include="Assets\SplashScreen.scale-150.png" />
<Content Include="Assets\SplashScreen.scale-400.png" />
<Content Include="Assets\Square150x150Logo.scale-100.png" />
<Content Include="Assets\Square150x150Logo.scale-125.png" />
<Content Include="Assets\Square150x150Logo.scale-150.png" />
<Content Include="Assets\Square150x150Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="Assets\Square44x44Logo.scale-100.png" />
<Content Include="Assets\Square44x44Logo.scale-125.png" />
<Content Include="Assets\Square44x44Logo.scale-150.png" />
<Content Include="Assets\Square44x44Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.targetsize-48.png" />
<Content Include="Assets\StoreLogo.scale-100.png" />
<Content Include="Assets\StoreLogo.scale-125.png" />
<Content Include="Assets\StoreLogo.scale-150.png" />
<Content Include="Assets\StoreLogo.scale-200.png" />
<Content Include="Assets\StoreLogo.scale-400.png" />
<Content Include="Assets\Wide310x150Logo.scale-100.png" />
<Content Include="Assets\Wide310x150Logo.scale-125.png" />
<Content Include="Assets\Wide310x150Logo.scale-150.png" />
<Content Include="Assets\Wide310x150Logo.scale-400.png" />
<Content Include="Properties\Default.rd.xml" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack">
<Version>1.7.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.Data.SQLite">
<Version>1.1.0</Version>
</PackageReference>
</ItemGroup>
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>true</SignAssembly>
</PropertyGroup>
<PropertyGroup>
<AssemblyOriginatorKeyFile>myRoRo_TemporaryKey.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>