Localizations (Spanish), Friends++, UI improvements

This commit is contained in:
Patrick Wardle 2024-09-23 21:13:34 +02:00
parent 77ea0c5821
commit 69b1b27310
39 changed files with 1317 additions and 142 deletions

View File

@ -25,6 +25,8 @@
CD8641512CA161D500803551 /* Rules.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD8641502CA161D500803551 /* Rules.xib */; };
CD8641552CA161DA00803551 /* StatusBarPopover.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD8641542CA161DA00803551 /* StatusBarPopover.xib */; };
CD8641592CA161DF00803551 /* UpdateWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD8641582CA161DF00803551 /* UpdateWindow.xib */; };
CD8641702CA1B5F300803551 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CD86416E2CA1B5F300803551 /* InfoPlist.strings */; };
CD8641802CA1F03E00803551 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = CD86417F2CA1F03E00803551 /* Localizable.xcstrings */; };
CD8FD5D623BAE2D200EFE0FB /* PrefsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = CD8FD5D423BAE2D200EFE0FB /* PrefsWindowController.m */; };
CD8FD5F623C05AD900EFE0FB /* RuleRow.m in Sources */ = {isa = PBXBuildFile; fileRef = CD8FD5F023C05AD800EFE0FB /* RuleRow.m */; };
CD8FD5F723C05AD900EFE0FB /* RuleRowCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CD8FD5F223C05AD800EFE0FB /* RuleRowCell.m */; };
@ -85,6 +87,8 @@
CD8641562CA161DA00803551 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/StatusBarPopover.xcstrings; sourceTree = "<group>"; };
CD8641572CA161DF00803551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UpdateWindow.xib; sourceTree = "<group>"; };
CD86415A2CA161DF00803551 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/UpdateWindow.xcstrings; sourceTree = "<group>"; };
CD86416F2CA1B5F300803551 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
CD86417F2CA1F03E00803551 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
CD8FD5D223BAE2D100EFE0FB /* PrefsWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefsWindowController.h; sourceTree = "<group>"; };
CD8FD5D423BAE2D200EFE0FB /* PrefsWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrefsWindowController.m; sourceTree = "<group>"; };
CD8FD5ED23C05AD800EFE0FB /* RuleRowCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuleRowCell.h; sourceTree = "<group>"; };
@ -137,6 +141,7 @@
7D7755DA1F02E05B00D0017D = {
isa = PBXGroup;
children = (
CD86417F2CA1F03E00803551 /* Localizable.xcstrings */,
CDE09AF12919829000561CFF /* Uninstaller */,
7D3B75201F13356900568828 /* Shared */,
7D7755E51F02E05B00D0017D /* Source */,
@ -170,6 +175,7 @@
CDCBF0DC26499DFF001D9F9A /* Event.h */,
CDCBF0DD26499DFF001D9F9A /* Event.m */,
7D7755F11F02E05B00D0017D /* Info.plist */,
CD86416E2CA1B5F300803551 /* InfoPlist.strings */,
CDC6098C263CB7EB006D1332 /* LogMonitor.h */,
CDC6098D263CB7EB006D1332 /* LogMonitor.m */,
CD86414C2CA161CF00803551 /* MainMenu.xib */,
@ -281,6 +287,7 @@
English,
en,
Base,
es,
);
mainGroup = 7D7755DA1F02E05B00D0017D;
productRefGroup = 7D7755E41F02E05B00D0017D /* Products */;
@ -302,10 +309,12 @@
CD6836682391DB6F00CF19C1 /* security.plist in Resources */,
CD86413C2CA1617A00803551 /* AboutWindow.xib in Resources */,
CD8641592CA161DF00803551 /* UpdateWindow.xib in Resources */,
CD8641802CA1F03E00803551 /* Localizable.xcstrings in Resources */,
CD8641552CA161DA00803551 /* StatusBarPopover.xib in Resources */,
CD2F801724468A8C009C3D77 /* patrons.txt in Resources */,
CD8641512CA161D500803551 /* Rules.xib in Resources */,
CD86414D2CA161CF00803551 /* MainMenu.xib in Resources */,
CD8641702CA1B5F300803551 /* InfoPlist.strings in Resources */,
7DD25FF01F23B73C00277EC4 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -402,6 +411,14 @@
name = UpdateWindow.xib;
sourceTree = "<group>";
};
CD86416E2CA1B5F300803551 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
CD86416F2CA1B5F300803551 /* es */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
@ -458,6 +475,7 @@
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES;
};
name = Debug;
};
@ -507,6 +525,7 @@
MACOSX_DEPLOYMENT_TARGET = 10.12;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES;
};
name = Release;
};

View File

