Project

General

Profile

Download (6.93 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / network / RubikUpdates.java @ 2c9ab085

1 fcf7320f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2022 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.network;
21
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23
24
import org.distorted.objects.RubikObjectList;
25
26
import java.util.ArrayList;
27
28
public class RubikUpdates
29
{
30
  public static class UpdateInfo
31
    {
32 c99db493 Leszek Koltunski
    public final String mObjectShortName;
33
    public final String mObjectLongName;
34
    public final String mDescription;
35
    public final int mObjectMinorVersion;
36
    public final int mExtrasMinorVersion;
37 2c9ab085 Leszek Koltunski
    public final int mPercent;
38 c99db493 Leszek Koltunski
    public final boolean mUpdateObject;
39
    public final boolean mUpdateExtras;
40
41 2c9ab085 Leszek Koltunski
    public UpdateInfo(String shortName, String longName, String description, int objectMinor,
42
                      int extrasMinor, int percent, boolean updateO, boolean updateE)
43 fcf7320f Leszek Koltunski
      {
44 c99db493 Leszek Koltunski
      mObjectShortName    = shortName;
45
      mObjectLongName     = longName;
46
      mDescription        = description;
47
      mObjectMinorVersion = objectMinor;
48
      mExtrasMinorVersion = extrasMinor;
49 2c9ab085 Leszek Koltunski
      mPercent            = percent;
50 c99db493 Leszek Koltunski
      mUpdateObject       = updateO;
51
      mUpdateExtras       = updateE;
52 fcf7320f Leszek Koltunski
      }
53
    }
54
55
  private String mUrl;
56 2c9ab085 Leszek Koltunski
  private final ArrayList<UpdateInfo> mCompleted, mStarted;
57 fcf7320f Leszek Koltunski
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59
60
  public RubikUpdates()
61
    {
62 2c9ab085 Leszek Koltunski
    mCompleted = new ArrayList<>();
63
    mStarted   = new ArrayList<>();
64 fcf7320f Leszek Koltunski
    }
65
66
///////////////////////////////////////////////////////////////////////////////////////////////////
67
68
  private String debug(ArrayList<UpdateInfo> list)
69
    {
70
    String ret = "";
71 c99db493 Leszek Koltunski
72
    for( UpdateInfo info : list)
73
      {
74
      ret += (info.mObjectShortName+" "+info.mObjectLongName+" "+info.mDescription+" ");
75
      ret += (info.mObjectMinorVersion+" "+info.mExtrasMinorVersion+" "+info.mUpdateObject+" "+info.mUpdateExtras+" , ");
76
      }
77
78 fcf7320f Leszek Koltunski
    return ret;
79
    }
80
81
///////////////////////////////////////////////////////////////////////////////////////////////////
82
83
  private void parseLine(String[] elements)
84
    {
85 2c9ab085 Leszek Koltunski
    String shortName   = elements[0].trim();
86
    String objMinor    = elements[1].trim();
87
    String extMinor    = elements[2].trim();
88
    String percent     = elements[3].trim();
89
    String longName    = elements[4];
90
    String description = elements[5];
91
    int oMinor, eMinor, oPercent;
92 fcf7320f Leszek Koltunski
93
    try { oMinor = Integer.parseInt(objMinor); }
94
    catch (NumberFormatException ex) { oMinor = -1; }
95
    try { eMinor = Integer.parseInt(extMinor); }
96
    catch (NumberFormatException ex) { eMinor = -1; }
97 2c9ab085 Leszek Koltunski
    try { oPercent = Integer.parseInt(percent); }
98
    catch (NumberFormatException ex) { oPercent = -1; }
99 fcf7320f Leszek Koltunski
100 2c9ab085 Leszek Koltunski
    if( oMinor>=0 && eMinor>=0 && oPercent>=0 )
101 fcf7320f Leszek Koltunski
      {
102 c99db493 Leszek Koltunski
      int objOrdinal = RubikObjectList.getOrdinal(shortName.toUpperCase());
103 2c9ab085 Leszek Koltunski
      boolean updateO=true, updateE=true;
104 fcf7320f Leszek Koltunski
105
      if( objOrdinal>=0 )
106
        {
107 c99db493 Leszek Koltunski
        int localObjectMinor = RubikObjectList.getLocalObjectMinor(objOrdinal);
108 fcf7320f Leszek Koltunski
        int localExtrasMinor = RubikObjectList.getLocalExtrasMinor(objOrdinal);
109 2c9ab085 Leszek Koltunski
        updateO = localObjectMinor<oMinor;
110
        updateE = localExtrasMinor<eMinor;
111 fcf7320f Leszek Koltunski
        }
112 2c9ab085 Leszek Koltunski
      if( updateO || updateE )
113 fcf7320f Leszek Koltunski
        {
114 2c9ab085 Leszek Koltunski
        UpdateInfo info = new UpdateInfo(shortName,longName,description,oMinor,eMinor,oPercent,updateO,updateE);
115
        if(oPercent>=100) mCompleted.add(info);
116
        else              mStarted.add(info);
117 fcf7320f Leszek Koltunski
        }
118
      }
119
    }
120
121
///////////////////////////////////////////////////////////////////////////////////////////////////
122
123
  void parse(String updates)
124
    {
125
    android.util.Log.e("D", updates);
126
127 2c9ab085 Leszek Koltunski
    mCompleted.clear();
128
    mStarted.clear();
129 fcf7320f Leszek Koltunski
130
    String[] lines = updates.split("\n");
131
    int numLines = lines.length;
132
133
    if( numLines>=1 )
134
      {
135
      mUrl = lines[0];
136
      for(int line=1; line<numLines; line++)
137
        {
138 c99db493 Leszek Koltunski
        String[] elements = lines[line].split(",");
139 2c9ab085 Leszek Koltunski
        if( elements.length>=6 ) parseLine(elements);
140 fcf7320f Leszek Koltunski
        }
141
      }
142 63dd19c4 Leszek Koltunski
    }
143
144 903c7bbc Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
145
146
  public void updateDone(String shortName)
147
    {
148 2c9ab085 Leszek Koltunski
    for( UpdateInfo info : mCompleted)
149 903c7bbc Leszek Koltunski
      {
150
      if( info.mObjectShortName.equals(shortName) )
151
        {
152 2c9ab085 Leszek Koltunski
        mCompleted.remove(info);
153 903c7bbc Leszek Koltunski
        return;
154
        }
155
      }
156
    }
157
158 10373dc7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
159
160 2c9ab085 Leszek Koltunski
  public UpdateInfo getCompletedUpdate(int ordinal)
161 10373dc7 Leszek Koltunski
    {
162 2c9ab085 Leszek Koltunski
    return mCompleted.get(ordinal);
163 9c39179e Leszek Koltunski
    }
164
165
///////////////////////////////////////////////////////////////////////////////////////////////////
166
167 2c9ab085 Leszek Koltunski
  public UpdateInfo getStartedUpdate(int ordinal)
168 9c39179e Leszek Koltunski
    {
169 2c9ab085 Leszek Koltunski
    return mStarted.get(ordinal);
170 9c39179e Leszek Koltunski
    }
171
172
///////////////////////////////////////////////////////////////////////////////////////////////////
173
174 2c9ab085 Leszek Koltunski
  public int getCompletedNumber()
175 9c39179e Leszek Koltunski
    {
176 2c9ab085 Leszek Koltunski
    return mCompleted.size();
177 9c39179e Leszek Koltunski
    }
178
179
///////////////////////////////////////////////////////////////////////////////////////////////////
180
181 2c9ab085 Leszek Koltunski
  public int getStartedNumber()
182 9c39179e Leszek Koltunski
    {
183 2c9ab085 Leszek Koltunski
    return mStarted.size();
184 10373dc7 Leszek Koltunski
    }
185
186 63dd19c4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
187 fcf7320f Leszek Koltunski
188 63dd19c4 Leszek Koltunski
  public void showDebug()
189
    {
190 fcf7320f Leszek Koltunski
    android.util.Log.e("D", "url: "+mUrl);
191 2c9ab085 Leszek Koltunski
    android.util.Log.e("D", "ready objects: "+debug(mCompleted));
192
    android.util.Log.e("D", "next  objects: "+debug(mStarted));
193 fcf7320f Leszek Koltunski
    }
194
}