Skip to content
Snippets Groups Projects
Commit 31e115fd authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

open zip files directly from ONELAB app

parent 2f3780e6
Branches
Tags
No related merge requests found
Showing
with 105 additions and 5 deletions
......@@ -94,7 +94,7 @@ opt(TETGEN_OLD "Enable older version of Tetgen" OFF)
opt(VORO3D "Enable Voro3D (for hex meshing, experimental)" ${DEFAULT})
opt(WRAP_JAVA "Enable generation of Java wrappers (experimental)" OFF)
opt(WRAP_PYTHON "Enable generation of Python wrappers" OFF)
opt(ZIPPER "Enable zip compression/decompression" OFF)
opt(ZIPPER "Enable Zip file compression/decompression" OFF)
set(GMSH_MAJOR_VERSION 2)
set(GMSH_MINOR_VERSION 10)
......
......@@ -19,6 +19,13 @@
#include "StringUtils.h"
#include "Context.h"
#if defined(HAVE_ZIPPER)
#include <iostream>
#include <fstream>
#include "zipper.h"
#include "unzipper.h"
#endif
#if defined(__APPLE__)
#include <sys/sysctl.h>
#include <mach-o/dyld.h>
......@@ -668,3 +675,39 @@ void RedirectIOToConsole()
std::ios::sync_with_stdio();
#endif
}
void UnzipFile(const std::string &fileName, const std::string &prependDir)
{
#if defined(HAVE_ZIPPER)
std::string dir = prependDir;
if(dir.size() && dir[dir.size()-1] != '/' && dir[dir.size()-1] != '\\')
dir.push_back('/');
ziputils::unzipper zipFile;
zipFile.open(fileName.c_str());
std::vector<std::string> dirnames = zipFile.getFolders();
for (std::vector<std::string>::const_iterator it = dirnames.begin();
it != dirnames.end(); it++){
std::string folder = dir + *it;
Msg::Info("Creating folder `%s'", folder.c_str());
CreatePath(folder);
}
std::vector<std::string> filenames = zipFile.getFilenames();
for (std::vector<std::string>::const_iterator it = filenames.begin();
it != filenames.end(); it++){
zipFile.openEntry(it->c_str());
std::string name = dir + *it;
Msg::Info("Extracting file `%s'", name.c_str());
std::ofstream ofs;
ofs.open(name.c_str());
if(ofs.is_open()){
zipFile >> ofs;
ofs.close();
}
else
Msg::Error("Could not create file `%s'", name.c_str());
}
#else
Msg::Error("Gmsh must be compiled with Zipper support to extract zip files");
#endif
}
......@@ -9,6 +9,7 @@
#include <string>
#include <stdio.h>
FILE *Fopen(const char* f, const char *mode);
const char *GetEnvironmentVar(const char *var);
void SetEnvironmentVar(const char *var, const char *val);
double GetTimeInSeconds();
......@@ -31,6 +32,6 @@ int SystemCallExe(const std::string &exe, const std::string &argsOrCommand,
bool blocking=false);
std::string GetCurrentWorkdir();
void RedirectIOToConsole();
FILE *Fopen(const char* f, const char *mode);
void UnzipFile(const std::string &fileName, const std::string &prependDir="");
#endif
......@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
2901F1211BB0086C004C328B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2901F1201BB0086C004C328B /* libz.dylib */; };
2907CCEC193DE6560011341A /* icon_onelab.png in Resources */ = {isa = PBXBuildFile; fileRef = 2907CCEB193DE6560011341A /* icon_onelab.png */; };
2988FF1E18E59558001435B6 /* libf2cblas.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2988FF1C18E59558001435B6 /* libf2cblas.a */; };
2988FF1F18E59558001435B6 /* libf2clapack.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2988FF1D18E59558001435B6 /* libf2clapack.a */; };
......@@ -51,6 +52,7 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2901F1201BB0086C004C328B /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
2907CCEB193DE6560011341A /* icon_onelab.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon_onelab.png; sourceTree = "<group>"; };
2988FF1C18E59558001435B6 /* libf2cblas.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libf2cblas.a; path = ../../frameworks_ios/libf2cblas.a; sourceTree = "<group>"; };
2988FF1D18E59558001435B6 /* libf2clapack.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libf2clapack.a; path = ../../frameworks_ios/libf2clapack.a; sourceTree = "<group>"; };
......@@ -122,6 +124,7 @@
files = (
2988FF1E18E59558001435B6 /* libf2cblas.a in Frameworks */,
2988FF1F18E59558001435B6 /* libf2clapack.a in Frameworks */,
2901F1211BB0086C004C328B /* libz.dylib in Frameworks */,
9C2C3A20187FDF9900E87F78 /* libstdc++.dylib in Frameworks */,
9C2C3A1E187FDF9200E87F78 /* libc++.dylib in Frameworks */,
9C96089D1712C7F600E1D4A0 /* QuartzCore.framework in Frameworks */,
......@@ -170,6 +173,7 @@
9C9608391712C16300E1D4A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
2901F1201BB0086C004C328B /* libz.dylib */,
9C1B9911194F4E0400507EFD /* slepc.framework */,
2988FF1C18E59558001435B6 /* libf2cblas.a */,
2988FF1D18E59558001435B6 /* libf2clapack.a */,
......
......@@ -28,6 +28,17 @@
else{
NSLog(@"Leaving models as-is (version %@)", prefsv);
}
// Check if there is a model to open
NSURL* url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
[Utils openModelURL:url];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
[Utils openModelURL:url];
return YES;
}
......
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad.png