@ -752,6 +752,9 @@ extern os_log_t logHandle;
return;
}
//TODO: refactor alerts
// delay showing them!
//register for audio changes
-(BOOL)watchAudioDevice:(AVCaptureDevice*)device
{
@ -813,12 +816,18 @@ extern os_log_t logHandle;
//dbg msg
os_log_debug(logHandle, "audio event: off");
//init event
// process (client) and device are nil
event = [[Event alloc] init:nil device:device deviceType:Device_Microphone state:NSControlStateValueOff];
//handle event
[self handleEvent:event];
//still wait
// cuz the on event is waiting...
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//init event
// process (client) and device are nil
event = [[Event alloc] init:nil device:device deviceType:Device_Microphone state:NSControlStateValueOff];
//handle event
[self handleEvent:event];
});
}
//audio on?
@ -987,12 +996,18 @@ bail:
//dbg msg
os_log_debug(logHandle, "camera event: off");
//init event
// process (client) and device are nil
event = [[Event alloc] init:nil device:device deviceType:Device_Camera state:NSControlStateValueOff];
//handle event
[self handleEvent:event];
//still wait
// cuz the on event is waiting...
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//init event
// process (client) and device are nil
event = [[Event alloc] init:nil device:device deviceType:Device_Camera state:NSControlStateValueOff];
//handle event
[self handleEvent:event];
});
}
} //macOS 13.3
@ -1435,7 +1450,7 @@ bail:
result = NOTIFICATION_SPURIOUS;
//dbg msg
os_log_debug(logHandle, "ignoring event, as it happened <1.0s ago");
os_log_debug(logHandle, "ignoring event, as last event happened <1.0s ago");
//bail
goto bail;
@ -1498,6 +1513,9 @@ bail:
//result
NSInteger result = NOTIFICATION_ERROR;
//dbg msg
os_log_debug(logHandle, "handling event: %{public}@", event);
//should show?
@synchronized (self) {
@ -1586,6 +1604,19 @@ bail:
//init request
request = [UNNotificationRequest requestWithIdentifier:NSUUID.UUID.UUIDString content:content trigger:NULL];
//log: on
if(NSControlStateValueOn == event.state)
{
//log
os_log(logHandle, "[Alert] On Event: %@ / Device: %@ / %@", content.title, content.subtitle, content.body);
}
//log: off
else
{
//log
os_log(logHandle, "[Alert] Off Event: %@ / Device: %@", content.title, content.subtitle);
}
//send notification
[UNUserNotificationCenter.currentNotificationCenter addNotificationRequest:request withCompletionHandler:^(NSError *_Nullable error)
{

View File

@ -31,8 +31,7 @@
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="3Oo-ON-R9s"/>
<menuItem title="Preferences..." id="yfe-lu-f3I">
<modifierMask key="keyEquivalentModifierMask"/>
<menuItem title="Settings..." keyEquivalent="," id="yfe-lu-f3I">
<connections>
<action selector="showPreferences:" target="Voe-Tx-rLC" id="0UK-iW-u9N"/>
</connections>
@ -69,9 +68,7 @@
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="Y5x-j1-ofU"/>
<menuItem title="Preferences..." tag="103" id="Zao-2v-WyJ">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
<menuItem title="Settings..." tag="103" keyEquivalent="," id="Zao-2v-WyJ"/>
<menuItem title="Allowed Items..." tag="104" id="i2A-ax-9ff">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>

View File

@ -94,7 +94,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="156" translatesAutoresizingMaskIntoConstraints="NO" id="xbe-1S-lpy">
<rect key="frame" x="72" y="327" width="114" height="15"/>
<rect key="frame" x="72" y="327" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Start at Login" id="JVI-Or-h0u">
<font key="font" size="13" name="Menlo-Bold"/>
@ -103,11 +103,11 @@
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="471" translatesAutoresizingMaskIntoConstraints="NO" id="tFB-E4-zbp">
<rect key="frame" x="72" y="310" width="475" height="15"/>
<rect key="frame" x="72" y="310" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Automatically (re)start each time you login." id="E0T-Ug-P8f">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<font key="font" size="11" name="Menlo-Regular"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
@ -123,7 +123,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="156" translatesAutoresizingMaskIntoConstraints="NO" id="Kjh-jc-STu">
<rect key="frame" x="72" y="265" width="98" height="15"/>
<rect key="frame" x="72" y="265" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="No Icon Mode" id="4EN-j2-enV">
<font key="font" size="13" name="Menlo-Bold"/>
@ -143,7 +143,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="262" translatesAutoresizingMaskIntoConstraints="NO" id="Enr-tn-mwG">
<rect key="frame" x="72" y="202" width="177" height="15"/>
<rect key="frame" x="72" y="202" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Ignore External Device" id="a5n-tt-65v">
<font key="font" size="13" name="Menlo-Bold"/>
@ -152,11 +152,11 @@
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="471" translatesAutoresizingMaskIntoConstraints="NO" id="AAL-QY-azK">
<rect key="frame" x="72" y="185" width="522" height="15"/>
<rect key="frame" x="72" y="173" width="510" height="27"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Do not show an alert when external devices trigger an event." id="SYJ-Qv-cRq">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<font key="font" size="11" name="Menlo-Regular"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
@ -172,7 +172,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="262" translatesAutoresizingMaskIntoConstraints="NO" id="K3U-Od-Xdy">
<rect key="frame" x="72" y="150" width="200" height="15"/>
<rect key="frame" x="72" y="150" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Disable 'Inactive' Alerts" id="Gsa-fn-iag">
<font key="font" size="13" name="Menlo-Bold"/>
@ -181,16 +181,25 @@
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="471" translatesAutoresizingMaskIntoConstraints="NO" id="5xo-jp-5qA">
<rect key="frame" x="72" y="133" width="522" height="15"/>
<rect key="frame" x="72" y="133" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Do not show an alert when the camera/microphone is deactivated. " id="1A2-j2-kqG">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<font key="font" size="11" name="Menlo-Regular"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="471" translatesAutoresizingMaskIntoConstraints="NO" id="xaO-g8-rdS">
<rect key="frame" x="72" y="248" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Run without showing an icon in the status menu bar." id="SG5-YM-BoV">
<font key="font" size="11" name="Menlo-Regular"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DuP-BJ-gMJ">
<rect key="frame" x="212" y="59" width="176" height="32"/>
<rect key="frame" x="201" y="59" width="198" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="View Allowed Items" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KsW-is-XrR">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@ -200,15 +209,6 @@
<action selector="viewRules:" target="-2" id="jHD-eK-n4u"/>
</connections>
</button>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="471" translatesAutoresizingMaskIntoConstraints="NO" id="xaO-g8-rdS">
<rect key="frame" x="72" y="248" width="475" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Run without showing an icon in the status menu bar." id="SG5-YM-BoV">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<point key="canvasLocation" x="-167" y="510"/>
</customView>
@ -228,7 +228,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="117" translatesAutoresizingMaskIntoConstraints="NO" id="8Tb-Ih-SsC">
<rect key="frame" x="72" y="226" width="59" height="15"/>
<rect key="frame" x="72" y="226" width="74" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Execute" id="ncJ-bF-dAA">
<font key="font" size="13" name="Menlo-Bold"/>
@ -248,7 +248,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dH0-Xi-Qnd">
<rect key="frame" x="72" y="152" width="114" height="15"/>
<rect key="frame" x="72" y="152" width="510" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Pass Arguments" id="WL4-fV-4Wq">
<font key="font" size="13" name="Menlo-Bold"/>
@ -257,7 +257,7 @@
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="382" translatesAutoresizingMaskIntoConstraints="NO" id="z32-0s-dpb">
<rect key="frame" x="143" y="223" width="437" height="20"/>
<rect key="frame" x="147" y="223" width="433" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" allowsUndo="NO" state="on" borderStyle="bezel" placeholderString="Path..." drawsBackground="YES" id="Oe0-3Y-Srk">
<font key="font" size="13" name="Menlo-Regular"/>
@ -286,8 +286,8 @@
<rect key="frame" x="72" y="185" width="427" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Execute a script or binary when an event is detected." id="bky-MW-yBn">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<font key="font" size="11" name="Menlo-Regular"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
@ -295,11 +295,11 @@
<rect key="frame" x="72" y="39" width="510" height="105"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="7Ah-kZ-gGe">
<font key="font" size="13" name="Menlo-Regular"/>
<font key="font" size="11" name="Menlo-Regular"/>
<string key="title">OverSight will pass in the following arguments:-device &lt;camera|microphone&gt; -event &lt;on|off&gt; -process &lt;pid&gt; -activeCount &lt;0..n&gt;Notes:
-process is only specified on activation events.
-activeCount is the number of devices still active.</string>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
@ -327,7 +327,7 @@
</connections>
</button>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YB6-Vv-lQu">
<rect key="frame" x="72" y="224" width="169" height="15"/>
<rect key="frame" x="72" y="224" width="528" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Disable Update Checks" id="z5b-fA-WCk">
<font key="font" size="13" name="Menlo-Bold"/>
@ -336,16 +336,16 @@
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="471" translatesAutoresizingMaskIntoConstraints="NO" id="TmH-6A-xdG">
<rect key="frame" x="72" y="207" width="475" height="15"/>
<rect key="frame" x="72" y="207" width="528" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Do not automatically check for new versions." id="JV5-cY-ff4">
<font key="font" size="13" name="Menlo-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<font key="font" size="11" name="Menlo-Regular"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Mtn-pi-zIl">
<rect key="frame" x="242" y="135" width="134" height="32"/>
<rect key="frame" x="226" y="135" width="167" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Check Now" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="2qr-2x-A3U">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
@ -355,10 +355,6 @@
<action selector="check4Update:" target="-2" id="GJb-mB-UIz"/>
</connections>
</button>
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="o0T-ra-4H0">
<rect key="frame" x="378" y="145" width="16" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</progressIndicator>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Oe2-Ye-1s6">
<rect key="frame" x="118" y="60" width="383" height="74"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
@ -368,8 +364,12 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="o0T-ra-4H0">
<rect key="frame" x="394" y="144" width="16" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</progressIndicator>
</subviews>
<point key="canvasLocation" x="673" y="436"/>
<point key="canvasLocation" x="673" y="435.5"/>
</customView>
</objects>
<resources>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@ -22,7 +22,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="AppIcon" id="15"/>
</imageView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="16" userLabel="title">
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="16" userLabel="title">
<rect key="frame" x="78" y="46" width="200" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" title="OverSight up &amp; running!" id="17">
@ -31,16 +31,16 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="21" userLabel="details">
<rect key="frame" x="78" y="18" width="161" height="20"/>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="21" userLabel="details">
<rect key="frame" x="78" y="18" width="224" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="...access it from here anytime" id="22">
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Access it from here anytime" id="22">
<font key="font" metaFont="label" size="11"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button fixedFrame="YES" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="hL7-ZY-bJK">
<button tag="2" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hL7-ZY-bJK">
<rect key="frame" x="288" y="56" width="32" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="bevel" title="⌃" bezelStyle="rounded" alignment="center" inset="2" id="2jG-uf-4XV">

View File

@ -37,4 +37,7 @@
//time stamp
@property(nonatomic, retain)NSDate* timestamp;
//was shown
@property BOOL wasShown;
@end

View File

@ -36,4 +36,12 @@
return self;
}
//override description method
-(NSString*)description
{
//description
return [NSString stringWithFormat:@"EVENT: device: %@, device type: %d, state: %ld, timestamp: %@", self.device.localizedName, self.deviceType, (long)self.state, self.timestamp];
}
@end

View File

@ -320,15 +320,18 @@ bail:
//init update obj
update = [[Update alloc] init];
//check for update
// 'updateResponse newVersion:' method will be called when check is done
[update checkForUpdate:^(NSUInteger result, NSString* newVersion) {
//process response
[self updateResponse:result newVersion:newVersion];
}];
//check
// but after a delay for UI
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.75 * NSEC_PER_SEC), dispatch_get_main_queue(),
^{
[update checkForUpdate:^(NSUInteger result, NSString* newVersion) {
//process response
[self updateResponse:result newVersion:newVersion];
}];
});
return;
}

