FireBirdLib - Topfield TMS PVR TAP Programming Library
HDD_UnrecycleSF.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include <string.h>
3#include "libFireBird.h"
4#include "FBLib_hdd.h"
5
6bool HDD_UnrecycleSF(const char *FileName)
7{
9
10 tFileInUse FileInUse;
11 char AbsPath[FBLIB_DIR_SIZE], AbsFileName[MAX_FILE_NAME_SIZE + 1], *Slash;
12 char OrigPath[FBLIB_DIR_SIZE];
13 char CreateOrigPath[FBLIB_DIR_SIZE], cmd[512];
14 tinfBlock infBlock;
15 bool ret;
16
17 ret = FALSE;
18 if(FileName && *FileName && HDD_Exist(FileName))
19 {
20 FileInUse = HDD_isFileInUse(FileName);
21 switch(FileInUse)
22 {
23 case FIU_No: break;
24
25 //Do not differentiate because of a firmware bug
26 case FIU_Playback:
27 case FIU_PlayMP3:
28 {
29 TAP_Hdd_StopTs();
30 TAP_Hdd_StopMp3();
31 break;
32 }
33
34 case FIU_RecSlot1: TAP_Hdd_StopRecord(0); break;
35 case FIU_RecSlot2: TAP_Hdd_StopRecord(1); break;
36 case FIU_RecSlot3: TAP_Hdd_StopRecord(2); break;
37 case FIU_RecSlot4: TAP_Hdd_StopRecord(3); break;
38 }
39
40 ConvertPathType(FileName, AbsPath, PF_FullLinuxPath);
41 if(*AbsPath)
42 {
43 //Ursprünglichen Pfad auslesen
44 if(HDD_InfBlockGet(AbsPath, &infBlock))
45 {
46 if(infBlock.RecoverPath[strlen(infBlock.RecoverPath) - 1] != '/') strcat(infBlock.RecoverPath, "/");
47 ConvertPathType(infBlock.RecoverPath, OrigPath, PF_LinuxPathOnly);
48
49 //Attribute löschen
50 infBlock.RecycleDate = 0;
51 infBlock.RecoverPath[0] ='\0';
52 HDD_InfBlockSet(AbsPath, &infBlock);
53
54 //Pfad neu anlegen für den Fall das er nicht mehr existiert
55 strcpy(CreateOrigPath, OrigPath);
56 StrReplace(CreateOrigPath, "\"", "\\\"");
57 StrReplace(CreateOrigPath, "$", "\\$");
58 TAP_SPrint(cmd, "mkdir -p \"%s\"", CreateOrigPath);
59 system(cmd);
60
61 Slash = strrchr(AbsPath, '/');
62 strcpy(AbsFileName, Slash + 1);
63 Slash[1] = '\0';
64
65 ret = HDD_Move(AbsFileName, AbsPath, OrigPath);
66 }
67 else
68 {
69 //No inf available, move to the root directory
70 //Use DataFiles as root for the internal disk
71 HDD_FindMountPoint(AbsPath, OrigPath);
72 if(strcmp("/mnt/hd/", OrigPath) == 0) strcpy(OrigPath, "/mnt/hd/DataFiles/");
73
74 Slash = strrchr(AbsPath, '/');
75 strcpy(AbsFileName, Slash + 1);
76 Slash[1] = '\0';
77
78 ret = HDD_Move(AbsFileName, AbsPath, OrigPath);
79 }
80 }
81 }
82
83 TRACEEXIT();
84 return ret;
85}
void ConvertPathType(const char *Source, char *Dest, tPathFormat DestFormat)
bool HDD_Exist(const char *FileName)
Definition: HDD_Exist.c:4
bool HDD_FindMountPoint(const char *File, char *MountPoint)
bool HDD_InfBlockGet(const char *RecPath, tinfBlock *infBlock)
bool HDD_InfBlockSet(const char *RecPath, tinfBlock *infBlock)
bool HDD_Move(const char *FileName, const char *FromDir, const char *ToDir)
Definition: HDD_Move.c:7
bool HDD_UnrecycleSF(const char *FileName)
tFileInUse HDD_isFileInUse(const char *FileName)
bool StrReplace(char *String, const char *Find, const char *Replace)
Definition: StrReplace.c:4
#define FBLIB_DIR_SIZE
Definition: libFireBird.h:1871
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
tFileInUse
Definition: libFireBird.h:1901
@ FIU_PlayMP3
Definition: libFireBird.h:1904
@ FIU_RecSlot4
Definition: libFireBird.h:1908
@ FIU_RecSlot3
Definition: libFireBird.h:1907
@ FIU_RecSlot2
Definition: libFireBird.h:1906
@ FIU_RecSlot1
Definition: libFireBird.h:1905
@ FIU_No
Definition: libFireBird.h:1902
@ FIU_Playback
Definition: libFireBird.h:1903
@ PF_LinuxPathOnly
Definition: libFireBird.h:1924
@ PF_FullLinuxPath
Definition: libFireBird.h:1926
char RecoverPath[FBLIB_DIR_SIZE]
Definition: libFireBird.h:1941
dword RecycleDate
Definition: libFireBird.h:1940