io.files.temp: use OS tmp dir; add cache-directory
Change temp-directory to return an OS-sanctioned temporary directory instead of "resource:temp". Add a new function cache-directory to return an OS-sanctioned directory for storing staging images etc. Fixes #365. Windows implementation needs to be finished and tested.db4
parent
ca4d5cbde0
commit
480545a683
|
@ -0,0 +1,43 @@
|
||||||
|
! (c)2012 Joe Groff bsd license
|
||||||
|
USING: alien.c-types alien.syntax cocoa.plists cocoa.runtime
|
||||||
|
cocoa.types core-foundation.strings io.directories io.files
|
||||||
|
io.files.temp io.pathnames kernel memoize sequences system ;
|
||||||
|
IN: io.files.temp.macosx
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
FUNCTION: id NSTemporaryDirectory ( ) ;
|
||||||
|
|
||||||
|
TYPEDEF: NSUInteger NSSearchPathDirectory
|
||||||
|
CONSTANT: NSCachesDirectory 13
|
||||||
|
|
||||||
|
TYPEDEF: NSUInteger NSSearchPathDomainMask
|
||||||
|
CONSTANT: NSUserDomainMask 1
|
||||||
|
|
||||||
|
FUNCTION: id NSSearchPathForDirectoriesInDomains (
|
||||||
|
NSSearchPathDirectory directory,
|
||||||
|
NSSearchPathDomainMask domainMask,
|
||||||
|
char expandTilde
|
||||||
|
) ;
|
||||||
|
|
||||||
|
CONSTANT: factor-bundle-name "org.factorcode.Factor"
|
||||||
|
|
||||||
|
: (make-factor-bundle-subdir) ( path -- path )
|
||||||
|
factor-bundle-name append-path dup make-directories ;
|
||||||
|
|
||||||
|
: (first-existing) ( paths -- path )
|
||||||
|
[ exists? ] map-find nip
|
||||||
|
[ "no user cache directory found" throw ] unless* ; inline
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
MEMO: (temp-directory) ( -- path )
|
||||||
|
NSTemporaryDirectory CF>string (make-factor-bundle-subdir) ;
|
||||||
|
|
||||||
|
M: macosx temp-directory (temp-directory) ;
|
||||||
|
|
||||||
|
MEMO: (cache-directory) ( -- path )
|
||||||
|
NSCachesDirectory NSUserDomainMask 1 NSSearchPathForDirectoriesInDomains
|
||||||
|
plist> (first-existing) (make-factor-bundle-subdir) ;
|
||||||
|
|
||||||
|
M: macosx cache-directory (cache-directory) ;
|
|
@ -0,0 +1 @@
|
||||||
|
macosx
|
|
@ -2,10 +2,16 @@ USING: help.markup help.syntax ;
|
||||||
IN: io.files.temp
|
IN: io.files.temp
|
||||||
|
|
||||||
ARTICLE: "io.files.temp" "Temporary files"
|
ARTICLE: "io.files.temp" "Temporary files"
|
||||||
"Pathnames relative to Factor's temporary files directory:"
|
"Pathnames relative to the system's temporary file directory:"
|
||||||
{ $subsections
|
{ $subsections
|
||||||
temp-directory
|
temp-directory
|
||||||
temp-file
|
temp-file
|
||||||
|
}
|
||||||
|
"Pathnames relative to Factor's cache directory, used to store persistent intermediate files and resources:"
|
||||||
|
{ $subsections
|
||||||
|
cache-directory
|
||||||
|
cache-file
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
ABOUT: "io.files.temp"
|
ABOUT: "io.files.temp"
|
||||||
|
|
|
@ -1,10 +1,19 @@
|
||||||
! Copyright (C) 2008 Slava Pestov, Doug Coleman.
|
! (c)2012 Joe Groff bsd license
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
USING: combinators io.pathnames kernel system vocabs ;
|
||||||
USING: kernel io.pathnames io.directories ;
|
|
||||||
IN: io.files.temp
|
IN: io.files.temp
|
||||||
|
|
||||||
: temp-directory ( -- path )
|
HOOK: temp-directory os ( -- path )
|
||||||
"temp" resource-path dup make-directories ;
|
HOOK: cache-directory os ( -- path )
|
||||||
|
|
||||||
: temp-file ( name -- path )
|
: temp-file ( name -- path )
|
||||||
temp-directory prepend-path ;
|
temp-directory prepend-path ;
|
||||||
|
|
||||||
|
: cache-file ( name -- path )
|
||||||
|
cache-directory prepend-path ;
|
||||||
|
|
||||||
|
{
|
||||||
|
{ [ os windows? ] [ "io.files.temp.windows" ] }
|
||||||
|
{ [ os macosx? ] [ "io.files.temp.macosx" ] }
|
||||||
|
{ [ os unix? ] [ "io.files.temp.unix" ] }
|
||||||
|
[ "unknown io.files.temp platform" throw ]
|
||||||
|
} cond require
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
unix
|
|
@ -0,0 +1,14 @@
|
||||||
|
! (c)2012 Joe Groff bsd license
|
||||||
|
USING: io.directories io.files.temp io.pathnames kernel memoize
|
||||||
|
system ;
|
||||||
|
IN: io.files.temp.unix
|
||||||
|
|
||||||
|
MEMO: (temp-directory) ( -- path )
|
||||||
|
"/tmp/factor-temp" dup make-directories ;
|
||||||
|
|
||||||
|
M: unix temp-directory (temp-directory) ;
|
||||||
|
|
||||||
|
MEMO: (cache-directory) ( -- path )
|
||||||
|
home ".factor-cache" append-path dup make-directories ;
|
||||||
|
|
||||||
|
M: unix cache-directory (cache-directory) ;
|
|
@ -0,0 +1 @@
|
||||||
|
windows
|
|
@ -0,0 +1,33 @@
|
||||||
|
! (c)2012 Joe Groff bsd license
|
||||||
|
USING: ;
|
||||||
|
SPECIALIZED-ARRAY: WCHAR
|
||||||
|
IN: io.files.temp.windows
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
: (get-temp-directory) ( -- path )
|
||||||
|
MAX_PATH dup <WCHAR-array> [ GetTempPath ] keep
|
||||||
|
swap win32-error
|
||||||
|
utf16n alien>string ;
|
||||||
|
|
||||||
|
: (get-appdata-directory) ( -- path )
|
||||||
|
f
|
||||||
|
CSIDL_LOCAL_APPDATA CSIDL_FLAG_CREATE bitor
|
||||||
|
f
|
||||||
|
0
|
||||||
|
MAX_PATH <WCHAR-array>
|
||||||
|
[ SHGetFolderPath ] keep
|
||||||
|
swap win32-error
|
||||||
|
utf16n alien>string ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
MEMO: (temp-directory) ( -- path )
|
||||||
|
(get-temp-directory) "factorcode.org\\Factor" append-path dup make-directories ;
|
||||||
|
|
||||||
|
M: windows temp-directory (temp-directory) ;
|
||||||
|
|
||||||
|
MEMO: (cache-directory) ( -- path )
|
||||||
|
(get-appdata-directory) "factorcode.org\\Factor" append-path dup make-directories ;
|
||||||
|
|
||||||
|
M: windows cache-directory (cache-directory) ;
|
Loading…
Reference in New Issue