OpenShot Audio Library | OpenShotAudio
1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
juce_TemporaryFile.cpp
1
/*
2
==============================================================================
3
4
This file is part of the JUCE library.
5
Copyright (c) 2022 - Raw Material Software Limited
6
7
JUCE is an open source library subject to commercial or open-source
8
licensing.
9
10
The code included in this file is provided under the terms of the ISC license
11
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12
To use, copy, modify, and/or distribute this software for any purpose with or
13
without fee is hereby granted provided that the above copyright notice and
14
this permission notice appear in all copies.
15
16
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18
DISCLAIMED.
19
20
==============================================================================
21
*/
22
23
namespace
juce
24
{
25
26
// Using Random::getSystemRandom() can be a bit dangerous in multithreaded contexts!
27
class
LockedRandom
28
{
29
public
:
30
int
nextInt()
31
{
32
const
ScopedLock lock (mutex);
33
return
random.nextInt();
34
}
35
36
private
:
37
CriticalSection mutex;
38
Random random;
39
};
40
41
static
LockedRandom lockedRandom;
42
43
static
File
createTempFile (
const
File
& parentDirectory,
String
name,
44
const
String
& suffix,
int
optionFlags)
45
{
46
if
((optionFlags &
TemporaryFile::useHiddenFile
) != 0)
47
name =
"."
+ name;
48
49
return
parentDirectory.
getNonexistentChildFile
(name, suffix, (optionFlags &
TemporaryFile::putNumbersInBrackets
) != 0);
50
}
51
52
TemporaryFile::TemporaryFile
(
const
String
& suffix,
const
int
optionFlags)
53
: temporaryFile (createTempFile (
File
::getSpecialLocation (
File
::tempDirectory),
54
"temp_"
+
String
::toHexString (lockedRandom.nextInt()),
55
suffix, optionFlags)),
56
targetFile()
57
{
58
}
59
60
TemporaryFile::TemporaryFile
(
const
File
& target,
const
int
optionFlags)
61
: temporaryFile (createTempFile (target.getParentDirectory(),
62
target.getFileNameWithoutExtension()
63
+
"_temp"
+
String
::toHexString (lockedRandom.nextInt()),
64
target.getFileExtension(), optionFlags)),
65
targetFile (target)
66
{
67
// If you use this constructor, you need to give it a valid target file!
68
jassert (targetFile !=
File
());
69
}
70
71
TemporaryFile::TemporaryFile
(
const
File
& target,
const
File
& temporary)
72
: temporaryFile (temporary), targetFile (target)
73
{
74
}
75
76
TemporaryFile::~TemporaryFile
()
77
{
78
if
(!
deleteTemporaryFile
())
79
{
80
/* Failed to delete our temporary file! The most likely reason for this would be
81
that you've not closed an output stream that was being used to write to file.
82
83
If you find that something beyond your control is changing permissions on
84
your temporary files and preventing them from being deleted, you may want to
85
call TemporaryFile::deleteTemporaryFile() to detect those error cases and
86
handle them appropriately.
87
*/
88
jassertfalse;
89
}
90
}
91
92
//==============================================================================
93
bool
TemporaryFile::overwriteTargetFileWithTemporary
()
const
94
{
95
// This method only works if you created this object with the constructor
96
// that takes a target file!
97
jassert (targetFile !=
File
());
98
99
if
(temporaryFile.exists())
100
{
101
// Have a few attempts at overwriting the file before giving up..
102
for
(
int
i = 5; --i >= 0;)
103
{
104
if
(temporaryFile.replaceFileIn (targetFile))
105
return
true
;
106
107
Thread::sleep
(100);
108
}
109
}
110
else
111
{
112
// There's no temporary file to use. If your write failed, you should
113
// probably check, and not bother calling this method.
114
jassertfalse;
115
}
116
117
return
false
;
118
}
119
120
bool
TemporaryFile::deleteTemporaryFile
()
const
121
{
122
// Have a few attempts at deleting the file before giving up..
123
for
(
int
i = 5; --i >= 0;)
124
{
125
if
(temporaryFile.isDirectory() ? temporaryFile.deleteRecursively() : temporaryFile.deleteFile())
126
return
true
;
127
128
Thread::sleep
(50);
129
}
130
131
return
false
;
132
}
133
134
}
// namespace juce
juce::File
Definition
juce_File.h:45
juce::File::getNonexistentChildFile
File getNonexistentChildFile(const String &prefix, const String &suffix, bool putNumbersInBrackets=true) const
Definition
juce_File.cpp:609
juce::File::File
File()=default
juce::String
Definition
juce_String.h:53
juce::TemporaryFile::putNumbersInBrackets
@ putNumbersInBrackets
Definition
juce_TemporaryFile.h:72
juce::TemporaryFile::useHiddenFile
@ useHiddenFile
Definition
juce_TemporaryFile.h:70
juce::TemporaryFile::deleteTemporaryFile
bool deleteTemporaryFile() const
Definition
juce_TemporaryFile.cpp:120
juce::TemporaryFile::overwriteTargetFileWithTemporary
bool overwriteTargetFileWithTemporary() const
Definition
juce_TemporaryFile.cpp:93
juce::TemporaryFile::~TemporaryFile
~TemporaryFile()
Definition
juce_TemporaryFile.cpp:76
juce::TemporaryFile::TemporaryFile
TemporaryFile(const String &suffix=String(), int optionFlags=0)
Definition
juce_TemporaryFile.cpp:52
juce::Thread::sleep
static void JUCE_CALLTYPE sleep(int milliseconds)
libopenshot-audio
JuceLibraryCode
modules
juce_core
files
juce_TemporaryFile.cpp
Generated by
1.18.0