Áthelyezés folytatva

This commit is contained in:
Norbi Peti 2017-03-24 23:26:16 +01:00
parent 318747b5bf
commit 45557da7bf
4 changed files with 79 additions and 20 deletions

View file

@ -1,5 +1,6 @@
using HtmlAgilityPack; using HtmlAgilityPack;
using Orarend.Events; using Orarend.Events;
using SimpleTimerPortable;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
@ -210,12 +211,13 @@ namespace Orarend
/// </summary> /// </summary>
/// <param name="s">A stream, ahonnan betöltse az adatokat</param> /// <param name="s">A stream, ahonnan betöltse az adatokat</param>
/// <param name="hibánál">Megadja, mi történjen egy hiba esetén</param> /// <param name="hibánál">Megadja, mi történjen egy hiba esetén</param>
public static void Betöltés(Stream s, Action<Exception> hibánál) /// <returns>Elvégezte-e a betöltést</returns>
public static bool Betöltés(Stream s, Action<Exception> hibánál)
{ {
using (s) using (s)
{ {
if (!!(Órarendek.Count > 0 || Osztályok?.Length > 0)) if (!!!betöltés())
return; return false;
using (var ms = new MemoryStream()) using (var ms = new MemoryStream())
{ {
s.CopyTo(ms); s.CopyTo(ms);
@ -226,31 +228,38 @@ namespace Orarend
ms.Seek(0, SeekOrigin.Begin); ms.Seek(0, SeekOrigin.Begin);
var serializer = new DataContractJsonSerializer(typeof(API)); var serializer = new DataContractJsonSerializer(typeof(API));
serializer.ReadObject(ms); //A példányt beállítja, mikor elkezdi, nem várja meg, hogy végezzen (betöltés()) serializer.ReadObject(ms); //A példányt beállítja, mikor elkezdi, nem várja meg, hogy végezzen (betöltés())
betöltés(); return true;
} }
catch (Exception e) catch (Exception e)
{ {
hibánál(e); hibánál(e);
Betöltés(); return Betöltés();
} }
} }
else return false;
} }
} }
} //TODO: Tényleges órarendből állapítsa meg azt is, hogyha egyáltalán nincs ott egy óra, és máshol sincs, és ezt írja ki } //TODO: Tényleges órarendből állapítsa meg azt is, hogyha egyáltalán nincs ott egy óra, és máshol sincs, és ezt írja ki
/// <summary> /// <summary>
/// Betölti az alapértelemzett értékeket /// Betölti az alapértelemzett értékeket
/// <returns>Elvégezte-e a betöltést</returns>
/// </summary> /// </summary>
public static void Betöltés() public static bool Betöltés()
{ {
if (!betöltés())
return false;
példány = new API(); példány = new API();
betöltés(); return true;
} }
private static Timer timer; private static Timer timer;
private static void betöltés() private static bool betöltés()
{ {
timer = new Timer(CsengőTimer, null, new TimeSpan(0, 0, 0), new TimeSpan(0, 0, 5)); if (!!(Órarendek.Count > 0 || Osztályok?.Length > 0 || timer != null))
return false;
timer = new Timer(CsengőTimer, null, new TimeSpan(0, 0, 0, 0, 100), new TimeSpan(0, 0, 5));
return true;
} }
public static void Mentés(Stream s) public static void Mentés(Stream s)
@ -296,12 +305,12 @@ namespace Orarend
frissítésHa1ÓraEltelt(); frissítésHa1ÓraEltelt();
} }
else else
timer.Change(Timeout.Infinite, Timeout.Infinite); timer.Cancel();
} }
} }
private static DateTime utolsófrissítésplusz1óra = DateTime.MinValue; private static DateTime utolsófrissítésplusz1óra = DateTime.MinValue;
public event EventHandler Frissítéskor; public static event EventHandler Frissítéskor;
private static void frissítésHa1ÓraEltelt() private static void frissítésHa1ÓraEltelt()
{ {
if (utolsófrissítésplusz1óra > DateTime.Now) if (utolsófrissítésplusz1óra > DateTime.Now)
@ -310,7 +319,7 @@ namespace Orarend
//HelyettesítésFrissítés(false); //HelyettesítésFrissítés(false);
} }
public DayOfWeek MaiNap public static DayOfWeek MaiNap
{ {
get get
{ {
@ -320,8 +329,8 @@ namespace Orarend
} }
} }
private static Helyettesítés[] helyettesítésInnenIde(int i, int j) public static Helyettesítés[] HelyettesítésInnenIde(Órarend órarend, int i, int j)
{ //TODO: API-ba {
return new Helyettesítés[] return new Helyettesítés[]
{ {
órarend.Helyettesítések.FirstOrDefault(h => (int)h.EredetiNap == i + 1 && h.EredetiSorszám == j + 1), órarend.Helyettesítések.FirstOrDefault(h => (int)h.EredetiNap == i + 1 && h.EredetiSorszám == j + 1),
@ -353,7 +362,7 @@ namespace Orarend
bool becsengetés; bool becsengetés;
int x = (int)DateTime.Today.DayOfWeek - 1; int x = (int)DateTime.Today.DayOfWeek - 1;
Óra óra; Óra óra;
var innenide = helyettesítésInnenIde(x, i); var innenide = API.HelyettesítésInnenIde(órarend, x, i);
Func<TimeSpan, string> óraperc = ts => ts.Hours > 0 ? ts.ToString("h\\ómm\\p") : ts.ToString("mm") + " perc"; Func<TimeSpan, string> óraperc = ts => ts.Hours > 0 ? ts.ToString("h\\ómm\\p") : ts.ToString("mm") + " perc";
if (x != -1 && x < 6 && (óra = innenide[1] != null ? innenide[1].ÚjÓra : innenide[0] != null ? innenide[0].EredetiNap != innenide[0].ÚjNap || innenide[0].EredetiSorszám != innenide[0].ÚjSorszám ? null : innenide[0].ÚjÓra : órarend.Órák[x][i]) != null) if (x != -1 && x < 6 && (óra = innenide[1] != null ? innenide[1].ÚjÓra : innenide[0] != null ? innenide[0].EredetiNap != innenide[0].ÚjNap || innenide[0].EredetiSorszám != innenide[0].ÚjSorszám ? null : innenide[0].ÚjÓra : órarend.Órák[x][i]) != null)
{ //-1: Vasárnap { //-1: Vasárnap

View file

@ -41,6 +41,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Settings.cs" /> <Compile Include="Settings.cs" />
<Compile Include="Tanár.cs" /> <Compile Include="Tanár.cs" />
<Compile Include="Timer.cs" />
<Compile Include="Óra.cs" /> <Compile Include="Óra.cs" />
<Compile Include="Órarend.cs" /> <Compile Include="Órarend.cs" />
<Compile Include="ÓraTípus.cs" /> <Compile Include="ÓraTípus.cs" />

47
Orarend/Timer.cs Normal file
View file

@ -0,0 +1,47 @@
using System;
using System.Threading;
using System.Threading.Tasks;
namespace SimpleTimerPortable
{
internal delegate void TimerCallback(object state);
internal sealed class Timer : CancellationTokenSource, IDisposable
{
public Timer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period)
{
this.callback = callback;
this.state = state;
start(dueTime, period);
}
private TimerCallback callback;
private object state;
private void start(TimeSpan dueTime, TimeSpan period)
{
Task.Delay(dueTime, Token).ContinueWith(async (t, s) =>
{
var tuple = (Tuple<TimerCallback, object>)s;
while (true)
{
if (IsCancellationRequested)
break;
await Task.Run(() => tuple.Item1(tuple.Item2));
await Task.Delay(period);
}
}, Tuple.Create(callback, state), CancellationToken.None,
TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion,
TaskScheduler.Default);
}
public new void Dispose() { base.Cancel(); }
public void Change(TimeSpan dueTime, TimeSpan period)
{
Cancel();
start(dueTime, period);
}
}
}

View file

@ -14,6 +14,7 @@ using System.Threading;
using System.IO; using System.IO;
using System.Net; using System.Net;
using Android.Preferences; using Android.Preferences;
using Orarend.Events;
namespace OrarendAndroidApp namespace OrarendAndroidApp
{ {
@ -40,11 +41,12 @@ namespace OrarendAndroidApp
//ActionBar.SetCustomView(FindViewById<Spinner>(Resource.Id.spinner), new ActionBar.LayoutParams(GravityFlags.Left)); //ActionBar.SetCustomView(FindViewById<Spinner>(Resource.Id.spinner), new ActionBar.LayoutParams(GravityFlags.Left));
handler = new Handler(); handler = new Handler();
string[] list = FileList(); string[] list = FileList();
bool betöltötte;
if (list.Contains(DATA_FILENAME)) if (list.Contains(DATA_FILENAME))
API.Betöltés(OpenFileInput(DATA_FILENAME), e => Hiba("Hiba az adatok betöltése során!\n" + e)); betöltötte = API.Betöltés(OpenFileInput(DATA_FILENAME), e => Hiba("Hiba az adatok betöltése során!\n" + e));
else else
API.Betöltés(); betöltötte = API.Betöltés();
if (API.CsengőTimerEvent == null) if (betöltötte)
API.CsengőTimerEvent += CsengőTimer; API.CsengőTimerEvent += CsengőTimer;
} }
@ -188,7 +190,7 @@ namespace OrarendAndroidApp
addCell((j + 1).ToString(), DarkTheme ? Color.White : Color.Black, tr); addCell((j + 1).ToString(), DarkTheme ? Color.White : Color.Black, tr);
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
{ {
var innenide = helyettesítésInnenIde(i, j); var innenide = API.HelyettesítésInnenIde(órarend, i, j);
var helyettesítés = innenide[0]; var helyettesítés = innenide[0];
var helyettesítésIde = innenide[1]; var helyettesítésIde = innenide[1];
addCell(helyettesítésIde != null ? helyettesítésIde.ÚjÓra.EgyediNév : helyettesítés != null ? helyettesítés.EredetiNap != helyettesítés.ÚjNap || helyettesítés.EredetiSorszám != helyettesítés.ÚjSorszám ? "Áthelyezve" : helyettesítés.ÚjÓra?.EgyediNév ?? "elmarad" : órarend.Órák[i][j]?.EgyediNév ?? "", helyettesítés == null ? (DarkTheme ? Color.WhiteSmoke : Color.Black) : Color.Red, tr, new int[2] { i, j }); addCell(helyettesítésIde != null ? helyettesítésIde.ÚjÓra.EgyediNév : helyettesítés != null ? helyettesítés.EredetiNap != helyettesítés.ÚjNap || helyettesítés.EredetiSorszám != helyettesítés.ÚjSorszám ? "Áthelyezve" : helyettesítés.ÚjÓra?.EgyediNév ?? "elmarad" : órarend.Órák[i][j]?.EgyediNév ?? "", helyettesítés == null ? (DarkTheme ? Color.WhiteSmoke : Color.Black) : Color.Red, tr, new int[2] { i, j });
@ -224,7 +226,7 @@ namespace OrarendAndroidApp
Helyettesítés helyettesítésIde = null; Helyettesítés helyettesítésIde = null;
if (ij != null) if (ij != null)
{ {
var innenide = helyettesítésInnenIde(ij[0], ij[1]); var innenide = API.HelyettesítésInnenIde(órarend, ij[0], ij[1]);
helyettesítésInnen = innenide[0]; helyettesítésInnen = innenide[0];
helyettesítésIde = innenide[1]; helyettesítésIde = innenide[1];
} }