View File

@ -226,8 +226,8 @@ bail:
self.popover.contentViewController = [[StatusBarPopoverController alloc] initWithNibName:@"StatusBarPopover" bundle:nil];
//set behavior
// auto-close if user clicks button in status bar
self.popover.behavior = NSPopoverBehaviorTransient;
// don't want it close before timeout (unless user clicks '^')
self.popover.behavior = NSPopoverBehaviorApplicationDefined;
//set delegate
self.popover.delegate = self;
@ -457,6 +457,14 @@ bail:
//status bar item controller
StatusBarItem* statusBarItemController = nil;
//first
// sure to close popover
if(YES == self.popover.shown)
{
//close
[self.popover performClose:nil];
}
//grab
avMonitor = ((AppDelegate*)[[NSApplication sharedApplication] delegate]).avMonitor;

View File

@ -0,0 +1,6 @@
/* Bundle name */
"CFBundleName" = "OverSight";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright (c) 2021 Objective-See. Todos los derechos reservados.";

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "Support Us!"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡Apóyanos!"
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "Version:"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versión:"
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : "Supporters/Patrons:"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Friends/Patrons:"
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "More Info"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Más Información"
}
}
}
}

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight"
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "Uninstall OverSight..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desinstalar OverSight..."
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : "Main Menu"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Menú Principal"
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "Quit OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Salir de OverSight"
}
}
}
},
@ -58,6 +82,12 @@
"state" : "new",
"value" : "OverSight: enabled"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight: activado"
}
}
}
},
@ -70,6 +100,12 @@
"state" : "new",
"value" : "Active Devices"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dispositivos Activos"
}
}
}
},
@ -82,6 +118,12 @@
"state" : "new",
"value" : "Allowed Items..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ítems Permitidos..."
}
}
}
},
@ -94,6 +136,12 @@
"state" : "new",
"value" : "Allowed Items..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ítems Permitidos..."
}
}
}
},
@ -106,6 +154,12 @@
"state" : "new",
"value" : "Disable"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Deshabilitar"
}
}
}
},
@ -118,6 +172,12 @@
"state" : "new",
"value" : "Close Window"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Cerrar Ventana"
}
}
}
},
@ -130,6 +190,12 @@
"state" : "new",
"value" : "About OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sobre OverSight"
}
}
}
},
@ -142,29 +208,47 @@
"state" : "new",
"value" : "OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight"
}
}
}
},
"yfe-lu-f3I.title" : {
"comment" : "Class = \"NSMenuItem\"; title = \"Preferences...\"; ObjectID = \"yfe-lu-f3I\";",
"comment" : "Class = \"NSMenuItem\"; title = \"Settings...\"; ObjectID = \"yfe-lu-f3I\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Preferences..."
"value" : "Settings..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Configuración…"
}
}
}
},
"Zao-2v-WyJ.title" : {
"comment" : "Class = \"NSMenuItem\"; title = \"Preferences...\"; ObjectID = \"Zao-2v-WyJ\";",
"comment" : "Class = \"NSMenuItem\"; title = \"Settings...\"; ObjectID = \"Zao-2v-WyJ\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Preferences..."
"value" : "Settings..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Configuración…"
}
}
}

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "Do not show an alert when the camera/microphone is deactivated. "
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "No mostrar una alerta cuando la cámara/micrófono se desactiven."
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "Check Now"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Verificar Ahora"
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : "No Icon Mode"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Modo Sin Ícono"
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "OverSight will pass in the following arguments:-device <camera|microphone> -event <on|off> -process <pid> -activeCount <0..n>Notes:\n-process is only specified on activation events.\n-activeCount is the number of devices still active."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight pasará los siguientes argumentos:\n-device <camera|microphone> -event <on|off> -process <pid> -activeCount <0..n>\n\nNotas:\n-process solo se especifica en eventos de activación.\n-activeCount es el número de dispositivos que siguen activos."
}
}
}
},
@ -58,6 +82,12 @@
"state" : "new",
"value" : "Ignore External Device"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ignorar Dispositivo Externo"
}
}
}
},
@ -70,6 +100,12 @@
"state" : "new",
"value" : "Execute a script or binary when an event is detected."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ejecutar un script o un programa cuando se detecte un evento."
}
}
}
},
@ -82,6 +118,12 @@
"state" : "new",
"value" : "Browse"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Navegar"
}
}
}
},
@ -94,6 +136,12 @@
"state" : "new",
"value" : "Automatically (re)start each time you login."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Iniciar automáticamente cada vez que inicies sesión."
}
}
}
},
@ -106,6 +154,12 @@
"state" : "new",
"value" : "Action"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Acción"
}
}
}
},
@ -118,6 +172,12 @@
"state" : "new",
"value" : "Action"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Acción"
}
}
}
},
@ -130,6 +190,12 @@
"state" : "new",
"value" : "Disable 'Inactive' Alerts"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desactivar Alertas de 'Inactivo'"
}
}
}
},
@ -142,6 +208,12 @@
"state" : "new",
"value" : "Do not automatically check for new versions."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "No comprobar automáticamente si hay nuevas versiones."
}
}
}
},
@ -154,6 +226,12 @@
"state" : "new",
"value" : "Start at Login"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Iniciar al iniciar sesión"
}
}
}
},
@ -166,6 +244,12 @@
"state" : "new",
"value" : "Mode"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Modo"
}
}
}
},
@ -178,6 +262,12 @@
"state" : "new",
"value" : "Mode"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Modo"
}
}
}
},
@ -190,6 +280,12 @@
"state" : "new",
"value" : "View Allowed Items"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ver Ítems Permitidos"
}
}
}
},
@ -202,6 +298,12 @@
"state" : "new",
"value" : "Execute"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ejecutar"
}
}
}
},
@ -214,6 +316,12 @@
"state" : "new",
"value" : "Path..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ruta..."
}
}
}
},
@ -226,6 +334,12 @@
"state" : "new",
"value" : "Update"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actualizar"
}
}
}
},
@ -238,6 +352,12 @@
"state" : "new",
"value" : "Update"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actualizar"
}
}
}
},
@ -250,6 +370,12 @@
"state" : "new",
"value" : "Run without showing an icon in the status menu bar."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Ejecutar sin mostrar un ícono en la barra de menú de estado."
}
}
}
},
@ -262,6 +388,12 @@
"state" : "new",
"value" : "Do not show an alert when external devices trigger an event."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "No mostrar una alerta cuando los dispositivos externos desencadenen un evento."
}
}
}
},
@ -274,6 +406,12 @@
"state" : "new",
"value" : "Pass Arguments"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Pasar Argumentos"
}
}
}
},
@ -286,6 +424,12 @@
"state" : "new",
"value" : "Disable Update Checks"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desactivar Verificación de Actualizaciones"
}
}
}
}

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "Process"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Proceso"
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "file:"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "archivo:"
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : " Process"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Proceso"
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "Allowed Device"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dispositivo Permitido"
}
}
}
},
@ -58,6 +82,12 @@
"state" : "new",
"value" : "action"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "acción"
}
}
}
},
@ -70,6 +100,12 @@
"state" : "new",
"value" : "Currently, there are no allowed items..."
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actualmente, no hay ítems permitidos..."
}
}
}
}

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "⌃"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "⌃"
}
}
}
},
@ -22,17 +28,29 @@
"state" : "new",
"value" : "OverSight up & running!"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡OverSight en funcionamiento!"
}
}
}
},
"22.title" : {
"comment" : "Class = \"NSTextFieldCell\"; title = \"...access it from here anytime\"; ObjectID = \"22\";",
"comment" : "Class = \"NSTextFieldCell\"; title = \"Access it from here anytime\"; ObjectID = \"22\";",
"extractionState" : "extracted_with_value",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "...access it from here anytime"
"value" : "Access it from here anytime"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Accede desde aquí en cualquier momento"
}
}
}

