diff --git a/folderopener/main.go b/folderopener/main.go new file mode 100644 index 0000000..39df026 --- /dev/null +++ b/folderopener/main.go @@ -0,0 +1,68 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os/exec" + "strings" +) + +func main() { + // Set up HTTP server + http.HandleFunc("/open", openFolderHandler) + + // Start server on port 8080 + fmt.Println("Folder opener server running on http://localhost:8080") + log.Fatal(http.ListenAndServe(":8080", nil)) +} + +func openFolderHandler(w http.ResponseWriter, r *http.Request) { + // Set CORS headers to allow requests from any origin + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type") + + // Handle preflight OPTIONS request + if r.Method == "OPTIONS" { + w.WriteHeader(http.StatusOK) + return + } + + // Only allow GET requests + if r.Method != "GET" { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + + // Get the folder path from the query parameter + folderPath := r.URL.Query().Get("path") + if folderPath == "" { + http.Error(w, "Missing path parameter", http.StatusBadRequest) + return + } + + // Log the request + fmt.Printf("Opening folder: %s\n", folderPath) + + // Open the folder in Windows Explorer + // The /select flag opens Explorer with the specified folder selected + cmd := exec.Command("explorer.exe", folderPath) + err := cmd.Start() + + if err != nil { + // If there was an error, try to clean the path and retry + cleanPath := strings.ReplaceAll(folderPath, "/", "\\") + cmd = exec.Command("explorer.exe", cleanPath) + err = cmd.Start() + + if err != nil { + http.Error(w, fmt.Sprintf("Error opening folder: %v", err), http.StatusInternalServerError) + return + } + } + + // Return success response + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, "Opening folder: %s", folderPath) +} diff --git a/folderopener/start_server.bat b/folderopener/start_server.bat new file mode 100644 index 0000000..32ac4a2 --- /dev/null +++ b/folderopener/start_server.bat @@ -0,0 +1,4 @@ +@echo off +echo Starting Folder Opener Server... +cd %~dp0 +go run main.go diff --git a/index.html b/index.html index 89c0010..f1b1824 100644 --- a/index.html +++ b/index.html @@ -132,7 +132,7 @@

Přístup k firemní řízené dokumentaci

- @@ -185,79 +185,20 @@ }); }); - // Function to open Windows Explorer with a specific path using multiple methods for compatibility + // Function to open Windows Explorer with a specific path using our integrated Go server function openWindowsFolder(path) { - // Method 1: Try using ActiveX (works in Internet Explorer) - if (window.ActiveXObject !== undefined) { - try { - const shell = new ActiveXObject("Shell.Application"); - shell.Explore(path); - console.log('Folder opened via ActiveX'); - return; - } catch (e) { - console.log("ActiveX failed or not supported: " + e.message); - } - } - - // Method 2: Try using the file:// protocol - try { - // Format the path for the file:// protocol - const formattedPath = path.replace(/\\/g, '/'); // Replace backslashes with forward slashes - const fileUrl = 'file:///' + formattedPath; - - // Open in a new window - const newWindow = window.open(fileUrl, '_blank'); - - // Check if window was blocked by popup blocker - if (newWindow) { - console.log('Folder opened via file:// protocol'); - return; - } else { - console.log('Popup was blocked'); - } - } catch (e) { - console.log("file:// protocol failed: " + e.message); - } - - // Method 3: Fallback to server-side approach if available - try { - fetch(`/open?path=${encodeURIComponent(path)}`) - .then(response => { - if (!response.ok) { - throw new Error('Server method failed'); - } - console.log('Folder opened via server'); - }) - .catch(error => { - // If all methods fail, show instructions to the user - console.error('All methods failed:', error); - showFolderInstructions(path); - }); - } catch (e) { - // If fetch isn't available or fails immediately - showFolderInstructions(path); - } - } - - // Show instructions to the user when all automatic methods fail - function showFolderInstructions(path) { - const instructions = ` -
-

Otevření složky Windows

-

Automatické otevření složky selhalo. Zkuste jeden z následujících postupů:

-
    -
  1. Zkopírujte tuto cestu:
  2. -
  3. Otevřete Průzkumník Windows (Win+E)
  4. -
  5. Vložte cestu do adresního řádku a stiskněte Enter
  6. -
- -
- `; - - const modal = document.createElement('div'); - modal.style.cssText = 'position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 1000;'; - modal.innerHTML = `
${instructions}
`; - document.body.appendChild(modal); + // Call our Go server to open the folder in Windows Explorer + fetch(`/open?path=${encodeURIComponent(path)}`) + .then(response => { + if (!response.ok) { + throw new Error('Failed to open folder'); + } + console.log('Folder opened successfully'); + }) + .catch(error => { + console.error('Error opening folder:', error); + alert('Could not open folder. Make sure the server is running.'); + }); }