summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/util/VolumeHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/util/VolumeHelper.java')
-rw-r--r--org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/util/VolumeHelper.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/util/VolumeHelper.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/util/VolumeHelper.java
new file mode 100644
index 0000000..a22ccff
--- /dev/null
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/junrar/util/VolumeHelper.java
@@ -0,0 +1,97 @@
+package org.fox.ttcomics2.junrar.util;
+
+public class VolumeHelper {
+ private VolumeHelper() {
+ }
+
+ // public static boolean mergeArchive(Archive archive, ComprDataIO dataIO)
+ // throws IOException {
+ // FileHeader hd = dataIO.getSubHeader();
+ // if (hd.getUnpVersion() >= 20 && hd.getFileCRC() != 0xffffffff
+ // && dataIO.getPackedCRC() != ~hd.getFileCRC()) {
+ // System.err.println("Data Bad CRC");
+ // }
+ //
+ // boolean oldNumbering = !archive.getMainHeader().isNewNumbering()
+ // || archive.isOldFormat();
+ // String nextName = nextVolumeName(archive.getFile().getAbsolutePath(),
+ // oldNumbering);
+ // File nextVolume = new File(nextName);
+ // UnrarCallback callback = archive.getUnrarCallback();
+ // if ((callback != null) && !callback.isNextVolumeReady(nextVolume)) {
+ // return false;
+ // }
+ // if (!nextVolume.exists()) {
+ // return false;
+ // }
+ // archive.setFile(nextVolume);
+ // hd = archive.nextFileHeader();
+ // if (hd == null) {
+ // return false;
+ // }
+ // dataIO.init(hd);
+ // return true;
+ // }
+
+ public static String nextVolumeName(String arcName, boolean oldNumbering) {
+ if (!oldNumbering) {
+ // part1.rar, part2.rar, ...
+ int len = arcName.length();
+ int indexR = len - 1;
+ while ((indexR >= 0) && !isDigit(arcName.charAt(indexR))) {
+ indexR--;
+ }
+ int index = indexR + 1;
+ int indexL = indexR - 1;
+ while ((indexL >= 0) && isDigit(arcName.charAt(indexL))) {
+ indexL--;
+ }
+ if (indexL < 0) {
+ return null;
+ }
+ indexL++;
+ StringBuilder buffer = new StringBuilder(len);
+ buffer.append(arcName, 0, indexL);
+ char[] digits = new char[indexR - indexL + 1];
+ arcName.getChars(indexL, indexR + 1, digits, 0);
+ indexR = digits.length - 1;
+ while ((indexR >= 0) && (++digits[indexR]) == '9' + 1) {
+ digits[indexR] = '0';
+ indexR--;
+ }
+ if (indexR < 0) {
+ buffer.append('1');
+ }
+ buffer.append(digits);
+ buffer.append(arcName, index, len);
+ return buffer.toString();
+ } else {
+ // .rar, .r00, .r01, ...
+ int len = arcName.length();
+ if ((len <= 4) || (arcName.charAt(len - 4) != '.')) {
+ return null;
+ }
+ StringBuilder buffer = new StringBuilder();
+ int off = len - 3;
+ buffer.append(arcName, 0, off);
+ if (!isDigit(arcName.charAt(off + 1))
+ || !isDigit(arcName.charAt(off + 2))) {
+ buffer.append("r00");
+ } else {
+ char[] ext = new char[3];
+ arcName.getChars(off, len, ext, 0);
+ int i = ext.length - 1;
+ while ((++ext[i]) == '9' + 1) {
+ ext[i] = '0';
+ i--;
+ }
+ buffer.append(ext);
+ }
+ return buffer.toString();
+ }
+ }
+
+ private static boolean isDigit(char c) {
+ return (c >= '0') && (c <= '9');
+ }
+}