View File

@ -0,0 +1,343 @@
{
"sourceLanguage" : "en",
"strings" : {
" Became Active!" : {
"comment" : " Became Active!",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡Se activó!"
}
}
}
},
" Became Inactive." : {
"comment" : " Became Inactive.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Se desactivó."
}
}
}
},
"%@: disabled" : {
"comment" : "%@: disabled",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@: deshabilitado"
}
}
}
},
"%@: enabled" : {
"comment" : "%@: enabled",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "%@: habilitado"
}
}
}
},
"a new version (%@) is available!" : {
"comment" : "a new version (%@) is available!",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡una nueva versión (%@) está disponible!"
}
}
}
},
"Active Devices:" : {
"comment" : "Active Devices:",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dispositivos Activos:"
}
}
}
},
"Allow (Always)" : {
"comment" : "Allow (Always)",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Permitir (Siempre)"
}
}
}
},
"Allow (Once)" : {
"comment" : "Allow (Once)",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Permitir (una vez)"
}
}
}
},
"Block" : {
"comment" : "Block",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Bloquear"
}
}
}
},
"Close" : {
"comment" : "Close",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Cerrar"
}
}
}
},
"Device: %@" : {
"comment" : "Device: %@",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Dispositivo: %@"
}
}
}
},
"Disable" : {
"comment" : "Disable",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Deshabilitar"
}
}
}
},
"Enable" : {
"comment" : "Enable",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Habilitar"
}
}
}
},
"error: failed to load patrons :/" : {
"comment" : "error: failed to load patrons :/",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "error: no se pudieron cargar los patrons :/"
}
}
}
},
"ERROR: failed to terminate %@ (%@)" : {
"comment" : "ERROR: failed to terminate %@ (%@)",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "ERROR: failed to terminate %1$@ (%2$@)"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "ERROR: no se pudo terminar %1$@ (%2$@)"
}
}
}
},
"ERROR: OverSight is not authorized to display notifications." : {
"comment" : "ERROR: OverSight is not authorized to display notifications.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "ERROR: OverSight no está autorizado para mostrar notificaciones."
}
}
}
},
"Error: update check failed" : {
"comment" : "Error: update check failed",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Error: la verificación de actualización falló"
}
}
}
},
"Installed version (%@),\r\nis the latest." : {
"comment" : "Installed version (%@),\r\nis the latest.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "La versión instalada (%@) es la más reciente."
}
}
}
},
"No Active Devices" : {
"comment" : "No Active Devices",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "No hay Dispositivos Activos"
}
}
}
},
"Open System Preferences..." : {
"comment" : "Open System Preferences...",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Abrir Preferencias del Sistema..."
}
}
}
},
"OverSight notification mode set to %@." : {
"comment" : "OverSight notification mode set to %@.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Modo de notificación de OverSight configurado en %@."
}
}
}
},
"pid: unknown" : {
"comment" : "pid: unknown",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "pid: desconocido"
}
}
}
},
"Please authorize (style: \"Alerts\") via the Notifications pane in System Preferences." : {
"comment" : "Please authorize (style: \"Alerts\") via the Notifications pane in System Preferences.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Por favor, autoriza (estilo: \\\"Alertas\\\") a través del panel de Notificaciones en Preferencias del Sistema."
}
}
}
},
"Please change to \"Alerts\" via the Notifications pane in System Preferences." : {
"comment" : "Please change to \"Alerts\" via the Notifications pane in System Preferences.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Por favor, cambia a \\\"Alertas\\\" a través del panel de Notificaciones en Preferencias del Sistema."
}
}
}
},
"Process: %@ (%@)" : {
"comment" : "Process: %@ (%@)",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Process: %1$@ (%2$@)"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Proceso: %1$@ (%2$@)"
}
}
}
},
"system error code: %d" : {
"comment" : "system error code: %d",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "código de error del sistema: %d"
}
}
}
},
"unknown" : {
"comment" : "unknown",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "desconocido"
}
}
}
},
"Update" : {
"comment" : "Update",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actualizar"
}
}
}
},
"Update available, but isn't supported on macOS %ld.%ld" : {
"comment" : "Update available, but isn't supported on macOS %ld.%ld",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "new",
"value" : "Update available, but isn't supported on macOS %1$ld.%2$ld"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actualización disponible, pero no es compatible con macOS %1$ld.%2$ld"
}
}
}
}
},
"version" : "1.0"
}

