summaryrefslogtreecommitdiffstats
path: root/logic
diff options
context:
space:
mode:
Diffstat (limited to 'logic')
-rw-r--r--logic/assets/Assets.cpp14
-rw-r--r--logic/assets/Assets.h16
-rw-r--r--logic/assets/AssetsIndex.cpp20
-rw-r--r--logic/assets/AssetsIndex.h39
-rw-r--r--logic/assets/AssetsUtils.cpp115
-rw-r--r--logic/assets/AssetsUtils.h21
6 files changed, 225 insertions, 0 deletions
diff --git a/logic/assets/Assets.cpp b/logic/assets/Assets.cpp
new file mode 100644
index 00000000..a0764674
--- /dev/null
+++ b/logic/assets/Assets.cpp
@@ -0,0 +1,14 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
diff --git a/logic/assets/Assets.h b/logic/assets/Assets.h
new file mode 100644
index 00000000..09998ff8
--- /dev/null
+++ b/logic/assets/Assets.h
@@ -0,0 +1,16 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
diff --git a/logic/assets/AssetsIndex.cpp b/logic/assets/AssetsIndex.cpp
new file mode 100644
index 00000000..5b401a77
--- /dev/null
+++ b/logic/assets/AssetsIndex.cpp
@@ -0,0 +1,20 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AssetsIndex.h"
+
+AssetObject::AssetObject(QString hash, qint64 size) : hash(hash), size(size)
+{
+}
diff --git a/logic/assets/AssetsIndex.h b/logic/assets/AssetsIndex.h
new file mode 100644
index 00000000..019265f9
--- /dev/null
+++ b/logic/assets/AssetsIndex.h
@@ -0,0 +1,39 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <QString>
+#include <QMap>
+
+class AssetObject;
+
+class AssetsIndex
+{
+public:
+ QMap<QString, AssetObject> objects;
+ bool isVirtual;
+};
+
+class AssetObject
+{
+public:
+ AssetObject(QString hash, qint64 size);
+ bool equals(AssetObject* other);
+ QString getHashCode();
+
+ QString hash;
+ qint64 size;
+};
diff --git a/logic/assets/AssetsUtils.cpp b/logic/assets/AssetsUtils.cpp
new file mode 100644
index 00000000..3589161a
--- /dev/null
+++ b/logic/assets/AssetsUtils.cpp
@@ -0,0 +1,115 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <QDir>
+#include <QDirIterator>
+#include <QCryptographicHash>
+
+#include "AssetsUtils.h"
+#include "MultiMC.h"
+
+namespace AssetsUtils
+{
+void migrateOldAssets()
+{
+ QDir assets_dir("assets");
+ if(!assets_dir.exists()) return;
+ assets_dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
+ int base_length = assets_dir.path().length();
+
+ QList<QString> blacklist = {"indexes", "objects", "virtual"};
+
+ if(!assets_dir.exists("objects")) assets_dir.mkdir("objects");
+ QDir objects_dir("assets/objects");
+
+ QDirIterator iterator(assets_dir, QDirIterator::Subdirectories);
+ int successes = 0;
+ int failures = 0;
+ while (iterator.hasNext()) {
+ QString currentDir = iterator.next();
+ currentDir = currentDir.remove(0, base_length+1);
+
+ bool ignore = false;
+ for(QString blacklisted : blacklist)
+ {
+ if(currentDir.startsWith(blacklisted)) ignore = true;
+ }
+
+ if (!iterator.fileInfo().isDir() && !ignore) {
+ QString filename = iterator.filePath();
+
+ QFile input(filename);
+ input.open(QIODevice::ReadOnly | QIODevice::WriteOnly);
+ QString sha1sum = QCryptographicHash::hash(input.readAll(), QCryptographicHash::Sha1)
+ .toHex()
+ .constData();
+
+ QString object_name = filename.remove(0, base_length+1);
+ QLOG_DEBUG() << "Processing" << object_name << ":" << sha1sum << input.size();
+
+ QString object_tlk = sha1sum.left(2);
+ QString object_tlk_dir = objects_dir.path() + "/" + object_tlk;
+
+ QDir tlk_dir(object_tlk_dir);
+ if(!tlk_dir.exists()) objects_dir.mkdir(object_tlk);
+
+ QString new_filename = tlk_dir.path() + "/" + sha1sum;
+ QFile new_object(new_filename);
+ if(!new_object.exists())
+ {
+ bool rename_success = input.rename(new_filename);
+ QLOG_DEBUG() << " Doesn't exist, copying to" << new_filename << ":" << QString::number(rename_success);
+ if(rename_success) successes++;
+ else failures++;
+ }
+ else
+ {
+ input.remove();
+ QLOG_DEBUG() << " Already exists, deleting original and not copying.";
+ }
+ }
+ }
+
+ if(successes + failures == 0) {
+ QLOG_DEBUG() << "No legacy assets needed importing.";
+ }
+ else
+ {
+ QLOG_DEBUG() << "Finished copying legacy assets:" << successes << "successes and" << failures << "failures.";
+
+ QDirIterator cleanup_iterator(assets_dir);
+
+ while (cleanup_iterator.hasNext()) {
+ QString currentDir = cleanup_iterator.next();
+ currentDir = currentDir.remove(0, base_length+1);
+
+ bool ignore = false;
+ for(QString blacklisted : blacklist)
+ {
+ if(currentDir.startsWith(blacklisted)) ignore = true;
+ }
+
+ if (cleanup_iterator.fileInfo().isDir() && !ignore) {
+ QString path = cleanup_iterator.filePath();
+ QDir folder(path);
+
+ QLOG_DEBUG() << "Cleaning up legacy assets folder:" << path;
+
+ folder.removeRecursively();
+ }
+ }
+ }
+}
+}
diff --git a/logic/assets/AssetsUtils.h b/logic/assets/AssetsUtils.h
new file mode 100644
index 00000000..80b0d676
--- /dev/null
+++ b/logic/assets/AssetsUtils.h
@@ -0,0 +1,21 @@
+/* Copyright 2013 MultiMC Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+namespace AssetsUtils
+{
+void migrateOldAssets();
+}