#19 Parser for Goethe-Gymnasium Hamburg

Closed
TheOneWithTheBraid wants to merge 34 commits from theonewiththebraid/goethe into fynngodau/master

I wrote a parser for Goethe-Gymnasium Hamburg (189802). For that, I had to change the following in general files:

  • Added Goethe parser to Utility.java
  • Comparing Class/Teacher names case insensitive in Reader.java (required by Goethe's timetables)
I wrote a parser for Goethe-Gymnasium Hamburg (`189802`). For that, I had to change the following in general files: * Added Goethe parser to `Utility.java` * Comparing Class/Teacher names case insensitive in `Reader.java` (required by Goethe's timetables)
fynngodau commented 4 years ago
Owner

Thank you a lot for your effort!

Having classInClass case-sensitive improved accuracy by a little when filtering info-only entries (especially for schools where the class letter is capital). Could you explain a little more why this change is necessary?

Looks like merging this would mess with the changes of #18. Rebasing your essentials branch onto the goethe branch could probably fix this (I'm not really sure though).

Thank you a lot for your effort! Having `classInClass` case-sensitive improved accuracy by a little when filtering info-only entries (especially for schools where the class letter is capital). Could you explain a little more why this change is necessary? Looks like merging this would mess with the changes of #18. Rebasing your `essentials` branch onto the `goethe` branch could probably fix this (I'm not really sure though).

In Goethe's substitute tables, the classes letters are sometimes upper case and sometimes lowercase. Same for teacher's names.

The merge conflict seems to be fixed now...

Btw. How is your release management? If you approve this pull, is it released automatically or does it take some time?

In Goethe's substitute tables, the classes letters are sometimes upper case and sometimes lowercase. Same for teacher's names. The merge conflict seems to be fixed now... Btw. How is your release management? If you approve this pull, is it released automatically or does it take some time?
fynngodau commented 4 years ago
Owner

In case displaying an entry fails, you are currently initializing an entry with empty Strings. I'd prefer it if you could pass null instead as all Entry() parameters are annotated as @Nullable.

Furthermore, there exists a String resource, error_parsing_partial, and it is used as info value when a whole page fails (illogically, then, even if it is the only page…). Maybe the wording can be changed from "Some data could not be parsed" to account for your case where only a single entry fails, but I'm not sure to what.

In case displaying an entry fails, you are currently [initializing an entry with empty Strings][1]. I'd prefer it if you could pass `null` instead as [all `Entry()` parameters are annotated as `@Nullable`][2]. Furthermore, there exists a String resource, [`error_parsing_partial`][4], and it is used as `info` value [when a whole page fails][3] (illogically, then, even if it is the only page…). Maybe the wording can be changed from "`Some data could not be parsed`" to account for your case where only a single entry fails, but I'm not sure to what. [1]: https://notabug.org/fynngodau/DSBDirect/pulls/19/files#diff-66b90243f48bac77696d6c496124b7528da107fR125 [2]: https://notabug.org/fynngodau/DSBDirect/src/ca6d96f167b824249076fb0ee6ad3947077b8b9d/app/src/main/java/godau/fynn/dsbdirect/table/Entry.java#L36 [3]: https://notabug.org/fynngodau/DSBDirect/src/master/app/src/main/java/godau/fynn/dsbdirect/activity/MainActivity.java#L508 [4]: https://notabug.org/fynngodau/DSBDirect/src/ca6d96f167b824249076fb0ee6ad3947077b8b9d/app/src/main/res/values/strings.xml#L41
fynngodau commented 4 years ago
Owner

Release is whenever I say so. This can gladly be after this pull request is merged. F-Droid propagation would take some time as usual, and Play releases are also not pushed immediately.

It is quite the manual process, so I usually wait until a few fixes have accumulated.

Release is whenever I say so. This can gladly be after this pull request is merged. F-Droid propagation would take some time as usual, and Play releases are also not pushed immediately. It is quite the manual process, so I usually wait until a few fixes have accumulated.

Okay, I'm now passing null.

I don't understand why to change error_parsing_partial. That's actually what happened in that case: Only some parts failed to load.

Okay, I'm now passing `null`. I don't understand why to change `error_parsing_partial`. That's actually what happened in that case: Only some parts failed to load.
fynngodau commented 4 years ago
Owner

Concerning case sensitivity: since the gain in accuracy is minimal anyway, it's probably not worth it to differentiate based on what parser has parsed the plan here. A more effective filter for info entries is needed anyway. Tracking that effort in #21.

Concerning case sensitivity: since the gain in accuracy is minimal anyway, it's probably not worth it to differentiate based on what parser has parsed the plan here. A more effective filter for info entries is needed anyway. Tracking that effort in #21.
fynngodau commented 4 years ago
Owner

Thanks for little change again. I was thinking, in case a lot of entries fail to parse in a row, it would make more sense to say something like "We're missing an entry here" many times instead of "some data", but nevermind. If it's broken, it's going to look broken either way.

Thanks for little change again. I was thinking, in case a lot of entries fail to parse in a row, it would make more sense to say something like "We're missing an entry here" many times instead of "some data", but nevermind. If it's broken, it's going to look broken either way.
fynngodau commented 4 years ago
Owner

Oh, I didn't notice you are now passing row.text(). That also works, of course.

Oh, I didn't notice you are now passing `row.text()`. That also works, of course.
fynngodau commented 4 years ago
Owner

If you open the preferences screen, you'll notice that the Parser preference has been blocked because There is no choice. I'll simply revert the commit that added this (c81b3a3023) after merging this pull request.

If you open the preferences screen, you'll notice that the Parser preference has been blocked because There is no choice. I'll simply revert the commit that added this ([`c81b3a3023`][commit]) after merging this pull request. [commit]: https://notabug.org/fynngodau/DSBDirect/commit/c81b3a302348220dc8920fa7f9a59e8de62a31f9
fynngodau commented 4 years ago
Owner

Could you please send me html files from Goethe for testing?

Could you please send me html files from Goethe for testing?
fynngodau commented 4 years ago
Owner

In order for the preference in the preference screen to allow selecting Goethe manually, you need to add it to the two String array resources here. The Röntgen option should be removed, but I forgot to do that. If I do it now, it will only cause a merge conflict, so I'm asking you to simply replace it with Goethe.

In order for the preference in the preference screen to allow selecting Goethe manually, you need to add it to the two String array resources [here][here]. The Röntgen option should be removed, but I forgot to do that. If I do it now, it will only cause a merge conflict, so I'm asking you to simply replace it with Goethe. [here]: https://notabug.org/fynngodau/DSBDirect/src/master/app/src/main/res/values/strings.xml#L209
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <title>HeinekingMedia Vertretungsplan - Compact</title>
   <style type="text/css">
       html, body {font-family: Arial;font-weight:bold;}
       table {border-spacing: 1px; width: 100%;}
       hr { border: none; border-top: 1px solid #2D4EAB; }
       div.dayHeader { font-size: 1.8em; padding: 3px 0 3px 0; border: none; text-indent: 59px; border-bottom: 1px solid #2D4EAB; background-position: 20px 1px; background-repeat: no-repeat; background-image: url('data:image/png;base64,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'); }
       div.spacer {clear: both;height: 15px;}
       div.header {clear: both;display: block;overflow: auto;margin-bottom: 8px;}
       div.header div {float: left;padding: 1px 1px 1px 0;margin-right: 10px; margin-top: 8px;}
       div.header div div {float: left;padding: 0;margin: 0 0 0 1px;min-width: 40px;text-align: center;padding: 5px;font-weight: bold;}
       h1 {font-size: 1.8em;line-height: 40px;margin: 0;padding: 0;text-align: center;border-bottom: 1px solid #2D4EAB;}
       h2 {font-size: 0.8em; margin:0; text-align: right;}
       .NoSubstitutes { text-align: center; border: 0; }
       div.SubsWithoutGrade { text-align: center; border: 8px solid grey; margin-top: 10px; }
       div.MessageOfTheDay { text-align: left;  }
       fieldset { border: 5px solid #2D4EAB; margin-top: 10px; }
       legend { text-indent: 29px; padding: 5px 3px 10px 0; background-position: 2px 1px; background-repeat: no-repeat;  background-image: url('data:image/png;base64,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'); }
       td.SubsWithoutGrade { text-align: center; border: 1px solid white; padding: 5px; font-weight: bold; background-color: #efefef;}
       td.hilite {text-indent: 18px;background-position: 2px 2px; background-repeat: no-repeat; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAMKSURBVDhPbVNpTxNRFB1N/Krf1N8BasLyQcNHTdxiWEXEaDQKREWNipoKgjskioGCVKKIYkUri0CpQCmtLW3pQheRpS2l09JOCwUElHB871FNXG5ykzvvnHPvmftmuL9jdXV1s8kZKVUZQsOfzYKgMYcElVGwaUzBe9FodEuM9m8AWO8cj4ralPyKQheG3h6FwTHHktZ9hghkPfyKzhq8S7kx2VrQA7MzLJPK/ejVz0A1NAO1eRaDtiiMpAGt6RnFmhUBUgc7iWZdTM5xo56oSCKbRIsyhHaVAIUuQsgRmEfmMeL+xmp6RrHW/hDqW3zQWkL3mZh02vqqw/vjeZsfTfJpJugn0z4OCMzB8Ng8OtQCurURePxLeNUZwIt2P2reulbIvrZwHt+8qFg8BvFbH2gTSuBDy+jShIkozKxTZ8HId7whA6hY3OzDbYkLKn2gnOsaCBhFYhfKGyZRTZpIPvB41sIzYn0rT+yuJX2mGB1UQbjFNS40tnudnFQ+FSgsH0VJrYstS2udhW44ykhV0imWj197oTTOMIxynjRN4ULFKKqa3GFO0vyVP1howrmHo8ziu54gZL1B3HrqwoPnkyzvPPP8xqTd0xCJJ5B6yYKSaqvAtfS4NXGpvdh1YghZV+3IuzOCospxlEncuFgxBuruRtUESuvcDMu+ZkfKSRPiUpV40uiwcIHg4tmETDkSjuixO9+Mw0U2OF0LOF02QhblRu07H3JFDtjHF3Cq1Mk4iTl6xB3qgtbMX6fXuOlenW0xPq0fybkG1H+YxLGbDuaGNqiT+ZBVZEfGFRvef/IjKWcQ8ekqFJRql8k1bmTfgoefO773TB+2Z6iRfHTNyYHzVrLpCdQ0T+FAoRV7CiwM256pwc6cbujM/jwm/hWWL8L9/flKxKepkEheh+5kd54B+84aWU1t08kpxxSQD3grY7I/w8svpJfVWGeTshRkSX3Ylj5AUs0WtiOtG5fLjXMmezA7Rv9/kJ1sCESWUqWdE7LKRqf1UYNj+GXrWCv5XzIpFqPFguN+AlPDngFukaGIAAAAAElFTkSuQmCC');}
       div.header div div.hiliting {padding-left: 18px;background-position: 2px 5px; background-repeat: no-repeat; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAMKSURBVDhPbVNpTxNRFB1N/Krf1N8BasLyQcNHTdxiWEXEaDQKREWNipoKgjskioGCVKKIYkUri0CpQCmtLW3pQheRpS2l09JOCwUElHB871FNXG5ykzvvnHPvmftmuL9jdXV1s8kZKVUZQsOfzYKgMYcElVGwaUzBe9FodEuM9m8AWO8cj4ralPyKQheG3h6FwTHHktZ9hghkPfyKzhq8S7kx2VrQA7MzLJPK/ejVz0A1NAO1eRaDtiiMpAGt6RnFmhUBUgc7iWZdTM5xo56oSCKbRIsyhHaVAIUuQsgRmEfmMeL+xmp6RrHW/hDqW3zQWkL3mZh02vqqw/vjeZsfTfJpJugn0z4OCMzB8Ng8OtQCurURePxLeNUZwIt2P2reulbIvrZwHt+8qFg8BvFbH2gTSuBDy+jShIkozKxTZ8HId7whA6hY3OzDbYkLKn2gnOsaCBhFYhfKGyZRTZpIPvB41sIzYn0rT+yuJX2mGB1UQbjFNS40tnudnFQ+FSgsH0VJrYstS2udhW44ykhV0imWj197oTTOMIxynjRN4ULFKKqa3GFO0vyVP1howrmHo8ziu54gZL1B3HrqwoPnkyzvPPP8xqTd0xCJJ5B6yYKSaqvAtfS4NXGpvdh1YghZV+3IuzOCospxlEncuFgxBuruRtUESuvcDMu+ZkfKSRPiUpV40uiwcIHg4tmETDkSjuixO9+Mw0U2OF0LOF02QhblRu07H3JFDtjHF3Cq1Mk4iTl6xB3qgtbMX6fXuOlenW0xPq0fybkG1H+YxLGbDuaGNqiT+ZBVZEfGFRvef/IjKWcQ8ekqFJRql8k1bmTfgoefO773TB+2Z6iRfHTNyYHzVrLpCdQ0T+FAoRV7CiwM256pwc6cbujM/jwm/hWWL8L9/flKxKepkEheh+5kd54B+84aWU1t08kpxxSQD3grY7I/w8svpJfVWGeTshRkSX3Ylj5AUs0WtiOtG5fLjXMmezA7Rv9/kJ1sCESWUqWdE7LKRqf1UYNj+GXrWCv5XzIpFqPFguN+AlPDngFukaGIAAAAAElFTkSuQmCC');}
       
   </style>
   <link rel="stylesheet" type="text/css" href="205aab48-1c03-499d-8d72-0dbf0648290d.css">
</head>
<body>

<div style="position: relative;"><h2>Letzte Änderung: 12.08.2019 17:05</h2></div><div class="dayHeader">13.08.2019, Dienstag</div>
<div class="header">
    <div style="border: 10px solid #D38597;">        <div style="background-color: #6a00ff; color: #ffffff;">5A</div>
        <div style="background-color: #a20025; color: #ffffff;">5B</div>
        <div style="background-color: #008a00; color: #ffffff;">5C</div>
        <div style="background-color: #f0a30a; color: #ffffff;">5D</div>
    </div>    <div style="border: 10px solid #BDB3C7;">        <div style="background-color: #6a00ff; color: #ffffff;">6A</div>
        <div style="background-color: #a20025; color: #ffffff;">6B</div>
        <div style="background-color: #008a00; color: #ffffff;">6C</div>
        <div style="background-color: #f0a30a; color: #ffffff;">6D</div>
    </div>    <div style="border: 10px solid #EC85BC;">        <div style="background-color: #6a00ff; color: #ffffff;">7A</div>
        <div style="background-color: #a20025; color: #ffffff;">7B</div>
        <div style="background-color: #008a00; color: #ffffff;">7C</div>
    </div>    <div style="border: 10px solid #D3E385;">        <div style="background-color: #a20025; color: #ffffff;">8B</div>
    </div>    <div style="border: 10px solid #B885FF;">        <div style="background-color: #6a00ff; color: #ffffff;">9A</div>
    </div>    <div style="border: 10px solid #85C785;">        <div style="background-color: #6a00ff; color: #ffffff;">11KU</div>
        <div style="background-color: #a20025; color: #ffffff;">11MU</div>
        <div style="background-color: #008a00; color: #ffffff;">11PGW</div>
        <div style="background-color: #f0a30a; color: #ffffff;">11PHY</div>
        <div style="background-color: #1ba1e2; color: #ffffff;">11SPO</div>
    </div>    <div style="border: 10px solid #85ABF7;">        <div style="background-color: #6a00ff; color: #ffffff;">12KU</div>
        <div style="background-color: #a20025; color: #ffffff;">12MU</div>
        <div style="background-color: #f0a30a; color: #ffffff;">12PHY</div>
        <div style="background-color: #1ba1e2; color: #ffffff;">12SPO</div>
    </div>
</div>
<div style="border: 10px solid #D38597;overflow: auto;margin-top:10px;">
    <table>
     <tr><td rowspan="1" style="background-color: #6a00ff; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5A</td><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">1. - 10. Std.  bei LIE, PEP (Starttage)</td></tr>
     <tr><td rowspan="1" style="background-color: #a20025; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5B</td><td style="background-color: #a20025; color: #ffffff; padding-left: 5px;">1. - 10. Std.  bei JUN, KLA (Starttage)</td></tr>
     <tr><td rowspan="1" style="background-color: #008a00; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5C</td><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">1. - 10. Std.  bei CAR, WES (Starttage)</td></tr>
     <tr><td rowspan="1" style="background-color: #f0a30a; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5D</td><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">1. - 10. Std.  bei BÄR, HAD (Starttage)</td></tr>
        </table>
    </div><div style="border: 10px solid #BDB3C7;overflow: auto;margin-top:10px;">
    <table>
     <tr><td rowspan="3" style="background-color: #008a00; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">6C</td><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">5. Std. Musik bei HAM im Raum G005  statt bei JUN (Klassenraum G005)</td></tr>
   <tr><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">6. Std. NAWI bei ZUB im Raum G005  statt bei JUN (Klassenraum G005)</td></tr>
   <tr><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">7. Std. NAWI bei JUN im Raum F103  fällt aus</td></tr>
     <tr><td rowspan="2" style="background-color: #f0a30a; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">6D</td><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">3. Std. Musik bei OHN im Raum G002  statt bei JUN (Klassenraum G002)</td></tr>
   <tr><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">4. Std. Musik bei ECK im Raum G002  statt bei JUN (Klassenraum G002)</td></tr>
     <tr><td rowspan="1" style="background-color: #BDB3C7; color: #000000; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">6A, 6B, 6C, 6D</td><td style="background-color: #BDB3C7; color: #000000; padding-left: 5px;">8. Std. Förder Engl. 5 bei WES im Raum H104  fällt aus</td></tr>
        </table>
    </div><div style="border: 10px solid #EC85BC;overflow: auto;margin-top:10px;">
    <table>
     <tr><td rowspan="2" style="background-color: #6a00ff; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">7A</td><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">3. - 4. Std. Englisch bei BRA im Raum H007  statt bei MAR</td></tr>
   <tr><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">5. Std. Klassenrat bei BAY im Raum H005  statt bei MAR</td></tr>
     <tr><td rowspan="1" style="background-color: #a20025; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">7B</td><td style="background-color: #a20025; color: #ffffff; padding-left: 5px;">1. - 2. Std. Kunst bei WES im Raum F004  fällt aus</td></tr>
     <tr><td rowspan="2" style="background-color: #008a00; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">7C</td><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">6. Std. Kunst bei OHN im Raum F005  statt bei WES</td></tr>
   <tr><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">7. Std. Kunst bei WES im Raum F005  fällt aus</td></tr>
        </table>
    </div><div style="border: 10px solid #D3E385;overflow: auto;margin-top:10px;">
    <table>
     <tr><td rowspan="1" style="background-color: #a20025; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">8B</td><td style="background-color: #a20025; color: #ffffff; padding-left: 5px;">1. - 2. Std. Sport bei MAN im Raum ESH  fällt aus</td></tr>
        </table>
    </div><div style="border: 10px solid #B885FF;overflow: auto;margin-top:10px;">
    <table>
     <tr><td rowspan="2" style="background-color: #6a00ff; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">9A</td><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">6. Std. Religion bei FER im Raum H002  statt bei LIE</td></tr>
   <tr><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">7. Std. Religion bei LIE im Raum H002  fällt aus</td></tr>
        </table>
    </div> <div style="border: 10px solid #85C785;overflow: auto;margin-top:10px;">
   <table>
     <tr><td rowspan="1" style="background-color: #85C785; color: #000000; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">11KU, 11MU, 11PGW, 11PHY, 11SPO</td><td style="background-color: #85C785; color: #000000; padding-left: 5px;">1. - 2. Std. Mathematik eA 3 im Raum G104  statt bei BÄR (Vtr. ohne Lehrer)</td></tr>
        </table>
    </div><div style="border: 10px solid #85ABF7;overflow: auto;margin-top:10px;">
    <table>
     <tr><td rowspan="1" style="background-color: #f0a30a; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">12PHY</td><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">1. - 3. Std. Geographie im Raum F005  statt bei PEP (Vtr. ohne Lehrer)</td></tr>
     <tr><td rowspan="1" style="background-color: #1ba1e2; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">12SPO</td><td style="background-color: #1ba1e2; color: #ffffff; padding-left: 5px;">1. - 2. Std. Seminar im Raum H007  statt bei BAU (Vtr. ohne Lehrer)</td></tr>
     <tr><td rowspan="1" style="background-color: #85ABF7; color: #000000; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">12KU, 12MU</td><td style="background-color: #85ABF7; color: #000000; padding-left: 5px;">1. - 2. Std. Geschichte im Raum F008  statt bei MAR (Vtr. ohne Lehrer)</td></tr>
        </table>
    </div></body>
</html>
``` <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>HeinekingMedia Vertretungsplan - Compact</title> <style type="text/css"> html, body {font-family: Arial;font-weight:bold;} table {border-spacing: 1px; width: 100%;} hr { border: none; border-top: 1px solid #2D4EAB; } div.dayHeader { font-size: 1.8em; padding: 3px 0 3px 0; border: none; text-indent: 59px; border-bottom: 1px solid #2D4EAB; background-position: 20px 1px; background-repeat: no-repeat; background-image: url('data:image/png;base64,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'); } div.spacer {clear: both;height: 15px;} div.header {clear: both;display: block;overflow: auto;margin-bottom: 8px;} div.header div {float: left;padding: 1px 1px 1px 0;margin-right: 10px; margin-top: 8px;} div.header div div {float: left;padding: 0;margin: 0 0 0 1px;min-width: 40px;text-align: center;padding: 5px;font-weight: bold;} h1 {font-size: 1.8em;line-height: 40px;margin: 0;padding: 0;text-align: center;border-bottom: 1px solid #2D4EAB;} h2 {font-size: 0.8em; margin:0; text-align: right;} .NoSubstitutes { text-align: center; border: 0; } div.SubsWithoutGrade { text-align: center; border: 8px solid grey; margin-top: 10px; } div.MessageOfTheDay { text-align: left; } fieldset { border: 5px solid #2D4EAB; margin-top: 10px; } legend { text-indent: 29px; padding: 5px 3px 10px 0; background-position: 2px 1px; background-repeat: no-repeat; background-image: url('data:image/png;base64,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'); } td.SubsWithoutGrade { text-align: center; border: 1px solid white; padding: 5px; font-weight: bold; background-color: #efefef;} td.hilite {text-indent: 18px;background-position: 2px 2px; background-repeat: no-repeat; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAMKSURBVDhPbVNpTxNRFB1N/Krf1N8BasLyQcNHTdxiWEXEaDQKREWNipoKgjskioGCVKKIYkUri0CpQCmtLW3pQheRpS2l09JOCwUElHB871FNXG5ykzvvnHPvmftmuL9jdXV1s8kZKVUZQsOfzYKgMYcElVGwaUzBe9FodEuM9m8AWO8cj4ralPyKQheG3h6FwTHHktZ9hghkPfyKzhq8S7kx2VrQA7MzLJPK/ejVz0A1NAO1eRaDtiiMpAGt6RnFmhUBUgc7iWZdTM5xo56oSCKbRIsyhHaVAIUuQsgRmEfmMeL+xmp6RrHW/hDqW3zQWkL3mZh02vqqw/vjeZsfTfJpJugn0z4OCMzB8Ng8OtQCurURePxLeNUZwIt2P2reulbIvrZwHt+8qFg8BvFbH2gTSuBDy+jShIkozKxTZ8HId7whA6hY3OzDbYkLKn2gnOsaCBhFYhfKGyZRTZpIPvB41sIzYn0rT+yuJX2mGB1UQbjFNS40tnudnFQ+FSgsH0VJrYstS2udhW44ykhV0imWj197oTTOMIxynjRN4ULFKKqa3GFO0vyVP1howrmHo8ziu54gZL1B3HrqwoPnkyzvPPP8xqTd0xCJJ5B6yYKSaqvAtfS4NXGpvdh1YghZV+3IuzOCospxlEncuFgxBuruRtUESuvcDMu+ZkfKSRPiUpV40uiwcIHg4tmETDkSjuixO9+Mw0U2OF0LOF02QhblRu07H3JFDtjHF3Cq1Mk4iTl6xB3qgtbMX6fXuOlenW0xPq0fybkG1H+YxLGbDuaGNqiT+ZBVZEfGFRvef/IjKWcQ8ekqFJRql8k1bmTfgoefO773TB+2Z6iRfHTNyYHzVrLpCdQ0T+FAoRV7CiwM256pwc6cbujM/jwm/hWWL8L9/flKxKepkEheh+5kd54B+84aWU1t08kpxxSQD3grY7I/w8svpJfVWGeTshRkSX3Ylj5AUs0WtiOtG5fLjXMmezA7Rv9/kJ1sCESWUqWdE7LKRqf1UYNj+GXrWCv5XzIpFqPFguN+AlPDngFukaGIAAAAAElFTkSuQmCC');} div.header div div.hiliting {padding-left: 18px;background-position: 2px 5px; background-repeat: no-repeat; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAMKSURBVDhPbVNpTxNRFB1N/Krf1N8BasLyQcNHTdxiWEXEaDQKREWNipoKgjskioGCVKKIYkUri0CpQCmtLW3pQheRpS2l09JOCwUElHB871FNXG5ykzvvnHPvmftmuL9jdXV1s8kZKVUZQsOfzYKgMYcElVGwaUzBe9FodEuM9m8AWO8cj4ralPyKQheG3h6FwTHHktZ9hghkPfyKzhq8S7kx2VrQA7MzLJPK/ejVz0A1NAO1eRaDtiiMpAGt6RnFmhUBUgc7iWZdTM5xo56oSCKbRIsyhHaVAIUuQsgRmEfmMeL+xmp6RrHW/hDqW3zQWkL3mZh02vqqw/vjeZsfTfJpJugn0z4OCMzB8Ng8OtQCurURePxLeNUZwIt2P2reulbIvrZwHt+8qFg8BvFbH2gTSuBDy+jShIkozKxTZ8HId7whA6hY3OzDbYkLKn2gnOsaCBhFYhfKGyZRTZpIPvB41sIzYn0rT+yuJX2mGB1UQbjFNS40tnudnFQ+FSgsH0VJrYstS2udhW44ykhV0imWj197oTTOMIxynjRN4ULFKKqa3GFO0vyVP1howrmHo8ziu54gZL1B3HrqwoPnkyzvPPP8xqTd0xCJJ5B6yYKSaqvAtfS4NXGpvdh1YghZV+3IuzOCospxlEncuFgxBuruRtUESuvcDMu+ZkfKSRPiUpV40uiwcIHg4tmETDkSjuixO9+Mw0U2OF0LOF02QhblRu07H3JFDtjHF3Cq1Mk4iTl6xB3qgtbMX6fXuOlenW0xPq0fybkG1H+YxLGbDuaGNqiT+ZBVZEfGFRvef/IjKWcQ8ekqFJRql8k1bmTfgoefO773TB+2Z6iRfHTNyYHzVrLpCdQ0T+FAoRV7CiwM256pwc6cbujM/jwm/hWWL8L9/flKxKepkEheh+5kd54B+84aWU1t08kpxxSQD3grY7I/w8svpJfVWGeTshRkSX3Ylj5AUs0WtiOtG5fLjXMmezA7Rv9/kJ1sCESWUqWdE7LKRqf1UYNj+GXrWCv5XzIpFqPFguN+AlPDngFukaGIAAAAAElFTkSuQmCC');} </style> <link rel="stylesheet" type="text/css" href="205aab48-1c03-499d-8d72-0dbf0648290d.css"> </head> <body> <div style="position: relative;"><h2>Letzte Änderung: 12.08.2019 17:05</h2></div><div class="dayHeader">13.08.2019, Dienstag</div> <div class="header"> <div style="border: 10px solid #D38597;"> <div style="background-color: #6a00ff; color: #ffffff;">5A</div> <div style="background-color: #a20025; color: #ffffff;">5B</div> <div style="background-color: #008a00; color: #ffffff;">5C</div> <div style="background-color: #f0a30a; color: #ffffff;">5D</div> </div> <div style="border: 10px solid #BDB3C7;"> <div style="background-color: #6a00ff; color: #ffffff;">6A</div> <div style="background-color: #a20025; color: #ffffff;">6B</div> <div style="background-color: #008a00; color: #ffffff;">6C</div> <div style="background-color: #f0a30a; color: #ffffff;">6D</div> </div> <div style="border: 10px solid #EC85BC;"> <div style="background-color: #6a00ff; color: #ffffff;">7A</div> <div style="background-color: #a20025; color: #ffffff;">7B</div> <div style="background-color: #008a00; color: #ffffff;">7C</div> </div> <div style="border: 10px solid #D3E385;"> <div style="background-color: #a20025; color: #ffffff;">8B</div> </div> <div style="border: 10px solid #B885FF;"> <div style="background-color: #6a00ff; color: #ffffff;">9A</div> </div> <div style="border: 10px solid #85C785;"> <div style="background-color: #6a00ff; color: #ffffff;">11KU</div> <div style="background-color: #a20025; color: #ffffff;">11MU</div> <div style="background-color: #008a00; color: #ffffff;">11PGW</div> <div style="background-color: #f0a30a; color: #ffffff;">11PHY</div> <div style="background-color: #1ba1e2; color: #ffffff;">11SPO</div> </div> <div style="border: 10px solid #85ABF7;"> <div style="background-color: #6a00ff; color: #ffffff;">12KU</div> <div style="background-color: #a20025; color: #ffffff;">12MU</div> <div style="background-color: #f0a30a; color: #ffffff;">12PHY</div> <div style="background-color: #1ba1e2; color: #ffffff;">12SPO</div> </div> </div> <div style="border: 10px solid #D38597;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="1" style="background-color: #6a00ff; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5A</td><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">1. - 10. Std. bei LIE, PEP (Starttage)</td></tr> <tr><td rowspan="1" style="background-color: #a20025; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5B</td><td style="background-color: #a20025; color: #ffffff; padding-left: 5px;">1. - 10. Std. bei JUN, KLA (Starttage)</td></tr> <tr><td rowspan="1" style="background-color: #008a00; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5C</td><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">1. - 10. Std. bei CAR, WES (Starttage)</td></tr> <tr><td rowspan="1" style="background-color: #f0a30a; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">5D</td><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">1. - 10. Std. bei BÄR, HAD (Starttage)</td></tr> </table> </div><div style="border: 10px solid #BDB3C7;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="3" style="background-color: #008a00; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">6C</td><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">5. Std. Musik bei HAM im Raum G005 statt bei JUN (Klassenraum G005)</td></tr> <tr><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">6. Std. NAWI bei ZUB im Raum G005 statt bei JUN (Klassenraum G005)</td></tr> <tr><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">7. Std. NAWI bei JUN im Raum F103 fällt aus</td></tr> <tr><td rowspan="2" style="background-color: #f0a30a; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">6D</td><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">3. Std. Musik bei OHN im Raum G002 statt bei JUN (Klassenraum G002)</td></tr> <tr><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">4. Std. Musik bei ECK im Raum G002 statt bei JUN (Klassenraum G002)</td></tr> <tr><td rowspan="1" style="background-color: #BDB3C7; color: #000000; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">6A, 6B, 6C, 6D</td><td style="background-color: #BDB3C7; color: #000000; padding-left: 5px;">8. Std. Förder Engl. 5 bei WES im Raum H104 fällt aus</td></tr> </table> </div><div style="border: 10px solid #EC85BC;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="2" style="background-color: #6a00ff; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">7A</td><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">3. - 4. Std. Englisch bei BRA im Raum H007 statt bei MAR</td></tr> <tr><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">5. Std. Klassenrat bei BAY im Raum H005 statt bei MAR</td></tr> <tr><td rowspan="1" style="background-color: #a20025; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">7B</td><td style="background-color: #a20025; color: #ffffff; padding-left: 5px;">1. - 2. Std. Kunst bei WES im Raum F004 fällt aus</td></tr> <tr><td rowspan="2" style="background-color: #008a00; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">7C</td><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">6. Std. Kunst bei OHN im Raum F005 statt bei WES</td></tr> <tr><td style="background-color: #008a00; color: #ffffff; padding-left: 5px;">7. Std. Kunst bei WES im Raum F005 fällt aus</td></tr> </table> </div><div style="border: 10px solid #D3E385;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="1" style="background-color: #a20025; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">8B</td><td style="background-color: #a20025; color: #ffffff; padding-left: 5px;">1. - 2. Std. Sport bei MAN im Raum ESH fällt aus</td></tr> </table> </div><div style="border: 10px solid #B885FF;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="2" style="background-color: #6a00ff; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">9A</td><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">6. Std. Religion bei FER im Raum H002 statt bei LIE</td></tr> <tr><td style="background-color: #6a00ff; color: #ffffff; padding-left: 5px;">7. Std. Religion bei LIE im Raum H002 fällt aus</td></tr> </table> </div> <div style="border: 10px solid #85C785;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="1" style="background-color: #85C785; color: #000000; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">11KU, 11MU, 11PGW, 11PHY, 11SPO</td><td style="background-color: #85C785; color: #000000; padding-left: 5px;">1. - 2. Std. Mathematik eA 3 im Raum G104 statt bei BÄR (Vtr. ohne Lehrer)</td></tr> </table> </div><div style="border: 10px solid #85ABF7;overflow: auto;margin-top:10px;"> <table> <tr><td rowspan="1" style="background-color: #f0a30a; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">12PHY</td><td style="background-color: #f0a30a; color: #ffffff; padding-left: 5px;">1. - 3. Std. Geographie im Raum F005 statt bei PEP (Vtr. ohne Lehrer)</td></tr> <tr><td rowspan="1" style="background-color: #1ba1e2; color: #ffffff; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">12SPO</td><td style="background-color: #1ba1e2; color: #ffffff; padding-left: 5px;">1. - 2. Std. Seminar im Raum H007 statt bei BAU (Vtr. ohne Lehrer)</td></tr> <tr><td rowspan="1" style="background-color: #85ABF7; color: #000000; min-width: 100px; width: 30%; text-align: center;font-size: 1.5em;">12KU, 12MU</td><td style="background-color: #85ABF7; color: #000000; padding-left: 5px;">1. - 2. Std. Geschichte im Raum F008 statt bei MAR (Vtr. ohne Lehrer)</td></tr> </table> </div></body> </html> ```
fynngodau commented 4 years ago
Owner

I see you're trying to fit the subject into the lesson field ((\d.* Std\. \w+)). However, the lesson field is intended to be very small, usually only one number, though it can of course also hold a duration (1-10).

1.-5.Std.Musik is unfortunately way too long and breaks the cards layout as seen in the attachment. I think Std. is redundant – it already is in the lesson column – and every . can be omitted to improve readability. The subject should go somewhere else.

In the Untis parser, I am concatenating class and subject using a · character. This may not be a wise choice for you as well, as space for class is very limited in list view (the Untis plan I've seen had lesson abbreviated). I think it would make more sense for you to move the subject to the info field. I imagine the parser to make this

8B | 1. - 2. Std. Sport bei MAN im Raum ESH fällt aus

become this (affectedClass | lesson | replacementTeacher | info):

8B | 1-2 | MAN | Sport im Raum ESH fällt aus

I see you're trying to fit the subject into the lesson field (`(\d.* Std\. \w+)`). However, the lesson field is intended to be very small, usually only one number, though it can of course also hold a duration (`1-10`). `1.-5.Std.Musik` is unfortunately way too long and breaks the cards layout as seen in the attachment. I think `Std.` is redundant – it already is in the lesson column – and every `.` can be omitted to improve readability. The subject should go somewhere else. In the Untis parser, I am [concatenating class and subject using a `·` character][concat]. This may not be a wise choice for you as well, as space for class is very limited in list view (the Untis plan I've seen had lesson abbreviated). I think it would make more sense for you to move the subject to the info field. I imagine the parser to make this `8B | 1. - 2. Std. Sport bei MAN im Raum ESH fällt aus` become this (`affectedClass | lesson | replacementTeacher | info`): `8B | 1-2 | MAN | Sport im Raum ESH fällt aus` [concat]: https://notabug.org/fynngodau/DSBDirect/src/ca6d96f167b824249076fb0ee6ad3947077b8b9d/app/src/main/java/godau/fynn/dsbdirect/table/reader/Untis.java#L171
fynngodau commented 4 years ago
Owner

Another thing I've noticed is that your plan is not actually school-specific, but rather generally a HeinekingMedia Vertretungsplan as indicated in the title. I've seen one before searching around on the internet (archive), and it looked very similar. If you can add support for multiple days in one page, we can dynamically detect any HeinekingMedia Vertretungsplan and use the parser for that automatically. But we can finish this pull request first and add more general support and detection at a later date if you prefer.

However, this should be reflected in the UI (the parser selection should show HeinekingMedia instead of Goethe).

Another thing I've noticed is that your plan is not actually school-specific, but rather generally a `HeinekingMedia Vertretungsplan` as indicated in the `title`. [I've seen one before searching around on the internet][before] ([archive][archive]), and it looked very similar. If you can add support for multiple days in one page, we can [dynamically detect][dynamical] any `HeinekingMedia Vertretungsplan` and use the parser for that automatically. But we can finish this pull request first and add more general support and detection at a later date if you prefer. However, this should be reflected in the UI (the parser selection should show `HeinekingMedia` instead of `Goethe`). [before]: https://app.dsbcontrol.de/data/5f311cee-3221-4e78-8da5-6ee91e57f604/5827346f-ea1f-4dce-af37-ce9caaadb975/5827346f-ea1f-4dce-af37-ce9caaadb975.html [archive]: https://web.archive.org/web/20190812201232/https://app.dsbcontrol.de/data/5f311cee-3221-4e78-8da5-6ee91e57f604/5827346f-ea1f-4dce-af37-ce9caaadb975/5827346f-ea1f-4dce-af37-ce9caaadb975.html [dynamical]: https://notabug.org/fynngodau/DSBDirect/src/ca6d96f167b824249076fb0ee6ad3947077b8b9d/app/src/main/java/godau/fynn/dsbdirect/Utility.java#L128

Okay, I fixed the langth of lessons and moved the subject into the information column. I think I updated the String from Röntgen to Goethe but it anyway allways shows me There is no choice, only Untis boards can be parsed at the moment.

I agree, the general support for HeinekingMedia Vertretungsplan we could improve later.

Btw. I fixed a little bug concerning Android 4 devices in your mailing function.

Okay, I fixed the langth of lessons and moved the subject into the information column. I think I updated the String from `Röntgen` to `Goethe` but it anyway allways shows me `There is no choice, only Untis boards can be parsed at the moment`. I agree, the general support for `HeinekingMedia Vertretungsplan` we could improve later. Btw. I fixed a little bug concerning Android 4 devices in your mailing function.
fynngodau commented 4 years ago
Owner
  • Please also change the German String resource value. I will revert commit c81b3a3023 that causes blocking the preferences after merging.
  • Your fix doesn't fix it, but thanks for noticing. Here is a patch to fix your fix:
diff --git a/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java b/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java
index 5745af9..2763114 100755
--- a/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java
+++ b/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java
@@ -244,9 +244,7 @@ public class SettingsActivity extends Activity {
             findPreference("settings_about_email").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                 @Override
                 public boolean onPreferenceClick(Preference preference) {
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-                        emailTheDev(getContext());
-                    }
+                    emailTheDev(getActivity());
                     return false;
                 }
             });
* Please also change the German String resource value. I will revert commit [`c81b3a3023`][commit] that causes blocking the preferences after merging. * Your fix doesn't fix it, but thanks for noticing. Here is a patch to fix your fix: ``` diff --git a/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java b/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java index 5745af9..2763114 100755 --- a/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java +++ b/app/src/main/java/godau/fynn/dsbdirect/activity/SettingsActivity.java @@ -244,9 +244,7 @@ public class SettingsActivity extends Activity { findPreference("settings_about_email").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - emailTheDev(getContext()); - } + emailTheDev(getActivity()); return false; } }); ``` [commit]: https://notabug.org/fynngodau/DSBDirect/commit/c81b3a302348220dc8920fa7f9a59e8de62a31f9
fynngodau commented 4 years ago
Owner

Can you also omit all dots (.) in the lessons, as that would look more clean?

Can you also omit all dots (`.`) in the lessons, as that would look more clean?
fynngodau commented 4 years ago
Owner

Comparing Strings with != will not work. You need to use .equals:

diff --git a/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java b/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java
index da4462a..6adc157 100755
--- a/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java
+++ b/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java
@@ -112,7 +112,7 @@ public class GoetheHamburg extends Reader {
                 String subject="";
                 pattern = Pattern.compile("\\d.* Std. (\\w+)");
                 matcher = pattern.matcher(infoText);
-                if(matcher.find()&&matcher.group(1)!="bei") subject=matcher.group(1)+" ";
+                if(matcher.find() && !matcher.group(1).equals("bei")) subject=matcher.group(1)+" ";
 
 
                 String info="";

Furthermore, I noticed you are omitting information that starts with the keyword im Raum:

Original: 9A | 6. Std. Religion bei FER im Raum H002 statt bei LIE

Expected result: 9A | 6 | FER | Religion im Raum H002 statt bei LIE

Actual result: 9A | 6. | FER | Religion statt bei LIE

Since it's quite the critical information, please fix this as well.

[Comparing Strings with `!=`][comp] [will not work][so]. You need to use `.equals`: ``` diff --git a/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java b/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java index da4462a..6adc157 100755 --- a/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java +++ b/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java @@ -112,7 +112,7 @@ public class GoetheHamburg extends Reader { String subject=""; pattern = Pattern.compile("\\d.* Std. (\\w+)"); matcher = pattern.matcher(infoText); - if(matcher.find()&&matcher.group(1)!="bei") subject=matcher.group(1)+" "; + if(matcher.find() && !matcher.group(1).equals("bei")) subject=matcher.group(1)+" "; String info=""; ``` Furthermore, I noticed you are omitting information that starts with the keyword `im Raum`: Original: `9A | 6. Std. Religion bei FER im Raum H002 statt bei LIE` Expected result: `9A | 6 | FER | Religion im Raum H002 statt bei LIE` Actual result: `9A | 6. | FER | Religion statt bei LIE` Since it's quite the critical information, please fix this as well. [comp]: https://notabug.org/JasMich.de/DSBDirect/src/d57f361e50e6f0803983629708b00aab1123540a/app/src/main/java/godau/fynn/dsbdirect/table/reader/GoetheHamburg.java#L115 [so]: https://stackoverflow.com/a/513935

Fixed comparing of the strings.

Original: 9A | 6. Std. Religion bei FER im Raum H002 statt bei LIE

Expected result: 9A | 6 | FER | Religion im Raum H002 statt bei LIE

Actual result: 9A | 6. | FER | Religion statt bei LIE

That's wanted. If the text contains statt bei and a teacher's short code (XXX), it means the room didn't change but only the teacher. (Look at the teacher column: it's unequal to the short code in the info text.) That's why I'm removing the room in that case.

Fixed comparing of the strings. > Original: 9A | 6. Std. Religion bei FER im Raum H002 statt bei LIE > > Expected result: 9A | 6 | FER | Religion im Raum H002 statt bei LIE > > Actual result: 9A | 6. | FER | Religion statt bei LIE That's wanted. If the text contains `statt bei ` and a teacher's short code (`XXX`), it means the room didn't change but only the teacher. (Look at the teacher column: it's unequal to the short code in the info text.) That's why I'm removing the room in that case.
fynngodau commented 4 years ago
Owner

6be17a189f is not really what I suggested, but I suppose it works as well… just emailTheDev(getActivity()); would have sufficed, though, instead of the whole if clause.

To explain why it doesn't matter: emailTheDev() is asking for a Context. Activity extends Context. So getActivity() will be implicitly cast to a Context because that's what is asked for. We could also cast it explicitly with (Context) getActivity(), but it would require more typing.


I didn't realize the omission was intentional… can you be sure that only the teacher changed and that it is not also in another room? It would make sense to me that a substitute lesson with a different teacher would also take place in a new room. I don't feel like assuming otherwise is a safe assumption to make.


  • Please also change the German String resource value.

  • Can you also omit all dots (.) in the lessons, as that would look more clean?


I see you made a change to the filterUserFilters() method. Unfortunately, if I'm not mistaken, it is wrong: just because no class information is available doesn't mean that it matches the class filter! Instead, if enabled by the user in the preferences, it will already pass when it is an info-only entry. (Your plan doesn't seem to have any info-only entries, though.)

Also, I fail to observe after all how it was required to make the classInClass adjective case-insensitive as your plan seems consistent about capitalization to me (though of course I only have access to one example file), but I now realized that it doesn't affect the classInInfo adjective that I was primarily concerned about.

[`6be17a189f`][6be17a189f] is not really what I suggested, but I suppose it works as well… just `emailTheDev(getActivity());` would have sufficed, though, instead of the whole if clause. To explain why it doesn't matter: `emailTheDev()` is asking for a `Context`. `Activity` extends `Context`. So `getActivity()` will be implicitly cast to a `Context` because that's what is asked for. We could also cast it explicitly with `(Context) getActivity()`, but it would require more typing. --- I didn't realize the omission was intentional… can you be sure that only the teacher changed and that it is not also in another room? It would make sense to me that a substitute lesson with a different teacher would also take place in a new room. I don't feel like assuming otherwise is a safe assumption to make. --- > * Please also change the German String resource value. > * Can you also omit all dots (`.`) in the lessons, as that would look more clean? --- I see you made [a change][filter] to the `filterUserFilters()` method. Unfortunately, if I'm not mistaken, it is wrong: just because `no class information is available` doesn't mean that it matches the class filter! Instead, if enabled by the user in the preferences, it will already [`pass` when it is an info-only entry][info-only]. (Your plan doesn't seem to have any info-only entries, though.) Also, I fail to observe after all how it was required to make the `classInClass` `adjective` case-insensitive as your plan seems consistent about capitalization to me (though of course I only have access to one example file), but I now realized that it doesn't affect the `classInInfo` adjective that I was primarily concerned about. [info-only]: https://notabug.org/JasMich.de/DSBDirect/src/6be17a189fade2a31fc98a9aab8b81111ae56267/app/src/main/java/godau/fynn/dsbdirect/table/reader/Reader.java#L134 [filter]: https://notabug.org/JasMich.de/DSBDirect/src/6be17a189fade2a31fc98a9aab8b81111ae56267/app/src/main/java/godau/fynn/dsbdirect/table/reader/Reader.java#L126 [6be17a189f]: https://notabug.org/JasMich.de/DSBDirect/commit/6be17a189fade2a31fc98a9aab8b81111ae56267 [bc9b2d07c2]: https://notabug.org/JasMich.de/DSBDirect/commit/bc9b2d07c2657cdad6ef0f8ed7fdde7896455061
fynngodau commented 4 years ago
Owner

I have added the locations that build outputs are located to .gitignore. Your pull request wants to add one blank line at the end of .gitignore, that's what causes the merge conflict. But don't worry about it, I will squash your commits together into one anyway and can easily resolve the conflict in the process.

I have added the locations that build outputs are located to `.gitignore`. Your pull request wants to add one blank line at the end of `.gitignore`, that's what causes the merge conflict. But don't worry about it, I will squash your commits together into one anyway and can easily resolve the conflict in the process.

Okay, I updated the strings for Goethe and fixed the fix of emailTheDev(getActivity()).

I added the Room to the info column if necessary.

To the case insensitivity: That's right, in the example file, the class letters are upper-case. But sometimes, they are added in lowercase. It changes every few weeks/days depending on the person creating the substitution table. As I do not want to patch this every two weeks I would like to take the save way by using case insensitivity.

Still any other things to fix or is it ready to pull?

Okay, I updated the strings for `Goethe` and fixed the fix of `emailTheDev(getActivity())`. I added the Room to the info column if necessary. To the case insensitivity: That's right, in the example file, the class letters are upper-case. But sometimes, they are added in lowercase. It changes every few weeks/days depending on the person creating the substitution table. As I do not want to patch this every two weeks I would like to take the save way by using case insensitivity. *Still any other things to fix or is it ready to pull?*
fynngodau commented 4 years ago
Owner

I think it finally looks good! Thank you!

I think it finally looks good! Thank you!
fynngodau commented 4 years ago
Owner

I merged it manually with 81500dd0ed, attributing the squash commit to you for statistics and such.

I merged it manually with [`81500dd0ed`][81500dd0ed], attributing the squash commit to you for statistics and such. [81500dd0ed]: https://notabug.org/fynngodau/DSBDirect/commit/81500dd0ed05c7cd0c0d591f900b6e762142db1a

Could you create a release?

Could you create a release?
fynngodau commented 4 years ago
Owner

I quickly need to find a place to credit you first, as required by the GNU GPL v3 that you licensed the GoetheHamburg.java file under. Then we can release, yes.

I quickly need to find a place to credit you first, as required by the GNU GPL v3 that you licensed the `GoetheHamburg.java` file under. Then we can release, yes.
fynngodau commented 4 years ago
Owner

I have credited you below where I put my own name, I hope it's alright.

I have credited you below where I put my own name, I hope it's alright.
fynngodau commented 4 years ago
Owner

Release 2.2 is tagged!

[Release 2.2][release] is tagged! [release]: https://notabug.org/fynngodau/DSBDirect/commit/ada3031fd6166b236bf74d5dd3ef386cf8ec80f8

All right. Thank you.

All right. Thank you.

I saw the update in Google Play. What's about F-Droid? It keeps showing version 2.1.

I saw the update in Google Play. What's about F-Droid? It keeps showing version `2.1`.
fynngodau commented 4 years ago
Owner

After creating a tag starting with release-, we need to be patient for a few days and wait for the fdroid build server to include DSBDirect in its next round of builds that gets pushed to the repo once all apps are done. Nothing can be done by us to speed up the process.

After creating a tag starting with `release-`, we need to be patient for a few days and wait for the fdroid build server to include DSBDirect in its next round of builds that gets pushed to the repo once all apps are done. Nothing can be done by us to speed up the process.
Please reopen this pull request to perform merge operation.
Sign in to join this conversation.
No Milestone
No assignee
2 Participants
Loading...
Cancel
Save
There is no content yet.