Mozgatás a PCL-be elkezdve

This commit is contained in:
Norbi Peti 2017-03-23 09:54:40 +01:00
parent 33a7036ae8
commit 318747b5bf
4 changed files with 160 additions and 85 deletions

View file

@ -1,4 +1,5 @@
using HtmlAgilityPack; using HtmlAgilityPack;
using Orarend.Events;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
@ -193,6 +194,7 @@ namespace Orarend
} }
} }
Mentés(stream()); Mentés(stream());
utolsófrissítésplusz1óra = DateTime.Now + new TimeSpan(1, 0, 0); //Mindenképpen állítsa be, hogy ne írja folyamatosan a hibát
}); });
return true; return true;
} }
@ -224,18 +226,33 @@ 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())
return; betöltés();
} }
catch (Exception e) catch (Exception e)
{ {
hibánál(e); hibánál(e);
példány = new API(); Betöltés();
} }
} }
} }
} }
} //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>
/// Betölti az alapértelemzett értékeket
/// </summary>
public static void Betöltés()
{
példány = new API();
betöltés();
}
private static Timer timer;
private static void betöltés()
{
timer = new Timer(CsengőTimer, null, new TimeSpan(0, 0, 0), new TimeSpan(0, 0, 5));
}
public static void Mentés(Stream s) public static void Mentés(Stream s)
{ {
using (s) using (s)
@ -268,5 +285,105 @@ namespace Orarend
return Hét % 2 == 0; return Hét % 2 == 0;
} }
} }
public static bool Fókusz
{
set
{
if (value)
{
timer.Change(new TimeSpan(0, 0, 0), new TimeSpan(0, 0, 5));
frissítésHa1ÓraEltelt();
}
else
timer.Change(Timeout.Infinite, Timeout.Infinite);
}
}
private static DateTime utolsófrissítésplusz1óra = DateTime.MinValue;
public event EventHandler Frissítéskor;
private static void frissítésHa1ÓraEltelt()
{
if (utolsófrissítésplusz1óra > DateTime.Now)
return;
Frissítéskor?.Invoke(példány, null);
//HelyettesítésFrissítés(false);
}
public DayOfWeek MaiNap
{
get
{
var x = DateTime.Today.DayOfWeek;
if (nincstöbbóra) x++;
return x > DayOfWeek.Saturday || x == DayOfWeek.Sunday ? DayOfWeek.Monday : x;
}
}
private static Helyettesítés[] helyettesítésInnenIde(int i, int j)
{ //TODO: API-ba
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.ÚjNap == i + 1 && h.ÚjSorszám == j + 1 && h.ÚjÓra != null) //Ha az eredeti óra elmarad, és ide lesz helyezve egy másik, az áthelyezést mutassa
};
}
private static bool nincstöbbóra = false;
private static Órarend órarend; //TODO
public static event EventHandler<TimerEventArgs> CsengőTimerEvent;
private static void CsengőTimer(object state)
{
CsengőTimerEvent?.Invoke(példány, CsengőTimer());
}
private static TimerEventArgs CsengőTimer()
{
if (órarend == null)
return new TimerEventArgs(null, "Nincs órarend kiválasztva");
var most = DateTime.Now - DateTime.Today;
//var most = new TimeSpan(9, 46, 0);
bool talált = false;
nincstöbbóra = false;
if (órarend.Órakezdetek[0] == TimeSpan.Zero) //Még nincsenek beállítva a kezdetek
return new TimerEventArgs(null, "Betöltés"); //TODO
string kezdveg = null, kovora = null;
for (int i = 0; i < órarend.Órakezdetek.Length - 1; i++)
{
var vége = órarend.Órakezdetek[i].Add(new TimeSpan(0, 45, 0));
bool becsengetés;
int x = (int)DateTime.Today.DayOfWeek - 1;
Óra óra;
var innenide = helyettesítésInnenIde(x, i);
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)
{ //-1: Vasárnap
if (most > órarend.Órakezdetek[i])
{
if (most < vége)
{
kezdveg = "Kicsengetés: " + óraperc(vége - most);
talált = true;
becsengetés = false;
}
else
continue;
}
else
{
kezdveg = "Becsengetés: " + óraperc(órarend.Órakezdetek[i] - most);
talált = true;
becsengetés = true;
}
kovora = (becsengetés ? "Következő" : "Jelenlegi") + " óra: " + óra.EgyediNév + "\n" + óra.Terem + "\n" + óra.Tanár.Név + "\n" + óra.Csoportok.Aggregate((a, b) => a + ", " + b);
nincstöbbóra = false;
break;
}
}
if (!talált)
{
nincstöbbóra = true;
}
return new TimerEventArgs(kovora, kezdveg);
}
} }
} }

