]> git.vomp.tv Git - jsonserver.git/commitdiff
Switch recrename to use cRecording::ChangeName()
authorChris Tallon <chris@vomp.tv>
Tue, 10 May 2022 16:17:23 +0000 (17:17 +0100)
committerChris Tallon <chris@vomp.tv>
Tue, 10 May 2022 16:17:23 +0000 (17:17 +0100)
vdrclient.c
vdrclient.h

index 06f0fba92603f6968cedcf3761948f049b40cd15..8a1d8b1c1b66d5c1819308c1adc7015d292f6884 100644 (file)
@@ -826,197 +826,45 @@ bool VDRClient::recdel(PFMap& postFields, Json::Value& js) // RETHROWS
   return true;
 }
 
-void VDRClient::pathsForRecordingName(const cRecordings* Recordings, const std::string& recordingName,
-                           std::string& dirNameSingleDate,
-                           std::string& dirNameSingleTitle,
-                           std::string& dirNameSingleFolder,
-                           std::string& dirNameFullPathTitle,
-                           std::string& dirNameFullPathDate)  // throws int
-{
-  const char* t;
-  {
-    const cRecording* recordingObj = Recordings->GetByName(recordingName.c_str());
-    if (!recordingObj) throw 2;
-    t = recordingObj->FileName();
-
-    cRecordControl *rc = cRecordControls::GetRecordControl(recordingObj->FileName());
-    if (rc) throw 3;
-
-    logger->debug("paths: recording: {}", recordingObj->Name());
-  } // unlock recordings
-
-  logger->debug("paths: recording: {}", t);
-
-  dirNameFullPathDate = t;
-  int k, j, m;
-
-  // Find the datedirname
-  for(k = strlen(t) - 1; k >= 0; k--)
-  {
-    if (t[k] == '/')
-    {
-      logger->debug("recmoverename: l1: {}", strlen(&t[k+1]) + 1);
-      dirNameSingleDate.assign(&t[k+1], strlen(t) - k - 1);
-      logger->debug("paths: dirNameSingleDate: '{}'", dirNameSingleDate);
-      break;
-    }
-  }
-
-  // Find the titledirname
-
-  for(j = k-1; j >= 0; j--)
-  {
-    if (t[j] == '/')
-    {
-      logger->debug("recmoverename: l2: {}", k - j);
-      dirNameSingleTitle.assign(&t[j+1], k - j - 1);
-      logger->debug("paths: dirNameSingleTitle: '{}'", dirNameSingleTitle);
-      break;
-    }
-  }
-
-  // Find the foldername
-
-  const char* vidDirStr = cVideoDirectory::Name();
-  int vidDirStrLen = strlen(vidDirStr);
-
-  logger->debug("recmoverename: j = {}, strlenvd = {}", j, vidDirStrLen);
-  if (j > vidDirStrLen) // Rec is in a subfolder now
-  {
-    for(m = j-1; m >= 0; m--)
-    {
-      if (t[m] == '/')
-      {
-        logger->debug("recmoverename: l3: {}", j - m);
-        dirNameSingleFolder.assign(&t[m+1], j - m - 1);
-        logger->debug("paths: dirNameSingleFolder: '{}'", dirNameSingleFolder);
-        break;
-      }
-    }
-  }
-
-  dirNameFullPathTitle.assign(t, k);
-  logger->debug("paths: dirNameFullPathTitle: '{}'", dirNameFullPathTitle);
-}
-
 bool VDRClient::recrename(PFMap& postFields, Json::Value& js) // RETHROWS
 {
   logger->debug("recrename");
 
   std::string fileNameToAffect = getVarString(postFields, "filename");
-  std::string requestedNewStr = getVarString(postFields, "newname");
-
-  std::string dirNameSingleDate;
-  std::string dirNameSingleTitle;
-  std::string dirNameSingleFolder;
-  std::string dirNameFullPathTitle;
-  std::string dirNameFullPathDate;
-
-#warning Switch this to Recording->ChangeName ?
+  std::string requestedNewName = getVarString(postFields, "newname");
 
   try
   {
     LOCK_RECORDINGS_WRITE;
+    cRecording* recordingObj = Recordings->GetByName(fileNameToAffect.c_str());
+    if (!recordingObj) throw 2;
 
-    pathsForRecordingName(Recordings,
-                          fileNameToAffect, dirNameSingleDate,
-                          dirNameSingleTitle, dirNameSingleFolder,
-                          dirNameFullPathTitle, dirNameFullPathDate);
-
-    char* requestedNewSingleTitle = (char*)malloc(requestedNewStr.size() + 1);
-    strcpy(requestedNewSingleTitle, requestedNewStr.c_str());
-    logger->debug("recmoverename: to: {}", requestedNewSingleTitle);
-
-    requestedNewSingleTitle = ExchangeChars(requestedNewSingleTitle, true);
-    if (!strlen(requestedNewSingleTitle)) throw 9;
-    logger->debug("recmoverename: EC: {}", requestedNewSingleTitle);
-
-    const char* vidDirStr = cVideoDirectory::Name();
-    logger->debug("recmoverename: viddir: {}", vidDirStr);
-
-    // Could be a new path - construct that first and test
-
-    std::string newDirNameFullPathTitle = vidDirStr;
-    newDirNameFullPathTitle.append("/");
-
-    if (!dirNameSingleFolder.empty())
-    {
-      newDirNameFullPathTitle.append(dirNameSingleFolder);
-      newDirNameFullPathTitle.append("/");
-    }
-
-    newDirNameFullPathTitle.append(requestedNewSingleTitle);
-    free(requestedNewSingleTitle);
-
-    logger->debug("recrename: NPT2: {}", newDirNameFullPathTitle);
-
-    struct stat dstat;
-    int statret = stat(newDirNameFullPathTitle.c_str(), &dstat);
-    if ((statret == -1) && (errno == ENOENT)) // Dir does not exist
-    {
-      logger->debug("recrename: new path does not exist (1)");
-      int mkdirret = mkdir(newDirNameFullPathTitle.c_str(), 0755);
-      if (mkdirret != 0) throw 4;
-    }
-    else if ((statret == 0) && (! (dstat.st_mode && S_IFDIR)))
-    {
-      // Something exists but it's not a dir
-      throw 5;
-    }
-
-    // New path now created or was there already
-
-    std::string newDirNameFullPathDate = newDirNameFullPathTitle + "/";
-    newDirNameFullPathDate.append(dirNameSingleDate);
+    std::string newName(recordingObj->Folder());
+    logger->debug("newname after folder copy: #{}#");
+    if (newName.length()) newName += FOLDERDELIMCHAR;
+    newName += requestedNewName;
 
-    logger->debug("recrename: doing rename '{}' '{}'", dirNameFullPathDate, newDirNameFullPathDate);
-    if (rename(dirNameFullPathDate.c_str(), newDirNameFullPathDate.c_str()) != 0) throw 8;
+    logger->debug("RM2 NEWLOC:  #{}#", newName);
 
-    // Success. Test for remove old dir containter
-    rmdir(dirNameFullPathTitle.c_str()); // can't do anything about a fail result at this point.
+    bool moveSuccess = recordingObj->ChangeName(newName.c_str());
 
-    Recordings->Update();
-    js["Result"] = true;
-    js["NewRecordingFileName"] = newDirNameFullPathDate;
+    js["Result"] = moveSuccess;
+    js["NewRecordingFileName"] = recordingObj->FileName();
+  }
+  catch (BadParamException& e)
+  {
+    js["Result"] = false;
+    logger->error("recmove: Bad parameters");
+    js["Error"] = "Bad request parameters";
   }
   catch (int e)
   {
     js["Result"] = false;
-    if (e == 1)
-    {
-      logger->error("recrename: Bad parameters");
-      js["Error"] = "Bad request parameters";
-    }
-    else if (e == 2)
+    if (e == 2)
     {
-      logger->error("recrename: Could not find recording to move");
+      logger->error("recmove: Could not find recording to move");
       js["Error"] = "Bad filename";
     }
-    else if (e == 3)
-    {
-      logger->error("recrename: Could not move recording, it is still recording");
-      js["Error"] = "Cannot move recording in progress";
-    }
-    else if (e == 4)
-    {
-      logger->error("recrename: Failed to make new dir (1)");
-      js["Error"] = "Failed to create new directory (1)";
-    }
-    else if (e == 5)
-    {
-      logger->error("recrename: Something already exists? (1)");
-      js["Error"] = "Something already exists at the new path (1)";
-    }
-    else if (e == 8)
-    {
-      logger->error("recrename: Rename failed");
-      js["Error"] = "Rename failed";
-    }
-    else if (e == 9)
-    {
-      logger->error("recrename: ExchangeChars lost our string");
-      js["Error"] = "Rename failed";
-    }
   }
 
   return true;
index bf7e3fdb4c6ab151398cc7467fe45afa189128c2..926f107b28a84466b4a48e43b77359350f471fa7 100644 (file)
@@ -68,14 +68,6 @@ class VDRClient
     const cEvent* getEvent(const cChannels* Channels, const cSchedules* Schedules,
                            Json::Value& js, int channelNumber, int eventID, int aroundTime);
 
-    void pathsForRecordingName(const cRecordings* Recordings,
-                           const std::string& recordingName,
-                           std::string& dirNameSingleDate,
-                           std::string& dirNameSingleTitle,
-                           std::string& dirNameSingleFolder,
-                           std::string& dirNameFullPathTitle,
-                           std::string& dirNameFullPathDate);  // throws int
-
     int getVarInt(PFMap& postFields, const char* paramName); // THROWS
     std::string getVarString(PFMap& postFields, const char* paramName, bool emptyOk = false); // THROWS