Changeset b4e4dd3


Ignore:
Timestamp:
Aug 16, 2010, 11:10:57 AM (7 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
bda3a92
Parents:
fbcf983
Message:

sc2replay:
Replay duration is parsed correctly;
The getVersion method of SC2ReplayParser must be implemented by each inheriting class

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • core/src/main/java/de/erichseifert/warp/core/DataPresenter.java

    rfbcf983 rb4e4dd3  
    9999                                for (ReplayParser<?> parser : parsers) {
    100100                                                try {
    101                                                         replayVersion = parser.getVersion(replayFile);
    102                                                         if (parser.isSupported(replayVersion)) {
     101                                                        if (parser.isSupported(replayFile)) {
    103102                                                                replay = parser.getReplay(replayFile);
    104103                                                                break;
  • core/src/main/java/de/erichseifert/warp/core/replay/ReplayParser.java

    rfbcf983 rb4e4dd3  
    3232
    3333        boolean isSupported(File file) throws IOException;
    34         boolean isSupported(String version) throws IOException;
    3534
    3635        String getVersion(File file) throws IOException;
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayParser.java

    rfbcf983 rb4e4dd3  
    2424import java.io.File;
    2525import java.io.IOException;
    26 import java.io.RandomAccessFile;
    27 import java.nio.ByteBuffer;
    28 import java.nio.ByteOrder;
    29 import java.nio.channels.FileChannel;
    30 import java.nio.channels.FileChannel.MapMode;
    3126
    3227import de.erichseifert.warp.core.DefaultVersionedComponent;
     
    3429
    3530public abstract class SC2ReplayParser extends DefaultVersionedComponent implements ReplayParser<SC2Replay> {
    36         private static final int REPLAY_DATA_OFFSET = 1024;
    37 
    3831        public SC2ReplayParser() {
    3932        }
     
    4538        }
    4639
    47         @Override
    48         public boolean isSupported(String version) throws IOException {
     40        protected boolean isSupported(String version) throws IOException {
    4941                return isVersionSupported(getClass(), version);
    5042        }
    51 
    52         @Override
    53         public String getVersion(File file) throws IOException {
    54                 RandomAccessFile raf = new RandomAccessFile(file, "r");
    55                 FileChannel fileChannel = raf.getChannel();
    56                 ByteBuffer src = fileChannel.map(MapMode.READ_ONLY, 0, REPLAY_DATA_OFFSET);
    57                 src.order(ByteOrder.BIG_ENDIAN);
    58 
    59                 // Read uncompressed replay information
    60                 src.position(src.position()+39);
    61                 String version = src.get()+"."+src.get()+"."+src.get()+"."+src.getInt();
    62                 fileChannel.close();
    63                 raf.close();
    64                 return version;
    65         }
    6643}
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayParser_v1.java

    rfbcf983 rb4e4dd3  
    130130                return replay;
    131131        }
     132
     133        @Override
     134        public String getVersion(File file) throws IOException {
     135                RandomAccessFile raf = new RandomAccessFile(file, "r");
     136                FileChannel fileChannel = raf.getChannel();
     137                ByteBuffer src = fileChannel.map(MapMode.READ_ONLY, 0, REPLAY_DATA_OFFSET);
     138                src.order(ByteOrder.BIG_ENDIAN);
     139
     140                // Read uncompressed replay information
     141                src.position(src.position()+39);
     142                String version = src.get()+"."+src.get()+"."+src.get()+"."+src.getInt();
     143                fileChannel.close();
     144                raf.close();
     145                return version;
     146        }
    132147}
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayParser_v2.java

    rfbcf983 rb4e4dd3  
    152152                return replay;
    153153        }
     154
     155        @Override
     156        public String getVersion(File file) throws IOException {
     157                RandomAccessFile raf = new RandomAccessFile(file, "r");
     158                FileChannel fileChannel = raf.getChannel();
     159                ByteBuffer src = fileChannel.map(MapMode.READ_ONLY, 0, REPLAY_DATA_OFFSET);
     160                src.order(ByteOrder.BIG_ENDIAN);
     161
     162                // Read uncompressed replay information
     163                src.position(src.position()+39);
     164                String version = src.get()+"."+src.get()+"."+src.get()+"."+src.getInt();
     165                fileChannel.close();
     166                raf.close();
     167                return version;
     168        }
    154169}
  • sc2replay/src/main/java/de/erichseifert/warp/sc2replay/SC2ReplayParser_v3.java

    rfbcf983 rb4e4dd3  
    4040import de.erichseifert.warp.sc2replay.actions.SC2Action;
    4141import de.erichseifert.warp.sc2replay.actions.SC2ActionFactory_v3;
     42import de.erichseifert.warp.sc2replay.util.DataStruct;
     43import de.erichseifert.warp.sc2replay.util.SC2ReplayUtil;
    4244
    4345public class SC2ReplayParser_v3 extends SC2ReplayParser {
    4446        static {
    45                 addVersionSupport(SC2ReplayParser_v3.class, "121.27.49.822215948");
     47                addVersionSupport(SC2ReplayParser_v3.class, "1.0.2.16223");
    4648        }
    4749
     
    6466                SC2Replay replay = new SC2Replay(file);
    6567
    66                 // Read uncompressed replay information
    67                 src.position(src.position()+39);
    68                 String version = src.get()+"."+src.get()+"."+src.get()+"."+src.getInt();
     68                // Read replay header
     69                // TODO: Check magic number
     70                src.position(src.position()+16);
     71                DataStruct header = SC2ReplayUtil.readDataStruct(src);
     72                DataStruct versionInfo = header.getDataStruct(1);
     73                int majorVersion = versionInfo.getDataStruct(1).getInt();
     74                int minorVersion = versionInfo.getDataStruct(2).getInt();
     75                int revision = versionInfo.getDataStruct(3).getInt();
     76                int build = versionInfo.getDataStruct(4).getInt();
     77                String version = String.format("%d.%d.%d.%d", majorVersion, minorVersion, revision, build);
    6978                replay.setVersion(version);
    70                 if (!isVersionSupported(getClass(), version)) {
    71                         throw new IllegalArgumentException("Unsupported version: "+version);
    72                 }
    73                 src.position(src.position()+6);
    74                 replay.setDuration(src.getShort());
     79
     80                int duration = header.getDataStruct(3).getInt() >> 3;
     81                replay.setDuration(duration);
    7582
    7683                System.out.println("Parsing file: "+file.getPath()+" Version: "+version);
     
    144151                return replay;
    145152        }
     153
     154        @Override
     155        public String getVersion(File file) throws IOException {
     156                RandomAccessFile raf = new RandomAccessFile(file, "r");
     157                FileChannel fileChannel = raf.getChannel();
     158                ByteBuffer src = fileChannel.map(MapMode.READ_ONLY, 0, REPLAY_DATA_OFFSET);
     159                src.order(ByteOrder.BIG_ENDIAN);
     160
     161                // TODO: Check magic number
     162                src.position(src.position()+16);
     163                DataStruct header = SC2ReplayUtil.readDataStruct(src);
     164                DataStruct versionInfo = header.getDataStruct(1);
     165                int majorVersion = versionInfo.getDataStruct(1).getInt();
     166                int minorVersion = versionInfo.getDataStruct(2).getInt();
     167                int revision = versionInfo.getDataStruct(3).getInt();
     168                int build = versionInfo.getDataStruct(4).getInt();
     169                String version = String.format("%d.%d.%d.%d", majorVersion, minorVersion, revision, build);
     170                return version;
     171        }
    146172}
Note: See TracChangeset for help on using the changeset viewer.