5.44 KiB | W: | H:

contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad.png

2.26 KiB | W: | H:

contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad.png
  • 2-up
  • Swipe
  • Onion skin
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad_retina.png

7.04 KiB | W: | H:

contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad_retina.png

6.38 KiB | W: | H:

contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad_retina.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad_retina.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad_retina.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_ipad_retina.png
  • 2-up
  • Swipe
  • Onion skin
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_iphone_retina.png

6.39 KiB | W: | H:

contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_iphone_retina.png

4.26 KiB | W: | H:

contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_iphone_retina.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_iphone_retina.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_iphone_retina.png
contrib/mobile/iOS/Onelab/Images.xcassets/AppIcon.appiconset/icon_app_iphone_retina.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -68,5 +68,27 @@
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Zip archive</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSItemContentTypes</key>
<array>
<string>com.pkware.zip-archive</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>zip</string>
<key>public.mime-type</key>
<string>application/zip</string>
</dict>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
</array>
</dict>
</plist>
......@@ -4,8 +4,7 @@
+ (NSString *) getApplicationDocumentsDirectory;
+ (void) copyRes;
+ (void) openModelURL:(NSURL*)url;
+ (id) traverseResponderChainForUIViewController:(UIView *)v;
@end
#import "Utils.h"
#include <gmsh/OS.h>
@implementation Utils
+ (NSString *) getApplicationDocumentsDirectory
......@@ -28,6 +30,24 @@
}
}
+ (void) openModelURL:(NSURL*)url
{
if(!url) return;
NSString *filepath = [url path];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *extension = [filepath pathExtension];
if([extension isEqualToString:@"zip"] || [extension isEqualToString:@"ZIP"]){
NSLog(@"Unzipping %@", filepath);
UnzipFile([filepath UTF8String], [docPath UTF8String]);
NSLog(@"Removing %@", filepath);
[[NSFileManager defaultManager] removeItemAtPath:filepath error:nil];
}
else{
NSLog(@"Unknown model file extension: only .zip files are currently accepted");
}
}
+ (UIViewController *) traverseResponderChainForUIViewController:(UIView *)v
{
id nextResponder = [v nextResponder];
......
......@@ -162,7 +162,7 @@ namespace ziputils
}
}
// Dump the currently open entry to the uotput stream
// Dump the currently open entry to the output stream
unzipper& unzipper::operator>>( std::ostream& os )
{
if ( isOpenEntry() )
......
No preview for this file type
utils/icons/gmsh_mobile_1024x1024.png

51.5 KiB | W: | H:

utils/icons/gmsh_mobile_1024x1024.png

467 KiB | W: | H:

utils/icons/gmsh_mobile_1024x1024.png
utils/icons/gmsh_mobile_1024x1024.png
utils/icons/gmsh_mobile_1024x1024.png
utils/icons/gmsh_mobile_1024x1024.png
  • 2-up
  • Swipe
  • Onion skin
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment