Artwork + copying of password.
BIN
Default.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
Default@2x.png
Normal file
After Width: | Height: | Size: 133 KiB |
@ -27,6 +27,8 @@
|
||||
DA5BFA61147E415C00F98B1E /* MainStoryboard_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DA5BFA5F147E415C00F98B1E /* MainStoryboard_iPad.storyboard */; };
|
||||
DA5BFA64147E415C00F98B1E /* OnePassword.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA62147E415C00F98B1E /* OnePassword.xcdatamodeld */; };
|
||||
DA5BFA67147E415C00F98B1E /* OPMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA5BFA66147E415C00F98B1E /* OPMainViewController.m */; };
|
||||
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A514BE4B19002DD256 /* Default.png */; };
|
||||
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5DB7A714BE4B4B002DD256 /* Default@2x.png */; };
|
||||
DA7C28C414AF078900491972 /* Bold_Lines.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28A514AF078900491972 /* Bold_Lines.png */; };
|
||||
DA7C28C514AF078900491972 /* Box.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28A614AF078900491972 /* Box.png */; };
|
||||
DA7C28C614AF078900491972 /* Dashed_Divider.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28A714AF078900491972 /* Dashed_Divider.png */; };
|
||||
@ -58,6 +60,12 @@
|
||||
DA7C28E014AF078900491972 /* Smooth_Divider.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28C114AF078900491972 /* Smooth_Divider.png */; };
|
||||
DA7C28E114AF078900491972 /* Square.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28C214AF078900491972 /* Square.png */; };
|
||||
DA7C28E214AF078900491972 /* White_Rectangular.png in Resources */ = {isa = PBXBuildFile; fileRef = DA7C28C314AF078900491972 /* White_Rectangular.png */; };
|
||||
DAAF5C2214BF308400A0F1F0 /* Background.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAF5C2014BF308400A0F1F0 /* Background.png */; };
|
||||
DAAF5C2314BF308400A0F1F0 /* Background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DAAF5C2114BF308400A0F1F0 /* Background@2x.png */; };
|
||||
DABF7DA514BE54E4007F3557 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA414BE54E4007F3557 /* Default.png */; };
|
||||
DABF7DAA14BE561C007F3557 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA714BE561C007F3557 /* Icon-72.png */; };
|
||||
DABF7DAB14BE561C007F3557 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA814BE561C007F3557 /* Icon.png */; };
|
||||
DABF7DAC14BE561C007F3557 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABF7DA914BE561C007F3557 /* Icon@2x.png */; };
|
||||
DAC6325E1486805C0075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||
DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; };
|
||||
DAC63277148680700075AEA5 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; };
|
||||
@ -195,6 +203,8 @@
|
||||
DA5BFA63147E415C00F98B1E /* OnePassword.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = OnePassword.xcdatamodel; sourceTree = "<group>"; };
|
||||
DA5BFA65147E415C00F98B1E /* OPMainViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OPMainViewController.h; sourceTree = "<group>"; };
|
||||
DA5BFA66147E415C00F98B1E /* OPMainViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OPMainViewController.m; sourceTree = "<group>"; };
|
||||
DA5DB7A514BE4B19002DD256 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = ../Default.png; sourceTree = "<group>"; };
|
||||
DA5DB7A714BE4B4B002DD256 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "../Default@2x.png"; sourceTree = "<group>"; };
|
||||
DA7C28A514AF078900491972 /* Bold_Lines.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Bold_Lines.png; sourceTree = "<group>"; };
|
||||
DA7C28A614AF078900491972 /* Box.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Box.png; sourceTree = "<group>"; };
|
||||
DA7C28A714AF078900491972 /* Dashed_Divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Dashed_Divider.png; sourceTree = "<group>"; };
|
||||
@ -226,6 +236,12 @@
|
||||
DA7C28C114AF078900491972 /* Smooth_Divider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Smooth_Divider.png; sourceTree = "<group>"; };
|
||||
DA7C28C214AF078900491972 /* Square.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Square.png; sourceTree = "<group>"; };
|
||||
DA7C28C314AF078900491972 /* White_Rectangular.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = White_Rectangular.png; sourceTree = "<group>"; };
|
||||
DAAF5C2014BF308400A0F1F0 /* Background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Background.png; sourceTree = "<group>"; };
|
||||
DAAF5C2114BF308400A0F1F0 /* Background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Background@2x.png"; sourceTree = "<group>"; };
|
||||
DABF7DA414BE54E4007F3557 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = SOURCE_ROOT; };
|
||||
DABF7DA714BE561C007F3557 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = "<group>"; };
|
||||
DABF7DA814BE561C007F3557 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
|
||||
DABF7DA914BE561C007F3557 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = "<group>"; };
|
||||
DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libuicolor-utilities.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DAC632791486809A0075AEA5 /* JRSwizzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JRSwizzle.h; path = External/Pearl/External/jrswizzle/JRSwizzle.h; sourceTree = SOURCE_ROOT; };
|
||||
@ -1421,6 +1437,13 @@
|
||||
DA5BFA51147E415C00F98B1E /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DAAF5C2014BF308400A0F1F0 /* Background.png */,
|
||||
DAAF5C2114BF308400A0F1F0 /* Background@2x.png */,
|
||||
DABF7DA714BE561C007F3557 /* Icon-72.png */,
|
||||
DABF7DA814BE561C007F3557 /* Icon.png */,
|
||||
DABF7DA914BE561C007F3557 /* Icon@2x.png */,
|
||||
DA5DB7A714BE4B4B002DD256 /* Default@2x.png */,
|
||||
DA5DB7A514BE4B19002DD256 /* Default.png */,
|
||||
DA7C28A414AF078900491972 /* divider */,
|
||||
DA5BFA52147E415C00F98B1E /* OnePassword-Info.plist */,
|
||||
DA5BFA53147E415C00F98B1E /* InfoPlist.strings */,
|
||||
@ -1569,6 +1592,7 @@
|
||||
DAC77CD31482AAD600BCF976 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DABF7DA414BE54E4007F3557 /* Default.png */,
|
||||
DAC77CD41482AAD600BCF976 /* Pearl.strings */,
|
||||
);
|
||||
path = Resources;
|
||||
@ -2861,6 +2885,14 @@
|
||||
DA7C28E214AF078900491972 /* White_Rectangular.png in Resources */,
|
||||
DA007F5514B25EE100251337 /* ciphers.plist in Resources */,
|
||||
DA007F5614B26EFA00251337 /* Pearl.strings in Resources */,
|
||||
DA5DB7A614BE4B19002DD256 /* Default.png in Resources */,
|
||||
DA5DB7A814BE4B4B002DD256 /* Default@2x.png in Resources */,
|
||||
DABF7DA514BE54E4007F3557 /* Default.png in Resources */,
|
||||
DABF7DAA14BE561C007F3557 /* Icon-72.png in Resources */,
|
||||
DABF7DAB14BE561C007F3557 /* Icon.png in Resources */,
|
||||
DABF7DAC14BE561C007F3557 /* Icon@2x.png in Resources */,
|
||||
DAAF5C2214BF308400A0F1F0 /* Background.png in Resources */,
|
||||
DAAF5C2314BF308400A0F1F0 /* Background@2x.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
BIN
OnePassword/Background.png
Normal file
After Width: | Height: | Size: 84 KiB |
BIN
OnePassword/Background@2x.png
Normal file
After Width: | Height: | Size: 361 KiB |
BIN
OnePassword/Icon-72.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
OnePassword/Icon-Small-50.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
OnePassword/Icon-Small.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
OnePassword/Icon-Small@2x.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
OnePassword/Icon.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
OnePassword/Icon@2x.png
Normal file
After Width: | Height: | Size: 13 KiB |
@ -20,5 +20,6 @@
|
||||
@property (weak, nonatomic) IBOutlet UISegmentedControl *contentType;
|
||||
|
||||
- (IBAction)didChangeContentType:(UISegmentedControl *)sender;
|
||||
- (IBAction)didTriggerContent:(id)sender;
|
||||
|
||||
@end
|
||||
|
@ -55,6 +55,7 @@
|
||||
|
||||
// Because IB's edit button doesn't auto-toggle self.editable like editButtonItem does.
|
||||
self.navigationItem.rightBarButtonItem = self.editButtonItem;
|
||||
self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]];
|
||||
|
||||
[super viewDidLoad];
|
||||
}
|
||||
@ -91,7 +92,9 @@
|
||||
|
||||
- (void)updateWasAnimated:(BOOL)animated {
|
||||
|
||||
self.typeLabel.text = self.activeElement? NSStringFromOPElementType(self.activeElement.type): @"moo";
|
||||
self.searchDisplayController.searchBar.placeholder = self.activeElement.name;
|
||||
|
||||
self.typeLabel.text = self.activeElement? NSStringFromOPElementType(self.activeElement.type): @"";
|
||||
|
||||
self.contentTextView.alpha = self.contentType.selectedSegmentIndex == OPElementContentTypeNote? 1: 0;
|
||||
self.contentTextView.editable = self.editing && self.activeElement.type & OPElementTypeStored;
|
||||
@ -106,9 +109,6 @@
|
||||
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
NSString *contentDescription = self.activeElement.contentDescription;
|
||||
if (contentDescription)
|
||||
[self.activeElement use];
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
self.contentField.text = contentDescription;
|
||||
});
|
||||
@ -123,6 +123,12 @@
|
||||
[self updateAnimated:YES];
|
||||
}
|
||||
|
||||
- (IBAction)didTriggerContent:(id)sender {
|
||||
|
||||
[[UIPasteboard generalPasteboard] setValue:self.activeElement.content
|
||||
forPasteboardType:self.activeElement.contentUTI];
|
||||
}
|
||||
|
||||
- (void)didSelectType:(OPElementType)type {
|
||||
|
||||
self.activeElement.type = type;
|
||||
@ -132,10 +138,11 @@
|
||||
- (void)didSelectElement:(OPElementEntity *)element {
|
||||
|
||||
self.activeElement = element;
|
||||
[self.activeElement use];
|
||||
[self updateAnimated:YES];
|
||||
|
||||
self.searchDisplayController.searchBar.text = @"";
|
||||
[self.searchDisplayController setActive:NO animated:YES];
|
||||
self.searchDisplayController.searchBar.text = self.activeElement.name;
|
||||
}
|
||||
|
||||
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
|
||||
@ -143,4 +150,9 @@
|
||||
[self updateAnimated:YES];
|
||||
}
|
||||
|
||||
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -9,7 +9,25 @@
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array/>
|
||||
<array>
|
||||
<string>Icon.png</string>
|
||||
<string>Icon@2x.png</string>
|
||||
<string>Icon-72.png</string>
|
||||
</array>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>Icon.png</string>
|
||||
<string>Icon@2x.png</string>
|
||||
<string>Icon-72.png</string>
|
||||
</array>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.lyndir.lhunath.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
@ -32,12 +50,12 @@
|
||||
<string>MainStoryboard_iPhone</string>
|
||||
<key>UIMainStoryboardFile~ipad</key>
|
||||
<string>MainStoryboard_iPad</string>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<true/>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIStatusBarStyle</key>
|
||||
<string>UIStatusBarStyleBlackOpaque</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
|
@ -218,15 +218,6 @@
|
||||
</scene>
|
||||
<scene sceneID="Rm6-uL-WP4">
|
||||
<objects>
|
||||
<searchDisplayController id="P8c-gf-nN3">
|
||||
<connections>
|
||||
<outlet property="delegate" destination="0QO-2P-OhD" id="gst-Hm-5ja"/>
|
||||
<outlet property="searchBar" destination="qeo-n2-WVh" id="bFO-FC-Xdj"/>
|
||||
<outlet property="searchContentsController" destination="b9f-OB-AqY" id="xgo-Uj-wpm"/>
|
||||
<outlet property="searchResultsDataSource" destination="0QO-2P-OhD" id="XJh-rC-kId"/>
|
||||
<outlet property="searchResultsDelegate" destination="0QO-2P-OhD" id="Bm8-Q3-lLA"/>
|
||||
</connections>
|
||||
</searchDisplayController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="8LM-KK-u1f" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
<tableViewController id="b9f-OB-AqY" customClass="OPMainViewController" sceneMemberID="viewController">
|
||||
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="singleLineEtched" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="y6z-21-Ptd">
|
||||
@ -252,6 +243,9 @@
|
||||
<state key="highlighted">
|
||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="didTriggerContent:" destination="b9f-OB-AqY" eventType="touchUpInside" id="Ost-qu-K2L"/>
|
||||
</connections>
|
||||
</button>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" image="Square.png" id="qWn-td-zdb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="222"/>
|
||||
@ -269,7 +263,7 @@
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="textColor" red="0.36470589040000001" green="0.40000003579999999" blue="0.47843140360000003" alpha="1" colorSpace="deviceRGB"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Bold" family="American Typewriter" pointSize="20"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
|
||||
</textField>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
@ -292,7 +286,7 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<gestureRecognizers/>
|
||||
<color key="tintColor" red="0.36470589040000001" green="0.40000003579999999" blue="0.47843140360000003" alpha="1" colorSpace="deviceRGB"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="URL"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="b9f-OB-AqY" id="8OW-dn-MdW"/>
|
||||
</connections>
|
||||
@ -352,6 +346,15 @@
|
||||
<outlet property="typeLabel" destination="QgX-q3-JLG" id="tv1-jy-Qbu"/>
|
||||
</connections>
|
||||
</tableViewController>
|
||||
<searchDisplayController id="P8c-gf-nN3">
|
||||
<connections>
|
||||
<outlet property="delegate" destination="0QO-2P-OhD" id="gst-Hm-5ja"/>
|
||||
<outlet property="searchBar" destination="qeo-n2-WVh" id="bFO-FC-Xdj"/>
|
||||
<outlet property="searchContentsController" destination="b9f-OB-AqY" id="xgo-Uj-wpm"/>
|
||||
<outlet property="searchResultsDataSource" destination="0QO-2P-OhD" id="XJh-rC-kId"/>
|
||||
<outlet property="searchResultsDelegate" destination="0QO-2P-OhD" id="Bm8-Q3-lLA"/>
|
||||
</connections>
|
||||
</searchDisplayController>
|
||||
<customObject id="0QO-2P-OhD" customClass="OPSearchDelegate">
|
||||
<connections>
|
||||
<outlet property="delegate" destination="b9f-OB-AqY" id="y3b-no-DZQ"/>
|
||||
@ -389,6 +392,7 @@
|
||||
<source key="sourceIdentifier" type="project" relativePath="./Classes/OPMainViewController.h"/>
|
||||
<relationships>
|
||||
<relationship kind="action" name="didChangeContentType:" candidateClass="UISegmentedControl"/>
|
||||
<relationship kind="action" name="didTriggerContent:"/>
|
||||
<relationship kind="outlet" name="contentField" candidateClass="UITextField"/>
|
||||
<relationship kind="outlet" name="contentTextView" candidateClass="UITextView"/>
|
||||
<relationship kind="outlet" name="contentType" candidateClass="UISegmentedControl"/>
|
||||
@ -408,7 +412,7 @@
|
||||
</class>
|
||||
</classes>
|
||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||
<simulatedStatusBarMetrics key="statusBar" statusBarStyle="blackTranslucent"/>
|
||||
<simulatedStatusBarMetrics key="statusBar"/>
|
||||
<simulatedOrientationMetrics key="orientation"/>
|
||||
<simulatedScreenMetrics key="destination"/>
|
||||
</simulatedMetricsContainer>
|
||||
|
BIN
OnePassword/iTunesArtwork.png
Normal file
After Width: | Height: | Size: 153 KiB |
1168
Scripts/bashlib
Normal file
60
Scripts/checkLocalization
Executable file
@ -0,0 +1,60 @@
|
||||
#! /usr/bin/env bash
|
||||
source bashlib
|
||||
|
||||
isIn() {
|
||||
local key=$1; shift
|
||||
|
||||
for value
|
||||
do [[ $value = "$key" ]] && return; done
|
||||
}
|
||||
|
||||
cd "${0%/*}/../../"
|
||||
|
||||
emit "Enumerating localization keys"
|
||||
code=$(find Classes -type f -exec grep -o 'NSLocalizedString(@"[^"]*"' {} + | sed -n 's/.*\("[^"]*"\).*/\1/p' | sort -bu)
|
||||
for l in Resources/*.lproj/Localizable.strings; do
|
||||
k=${l#*/}; k=${k%%/*}
|
||||
emit " - Found language: ${k%.lproj}"
|
||||
|
||||
lang+=( "$k" )
|
||||
lprojLocal+=( "$(sed -n '/\/\/[^"]*\[REMOTE\][^"]*$/!s/^\("[^"]*"\).*/\1/p' "$l" | sort -bu)" )
|
||||
lprojAll+=( "$(sed -n 's/^\("[^"]*"\).*/\1/p' "$l" | sort -u)" )
|
||||
done
|
||||
|
||||
allhealthy=1
|
||||
healthy=1
|
||||
echo; emit "Looking for unused localization keys"
|
||||
for l in "${!lang[@]}"; do
|
||||
while read; do
|
||||
(( healthy )) && emit -y "Not used in code or marked '// [REMOTE]':"
|
||||
allhealthy=0
|
||||
healthy=0
|
||||
emit -y " ${lang[l]}: ${REPLY##*([[:space:]])} "
|
||||
done < <(comm -1 -3 <(printf '%s\n' "$code") <(printf '%s\n' "${lprojLocal[l]}"))
|
||||
done
|
||||
(( healthy )) && emit "No unused keys."
|
||||
|
||||
healthy=1
|
||||
echo; emit "Looking for missing localization keys"
|
||||
for l in "${!lang[@]}"; do
|
||||
chealthy=1
|
||||
while read; do
|
||||
(( chealthy )) && emit -y "Used by code:"
|
||||
allhealthy=0
|
||||
chealthy=0
|
||||
healthy=0
|
||||
emit -r " ${lang[l]}: ${REPLY##*([[:space:]])} "
|
||||
done < <(comm -2 -3 <(printf '%s\n' "$code") <(printf '%s\n' "${lprojAll[l]}"))
|
||||
khealthy=1
|
||||
while read; do
|
||||
(( khealthy )) && emit -y "Present in other languages:"
|
||||
allhealthy=0
|
||||
khealthy=0
|
||||
healthy=0
|
||||
emit -r " ${lang[l]}: ${REPLY##*([[:space:]])} "
|
||||
done < <(for ol in "${!lang[@]}"; do comm -1 -3 <(printf '%s\n' "${lprojAll[l]}") <(printf '%s\n' "${lprojAll[ol]}"); done | sort -bu)
|
||||
done
|
||||
(( healthy )) && emit "No missing keys."
|
||||
|
||||
echo
|
||||
(( allhealthy )) && emit "All good." || emit -y "Some issues detected."
|
32
Scripts/convertImages
Executable file
@ -0,0 +1,32 @@
|
||||
#! /usr/bin/env bash
|
||||
source bashlib
|
||||
shopt -s nullglob
|
||||
|
||||
emit "Converting iTunesArtwork"
|
||||
icons=(
|
||||
[29]="Icon-Small.png"
|
||||
[50]="Icon-Small-50.png"
|
||||
[58]="Icon-Small@2x.png"
|
||||
[57]="Icon.png"
|
||||
[72]="Icon-72.png"
|
||||
[114]="Icon@2x.png"
|
||||
)
|
||||
cd "${0%/*}/../OnePassword"
|
||||
|
||||
for size in "${!icons[@]}"; do
|
||||
file=${icons[size]}
|
||||
|
||||
emit "$file ($size px)" --
|
||||
convert "iTunesArtwork.png" -resize "${size}x${size}" "$file"
|
||||
emit -$?
|
||||
done
|
||||
|
||||
|
||||
echo
|
||||
emit "Converting @2x artwork"
|
||||
for file in !(Icon*)@2x.png; do
|
||||
emit "${file/@2x}" --
|
||||
convert "$file" -resize 50% "${file/@2x}"
|
||||
emit -$?
|
||||
done
|
||||
|
@ -4,13 +4,13 @@ cd "${BASH_SOURCE%/*}/.."
|
||||
shopt -s extglob
|
||||
|
||||
|
||||
## Pearl
|
||||
## LisuUI
|
||||
#
|
||||
## Submodules that need to be checked out.
|
||||
dependencies=( External/Pearl External/Pearl:External/{jrswizzle,uicolor-utilities} )
|
||||
dependencies=( External/Pearl External/Pearl:External/jrswizzle External/Pearl:External/uicolor-utilities )
|
||||
|
||||
## Custom migration.
|
||||
# Nothing yet.
|
||||
# None yet.
|
||||
|
||||
|
||||
################################################################################
|
||||
|