Helyettesítések, ...
This commit is contained in:
parent
7505ec8406
commit
e9bcba3493
10 changed files with 182 additions and 82 deletions
|
@ -20,11 +20,13 @@ namespace Orarend
|
|||
/// <returns></returns>
|
||||
public static Osztály[] Osztályok { get; private set; }
|
||||
public static List<Órarend> Órarendek { get; } = new List<Órarend>();
|
||||
public static Settings Beállítások { get; private set; } //TODO: Settings
|
||||
public static Settings Beállítások { get; private set; } = new Settings();
|
||||
public static List<Helyettesítés> Helyettesítések { get; } = new List<Helyettesítés>();
|
||||
/// <summary>
|
||||
/// Frissíti az osztálylistát és az eredeti órarendet, első megnyitásnál, és egy órarend hozzáadásánál/szerkesztésénél, majd hetente elegendő meghívni
|
||||
/// <param name="s">A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni</param>
|
||||
/// </summary>
|
||||
public static async Task Frissítés()
|
||||
public static async Task Frissítés(Stream s)
|
||||
{
|
||||
Func<string, Task<HtmlDocument>> load = async (url) =>
|
||||
{
|
||||
|
@ -52,6 +54,7 @@ namespace Orarend
|
|||
var doc = await load("http://deri.enaplo.net/ajax/orarend/orarendoszt.php?p=" + Uri.EscapeDataString(órarend.Osztály.Azonosító));
|
||||
await Task.Run(() =>
|
||||
{
|
||||
Osztályok = doc.GetElementbyId("uok").ChildNodes.Where(node => node.HasAttributes).Select(node => new Osztály { Azonosító = node.GetAttributeValue("value", ""), Név = node.NextSibling.InnerText }).ToArray();
|
||||
bool ahét = true;
|
||||
foreach (var node in doc.GetElementbyId("oda").FirstChild.FirstChild.ChildNodes[1].ChildNodes)
|
||||
{
|
||||
|
@ -68,8 +71,8 @@ namespace Orarend
|
|||
int x = int.Parse(node.FirstChild.InnerText) - 1;
|
||||
órarend.Órakezdetek[x] = TimeSpan.Parse(node.FirstChild.Attributes["title"].Value.Split('-')[0].Trim());
|
||||
for (int i = 0; i < 5; i++) //Napok
|
||||
{ //TODO: for ciklus az egy időben tartott órákhoz
|
||||
var óranode = node.ChildNodes[i + 1].FirstChild;
|
||||
{ //TODO: for ciklus az egy időben tartott órákhoz
|
||||
var óranode = node.ChildNodes[i + 1].FirstChild;
|
||||
var óra = (ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i, x];
|
||||
if (óranode.ChildNodes.Count == 0)
|
||||
continue;
|
||||
|
@ -78,7 +81,6 @@ namespace Orarend
|
|||
continue;
|
||||
if (óra == null)
|
||||
(ahét ? órarend.ÓrákAHét : órarend.ÓrákBHét)[i, x] = óra = new Óra();
|
||||
óra.Sorszám = x + 1;
|
||||
óra.Csoportok = new string[] { csoport }; //Az állandó órarendben osztályonként csak egy csoport van egy órán
|
||||
óra.Azonosító = óranode.ChildNodes[2].InnerText;
|
||||
óra.TeljesNév = óranode.ChildNodes[2].Attributes["title"].Value;
|
||||
|
@ -93,15 +95,18 @@ namespace Orarend
|
|||
}
|
||||
}
|
||||
}
|
||||
ÓrarendMentés(s);
|
||||
OsztályMentés(s);
|
||||
Thread.Sleep(10);
|
||||
});
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Frissíti a helyettesítéseket, naponta, indításkor vagy gombnyommásra frissítse (minden nap az első előtérbe kerüléskor)
|
||||
/// <param name="s">A file stream, ahova mentse az adatokat, hogy ne kelljen külön meghívni</param>
|
||||
/// </summary>
|
||||
public static async Task HelyettesítésFrissítés()
|
||||
public static async Task HelyettesítésFrissítés(Stream s)
|
||||
{
|
||||
HtmlDocument doc = new HtmlDocument();
|
||||
var req = WebRequest.CreateHttp("http://deri.enaplo.net/ajax/print/htlista.php");
|
||||
|
@ -110,7 +115,7 @@ namespace Orarend
|
|||
{
|
||||
using (var sr = new StreamReader(resp.GetResponseStream()))
|
||||
doc.LoadHtml(sr.ReadToEnd());
|
||||
});
|
||||
}); //TODO
|
||||
}
|
||||
|
||||
public static void ÓrarendBetöltés(Stream s)
|
||||
|
@ -140,7 +145,16 @@ namespace Orarend
|
|||
}
|
||||
}
|
||||
|
||||
public static void ÓrarendMentés(Stream s)
|
||||
public static void HelyettesítésBetöltés(Stream s)
|
||||
{
|
||||
using (s)
|
||||
{
|
||||
var serializer = new DataContractJsonSerializer(typeof(Helyettesíté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
|
||||
Helyettesítések.AddRange((Helyettesítés[])serializer.ReadObject(s));
|
||||
}
|
||||
}
|
||||
|
||||
private static void ÓrarendMentés(Stream s)
|
||||
{
|
||||
using (s)
|
||||
{
|
||||
|
@ -149,7 +163,7 @@ namespace Orarend
|
|||
}
|
||||
}
|
||||
|
||||
public static void OsztályMentés(Stream s)
|
||||
private static void OsztályMentés(Stream s)
|
||||
{
|
||||
using (s)
|
||||
{
|
||||
|
@ -166,5 +180,14 @@ namespace Orarend
|
|||
serializer.WriteObject(s, Beállítások);
|
||||
}
|
||||
}
|
||||
|
||||
private static void HelyettesítésMentés(Stream s)
|
||||
{
|
||||
using (s)
|
||||
{
|
||||
var serializer = new DataContractJsonSerializer(typeof(Helyettesítés[]));
|
||||
serializer.WriteObject(s, Helyettesítések);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
18
Orarend/Helyettesítés.cs
Normal file
18
Orarend/Helyettesítés.cs
Normal file
|
@ -0,0 +1,18 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Orarend
|
||||
{
|
||||
public class Helyettesítés
|
||||
{
|
||||
public byte EredetiNap { get; set; }
|
||||
public byte EredetiSorszám { get; set; }
|
||||
public Óra EredetiÓra { get; set; }
|
||||
public byte ÚjNap { get; set; }
|
||||
public byte ÚjSorszám { get; set; }
|
||||
public Óra ÚjÓra { get; set; }
|
||||
}
|
||||
}
|
|
@ -35,6 +35,7 @@
|
|||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="API.cs" />
|
||||
<Compile Include="Helyettesítés.cs" />
|
||||
<Compile Include="Osztály.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Settings.cs" />
|
||||
|
|
|
@ -8,5 +8,25 @@ namespace Orarend
|
|||
{
|
||||
public class Settings
|
||||
{
|
||||
public bool DarkTheme { get; set; }
|
||||
public void UseCommonNames()
|
||||
{
|
||||
set("mateme", "Matek");
|
||||
set("prgelm", "Programozás elmélet");
|
||||
set("magny", "Nyelvtan");
|
||||
set(";prggy", "Programozás gyakorlat");
|
||||
set("testns", "Tesi");
|
||||
set("tapism", "Töri");
|
||||
set("matema", "Matek");
|
||||
set("bioege", "Biosz");
|
||||
set("foldra", "Föci");
|
||||
set(";halgy", "Hálózat gyakorlat");
|
||||
}
|
||||
|
||||
private void set(string id, string name)
|
||||
{
|
||||
if (ÓraTípus.Típusok.ContainsKey(id))
|
||||
ÓraTípus.Típusok[id].EgyediNév = name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ namespace Orarend
|
|||
{
|
||||
private ÓraTípus Típus { get; set; }
|
||||
public Tanár Tanár { get; set; }
|
||||
public int Sorszám { get; set; }
|
||||
public string Terem { get; set; }
|
||||
/// <summary>
|
||||
/// Az órán résztvevő csoportok
|
||||
|
@ -59,5 +58,19 @@ namespace Orarend
|
|||
Típus.EgyediNév = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool VanEgyediNév
|
||||
{
|
||||
get
|
||||
{
|
||||
return Típus?.EgyediNév == null;
|
||||
}
|
||||
}
|
||||
|
||||
public void EgyediNévTörlése()
|
||||
{
|
||||
if (Típus != null)
|
||||
Típus.EgyediNév = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Orarend
|
||||
{
|
||||
|
@ -12,6 +8,9 @@ namespace Orarend
|
|||
public string Azonosító { get; set; }
|
||||
public string EgyediNév { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A kulcs az óra azonosítója
|
||||
/// </summary>
|
||||
public static Dictionary<string, ÓraTípus> Típusok { get; } = new Dictionary<string, ÓraTípus>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ namespace OrarendAndroidApp
|
|||
{
|
||||
base.OnCreate(bundle);
|
||||
SetContentView(Resource.Layout.MainLayout);
|
||||
ActionBar.SetDisplayShowTitleEnabled(false);
|
||||
ActionBar.CustomView = FindViewById<Spinner>(Resource.Id.spinner);
|
||||
handler = new Handler();
|
||||
string[] list = FileList();
|
||||
if (list.Contains("beallitasok"))
|
||||
|
@ -34,56 +36,55 @@ namespace OrarendAndroidApp
|
|||
API.ÓrarendBetöltés(OpenFileInput("orarend"));
|
||||
if (list.Contains("osztaly"))
|
||||
API.OsztályBetöltés(OpenFileInput("osztaly"));
|
||||
API.Frissítés().ContinueWith(t =>
|
||||
{
|
||||
handler.Post(() =>
|
||||
{
|
||||
TaskHiba(t);
|
||||
});
|
||||
órarend = new Órarend("Teszt", API.Osztályok.First(), "gy1");
|
||||
API.Órarendek.Add(órarend);
|
||||
API.Frissítés().ContinueWith(tt => HelyettesítésFrissítés());
|
||||
});
|
||||
if (list.Contains("osztaly"))
|
||||
API.OsztályBetöltés(OpenFileInput("osztaly"));
|
||||
if (API.Osztályok == null || API.Osztályok.Length == 0)
|
||||
ÓrarendFrissítés();
|
||||
var timer = new Timer(CsengőTimer, null, TimeSpan.Zero, new TimeSpan(0, 0, 1));
|
||||
}
|
||||
|
||||
private void addCell(string text, Color color, TableRow tr1, bool clickable = false, int[] tag = null)
|
||||
{
|
||||
TextView textview = new TextView(this);
|
||||
textview.SetText(text, TextView.BufferType.Normal);
|
||||
textview.SetTextColor(color);
|
||||
textview.SetPadding(10, 10, 10, 10);
|
||||
textview.SetBackgroundResource(Resource.Drawable.cell_shape_light);
|
||||
textview.Tag = tag;
|
||||
if (textview.Clickable = clickable)
|
||||
textview.Click += ÓraClick;
|
||||
tr1.AddView(textview);
|
||||
}
|
||||
|
||||
private void HelyettesítésFrissítés()
|
||||
{
|
||||
var table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
|
||||
Action<string, Color, TableRow, bool, int[]> addCell = (text, color, tr1, clickable, tag) =>
|
||||
{
|
||||
TextView textview = new TextView(this);
|
||||
textview.SetText(text, TextView.BufferType.Normal);
|
||||
textview.SetTextColor(color);
|
||||
textview.SetPadding(10, 10, 10, 10);
|
||||
textview.SetBackgroundResource(Resource.Drawable.cell_shape_light);
|
||||
textview.Tag = tag;
|
||||
if (textview.Clickable = clickable)
|
||||
textview.Click += ÓraClick;
|
||||
tr1.AddView(textview);
|
||||
};
|
||||
API.HelyettesítésFrissítés().ContinueWith(t =>
|
||||
{ //TODO: Ezt ne itt, ne így
|
||||
}); //TODO: Tárolja el a helyettesített órarendeket is valahogyan, akár külön osztály, hogy csak a változásokat tárolja
|
||||
}
|
||||
|
||||
private void ÓrarendFrissítés()
|
||||
{ //TODO: Meghívni minden tervezett alkalommal; hozzáadásnál csak a hozzáadott órarendet frissítse
|
||||
API.Frissítés(OpenFileOutput("orarend", FileCreationMode.Private)).ContinueWith(t =>
|
||||
{
|
||||
handler.Post(() =>
|
||||
{
|
||||
TaskHiba(t);
|
||||
if(TaskHiba(t))
|
||||
{
|
||||
var table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
|
||||
table.RemoveViews(0, table.ChildCount); //TODO: Test
|
||||
TableRow tr = new TableRow(this);
|
||||
addCell("", Color.Black, tr, false, null);
|
||||
addCell("Hétfő", Color.Black, tr, false, null);
|
||||
addCell("Kedd", Color.Black, tr, false, null);
|
||||
addCell("Szerda", Color.Black, tr, false, null);
|
||||
addCell("Csütörtök", Color.Black, tr, false, null);
|
||||
addCell("Péntek", Color.Black, tr, false, null);
|
||||
addCell("Szombat", Color.Black, tr, false, null);
|
||||
addCell("", Color.Black, tr);
|
||||
addCell("Hétfő", Color.Black, tr);
|
||||
addCell("Kedd", Color.Black, tr);
|
||||
addCell("Szerda", Color.Black, tr);
|
||||
addCell("Csütörtök", Color.Black, tr);
|
||||
addCell("Péntek", Color.Black, tr);
|
||||
addCell("Szombat", Color.Black, tr);
|
||||
table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
|
||||
|
||||
}
|
||||
if ((t.Exception?.InnerExceptions?.Count ?? 0) == 0)
|
||||
{
|
||||
for (int j = 0; j < órarend.ÓrákAHét.GetLength(1); j++)
|
||||
{
|
||||
TableRow tr = new TableRow(this);
|
||||
tr = new TableRow(this);
|
||||
bool notnull = false;
|
||||
for (int i = 0; i < órarend.ÓrákAHét.GetLength(0); i++)
|
||||
{ //Kihagyja az üres sorokat
|
||||
|
@ -95,7 +96,7 @@ namespace OrarendAndroidApp
|
|||
}
|
||||
if (notnull)
|
||||
{
|
||||
addCell((j + 1).ToString(), Color.Black, tr, false, null);
|
||||
addCell((j + 1).ToString(), Color.Black, tr);
|
||||
for (int i = 0; i < órarend.ÓrákAHét.GetLength(0); i++)
|
||||
addCell(órarend.ÓrákAHét[i, j] != null ? órarend.ÓrákAHét[i, j].EgyediNév : "", Color.Black, tr, true, new int[2] { i, j });
|
||||
table.AddView(tr, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent));
|
||||
|
@ -103,7 +104,7 @@ namespace OrarendAndroidApp
|
|||
}
|
||||
}
|
||||
});
|
||||
}); //TODO: Tárolja el a helyettesített órarendeket is valahogyan, akár külön osztály, hogy csak a változásokat tárolja
|
||||
});
|
||||
}
|
||||
|
||||
private TextView selected;
|
||||
|
@ -180,10 +181,20 @@ namespace OrarendAndroidApp
|
|||
new AlertDialog.Builder(this).SetMessage(msg).SetNeutralButton("OK", (s, e) => { ((AlertDialog)s).Dismiss(); ((AlertDialog)s).Dispose(); }).SetTitle("Hiba").Show();
|
||||
}
|
||||
|
||||
private void TaskHiba(Task t)
|
||||
/// <summary>
|
||||
/// Az összes hibát kiírja, ami a <see cref="Task"/> futása közben keletkezett
|
||||
/// </summary>
|
||||
/// <param name="t"></param>
|
||||
/// <returns>Igaz, ha nem volt hiba</returns>
|
||||
private bool TaskHiba(Task t)
|
||||
{
|
||||
bool ret = true;
|
||||
foreach (var ex in (IEnumerable<System.Exception>)t.Exception?.InnerExceptions ?? new System.Exception[0])
|
||||
{
|
||||
Hiba(ex.ToString());
|
||||
ret = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void CsengőTimer(object state)
|
||||
|
|
58
OrarendAndroidApp/Resources/Resource.Designer.cs
generated
58
OrarendAndroidApp/Resources/Resource.Designer.cs
generated
|
@ -93,47 +93,53 @@ namespace OrarendAndroidApp
|
|||
// aapt resource value: 0x7f060001
|
||||
public const int horizontalView = 2131099649;
|
||||
|
||||
// aapt resource value: 0x7f060009
|
||||
public const int idoTV = 2131099657;
|
||||
|
||||
// aapt resource value: 0x7f06000a
|
||||
public const int kezdvegTV = 2131099658;
|
||||
public const int idoTV = 2131099658;
|
||||
|
||||
// aapt resource value: 0x7f06000b
|
||||
public const int kovoraTV = 2131099659;
|
||||
|
||||
// aapt resource value: 0x7f06000d
|
||||
public const int menu_add = 2131099661;
|
||||
|
||||
// aapt resource value: 0x7f06000e
|
||||
public const int menu_edit = 2131099662;
|
||||
|
||||
// aapt resource value: 0x7f060010
|
||||
public const int menu_fullrefresh = 2131099664;
|
||||
|
||||
// aapt resource value: 0x7f06000f
|
||||
public const int menu_preferences = 2131099663;
|
||||
public const int kezdvegTV = 2131099659;
|
||||
|
||||
// aapt resource value: 0x7f06000c
|
||||
public const int menu_refresh = 2131099660;
|
||||
public const int kovoraTV = 2131099660;
|
||||
|
||||
// aapt resource value: 0x7f06000f
|
||||
public const int menu_add = 2131099663;
|
||||
|
||||
// aapt resource value: 0x7f060010
|
||||
public const int menu_edit = 2131099664;
|
||||
|
||||
// aapt resource value: 0x7f060012
|
||||
public const int menu_fullrefresh = 2131099666;
|
||||
|
||||
// aapt resource value: 0x7f060011
|
||||
public const int menu_preferences = 2131099665;
|
||||
|
||||
// aapt resource value: 0x7f06000e
|
||||
public const int menu_refresh = 2131099662;
|
||||
|
||||
// aapt resource value: 0x7f060007
|
||||
public const int nevTV = 2131099655;
|
||||
|
||||
// aapt resource value: 0x7f060006
|
||||
public const int nevTV = 2131099654;
|
||||
|
||||
// aapt resource value: 0x7f060005
|
||||
public const int pozTV = 2131099653;
|
||||
public const int pozTV = 2131099654;
|
||||
|
||||
// aapt resource value: 0x7f060003
|
||||
public const int progressBar1 = 2131099651;
|
||||
|
||||
// aapt resource value: 0x7f060005
|
||||
public const int spiner_id = 2131099653;
|
||||
|
||||
// aapt resource value: 0x7f06000d
|
||||
public const int spinner = 2131099661;
|
||||
|
||||
// aapt resource value: 0x7f060002
|
||||
public const int tableLayout1 = 2131099650;
|
||||
|
||||
// aapt resource value: 0x7f060008
|
||||
public const int tanarTV = 2131099656;
|
||||
// aapt resource value: 0x7f060009
|
||||
public const int tanarTV = 2131099657;
|
||||
|
||||
// aapt resource value: 0x7f060007
|
||||
public const int teremTV = 2131099655;
|
||||
// aapt resource value: 0x7f060008
|
||||
public const int teremTV = 2131099656;
|
||||
|
||||
static Id()
|
||||
{
|
||||
|
|
|
@ -43,6 +43,11 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/actionMenuView1" />
|
||||
<Spinner
|
||||
android:id="@+id/spiner_id"
|
||||
android:layout_width="wrap_content"
|
||||
android:spinnerMode="dropdown"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:id="@+id/pozTV"
|
||||
android:layout_width="wrap_content"
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/spinner"
|
||||
android:title="will be replaced anyway"
|
||||
android:showAsAction="ifRoom"
|
||||
android:actionViewClass="android.widget.Spinner" />
|
||||
<item
|
||||
android:id="@+id/menu_refresh"
|
||||
android:icon="@drawable/ic_autorenew_black_24dp"
|
||||
|
@ -23,5 +27,5 @@
|
|||
<item
|
||||
android:id="@+id/menu_fullrefresh"
|
||||
android:showAsAction="never"
|
||||
android:title="Teljes frissítés" />
|
||||
android:title="Órarendfrissítés" />
|
||||
</menu>
|
Loading…
Reference in a new issue