View File

@ -26,6 +26,8 @@
CD8641302CA15DCD00803551 /* AboutWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD86412F2CA15DCD00803551 /* AboutWindow.xib */; };
CD8641342CA15DDA00803551 /* ConfigureWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD8641332CA15DDA00803551 /* ConfigureWindowController.xib */; };
CD8641382CA15DE200803551 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = CD8641372CA15DE200803551 /* MainMenu.xib */; };
CD86417B2CA1BCD900803551 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = CD86417A2CA1BCD900803551 /* Localizable.xcstrings */; };
CD86417E2CA1BD1000803551 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = CD86417C2CA1BD1000803551 /* InfoPlist.strings */; };
CD86B6EA23A5BBE7003F6BA4 /* configure.sh in Resources */ = {isa = PBXBuildFile; fileRef = CD86B6E923A5BBE7003F6BA4 /* configure.sh */; };
CDAAC241202255580032F2E6 /* utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAAC23F202255580032F2E6 /* utilities.m */; };
CDAAC243202257D70032F2E6 /* utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = CDAAC23F202255580032F2E6 /* utilities.m */; };
@ -99,6 +101,8 @@
CD8641352CA15DDA00803551 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/ConfigureWindowController.xcstrings; sourceTree = "<group>"; };
CD8641362CA15DE200803551 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
CD8641392CA15DE200803551 /* mul */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = mul; path = mul.lproj/MainMenu.xcstrings; sourceTree = "<group>"; };
CD86417A2CA1BCD900803551 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
CD86417D2CA1BD1000803551 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
CD86B6E923A5BBE7003F6BA4 /* configure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = configure.sh; path = Source/Script/configure.sh; sourceTree = SOURCE_ROOT; };
CDA6E62E203B67A100C78F91 /* consts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = consts.h; path = ../../Shared/consts.h; sourceTree = "<group>"; };
CDA6E632203B6B7800C78F91 /* objectiveSeeText.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = objectiveSeeText.png; path = ../../shared/images/objectiveSeeText.png; sourceTree = "<group>"; };
@ -132,6 +136,7 @@
29B97314FDCFA39411CA2CEA /* SMJobBless */ = {
isa = PBXGroup;
children = (
CD86417A2CA1BCD900803551 /* Localizable.xcstrings */,
CD17D55C201148F900F798D7 /* Script */,
CD73DA9C20049158001FFC84 /* Shared */,
4BE4904710445D49006BE471 /* Source */,
@ -168,6 +173,7 @@
CD73DA98200490B4001FFC84 /* HelperComms.h */,
CD73DA97200490B4001FFC84 /* HelperComms.m */,
4BE4904C10445D49006BE471 /* Info.plist */,
CD86417C2CA1BD1000803551 /* InfoPlist.strings */,
CD8641372CA15DE200803551 /* MainMenu.xib */,
CD6CAC9120A42D5000188B0A /* main.h */,
4BE4904D10445D49006BE471 /* main.m */,
@ -310,10 +316,12 @@
buildActionMask = 2147483647;
files = (
CD86B6EA23A5BBE7003F6BA4 /* configure.sh in Resources */,
CD86417E2CA1BD1000803551 /* InfoPlist.strings in Resources */,
CD8641382CA15DE200803551 /* MainMenu.xib in Resources */,
CD8641302CA15DCD00803551 /* AboutWindow.xib in Resources */,
CD2F801124465F68009C3D77 /* patrons.txt in Resources */,
CD3307AE203567D500F10D71 /* Assets.xcassets in Resources */,
CD86417B2CA1BCD900803551 /* Localizable.xcstrings in Resources */,
CD8641342CA15DDA00803551 /* ConfigureWindowController.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -403,6 +411,14 @@
name = MainMenu.xib;
sourceTree = "<group>";
};
CD86417C2CA1BD1000803551 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
CD86417D2CA1BD1000803551 /* es */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
@ -584,6 +600,7 @@
PROVISIONING_PROFILE = "";
RUN_CLANG_STATIC_ANALYZER = YES;
SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES;
};
name = Debug;
};
@ -634,6 +651,7 @@
PROVISIONING_PROFILE = "";
RUN_CLANG_STATIC_ANALYZER = YES;
SDKROOT = macosx;
SWIFT_EMIT_LOC_STRINGS = YES;
};
name = Release;
};

