-
Notifications
You must be signed in to change notification settings - Fork 0
Kalenteri
Toiminnon käyttötarkoituksena on näyttää leiriläiselle hänen oma tarkka päiväohjelmansa eri leiripäiviltä. Tämä on sovelluksen toivotuin ominaisuus ja sen päänäkymä.
Tiedot näkee vasta kirjauduttuaan, ja sitä ennen ruudussa näkyy kirjautumiskehotus.
Backend tietää sekä vakio-ohjelmat ja pestivuorot että erikseen lisätyt ”Lisää kalenteriin” -jutut. Niinpä nämä molemmat näkyvät tässä kalenterissa.
Kalenteri-toimintoa tehdään vain leiriä varten, mutta leirin jälkeen vastaava toiminto voisi olla pysyvässäkin sovelluksessa. Tämä voidaan ottaa nyt jo huomioon niissä kohdissa, missä se ei työtä lisää.
Tämän toiminnon tiedot tulevat appin paikallisesta storagesta. Jos siellä ei ole mitään, appi lukee kaikki tiedot backendistä ja tallentaa ne paikalliseen storageen. Tämän jälkeen ne sitten tulevat paikallisesta storagesta näkyviin.
Myös tilanteessa, että käyttäjä muuttaa kielivalintaa, appi lukee kaikki tiedot uudestaan.
Tiedot tulevat backendistä täysin valmiina ja kaikissa tapauksissa ensin paikalliseen storageen, josta ruutuun.
Backend palauttaa tekstit suomeksi, ruotsiksi tai englanniksi appin kielivalinnan mukaan. Jos kielivalinta on joku muu, backend palauttaa tekstit englanniksi.
Alkulatauksen jälkeen appi tarkastaa JSON-datan kertomin määrävälein (ainakin aluksi kerran vuorokaudessa), onko tietoihin tullut muutoksia. Ei juuri tuolloin taustalla, vaan sitten kun käyttäjä appin käynnistää ja on kulunut yli vuorokausi edellisestä tarkastuksesta. Lisäksi käyttäjä voi käynnistää tarkastuksen käsin. Kalenterimerkintöjä saattaa tulla uusia, vanhoja poistua ja nykyisten tiedot päivittyä. Backendistä haetaan aina vain ne tiedot, jotka ovat muuttuneet viime hakemisen jälkeen.
Jos synkkaus epäonnistuu, niin vanhat tiedot säilyvät voimassa
Käyttäjä ei pysty muuttamaan tietoja sovelluksessa, paitsi poistamaan osan tapahtumista (ks. jäljempänä).
"Yläpalkissa" on seuraavat toiminnot
- Painike päivittää tiedot backendistä
- Painike asetuksiin
Ruudussa kiinteästi ovat xxx
Seuraavassa on esimerkkikuva näytöstä, mutta ei välttämättä malli käyttöliittymästä tai asettelusta Lisäksi seuraavat kommentit
- Ei logoa tai RoihuApp-tekstiä ja ihmisen tilalle hammasratas
- Näkyy päivä kerrallaan, voidaan vierittää pystysuunnassa
- Pvm ja edellinen/seuraava-siirtymisnapit pysyvät näkyvissä
- Taustaväri kertoo tapahtuman tyypin
- Synkkauksen aikana teksti ”Päivitetään” ja tulos ”Valmis” tai ”Päivitys epäonnistui”
- i-napin takana teksti ”Päivitetty 7.8.2015 22:36” eli viimeisin onnistunut päivityshetki
- Yhtä tapahtumaa napauttamalla aukeavat sen lisätiedot Entä jos toimintoa käytetään leirin jälkeen, onko siirtyminen liian hankalaa Joku visuaalinen vihje, jos ajat menevät päällekkäin
Seuraavassa on kirjautumiskehotus, joka näytetään kun käyttäjä ei vielä ole kirjautunut
Seuraavassa on kirjautumisnäkymä, jonka tuottaa PartioID-kirjautuminen
xxx xxx
xxx Käyttötarkoitus Tarvitaan edellisen kanssa Ruudun sisältö Ei logoa, RoihuApp-tekstiä ja ihmisen tilalle hammasratas Tapahtuman tiedot joko listan seassa (ks. oikealla) tai sitten aukeavat omaan ruutuunsa Pvm, viikonpäivä, otsikko, alkuaika, kesto, loppuaika, paikkateksti, karttaruutu esim. R13, kuva ja skrollaavat lisätiedot Usein simppeleitä (mitä ruuaksi, ohjelmalaakson varusteet, pestin pomo), mutta esim. avajaisista voisi olla laulujen sanat sekä kunkin esiintyjän valokuva ja tarkemmat tiedot Jos erillinen ruutu, niin myös nuolinapit seuraavaan ja edeltävään tapahtumaan Toiminnallisuus Napit ja vieritys (otsikkopalkki ei vieri piiloon) Lisätieto sulkeutuu kun otsikkoa napauttaa uudelleen tai kun napauttaa jotain toista otsikkoa (jolloin aukeaa sen lisätiedot) tai kun vaihtaa päivää Toisessa osiossa käydessä avaustilanne säilyy Poistaa voi itse lisäämiään ja peruttuja pakollisia xxx
Backend palauttaa käyttäjän kalenteritapahtumat. Appi lähettää REST-kutsussa kielen FI, SV tai EN, jonka mukaan title ja description ovat jotain näistä kielistä. Tai jos appi lähettää muun kielen, Backend palauttaa englantia.
Appi tallentaa backendin antaman kielen, jotta jos käyttäjä vaihtaa kielen myöhemmin, appi pyytää kaiken uudestaan.
Appi tallentaa backendin antaman ajankohdan (timestamp), jotta appi voi seuraavalla synkkauksella pyytää vain kyseisen ajan jälkeen tulleet muutokset. Backend palauttaa 5 s varhaisemman ajan kuin nykyhetki. Näin seuraavalla synkkauksella tulee varmasti pyydettyä myös aivan viimeisimmät muutokset, vaikka näin liikenne hieman kasvaakin. Alla ei vielä ole kuvattu, miten appi ilmoittaa em. ajankohdan REST-kutsussa.
Jos tapahtuman id:tä ei ole appilla ennestään, appi lisää tapahtuman. Muutoin appi päivittää tapahtuman tiedot uuden datan mukaisiksi.
Jos tapahtuman tietoihin muuttuu rsvp_status=ecanceled, appi vaihtaa tapahtuman käyttöliittymässä harmaaksi (tms.) ja mahdollistaa, että käyttäjä voi sen deletoida.
Käyttäjän sallitaan deletoida tapahtumia, joiden rsvp_status on attending tai ecanceled. Tällöiin rsvp_statukseksi tulee ucanceled ja tapahtuma poistuu appissa näkyvistä. Jollain valinnalla deletoidut voisi toki vielä tuoda näkyviin.
Jos place/location sisältää WGS84-koordinaatit, ei campmapgrid-koordinaatteja tarvita eikä käytetä. Leiriä varten katuosoitteeseen liittyvät kentät voisi kenties myös jättää pois.
Tämä kuvaus ei ota huomioon sitä, että kolmikielisyys tulee todellisuudessa useamman taulun rakenteen kautta. Muutenkin kyseessä on enempi luonnos kuin kiveen hakattu speksi.
Seuraavassa kenttien nimet ja selitykset.
Meidän täytynee erotella, mitkä tietueet ovat SharePointista ja mitkä appista käyttäjien lisäämänä. Tähän riittänee numero 1 = SharePoint ja numero 2 = appi. Eli ei maksane vaivaa käyttää erillistä kooditaulua.
Yksikäsitteinen tietue-id, varmaankin auto-incrementillä.
Jotta SharePointissa tapahtuvista muutoksista pysytään kärryillä, tarvittaneen erikseen se id, jonka SharePoint-rajapinta tänne palauttaa.
Appin värikoodausta varten tarvitaan tapahtuman tyyppi. Valikoima on:
- Ruokailu
- Päiväohjelma
- Iltaohjelma
- Tapaaminen
- Kokous
- Virvatuli
- Muu (tämä on SharePointissa merkitty muuksi)
- Tuntematon (tämä on SharePointissa sellainen, jota bäkkäri ei tunnista)
Valikoima luultavasti päivittyy vielä, jolloin muutokset täytyy koodata sekä bäkkäriin että appiin.
Onkohan nämä parasta välittää appiin numerokoodilla.
Esim. Jalista suoralla.
SharePoint palauttaa tämän kolmella kielellä, mutta appissa käyttäjä syöttää vain yhden tekstin. Jälkimmäinen ainokainen pitäisi palauttaa appille riippumatta, mitä kieltä se pyytää.
Kolmikielinen leipäteksti.
SharePoint palauttaa tämän kolmella kielellä, mutta appissa käyttäjä syöttää vain yhden tekstin. Jälkimmäinen ainokainen pitäisi palauttaa appille riippumatta, mitä kieltä se pyytää.
SharePoint palauttaa tämän kolmella kielellä, mutta appissa käyttäjä syöttää vain yhden tekstin. Jälkimmäinen ainokainen pitäisi palauttaa appille riippumatta, mitä kieltä se pyytää.
Milloin SharePointin joku kenttä viimeksi muuttui tai milloin appin käyttäjä lähetti uuden tapahtuman.
SharePointin tiedot tulevat useammasta listasta koottuna (perus, käännökset, paikat). Jos on liian työlästä selvittää näistä kaikista oikeasti viimeinen muutoshetki, niin esim. paikat voidaan jättää huomiotta.
Tämä on ennestään jo tietokannassa, mutta on turha, koska seuraava status-kenttä korvaa tämän.
Kolme vaihtoehtoa:
- searchable = tapahtuma on appissa haettavissa tapahtumahaku-osiossa
- mandatory = virallista ohjelmaa SharePointista; tämä siis näkyy aina käyttäjän kalenterissa, jos vaan ikäkausi, alaleiri ja aalto täsmäävät
- canceled = tapahtuma on peruutettu
Tapahtuman alkupvm ja kellonaika
Tapahtuman loppupvmm ja kellonaika
Paikan WGS84-leveyspiiri, joka saattaa myös puuttua.
Paikan WGS84-pituuspiiri, joka saattaa myös puuttua.
Leirikoordinaatiston leveyspiiri eli kirjain A-Z, joka saattaa myös puuttua
Leirikooridnaatiston pituuspiiri eli 01-30, kahdella numerolla, joka saattaa myös puuttua
Jos tapahtuma on vain yhden alaleirin, tässä on sen nimi suomeksi (niitä ei kaiketi ole käännetty)
Jos tapahtuma on vain yhden leirilippukunnan, tässä on sen nimi suomeksi. Nimilistaa ei vielä ole saanut, joten ei myöskään ole tietoa, onko niillä numerokoodeja.
Koodattaneen kiinteästi seuraavat bitit:
- 0x4 = perheleiri
- 0x8 = tarpojat
- 0x10 = samoajat
- 0x20 = vaeltajat
- 0x40 = aikuiset
Niiden käyttäjien määrä, jotka linkkitaulun kautta ovat tässä tapahtumassa. Tieto pitää palauttaa aina kun joku 17.000 appista sitä kysyy, joten kannattanee olla taulussa eikä laskea aina lennosta.
Tämä taulu linkittää tapahtumat ja käyttäjät, eli kenttinä on tapahtuman id ja käyttäjän id.
Linkkitauluun tulee muutoksia seuraavasti:
- Kun käyttäjä lisää appin tapahtumahausta tapahtuman omaan kalenteriinsa, tai kalenteristaan poistaa ei-pakollisen tapahtuman
- Kun Rekistä tulevat käyttäjätiedot päivittyvät, niin tämän käyttäjän pakollisten tapahtumien osallistumiset tulee käydä läpi
- Kun SharePointista tulevat pakolliset tapahtumatiedot päivittyvät, niin ko. tapahtuman osallistumiset tulee käydä läpi
Jos kohdat 2 ja 3 ovat liian työläitä, niin vaihtoehtona lienee, että pakollisia tapahtumia ei ole lainkaan linkkitaulussa, vaan lista rakennetaan lennosta aina, kun kyseisen käyttäjän appi pyytää kalenteritietoja.
/*=============================================================
Roihu 2016 - Finnjamboree, July 2016
Roihu App - Mobile Application
-------------------------------------------------------------
SPECIFICATION OF THE BACKEND REST API
Sakari Kouti
Created Nov 11, 2015
Last modified Feb 10, 2016
=============================================================*/
/*=============================================================
READ USER EVENTS
=============================================================*/
/*-------------------------------------------------------------
Request (Read user events)
URI....: /me/events
Method.: GET
Headers: Authorization: Bearer ABC123 (OAUTH 2 token)
What about an MD5 hash?
Accept-Language: FI, SV tai EN
Params.: xxx
-------------------------------------------------------------*/
/*-------------------------------------------------------------
Response (Read user events)
-------------------------------------------------------------*/
{
"timestamp": "2016-02-10T20:10:05+0300", /* time and date when data was retrieved */
"events": [
{
"last_modified": "2016-01-14T12:45:06Z", /* when any of the fields was last modified */
"rsvp_status": "attending", /* attending = user has booked from the event search
mandatory = user cannot delete, official program
ucanceled = user has deleted from her calendar
ecanceled = entire event has been cancelled */
"start_time": "2016-07-22T18:00:00+0300",
"end_time": "2016-07-22T19:00:00+0300",
"id": "907824855971753", /* or maybe a GUID? */
"type": "xxx", /* helps in color coding, such as meals with a certain color */
"title": "Jalista suoralla", /* or in English/Swedish, depending on mobile lang */
"description": "Ensin pelaillaan\nja sitten pelaillaan.", /* or English/Swedish */
"place_name": "Aalto Design Factory",
"latitude": 60.1809692,
"longitude": 24.8316593,
"campmapgrid_latitude": "13", /* camp map has 50 x 50 meter grid */
"campmapgrid_longitude": "R"
"subcamp": "Xyz", /* if not empty, event is only for this subcamp */
"camptroop": "117 Lommo", /* if not empty, event is only for this */
"agelevels": [
{
"agelevel": "rover"
},
{
"agelevel": "adult"
}
],
"participant_count": 75, /* how many people have this in calendar */
"photo": "AkjX234jS" /* Base64 encoding? */
}
]
}