Mozgatás a PCL-be elkezdve
This commit is contained in:
parent
33a7036ae8
commit
318747b5bf
4 changed files with 160 additions and 85 deletions
121
Orarend/API.cs
121
Orarend/API.cs
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
25
Orarend/Events/TimerEventArgs.cs
Normal file
25
Orarend/Events/TimerEventArgs.cs
Normal 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ő;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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.
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue