mirror of
https://github.com/samsonjs/Peekaboo.git
synced 2026-04-24 14:37:39 +00:00
Addresses critical edge case where malformed app targets with multiple leading colons (e.g., "::::::::::::::::Finder") created empty app names that would match ALL system processes. This could potentially expose sensitive information or cause unintended system-wide captures. Key improvements: - Enhanced app target parsing to validate non-empty app names - Added fallback logic to extract valid app names from malformed inputs - Default to screen mode when all parts are empty (security-first approach) - Comprehensive test coverage for edge cases - Improved backward compatibility with hidden path parameters 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
1.2 KiB
Swift
38 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
struct FileNameGenerator {
|
|
static func generateFileName(
|
|
displayIndex: Int? = nil,
|
|
appName: String? = nil,
|
|
windowIndex: Int? = nil,
|
|
windowTitle: String? = nil,
|
|
format: ImageFormat
|
|
) -> String {
|
|
let timestamp = DateFormatter.timestamp.string(from: Date())
|
|
let ext = format.rawValue
|
|
|
|
if let displayIndex {
|
|
return "screen_\(displayIndex + 1)_\(timestamp).\(ext)"
|
|
} else if let appName {
|
|
let cleanAppName = appName.replacingOccurrences(of: " ", with: "_")
|
|
if let windowIndex {
|
|
return "\(cleanAppName)_window_\(windowIndex)_\(timestamp).\(ext)"
|
|
} else if let windowTitle {
|
|
let cleanTitle = windowTitle.replacingOccurrences(of: " ", with: "_").prefix(20)
|
|
return "\(cleanAppName)_\(cleanTitle)_\(timestamp).\(ext)"
|
|
} else {
|
|
return "\(cleanAppName)_\(timestamp).\(ext)"
|
|
}
|
|
} else {
|
|
return "capture_\(timestamp).\(ext)"
|
|
}
|
|
}
|
|
}
|
|
|
|
extension DateFormatter {
|
|
static let timestamp: DateFormatter = {
|
|
let formatter = DateFormatter()
|
|
formatter.dateFormat = "yyyyMMdd_HHmmss"
|
|
return formatter
|
|
}()
|
|
}
|