Start work on rewriting the TV renamer in Go
authorRobert Sesek <rsesek@bluestatic.org>
Sat, 16 Apr 2011 17:42:06 +0000 (13:42 -0400)
committerRobert Sesek <rsesek@bluestatic.org>
Sat, 16 Apr 2011 17:42:06 +0000 (13:42 -0400)
build.py
src/paths.go
src/server.go
src/tv_rename.go [new file with mode: 0644]

index 18b0346037f106953f4216d15f8d553780a81678..df3fcefeebaa155d6f092aa4a48d42918c461e08 100755 (executable)
--- a/build.py
+++ b/build.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python2.5
 #
 # Armadillo File Manager
-# Copyright (c) 2010, Robert Sesek <http://www.bluestatic.org>
+# Copyright (c) 2010-2011, Robert Sesek <http://www.bluestatic.org>
 # 
 # This program is free software: you can redistribute it and/or modify it under
 # the terms of the GNU General Public License as published by the Free Software
@@ -32,6 +32,7 @@ VERSION_FILE = os.path.join(FE_PATH, 'version.js.proto')
 SOURCES = [
   'config.go',
   'paths.go',
+  'tv_rename.go',
   'server.go',
   'main.go'
 ]
index a538116139b1cecd32005f9d3bb2e9f4be1c67b0..27b92c10d30f6021ef6539e2a5f8bd4a71717cc8 100644 (file)
@@ -1,6 +1,6 @@
 //
 // Armadillo File Manager
-// Copyright (c) 2010, Robert Sesek <http://www.bluestatic.org>
+// Copyright (c) 2010-2011, Robert Sesek <http://www.bluestatic.org>
 // 
 // This program is free software: you can redistribute it and/or modify it under
 // the terms of the GNU General Public License as published by the Free Software
@@ -41,6 +41,16 @@ func checkInJail(the_path string) bool {
   return true
 }
 
+// Verifies that the path is in the jail and returns the cleaned-up path. Will
+// return nil on error.
+func Verify(thePath string) *string {
+  fullPath := canonicalizePath(thePath)
+  if !checkInJail(fullPath) {
+    return nil
+  }
+  return &fullPath
+}
+
 func List(the_path string) (files vector.StringVector, err os.Error) {
   full_path := canonicalizePath(the_path)
   if !checkInJail(full_path) {
index 07674a00088a55cc597753631cfcbe0b45583f6c..72ade34e16445e590188954e75e90b25545238c1 100644 (file)
@@ -20,6 +20,7 @@ import (
   "strings"
   "./config"
   "./paths"
+  "./tv_rename"
 )
 
 var dir, file = path.Split(path.Clean(os.Getenv("_")))
@@ -71,7 +72,19 @@ func serviceHandler(response http.ResponseWriter, request *http.Request) {
         }
         okResponse(response, data)
       }
+    case "tv_rename":
+      newPath, err := tv_rename.RenameEpisode(request.FormValue("path"))
+      if err != nil {
+        errorResponse(response, err.String())
+      } else {
+        data := map[string] interface{} {
+          "path" : *newPath,
+          "error" : 0,
+        }
+        okResponse(response, data)
+      }
     default:
+      fmt.Printf("Invalid action: '%s'\n", request.FormValue("action"))
       errorResponse(response, "Unhandled action")
   }  
 }
diff --git a/src/tv_rename.go b/src/tv_rename.go
new file mode 100644 (file)
index 0000000..c27de00
--- /dev/null
@@ -0,0 +1,36 @@
+//
+// Armadillo File Manager
+// Copyright (c) 2011, Robert Sesek <http://www.bluestatic.org>
+// 
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free Software
+// Foundation, either version 3 of the License, or any later version.
+//
+
+package tv_rename
+
+import (
+  "fmt"
+  "os"
+  "./paths"
+)
+
+// Takes a full file path and renames the last path component as if it were a
+// TV episode. This performs the actual rename as well.
+func RenameEpisode(inPath string) (*string, os.Error) {
+  // Make sure a path was given.
+  if len(inPath) < 1 {
+    return nil, os.NewError("Invalid path")
+  }
+  // Check that it's inside the jail.
+  var path *string = paths.Verify(inPath)
+  if path == nil {
+    return nil, os.NewError("Path is invalid or outside of jail")
+  }
+  // Make sure that the file exists.
+  fileInfo, err := os.Stat(*path)
+  if err != nil {
+    return nil, err
+  }
+  return path, nil
+}