View File

@ -0,0 +1,193 @@
{
"sourceLanguage" : "en",
"strings" : {
"☑️ %@: installed!\n" : {
"comment" : "☑️ %@: installed!\n",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "☑️ %@: ¡instalado!"
}
}
}
},
"☑️ %@: uninstalled!\n" : {
"comment" : "☑️ %@: uninstalled!\n",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "☑️ %@: ¡desinstalado!"
}
}
}
},
"⚠️ Error: %@ failed" : {
"comment" : "⚠️ Error: %@ failed",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "⚠️ Error: %@ falló"
}
}
}
},
"Close" : {
"comment" : "Close",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Cerrar"
}
}
}
},
"ERROR: Insuffient Privileges." : {
"comment" : "ERROR: Insuffient Privileges.",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "ERROR: Privilegios Insuficientes."
}
}
}
},
"Exit" : {
"comment" : "Exit",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Salir"
}
}
}
},
"For more info, from the terminal run:\r\nlog show --predicate=\"subsystem='com.objective-see.oversight'\"" : {
"comment" : "For more info, from the terminal run:\r\nlog show --predicate=\"subsystem='com.objective-see.oversight'\"",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Para más información, ejecuta en la terminal:\nlog show --predicate=\"subsystem='com.objective-see.oversight'"
}
}
}
},
"install" : {
"comment" : "install",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "instalar"
}
}
}
},
"Installing..." : {
"comment" : "Installing...",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Instalando..."
}
}
}
},
"Next »" : {
"comment" : "Next »",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Siguiente »"
}
}
}
},
"OverSight can only be installed / run on accounts with administrative privileges" : {
"comment" : "OverSight can only be installed / run on accounts with administrative privileges",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight solo puede ser instalado / ejecutado en cuentas con privilegios administrativos"
}
}
}
},
"Protects your webcam & microphone!" : {
"comment" : "Protects your webcam & microphone!",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡Protege tu webcam & micrófono!"
}
}
}
},
"uninstall" : {
"comment" : "uninstall",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "desinstalar"
}
}
}
},
"Uninstalling..." : {
"comment" : "Uninstalling...",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desinstalando..."
}
}
}
},
"Upgrade" : {
"comment" : "Upgrade",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Actualizar"
}
}
}
},
"version %@" : {
"comment" : "version %@",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "versión %@"
}
}
}
},
"Version: %@" : {
"comment" : "Version: %@",
"localizations" : {
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versión %@"
}
}
}
}
},
"version" : "1.0"
}

View File

