mirror of
https://github.com/ivuorinen/gibidify.git
synced 2026-02-22 22:52:44 +00:00
feat: many features, check TODO.md
This commit is contained in:
99
fileproc/detection.go
Normal file
99
fileproc/detection.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package fileproc
|
||||
|
||||
import "strings"
|
||||
|
||||
// Package-level detection functions
|
||||
|
||||
// IsImage checks if the file extension indicates an image file.
|
||||
func IsImage(filename string) bool {
|
||||
return getRegistry().IsImage(filename)
|
||||
}
|
||||
|
||||
// IsBinary checks if the file extension indicates a binary file.
|
||||
func IsBinary(filename string) bool {
|
||||
return getRegistry().IsBinary(filename)
|
||||
}
|
||||
|
||||
// GetLanguage returns the language identifier for the given filename based on its extension.
|
||||
func GetLanguage(filename string) string {
|
||||
return getRegistry().GetLanguage(filename)
|
||||
}
|
||||
|
||||
// Registry methods for detection
|
||||
|
||||
// IsImage checks if the file extension indicates an image file.
|
||||
func (r *FileTypeRegistry) IsImage(filename string) bool {
|
||||
result := r.getFileTypeResult(filename)
|
||||
return result.IsImage
|
||||
}
|
||||
|
||||
// IsBinary checks if the file extension indicates a binary file.
|
||||
func (r *FileTypeRegistry) IsBinary(filename string) bool {
|
||||
result := r.getFileTypeResult(filename)
|
||||
return result.IsBinary
|
||||
}
|
||||
|
||||
// GetLanguage returns the language identifier for the given filename based on its extension.
|
||||
func (r *FileTypeRegistry) GetLanguage(filename string) string {
|
||||
if len(filename) < minExtensionLength {
|
||||
return ""
|
||||
}
|
||||
result := r.getFileTypeResult(filename)
|
||||
return result.Language
|
||||
}
|
||||
|
||||
// Extension management methods
|
||||
|
||||
// AddImageExtension adds a new image extension to the registry.
|
||||
func (r *FileTypeRegistry) AddImageExtension(ext string) {
|
||||
r.addExtension(ext, r.imageExts)
|
||||
}
|
||||
|
||||
// AddBinaryExtension adds a new binary extension to the registry.
|
||||
func (r *FileTypeRegistry) AddBinaryExtension(ext string) {
|
||||
r.addExtension(ext, r.binaryExts)
|
||||
}
|
||||
|
||||
// AddLanguageMapping adds a new language mapping to the registry.
|
||||
func (r *FileTypeRegistry) AddLanguageMapping(ext, language string) {
|
||||
r.languageMap[strings.ToLower(ext)] = language
|
||||
r.invalidateCache()
|
||||
}
|
||||
|
||||
// addExtension is a helper to add extensions to a map.
|
||||
func (r *FileTypeRegistry) addExtension(ext string, target map[string]bool) {
|
||||
target[strings.ToLower(ext)] = true
|
||||
r.invalidateCache()
|
||||
}
|
||||
|
||||
// removeExtension is a helper to remove extensions from a map.
|
||||
func (r *FileTypeRegistry) removeExtension(ext string, target map[string]bool) {
|
||||
delete(target, strings.ToLower(ext))
|
||||
}
|
||||
|
||||
// DisableExtensions removes specified extensions from the registry.
|
||||
func (r *FileTypeRegistry) DisableExtensions(disabledImages, disabledBinary, disabledLanguages []string) {
|
||||
// Disable image extensions
|
||||
for _, ext := range disabledImages {
|
||||
if ext != "" {
|
||||
r.removeExtension(ext, r.imageExts)
|
||||
}
|
||||
}
|
||||
|
||||
// Disable binary extensions
|
||||
for _, ext := range disabledBinary {
|
||||
if ext != "" {
|
||||
r.removeExtension(ext, r.binaryExts)
|
||||
}
|
||||
}
|
||||
|
||||
// Disable language extensions
|
||||
for _, ext := range disabledLanguages {
|
||||
if ext != "" {
|
||||
delete(r.languageMap, strings.ToLower(ext))
|
||||
}
|
||||
}
|
||||
|
||||
// Invalidate cache after all modifications
|
||||
r.invalidateCache()
|
||||
}
|
||||
Reference in New Issue
Block a user