Changeset 430


Ignore:
Timestamp:
Apr 28, 2023, 4:39:34 PM (20 months ago)
Author:
alloc
Message:

*Markers: Added storing the icon URL used for each marker

Location:
binary-improvements2
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/MarkersMod/ModInfo.xml

    r429 r430  
    55        <Description value="Allows placing custom markers on the web map" />
    66        <Author value="Catalysm and Alloc" />
    7         <Version value="21.0.275.0" />
     7        <Version value="21.0.275.1" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/MarkersMod/src/Markers.cs

    r426 r430  
    1212                private const int numRandomMarkers = 5;
    1313
    14                 private readonly Dictionary<string, (int, int)> markers = new Dictionary<string, (int, int)> ();
     14                private const string defaultIcon =
     15                        "https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Blue_question_mark_icon.svg/1200px-Blue_question_mark_icon.svg.png";
     16               
     17                private readonly Dictionary<string, (int, int, string)> markers = new Dictionary<string, (int, int, string)> ();
    1518
    1619                public Markers () {
     
    2124                                int lng = random.RandomRange (-1000, 1001);
    2225
    23                                 markers.Add (WebUtils.GenerateGuid (), (lat, lng));
     26                                markers.Add (WebUtils.GenerateGuid (), (lat, lng, null));
    2427                        }
    2528                }
     
    2831                private static readonly byte[] jsonKeyLat = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lat");
    2932                private static readonly byte[] jsonKeyLng = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("lng");
     33                private static readonly byte[] jsonKeyIcon = JsonWriter.GetEncodedPropertyNameWithPrefixValueSeparator ("icon");
    3034
    3135                protected override void HandleRestGet (RequestContext _context) {
     
    3842
    3943                                bool first = true;
    40                                 foreach ((string markerId, (int, int) coordinates) in markers) {
     44                                foreach ((string markerId, (int, int, string) properties) in markers) {
    4145                                        if (!first) {
    4246                                                writer.WriteValueSeparator ();
     
    4549                                        first = false;
    4650                                       
    47                                         writeMarkerJson (ref writer, markerId, coordinates);
     51                                        writeMarkerJson (ref writer, markerId, properties);
    4852                                }
    4953
     
    5357                        }
    5458
    55                         if (!markers.TryGetValue (id, out (int, int) location)) {
     59                        if (!markers.TryGetValue (id, out (int, int, string) properties2)) {
    5660                                writer.WriteRaw (JsonEmptyData);
    5761                                SendEnvelopedResult (_context, ref writer, HttpStatusCode.NotFound);
     
    6266                                writer.WriteBeginArray ();
    6367                               
    64                                 writeMarkerJson (ref writer, id, location);
     68                                writeMarkerJson (ref writer, id, properties2);
    6569                               
    6670                                writer.WriteEndArray ();
     
    6973                }
    7074
    71                 private void writeMarkerJson (ref JsonWriter _writer, string _markerId, (int, int) _coordinates) {
     75                private void writeMarkerJson (ref JsonWriter _writer, string _markerId, (int, int, string) _properties) {
    7276                        _writer.WriteRaw (jsonKeyId);
    7377                        _writer.WriteString (_markerId);
    7478                        _writer.WriteRaw (jsonKeyLat);
    75                         _writer.WriteInt32 (_coordinates.Item1);
     79                        _writer.WriteInt32 (_properties.Item1);
    7680                        _writer.WriteRaw (jsonKeyLng);
    77                         _writer.WriteInt32 (_coordinates.Item2);
     81                        _writer.WriteInt32 (_properties.Item2);
     82                        _writer.WriteRaw (jsonKeyIcon);
     83                        _writer.WriteString (_properties.Item3 ?? defaultIcon);
    7884                        _writer.WriteEndObject ();
    7985                }
     
    9096                        }
    9197
     98                        TryGetJsonField (_jsonInput, "icon", out string icon);
     99                        if (string.IsNullOrEmpty (icon)) {
     100                                icon = null;
     101                        }
     102
    92103                        string newId = WebUtils.GenerateGuid ();
    93                         markers.Add (newId, (lat, lng));
     104                        markers.Add (newId, (lat, lng, icon));
    94105
    95106                        PrepareEnvelopedResult (out JsonWriter writer);
     
    109120                        }
    110121
     122                        bool keepIcon = !_jsonInput.TryGetValue ("icon", out _);
     123                        TryGetJsonField (_jsonInput, "icon", out string icon);
     124                        if (string.IsNullOrEmpty (icon)) {
     125                                icon = null;
     126                        }
     127
    111128                        string id = _context.RequestPath;
    112129
    113                         if (!markers.TryGetValue (id, out _)) {
     130                        if (!markers.TryGetValue (id, out (int, int, string) properties)) {
    114131                                SendErrorResult (_context, HttpStatusCode.NotFound, _jsonInputData, "ID_NOT_FOUND");
    115132                                return;
    116133                        }
    117                        
    118                         markers [id] = (lat, lng);
     134
     135                        if (keepIcon) {
     136                                icon = properties.Item3;
     137                        }
     138                        markers [id] = (lat, lng, icon);
    119139
    120140                        PrepareEnvelopedResult (out JsonWriter writer);
     
    125145                        writer.WriteRaw (jsonKeyLng);
    126146                        writer.WriteInt32 (lng);
     147                        writer.WriteRaw (jsonKeyIcon);
     148                        writer.WriteString (icon);
    127149                        writer.WriteEndObject ();
    128150                        SendEnvelopedResult (_context, ref writer);
  • binary-improvements2/bin/Mods/Xample_MarkersMod/ModInfo.xml

    r429 r430  
    55        <Description value="Allows placing custom markers on the web map" />
    66        <Author value="Catalysm and Alloc" />
    7         <Version value="21.0.275.0" />
     7        <Version value="21.0.275.1" />
    88        <Website value="" />
    99</xml>
Note: See TracChangeset for help on using the changeset viewer.