@ -0,0 +1,35 @@
{
"images" : [
{
"filename" : "darkMode.png",
"idiom" : "mac"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "lightMode.png",
"idiom" : "mac"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "darkMode.png",
"idiom" : "mac"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,35 @@
{
"images" : [
{
"filename" : "darkMode.png",
"idiom" : "mac"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "lightMode.png",
"idiom" : "mac"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "darkMode.png",
"idiom" : "mac"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,15 @@
{
"images" : [
{
"idiom" : "mac",
"filename" : "malwarebytes.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
},
"properties" : {
"preserves-vector-representation" : true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@ -0,0 +1,15 @@
{
"images" : [
{
"idiom" : "mac",
"filename" : "iVerify.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
},
"properties" : {
"preserves-vector-representation" : true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@ -19,7 +19,7 @@
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<rect key="contentRect" x="196" y="240" width="486" height="301"/>
<rect key="screenRect" x="0.0" y="0.0" width="3440" height="1415"/>
<rect key="screenRect" x="0.0" y="0.0" width="1512" height="944"/>
<view key="contentView" id="se5-gp-TjO">
<rect key="frame" x="0.0" y="0.0" width="486" height="301"/>
<autoresizingMask key="autoresizingMask"/>
@ -37,7 +37,7 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageAlignment="left" imageScaling="proportionallyDown" image="OverSight" id="Ws8-bD-j2R"/>
</imageView>
<button verticalHuggingPriority="750" fixedFrame="YES" tag="101" translatesAutoresizingMaskIntoConstraints="NO" id="HZZ-Es-mpy">
<button tag="101" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HZZ-Es-mpy">
<rect key="frame" x="344" y="13" width="128" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="More Info" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="J9x-sM-h9S">
@ -48,7 +48,7 @@
<action selector="buttonHandler:" target="-2" id="Cgx-f4-Thr"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" tag="100" translatesAutoresizingMaskIntoConstraints="NO" id="xnd-Gw-0o8">
<button tag="100" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xnd-Gw-0o8">
<rect key="frame" x="201" y="13" width="128" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Support Us!" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6g3-Pg-x3P">
@ -95,7 +95,7 @@
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fZJ-sG-ZuJ">
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fZJ-sG-ZuJ">
<rect key="frame" x="20" y="166" width="153" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Supporters/Patrons:" id="fJg-qw-wDf">
@ -104,7 +104,7 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OSm-xS-Dmd">
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OSm-xS-Dmd">
<rect key="frame" x="129" y="206" width="182" height="19"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Version:" id="bBK-v0-ypq">

View File

@ -120,18 +120,25 @@
<rect key="frame" x="0.0" y="0.0" width="812" height="48"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button tag="3" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8I9-ag-g5s">
<rect key="frame" x="718" y="7" width="81" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<button tag="3" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8I9-ag-g5s">
<rect key="frame" x="679" y="7" width="120" height="32"/>
<buttonCell key="cell" type="push" title="Next »" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="DHG-bQ-JvA">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="13" name="Menlo-Bold"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="20" id="F47-Ks-7EZ"/>
<constraint firstAttribute="width" constant="106" id="R5D-Yl-fOc"/>
</constraints>
<connections>
<action selector="configureButtonHandler:" target="-2" id="6Tl-Ce-fBS"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="8I9-ag-g5s" secondAttribute="bottom" constant="14" id="NUa-LA-HAl"/>
<constraint firstAttribute="trailing" secondItem="8I9-ag-g5s" secondAttribute="trailing" constant="20" symbolic="YES" id="rsT-T9-ZCA"/>
</constraints>
</view>
<color key="fillColor" red="0.52700018810000004" green="0.69087679930000001" blue="0.21211786799999999" alpha="0.99595620600000001" colorSpace="custom" customColorSpace="sRGB"/>
</box>
@ -163,18 +170,25 @@
<rect key="frame" x="0.0" y="0.0" width="812" height="48"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button tag="4" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2V7-Bx-gVi">
<rect key="frame" x="718" y="7" width="81" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<button tag="4" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2V7-Bx-gVi">
<rect key="frame" x="672" y="7" width="134" height="32"/>
<buttonCell key="cell" type="push" title="Next »" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="0wd-cy-xEw">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="13" name="Menlo-Bold"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="20" id="0xV-JP-mPJ"/>
<constraint firstAttribute="width" constant="120" id="liO-Kn-S9L"/>
</constraints>
<connections>
<action selector="configureButtonHandler:" target="-2" id="qnn-kG-aKi"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="2V7-Bx-gVi" secondAttribute="trailing" constant="13" id="3jd-h7-KSx"/>
<constraint firstAttribute="bottom" secondItem="2V7-Bx-gVi" secondAttribute="bottom" constant="14" id="8h9-rI-ecv"/>
</constraints>
</view>
<color key="fillColor" red="0.52700018810000004" green="0.69087679930000001" blue="0.21211786799999999" alpha="0.99595620600000001" colorSpace="custom" customColorSpace="sRGB"/>
</box>
@ -255,17 +269,8 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="660" translatesAutoresizingMaskIntoConstraints="NO" id="mL7-9q-jrx">
<rect key="frame" x="520" y="219" width="274" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Show some love? " id="Hvk-zS-1VC">
<font key="font" size="40" name="AvenirNextCondensed-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" alphaValue="0.59999999999999998" id="MWL-4T-Xv3">
<rect key="frame" x="306" y="122" width="203" height="29"/>
<rect key="frame" x="244" y="126" width="324" height="29"/>
<autoresizingMask key="autoresizingMask"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Mahalo to the &quot;Friends Objective-See&quot;" id="OYn-6J-Cfb">
<font key="font" size="15" name="AvenirNextCondensed-Regular"/>
@ -273,48 +278,69 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="86r-q1-8zB">
<rect key="frame" x="20" y="69" width="77" height="23"/>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" preferredMaxLayoutWidth="660" translatesAutoresizingMaskIntoConstraints="NO" id="mL7-9q-jrx">
<rect key="frame" x="430" y="211" width="357" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="FriendsJamf" id="pbJ-5m-jHq"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Show some love? " id="Hvk-zS-1VC">
<font key="font" size="40" name="AvenirNextCondensed-Regular"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="BmY-hr-sOX">
<rect key="frame" x="10" y="53" width="77" height="23"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsJamf" id="d2a-JT-BQS"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.69999999999999996" id="vet-MN-3Ad">
<rect key="frame" x="703" y="67" width="84" height="28"/>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="Pn8-1Y-qTv">
<rect key="frame" x="220" y="49" width="138" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="FriendsKolide" id="ArD-gl-wjh"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsMacPaw" id="ZjN-wt-ht1"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="7HT-gV-yPa">
<rect key="frame" x="126" y="65" width="138" height="31"/>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="Bbi-MA-hNE">
<rect key="frame" x="91" y="52" width="119" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="FriendsMacPaw" id="How-yq-spI"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsPANW" id="3eA-ny-z2T"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.69999999999999996" id="FVF-37-HVW">
<rect key="frame" x="554" y="68" width="119" height="24"/>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="TCT-Oc-Qe2">
<rect key="frame" x="491" y="52" width="122" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="FriendsPANW" id="VLA-rl-5Tm"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsHuntress" id="2aO-vk-Uk9"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.69999999999999996" id="W5o-uI-7Ie">
<rect key="frame" x="303" y="65" width="84" height="31"/>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="HlD-KA-f3H">
<rect key="frame" x="746" y="55" width="57" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="FriendsKandji" id="utL-Oi-omi"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsiVerify" id="I4T-3Z-ClS"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.69999999999999996" id="qeo-at-ZIE">
<rect key="frame" x="432" y="68" width="92" height="26"/>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="RoF-KP-j9w">
<rect key="frame" x="368" y="89" width="96" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="FriendsMosyle" id="4eU-Rk-ODg"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsKandji" id="3FW-9B-v0b"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="hGU-DC-Z60">
<rect key="frame" x="611" y="42" width="128" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="FriendsMalwarebytes" id="j5T-la-Pvx"/>
</imageView>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" alphaValue="0.80000000000000004" id="RAI-89-KVV">
<rect key="frame" x="369" y="53" width="119" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" animates="YES" imageScaling="proportionallyDown" image="Friends1Password" id="enQ-mJ-Juf"/>
</imageView>
</subviews>
<point key="canvasLocation" x="686" y="1393"/>
<point key="canvasLocation" x="1174" y="1122"/>
</customView>
</objects>
<resources>
<image name="DoNotDisturb" width="1430" height="510"/>
<image name="Friends1Password" width="272" height="52"/>
<image name="FriendsHuntress" width="800" height="198"/>
<image name="FriendsJamf" width="328" height="114"/>
<image name="FriendsKandji" width="1944" height="494"/>
<image name="FriendsKolide" width="636" height="216"/>
<image name="FriendsMacPaw" width="2034" height="335"/>
<image name="FriendsMosyle" width="240" height="60"/>
<image name="FriendsMacPaw" width="145" height="20"/>
<image name="FriendsMalwarebytes" width="2500" height="403"/>
<image name="FriendsPANW" width="1312" height="240"/>
<image name="FriendsiVerify" width="500" height="180"/>
<image name="Icon" width="512" height="512"/>
<image name="Love" width="256" height="256"/>
<image name="Notifications" width="1430" height="607"/>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23094" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23094"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication"/>

View File

@ -75,7 +75,7 @@ extern os_log_t logHandle;
[self window].title = [NSString stringWithFormat:NSLocalizedString(@"version %@", @"version %@"), getAppVersion()];
//init status msg
[self.statusMsg setStringValue:NSLocalizedString(@"...protects your webcam & microphone!", @"...protects your webcam & microphone!")];
[self.statusMsg setStringValue:NSLocalizedString(@"Protects your webcam & microphone!", @"Protects your webcam & microphone!")];
//uninstall via app?
// just enable uinstall button
@ -106,7 +106,7 @@ extern os_log_t logHandle;
self.uninstallButton.enabled = YES;
//set to 'upgrade'
self.installButton.title = ACTION_UPGRADE;
self.installButton.title = NSLocalizedString(@"Upgrade", @"Upgrade");
}
//otherwise disable
@ -540,7 +540,7 @@ extern os_log_t logHandle;
(ACTION_INSTALL_FLAG == event) )
{
//next
self.installButton.title = ACTION_NEXT;
self.installButton.title = NSLocalizedString(@"Next »", @"Next »");
//set tag
self.installButton.tag = ACTION_SHOW_NOTIFICATION_VIEW;
@ -550,7 +550,7 @@ extern os_log_t logHandle;
else
{
//close
self.installButton.title = ACTION_CLOSE;
self.installButton.title = NSLocalizedString(@"Close", @"Close");
//update it's tag
// will allow button handler method process

View File

@ -0,0 +1,3 @@
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright (c) 2020 Objective-See. Todos los derechos reservados. ";

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "Support Us!"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡Apóyanos!"
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "Version:"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versión:"
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : "Supporters/Patrons:"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Friends/Patrons:"
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "More Info"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Más Información"
}
}
}
}

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "Next »"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Siguiente »"
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "Install"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Instalar"
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : "If prompted, please allow OverSight to show notifications, setting the style to \"Alerts\""
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Si solicitado, permite que OverSight muestre notificaciones, configurando el estilo en \"Alertas\""
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "Next »"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Siguiente »"
}
}
}
},
@ -58,6 +82,12 @@
"state" : "new",
"value" : "Yes!"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¡Sí!"
}
}
}
},
@ -70,6 +100,12 @@
"state" : "new",
"value" : "Uninstall"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Desinstalar"
}
}
}
},
@ -82,6 +118,12 @@
"state" : "new",
"value" : "Support OverSight?"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¿Apoyas OverSight?"
}
}
}
},
@ -94,6 +136,12 @@
"state" : "new",
"value" : "Show some love? "
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "¿Nos das tu apoyo?"
}
}
}
},
@ -106,6 +154,12 @@
"state" : "new",
"value" : "No"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "No"
}
}
}
},
@ -118,6 +172,12 @@
"state" : "new",
"value" : "Mahalo to the \"Friends Objective-See\""
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Mahalo a los \"Friends de Objective-See\""
}
}
}
},
@ -130,6 +190,12 @@
"state" : "new",
"value" : "It's free, open-source, and written by a single (mac-loving) coder!"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sin cargo, open-source y desarrollado por un único programador (amante de Mac)! "
}
}
}
},
@ -142,6 +208,12 @@
"state" : "new",
"value" : "If \"Do Not Disturb\" mode is activated, OverSight's alerts won't be shown"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Si el modo \"No Molestar\" está activado, las alertas de OverSight no se mostrarán"
}
}
}
}

View File

@ -10,6 +10,12 @@
"state" : "new",
"value" : "About OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Acerca de OverSight"
}
}
}
},
@ -22,6 +28,12 @@
"state" : "new",
"value" : "OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight"
}
}
}
},
@ -34,6 +46,12 @@
"state" : "new",
"value" : "Main Menu"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "Menú Principal"
}
}
}
},
@ -46,6 +64,12 @@
"state" : "new",
"value" : "OverSight"
}
},
"es" : {
"stringUnit" : {
"state" : "translated",
"value" : "OverSight"
}
}
}
}

View File

@ -186,15 +186,6 @@
//flag to install
#define ACTION_INSTALL_FLAG 1
//button title: upgrade
#define ACTION_UPGRADE NSLocalizedString(@"Upgrade", @"Upgrade")
//button title: close
#define ACTION_CLOSE NSLocalizedString(@"Close", @"Close")
//button title: next
#define ACTION_NEXT NSLocalizedString(@"Next »", @"Next »")
//show info about notifications
#define ACTION_SHOW_NOTIFICATION_VIEW 2