View file

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Orarend.Events
{
public class TimerEventArgs : EventArgs
{
/// <summary>
/// Lehet null
/// </summary>
public string KövetkezőÓra { get; }
/// <summary>
/// Lehet null
/// </summary>
public string HátralévőIdő { get; }
public TimerEventArgs(string kövóra, string hátralévőidő)
{
KövetkezőÓra = kövóra;
HátralévőIdő = hátralévőidő;
}
}
}

View file

@ -35,6 +35,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="API.cs" /> <Compile Include="API.cs" />
<Compile Include="Events\TimerEventArgs.cs" />
<Compile Include="Helyettesítés.cs" /> <Compile Include="Helyettesítés.cs" />
<Compile Include="Osztály.cs" /> <Compile Include="Osztály.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
@ -53,6 +54,7 @@
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.

View file

@ -22,7 +22,6 @@ namespace OrarendAndroidApp
{ {
private Handler handler; private Handler handler;
private Órarend órarend; private Órarend órarend;
private Timer timer;
private const int EDIT_ADD_ACT_REQUEST = 1; private const int EDIT_ADD_ACT_REQUEST = 1;
private const int SETTINGS_ACT_REQUEST = 2; private const int SETTINGS_ACT_REQUEST = 2;
@ -43,7 +42,10 @@ namespace OrarendAndroidApp
string[] list = FileList(); string[] list = FileList();
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)); API.Betöltés(OpenFileInput(DATA_FILENAME), e => Hiba("Hiba az adatok betöltése során!\n" + e));
timer = new Timer(CsengőTimer, null, new TimeSpan(0, 0, 0), new TimeSpan(0, 0, 5)); else
API.Betöltés();
if (API.CsengőTimerEvent == null)
API.CsengőTimerEvent += CsengőTimer;
} }
private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e) private void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e)
@ -122,7 +124,6 @@ namespace OrarendAndroidApp
if (t.Result) if (t.Result)
Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short).Show(); Toast.MakeText(this, "Helyettesítések frissítve", ToastLength.Short).Show();
} }
utolsófrissítésplusz1óra = DateTime.Now + new TimeSpan(1, 0, 0); //Mindenképpen állítsa be, hogy ne írja folyamatosan a hibát
}); });
}); });
} }
@ -208,15 +209,6 @@ namespace OrarendAndroidApp
selected = null; selected = null;
} }
private Helyettesítés[] helyettesítésInnenIde(int i, int j)
{ //TODO: API-ba
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.ÚjNap == i + 1 && h.ÚjSorszám == j + 1 && h.ÚjÓra != null) //Ha az eredeti óra elmarad, és ide lesz helyezve egy másik, az áthelyezést mutassa
};
}
private TextView selected; private TextView selected;
/// <summary> /// <summary>
/// Kiválasztja az adott órát /// Kiválasztja az adott órát
@ -375,69 +367,20 @@ namespace OrarendAndroidApp
return ret; return ret;
} }
private bool nincstöbbóra = false; private void CsengőTimer(object sender, TimerEventArgs e)
private void CsengőTimer(object state)
{ {
handler.Post(() => handler.Post(() =>
{ {
var kezdveg = FindViewById<TextView>(Resource.Id.kezdvegTV); var kezdveg = FindViewById<TextView>(Resource.Id.kezdvegTV);
if (órarend == null)
{
kezdveg.Text = "Nincs órarend kiválasztva";
return;
}
var most = DateTime.Now - DateTime.Today;
//var most = new TimeSpan(9, 46, 0);
bool talált = false;
var kovora = FindViewById<TextView>(Resource.Id.kovoraTV); var kovora = FindViewById<TextView>(Resource.Id.kovoraTV);
nincstöbbóra = false; if (e.KövetkezőÓra == null)
if (órarend.Órakezdetek[0] == TimeSpan.Zero)
{ //Még nincsenek beállítva a kezdetek
kezdveg.Text = "Betöltés";
kovora.Visibility = ViewStates.Invisible; kovora.Visibility = ViewStates.Invisible;
return;
}
for (int i = 0; i < órarend.Órakezdetek.Length - 1; i++)
{
var vége = órarend.Órakezdetek[i].Add(new TimeSpan(0, 45, 0));
bool becsengetés;
int x = (int)DateTime.Today.DayOfWeek - 1; //TODO: A mai nap és ez az egész az API-ba
//x = 2; //TODO: TMP
Óra óra;
var innenide = helyettesítésInnenIde(x, i);
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)
{ //-1: Vasárnap
if (most > órarend.Órakezdetek[i])
{
if (most < vége)
{
kezdveg.Text = "Kicsengetés: " + óraperc(vége - most);
talált = true;
becsengetés = false;
}
else else
continue; kovora.Text = e.KövetkezőÓra;
} if (e.HátralévőIdő == null)
else
{
kezdveg.Text = "Becsengetés: " + óraperc(órarend.Órakezdetek[i] - most);
talált = true;
becsengetés = true;
}
kovora.Text = (becsengetés ? "Következő" : "Jelenlegi") + " óra: " + óra.EgyediNév + "\n" + óra.Terem + "\n" + óra.Tanár.Név + "\n" + óra.Csoportok.Aggregate((a, b) => a + ", " + b);
kovora.Visibility = ViewStates.Visible;
kezdveg.Visibility = ViewStates.Visible;
nincstöbbóra = false;
break;
}
}
if (!talált)
{
kezdveg.Visibility = ViewStates.Invisible; kezdveg.Visibility = ViewStates.Invisible;
kovora.Visibility = ViewStates.Invisible; else
nincstöbbóra = true; kezdveg.Text = e.HátralévőIdő;
}
}); });
} }
@ -469,32 +412,20 @@ namespace OrarendAndroidApp
base.OnWindowFocusChanged(hasFocus); base.OnWindowFocusChanged(hasFocus);
if (!hasFocus) if (!hasFocus)
{ {
timer.Change(Timeout.Infinite, Timeout.Infinite); API.Fókusz = false;
return; return;
} }
timer.Change(new TimeSpan(0, 0, 0), new TimeSpan(0, 0, 5));
frissítésHa1ÓraEltelt();
MaiNaphozGörgetés(); MaiNaphozGörgetés();
} }
private void MaiNaphozGörgetés() private void MaiNaphozGörgetés()
{ {
var x = DateTime.Today.DayOfWeek; var x = API.MaiNap;
if (nincstöbbóra) x++;
x = x > DayOfWeek.Saturday || x == DayOfWeek.Sunday ? DayOfWeek.Monday : x;
var table = FindViewById<TableLayout>(Resource.Id.tableLayout1); var table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
if (table.ChildCount == 0) if (table.ChildCount == 0)
return; return;
var cell = (table.GetChildAt(0) as ViewGroup).GetChildAt((int)x); var cell = (table.GetChildAt(0) as ViewGroup).GetChildAt((int)x);
FindViewById<HorizontalScrollView>(Resource.Id.horizontalView).SmoothScrollTo(Math.Max(cell.Left - (FindViewById(Resource.Id.container).Width - cell.Width) / 2, 0), 0); FindViewById<HorizontalScrollView>(Resource.Id.horizontalView).SmoothScrollTo(Math.Max(cell.Left - (FindViewById(Resource.Id.container).Width - cell.Width) / 2, 0), 0);
} }
private DateTime utolsófrissítésplusz1óra = DateTime.MinValue;
private void frissítésHa1ÓraEltelt()
{
if (utolsófrissítésplusz1óra > DateTime.Now)
return;
HelyettesítésFrissítés(false);
}
} }
} }