2022-02-19 08:26:38 +00:00
package hyphae
import (
"github.com/bouncepaw/mycorrhiza/util"
)
2022-02-19 16:42:32 +00:00
// ExistingHypha is not EmptyHypha. *MediaHypha and *TextualHypha implement this interface.
2022-02-19 08:26:38 +00:00
type ExistingHypha interface {
Hypha
HasTextFile ( ) bool
TextFilePath ( ) string
}
// RenameHyphaTo renames a hypha and renames stored filepaths as needed. The actual files are not moved, move them yourself.
func RenameHyphaTo ( h ExistingHypha , newName string , replaceName func ( string ) string ) {
2022-02-19 16:42:32 +00:00
// TODO: that replaceName is suspicious, get rid of it.
2022-02-19 08:26:38 +00:00
newName = util . CanonicalName ( newName )
byNamesMutex . Lock ( )
h . Lock ( )
delete ( byNames , h . CanonicalName ( ) )
switch h := h . ( type ) {
case * TextualHypha :
h . canonicalName = newName
h . mycoFilePath = replaceName ( h . mycoFilePath )
case * MediaHypha :
h . canonicalName = newName
h . mycoFilePath = replaceName ( h . mediaFilePath )
h . mediaFilePath = replaceName ( h . mediaFilePath )
}
byNames [ h . CanonicalName ( ) ] = h
byNamesMutex . Unlock ( )
h . Unlock ( )
}
2022-02-19 16:42:32 +00:00
// DeleteHypha deletes the hypha from the storage.
func DeleteHypha ( h ExistingHypha ) {
byNamesMutex . Lock ( )
h . Lock ( )
delete ( byNames , h . CanonicalName ( ) )
decrementCount ( )
byNamesMutex . Unlock ( )
h . Unlock ( )
}
// Insert inserts the hypha into the storage, possibly overwriting the previous hypha with the same name. Count incrementation is done if needed. You cannot insert an empty hypha.
func Insert ( h ExistingHypha ) ( madeNewRecord bool ) {
_ , recorded := byNames [ h . CanonicalName ( ) ]
byNamesMutex . Lock ( )
byNames [ h . CanonicalName ( ) ] = h
byNamesMutex . Unlock ( )
if ! recorded {
incrementCount ( )
}
return ! recorded
}