Fixed major issues
[ede] / explorer / src / Explorer.ec
index da5dce5..6b9f872 100644 (file)
@@ -14,30 +14,45 @@ import "ExplorerWindow"
 #endif
 */
 
+DummyFileSystemCacheWindow dw;// { size = { 200, 200 } };
+
+
 class Explorer : GuiApplication
 {
    //skin = "Acovel";
 
    bool Init()
    {
-      QuickPathTool goPath { };
+      int c, argc = this.argc;
+      int openArgsStartAt = 0;
       QuickPathTool searchPath { };
       char * findWhat = null;
+      Array<String> comparedPaths = null;
 
       SetLoggingMode(debug, null);
 
+      for(c = 1; c < argc; c++)
+      {
+         if(!strcmp(argv[c], "#"))
+         {
+            argc = c;
+            break;
+         }
+      }
+
       if(argc > 1)
       {
          if(!strcmpi(argv[1], "go") && argc > 2)
-            goPath = argv[2];
+            openArgsStartAt = 2;
          else if(!strcmpi(argv[1], "find") && argc > 2)
          {
-            char * unquoted;
             if(argv[2][0] == '\"')
-               StripQuotes(argv[2], unquoted);
+            {
+               findWhat = new char[strlen(argv[2])+1];
+               StripQuotes(argv[2], findWhat);
+            }
             else
-               unquoted = argv[2];
-            findWhat = CopyString(unquoted);
+               findWhat = CopyString(argv[2]);
             if(argc > 3)
             {
                if(!strcmpi(argv[3], "in") && argc > 4)
@@ -47,23 +62,54 @@ class Explorer : GuiApplication
             }
             else
                searchPath = ""; // same
-         } 
+         }
          else if(!strcmpi(argv[1], "search") && argc > 2)
             searchPath = argv[2];
+         else if(!strcmpi(argv[1], "compare") && argc > 2)
+         {
+            QuickPathTool goPath { };
+            comparedPaths = { };
+            if(argc == 3)
+            {
+               goPath = ""; // current dir
+               comparedPaths.Add(CopyString((const char *)goPath));  // TODO: Review whether this gets freed?
+            }
+            for(c = 2; c < argc; c++)
+            {
+               const char * s;
+               goPath = argv[c];
+               s = goPath;
+               if(s)
+                  comparedPaths.Add(CopyString(s));
+            }
+            if(comparedPaths.count < 2)
+               PrintLn("compare requires at least 2 existing directories to work.");
+         }
          else if(!strcmpi(argv[1], "image") && argc > 2)
             ;
          else if(!strcmpi(argv[1], "slides") && argc > 2)
             ;
          else
-            goPath = argv[1];
+            openArgsStartAt = 1;
       }
       else
-         goPath = "";
-      if(goPath)
+         openArgsStartAt = -1;
+
+      if(openArgsStartAt)
       {
-         ExplorerWindow explorerWnd { };
-         explorerWnd.Create();
-         explorerWnd.view.path = goPath;
+         QuickPathTool goPath { };
+         for(c = openArgsStartAt; c < argc; c++)
+         {
+            goPath = openArgsStartAt == -1 ? "" : argv[c];
+            if(goPath)
+            {
+               ExplorerWindow explorerWnd { };
+               explorerWnd.Create();
+               explorerWnd.location = goPath;//explorerWnd.GoTo(goPath, false, false);
+            }
+            if(openArgsStartAt == -1)
+               break;
+         }
       }
       else if(searchPath)
       {
@@ -71,6 +117,21 @@ class Explorer : GuiApplication
          explorerWnd.Create();
          //explorerWnd.SearchLocation(searchPath);
       }
+      else if(comparedPaths && comparedPaths.count > 1)
+      {
+         // compare /s1/library/dummies /s1/library/movies /s1/oldlib/movies "/home/redj/.gvfs/d02-2tb on kimji/library/movies"
+         ExplorerWindow explorerWnd { };
+         explorerWnd.Create();
+         explorerWnd.view.columnsCompareStyle = true;
+         explorerWnd.comparedLocations = comparedPaths;
+         comparedPaths = null;
+         // delete comparedPaths;
+      }
+      if(comparedPaths)
+      {
+         comparedPaths.Free();
+         delete comparedPaths;
+      }
       return true;
    }
 }
@@ -79,17 +140,20 @@ struct QuickPathTool
 {
    char path[MAX_LOCATION];
 
-   property char * 
+   property const char *
    {
       set
       {
-         char * unquoted;
          GetWorkingDir(path, MAX_LOCATION);
          if(value[0] == '\"')
+         {
+            char * unquoted = new char[strlen(value) + 1];
             StripQuotes(value, unquoted);
+            PathCat(path, unquoted);
+            delete unquoted;
+         }
          else
-            unquoted = value;
-         PathCat(path, unquoted);
+            PathCat(path, value);
          if(!FileExists(path))
          {
             // this incomplete functionality is not quite at it's place in this class
@@ -100,7 +164,7 @@ struct QuickPathTool
                StripLastDirectory(path, path);
                if(FileExists(path))
                {
-                  // TODO: message location does not exist, 
+                  // TODO: message location does not exist,
                   //       this higher location exists though
                   //       go there?
                   break;
@@ -108,14 +172,14 @@ struct QuickPathTool
             }
             if(!len)
             {
-               // TODO: message location does not exist, 
+               // TODO: message location does not exist,
                //       unable to select alternate location
             }
             path[0] = '\0';
             delete original;
          }
       }
-      get { return path[0] ? path : null; }
+      get { return path[0] ? (char*)path : null; }
    }
    property bool { get { return path[0] != '\0'; } }
 };