Added some new features for individual torrent settings

This commit is contained in:
Alexey Chechetkin
2015-07-26 21:46:21 +03:00
parent dc332af6fc
commit dfb0bbbc3e
25 changed files with 751 additions and 112 deletions

View File

@@ -143,6 +143,7 @@
2CF72FFE1B651180007D5354 /* TrackerListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TrackerListController.m; sourceTree = "<group>"; };
2CF730001B6514E5007D5354 /* TrackerInfoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrackerInfoCell.h; sourceTree = "<group>"; };
2CF730011B6514E5007D5354 /* TrackerInfoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TrackerInfoCell.m; sourceTree = "<group>"; };
2CF730041B652DE8007D5354 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/controllers.strings; sourceTree = "<group>"; };
2CF7D5121B42E78C006D01FD /* PeerListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeerListController.h; sourceTree = "<group>"; };
2CF7D5131B42E78C006D01FD /* PeerListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PeerListController.m; sourceTree = "<group>"; };
2CF8C7631B4302F7005A7DD6 /* PeerListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeerListCell.h; sourceTree = "<group>"; };
@@ -172,7 +173,6 @@
2CFAB9131B49B7FD00BE71D9 /* TRSessionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TRSessionInfo.h; sourceTree = "<group>"; };
2CFAB9141B49B7FD00BE71D9 /* TRSessionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TRSessionInfo.m; sourceTree = "<group>"; };
2CFB92CE1B56D25400C83354 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/controllers.storyboard; sourceTree = "<group>"; };
2CFB92D01B56D26E00C83354 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/controllers.strings; sourceTree = "<group>"; };
2CFB9BA71B56FA1300D4A51C /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
2CFB9BA91B56FA1F00D4A51C /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
2CFBA7961B4FA9D600202281 /* TransmissionRPCClient.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = TransmissionRPCClient.entitlements; sourceTree = "<group>"; };
@@ -725,7 +725,7 @@
isa = PBXVariantGroup;
children = (
2CFB92CE1B56D25400C83354 /* Base */,
2CFB92D01B56D26E00C83354 /* ru */,
2CF730041B652DE8007D5354 /* ru */,
);
name = controllers.storyboard;
sourceTree = "<group>";

View File

@@ -818,7 +818,7 @@
<segment title="High"/>
</segments>
</segmentedControl>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconCirclePie36x36" translatesAutoresizingMaskIntoConstraints="NO" id="g3q-Ap-aIL">
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconScale36x36" translatesAutoresizingMaskIntoConstraints="NO" id="g3q-Ap-aIL">
<rect key="frame" x="8" y="10" width="24" height="24"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="HuQ-5g-07m"/>
@@ -2314,6 +2314,279 @@
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Individual settings" id="Kun-nG-5NI">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="tGz-ge-bBX">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="tGz-ge-bBX" id="SiL-Yc-bF8">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconPositionMark36x36" translatesAutoresizingMaskIntoConstraints="NO" id="E58-wU-eor">
<rect key="frame" x="8" y="4" width="36" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="EmM-6K-0oX"/>
<constraint firstAttribute="width" constant="36" id="ity-XG-WZb"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Queue positon" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="T4C-mC-ash">
<rect key="frame" x="52" y="13" width="400" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stepper opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" maximumValue="1000" translatesAutoresizingMaskIntoConstraints="NO" id="j28-n5-LWa">
<rect key="frame" x="498" y="7" width="94" height="29"/>
<connections>
<action selector="queuePositionChanged:" destination="tX2-Nb-0uX" eventType="valueChanged" id="I5i-Xr-nvQ"/>
</connections>
</stepper>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="14" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sba-ol-8ba">
<rect key="frame" x="460" y="13" width="30" height="18"/>
<constraints>
<constraint firstAttribute="width" constant="30" id="Lyd-rh-0yO"/>
</constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<constraints>
<constraint firstItem="T4C-mC-ash" firstAttribute="leading" secondItem="E58-wU-eor" secondAttribute="trailing" constant="8" symbolic="YES" id="F1A-Mq-azk"/>
<constraint firstItem="E58-wU-eor" firstAttribute="leading" secondItem="SiL-Yc-bF8" secondAttribute="leadingMargin" id="Gsq-XU-Ur5"/>
<constraint firstItem="sba-ol-8ba" firstAttribute="leading" secondItem="T4C-mC-ash" secondAttribute="trailing" constant="8" id="TQk-3P-Eef"/>
<constraint firstAttribute="centerY" secondItem="sba-ol-8ba" secondAttribute="centerY" id="Upa-n0-QH1"/>
<constraint firstItem="j28-n5-LWa" firstAttribute="trailing" secondItem="SiL-Yc-bF8" secondAttribute="trailingMargin" id="g9M-cP-UaY"/>
<constraint firstItem="j28-n5-LWa" firstAttribute="leading" secondItem="sba-ol-8ba" secondAttribute="trailing" constant="8" symbolic="YES" id="mJQ-X3-Pfi"/>
<constraint firstAttribute="centerY" secondItem="E58-wU-eor" secondAttribute="centerY" id="pTk-Cy-Xr9"/>
<constraint firstAttribute="centerY" secondItem="T4C-mC-ash" secondAttribute="centerY" id="xHj-Wy-cex"/>
<constraint firstAttribute="centerY" secondItem="j28-n5-LWa" secondAttribute="centerY" id="xUF-LY-Rhf"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="CE6-Zb-Qau">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="CE6-Zb-Qau" id="qgi-MF-Rva">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconScale36x36" translatesAutoresizingMaskIntoConstraints="NO" id="IX4-Cz-zYV">
<rect key="frame" x="8" y="4" width="36" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="4TS-AS-3aN"/>
<constraint firstAttribute="width" constant="36" id="ehy-IF-eiQ"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="Bandwidth priority" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6m4-u2-43E">
<rect key="frame" x="52" y="13" width="126" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="FDU-hn-Dfw">
<rect key="frame" x="416" y="7" width="176" height="29"/>
<segments>
<segment title="Low"/>
<segment title="Normal"/>
<segment title="High"/>
</segments>
</segmentedControl>
</subviews>
<constraints>
<constraint firstItem="6m4-u2-43E" firstAttribute="leading" secondItem="IX4-Cz-zYV" secondAttribute="trailing" constant="8" symbolic="YES" id="8n1-ly-QGW"/>
<constraint firstAttribute="centerY" secondItem="IX4-Cz-zYV" secondAttribute="centerY" id="BwY-D2-b4a"/>
<constraint firstAttribute="centerY" secondItem="FDU-hn-Dfw" secondAttribute="centerY" id="N5o-0F-zeQ"/>
<constraint firstItem="IX4-Cz-zYV" firstAttribute="leading" secondItem="qgi-MF-Rva" secondAttribute="leadingMargin" id="UH1-ub-7xV"/>
<constraint firstItem="FDU-hn-Dfw" firstAttribute="leading" secondItem="6m4-u2-43E" secondAttribute="trailing" priority="250" constant="8" id="VPe-Bv-n39"/>
<constraint firstItem="FDU-hn-Dfw" firstAttribute="trailing" secondItem="qgi-MF-Rva" secondAttribute="trailingMargin" id="jMV-n5-Wm8"/>
<constraint firstAttribute="centerY" secondItem="6m4-u2-43E" secondAttribute="centerY" id="we4-bx-2ob"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Sf7-Ie-PSA">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Sf7-Ie-PSA" id="XpL-3l-bE7">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconTurtleUpDown36x36" translatesAutoresizingMaskIntoConstraints="NO" id="Nfg-my-59p">
<rect key="frame" x="8" y="4" width="36" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="Div-NO-DQm"/>
<constraint firstAttribute="width" constant="36" id="dkL-9S-3Uo"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="Upload limit (Kb/s)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TI2-y7-vZ7">
<rect key="frame" x="52" y="13" width="127" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="200" borderStyle="roundedRect" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Gz6-qM-ZPF">
<rect key="frame" x="531" y="7" width="61" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="61" id="c9I-Sb-bmJ"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Bx4-9f-C64">
<rect key="frame" x="474" y="6" width="51" height="31"/>
<connections>
<action selector="uploadLimitChanged:" destination="tX2-Nb-0uX" eventType="valueChanged" id="1tC-1y-hxl"/>
</connections>
</switch>
</subviews>
<constraints>
<constraint firstAttribute="trailingMargin" secondItem="Gz6-qM-ZPF" secondAttribute="trailing" id="0f1-2S-zIK"/>
<constraint firstItem="Nfg-my-59p" firstAttribute="leading" secondItem="XpL-3l-bE7" secondAttribute="leadingMargin" id="Acp-cM-Nd0"/>
<constraint firstAttribute="centerY" secondItem="Nfg-my-59p" secondAttribute="centerY" id="Myx-aR-9Ft"/>
<constraint firstAttribute="centerY" secondItem="TI2-y7-vZ7" secondAttribute="centerY" id="Qxq-3d-hdI"/>
<constraint firstAttribute="centerY" secondItem="Bx4-9f-C64" secondAttribute="centerY" id="Z02-RQ-mE4"/>
<constraint firstAttribute="centerY" secondItem="Gz6-qM-ZPF" secondAttribute="centerY" id="aeP-ah-6tG"/>
<constraint firstItem="Bx4-9f-C64" firstAttribute="leading" secondItem="TI2-y7-vZ7" secondAttribute="trailing" priority="250" constant="8" symbolic="YES" id="dbg-2y-DdY"/>
<constraint firstItem="TI2-y7-vZ7" firstAttribute="leading" secondItem="Nfg-my-59p" secondAttribute="trailing" constant="8" symbolic="YES" id="mGJ-ab-hlB"/>
<constraint firstItem="Gz6-qM-ZPF" firstAttribute="leading" secondItem="Bx4-9f-C64" secondAttribute="trailing" constant="8" symbolic="YES" id="z8n-T1-EKH"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="3I2-f5-wy2">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="3I2-f5-wy2" id="nkg-xH-uKD">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconTurtleUpDown36x36" translatesAutoresizingMaskIntoConstraints="NO" id="bSW-qK-jTr">
<rect key="frame" x="8" y="4" width="36" height="36"/>
<constraints>
<constraint firstAttribute="width" constant="36" id="hth-l3-J7f"/>
<constraint firstAttribute="height" constant="36" id="joE-WZ-YK3"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="Download limit (Kb/s)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="S5e-OZ-1he">
<rect key="frame" x="52" y="13" width="146" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="200" borderStyle="roundedRect" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="iUk-mi-jCD">
<rect key="frame" x="531" y="7" width="61" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="61" id="ttc-fC-bG8"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bzZ-Z2-WEo">
<rect key="frame" x="474" y="6" width="51" height="31"/>
<connections>
<action selector="downloadLimitChanged:" destination="tX2-Nb-0uX" eventType="valueChanged" id="DSX-Z6-mC8"/>
</connections>
</switch>
</subviews>
<constraints>
<constraint firstAttribute="centerY" secondItem="S5e-OZ-1he" secondAttribute="centerY" id="6j5-bX-csV"/>
<constraint firstItem="S5e-OZ-1he" firstAttribute="leading" secondItem="bSW-qK-jTr" secondAttribute="trailing" constant="8" symbolic="YES" id="7Dt-Fb-VML"/>
<constraint firstItem="bSW-qK-jTr" firstAttribute="leading" secondItem="nkg-xH-uKD" secondAttribute="leadingMargin" id="7zv-d6-2OC"/>
<constraint firstAttribute="centerY" secondItem="bzZ-Z2-WEo" secondAttribute="centerY" id="Ci1-NJ-K5z"/>
<constraint firstItem="bzZ-Z2-WEo" firstAttribute="leading" secondItem="S5e-OZ-1he" secondAttribute="trailing" priority="250" constant="8" symbolic="YES" id="H1a-Qu-er0"/>
<constraint firstItem="iUk-mi-jCD" firstAttribute="leading" secondItem="bzZ-Z2-WEo" secondAttribute="trailing" constant="8" symbolic="YES" id="Qwa-oK-Pcs"/>
<constraint firstItem="iUk-mi-jCD" firstAttribute="trailing" secondItem="nkg-xH-uKD" secondAttribute="trailingMargin" id="SrE-ec-r2t"/>
<constraint firstAttribute="centerY" secondItem="bSW-qK-jTr" secondAttribute="centerY" id="atY-Pq-hPp"/>
<constraint firstAttribute="centerY" secondItem="iUk-mi-jCD" secondAttribute="centerY" id="yOo-E4-dqD"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Jdk-0l-fgo">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Jdk-0l-fgo" id="i8o-Zr-cWa">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconPig" translatesAutoresizingMaskIntoConstraints="NO" id="Jhq-vl-P7t">
<rect key="frame" x="8" y="4" width="36" height="36"/>
<constraints>
<constraint firstAttribute="height" constant="36" id="HbU-YP-WI7"/>
<constraint firstAttribute="width" constant="36" id="gQf-0L-O5I"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Seed ratio limit" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SdZ-ov-LUD">
<rect key="frame" x="52" y="13" width="103" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="1.5" borderStyle="roundedRect" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="WlW-K3-8QX">
<rect key="frame" x="531" y="7" width="61" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="61" id="Xfc-Av-5SC"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fp0-3Y-Do2">
<rect key="frame" x="474" y="6" width="51" height="31"/>
<connections>
<action selector="seedRatioLimitChanged:" destination="tX2-Nb-0uX" eventType="valueChanged" id="AKt-Mm-cry"/>
</connections>
</switch>
</subviews>
<constraints>
<constraint firstItem="Jhq-vl-P7t" firstAttribute="leading" secondItem="i8o-Zr-cWa" secondAttribute="leadingMargin" id="7nc-if-Ppg"/>
<constraint firstItem="WlW-K3-8QX" firstAttribute="trailing" secondItem="i8o-Zr-cWa" secondAttribute="trailingMargin" id="BM5-Ji-hwn"/>
<constraint firstAttribute="centerY" secondItem="WlW-K3-8QX" secondAttribute="centerY" id="BQJ-HJ-JJK"/>
<constraint firstAttribute="centerY" secondItem="Jhq-vl-P7t" secondAttribute="centerY" id="Gmf-DR-k6d"/>
<constraint firstItem="fp0-3Y-Do2" firstAttribute="leading" secondItem="SdZ-ov-LUD" secondAttribute="trailing" priority="250" constant="8" symbolic="YES" id="OaM-aw-HIj"/>
<constraint firstItem="SdZ-ov-LUD" firstAttribute="leading" secondItem="Jhq-vl-P7t" secondAttribute="trailing" constant="8" symbolic="YES" id="TJz-TD-gm9"/>
<constraint firstItem="WlW-K3-8QX" firstAttribute="leading" secondItem="fp0-3Y-Do2" secondAttribute="trailing" constant="8" symbolic="YES" id="fe7-ZT-vu3"/>
<constraint firstAttribute="centerY" secondItem="SdZ-ov-LUD" secondAttribute="centerY" id="iaJ-PN-baS"/>
<constraint firstAttribute="centerY" secondItem="fp0-3Y-Do2" secondAttribute="centerY" id="vUl-Jq-Oae"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="Fbk-0n-pOQ">
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Fbk-0n-pOQ" id="zeR-MB-c9e">
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iconClockPie" translatesAutoresizingMaskIntoConstraints="NO" id="bDi-1E-hjQ">
<rect key="frame" x="8" y="4" width="36" height="36"/>
<constraints>
<constraint firstAttribute="width" constant="36" id="G2s-bz-ifm"/>
<constraint firstAttribute="height" constant="36" id="bcx-8T-8iQ"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Seed idle limit (min)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hNE-ff-j0p">
<rect key="frame" x="52" y="13" width="134" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="kG2-Pq-hiE">
<rect key="frame" x="474" y="6" width="51" height="31"/>
<connections>
<action selector="seedIdleLimitChanged:" destination="tX2-Nb-0uX" eventType="valueChanged" id="CfG-69-Zii"/>
</connections>
</switch>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="30" borderStyle="roundedRect" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="E3d-h7-z4B">
<rect key="frame" x="531" y="7" width="61" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="61" id="eeX-ct-xY8"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="centerY" secondItem="bDi-1E-hjQ" secondAttribute="centerY" id="9uw-cm-ukc"/>
<constraint firstItem="E3d-h7-z4B" firstAttribute="trailing" secondItem="zeR-MB-c9e" secondAttribute="trailingMargin" id="B7o-3Q-24r"/>
<constraint firstItem="kG2-Pq-hiE" firstAttribute="leading" secondItem="hNE-ff-j0p" secondAttribute="trailing" priority="250" constant="319" id="GYY-aT-hkF"/>
<constraint firstAttribute="centerY" secondItem="E3d-h7-z4B" secondAttribute="centerY" id="Gob-ap-Ner"/>
<constraint firstItem="E3d-h7-z4B" firstAttribute="leading" secondItem="kG2-Pq-hiE" secondAttribute="trailing" constant="8" symbolic="YES" id="Str-w1-Iss"/>
<constraint firstItem="hNE-ff-j0p" firstAttribute="leading" secondItem="bDi-1E-hjQ" secondAttribute="trailing" constant="8" symbolic="YES" id="hnE-Vg-Zpr"/>
<constraint firstAttribute="centerY" secondItem="hNE-ff-j0p" secondAttribute="centerY" id="mBV-CN-XH4"/>
<constraint firstAttribute="centerY" secondItem="kG2-Pq-hiE" secondAttribute="centerY" id="sWc-tM-aCt"/>
<constraint firstItem="bDi-1E-hjQ" firstAttribute="leading" secondItem="zeR-MB-c9e" secondAttribute="leadingMargin" id="twj-7x-Xwi"/>
</constraints>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Details" id="a5E-hR-nP1">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="p7b-Aa-66X">
@@ -2587,8 +2860,19 @@
<outlet property="hashLabel" destination="Qfj-q6-tG4" id="HUi-BG-n7u"/>
<outlet property="haveLabel" destination="4ak-eh-UpQ" id="SCc-8M-MK0"/>
<outlet property="progressLabel" destination="8JU-52-6C1" id="dJY-Ug-H9B"/>
<outlet property="queuePositionLabel" destination="sba-ol-8ba" id="uEh-4L-f4d"/>
<outlet property="ratioLabel" destination="diM-bd-pyU" id="WWZ-jf-5JO"/>
<outlet property="segmentBandwidthPriority" destination="FDU-hn-Dfw" id="Irn-BB-ebL"/>
<outlet property="stateLabel" destination="zSt-5j-eZW" id="FV1-zS-F4p"/>
<outlet property="stepperQueuePosition" destination="j28-n5-LWa" id="gnN-ql-b1J"/>
<outlet property="switchDownloadLimit" destination="bzZ-Z2-WEo" id="RcQ-Zp-xmd"/>
<outlet property="switchRatioLimit" destination="fp0-3Y-Do2" id="kgs-Mf-6dz"/>
<outlet property="switchSeedIdleLimit" destination="kG2-Pq-hiE" id="aZq-5A-cz6"/>
<outlet property="switchUploadLimit" destination="Bx4-9f-C64" id="zUD-4q-AiE"/>
<outlet property="textDownloadLimit" destination="iUk-mi-jCD" id="Eb8-Vh-aIZ"/>
<outlet property="textSeedIdleLimit" destination="E3d-h7-z4B" id="SdJ-XA-lcU"/>
<outlet property="textSeedRatioLimit" destination="WlW-K3-8QX" id="vdv-QW-OcF"/>
<outlet property="textUploadLimit" destination="Gz6-qM-ZPF" id="VLH-of-1xR"/>
<outlet property="torrentNameLabel" destination="Fql-nw-zPa" id="0B3-8K-oTF"/>
<outlet property="uploadedLabel" destination="T2X-Jo-QJA" id="aXL-Jz-W7a"/>
<outlet property="uploadingTimeLabel" destination="yej-g8-253" id="3AZ-bn-aak"/>
@@ -2801,7 +3085,6 @@
<image name="iconAnnounceTower36x36" width="36" height="36"/>
<image name="iconBadge" width="37" height="37"/>
<image name="iconBulb" width="37" height="37"/>
<image name="iconCirclePie36x36" width="36" height="36"/>
<image name="iconClock" width="37" height="37"/>
<image name="iconClockPie" width="37" height="37"/>
<image name="iconComputer" width="37" height="37"/>
@@ -2815,11 +3098,14 @@
<image name="iconPercents" width="37" height="37"/>
<image name="iconPig" width="37" height="37"/>
<image name="iconPlay36x36" width="36" height="36"/>
<image name="iconPositionMark36x36" width="36" height="36"/>
<image name="iconRefreshTime" width="37" height="37"/>
<image name="iconRunningMan36x36" width="36" height="36"/>
<image name="iconScale36x36" width="36" height="36"/>
<image name="iconTotalDownloaded" width="37" height="37"/>
<image name="iconTotalSize" width="37" height="37"/>
<image name="iconTotalUploaded" width="37" height="37"/>
<image name="iconTrans45x45" width="45" height="45"/>
<image name="iconTurtleUpDown36x36" width="36" height="36"/>
</resources>
</document>

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "positionMark36x36_@36x36-5.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "positionMark36x36_@72x72-6.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "positionMark36x36_@108x108-7.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "scale36x36_@36x36-5.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "scale36x36_@72x72-6.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "scale36x36_@108x108-7.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "turtleUpDown36x36_@36x36-5.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "turtleUpDown36x36_@72x72-6.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "turtleUpDown36x36_@108x108-7.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -102,6 +102,17 @@
#define TR_ARG_FIELDS_RECHECKPROGRESS @"recheckProgress"
#define TR_ARG_FIELDS_DOWNLOADEDEVER @"downloadedEver"
#define TR_ARG_FIELDS_TRACKERREMOVE @"trackerRemove"
#define TR_ARG_FIELDS_HONORSSESSIONLIMITS @"honorsSessionLimits"
#define TR_ARG_FIELDS_BANDWIDTHPRIORITY @"bandwidthPriority"
#define TR_ARG_FIELDS_QUEUEPOSITION @"queuePosition"
#define TR_ARG_FIELDS_SEEDIDLEMODE @"seedIdleMode"
#define TR_ARG_FIELDS_SEEDIDLELIMIT @"seedIdleLimit"
#define TR_ARG_FIELDS_SEEDRATIOMODE @"seedRatioMode"
#define TR_ARG_FIELDS_SEEDRATIOLIMIT @"seedRatioLimit"
#define TR_ARG_FIELDS_UPLOADLIMITED @"uploadLimited"
#define TR_ARG_FIELDS_UPLOADLIMIT @"uploadLimit"
#define TR_ARG_FIELDS_DOWNLOADLIMITED @"downloadLimited"
#define TR_ARG_FIELDS_DOWNLOADLIMIT @"downloadLimit"
// FileInfo values
#define TR_ARG_FIELDS_FILES @"files"
@@ -148,14 +159,13 @@
#define TR_ARG_TRACKER_TIER @"tier"
#define TR_ARG_TRACKER_ID @"id"
// session params
#define TR_ARG_SESSION_ALTLIMIDOWNRATE @"alt-speed-down" // number | max global download speed (KBps)
#define TR_ARG_SESSION_ALTLIMITRATEENABLED @"alt-speed-enabled" // boolean | true means use the alt speeds
//#define TR_ARG_SESSION_@"alt-speed-time-begin" // number | when to turn on alt speeds (units: minutes after midnight)
//#define TR_ARG_SESSION_@"alt-speed-time-enabled" // boolean | true means the scheduled on/off times are used
//#define TR_ARG_SESSION_@"alt-speed-time-end" // number | when to turn off alt speeds (units: same)
//#define TR_ARG_SESSION_@"alt-speed-time-day" // number | what day(s) to turn on alt speeds (look at tr_sched_day)
#define TR_ARG_SESSION_ALTLIMITTIMEBEGIN @"alt-speed-time-begin" // number | when to turn on alt speeds (units: minutes after midnight)
#define TR_ARG_SESSION_ALTLIMITTIMEENABLED @"alt-speed-time-enabled" // boolean | true means the scheduled on/off times are used
#define TR_ARG_SESSION_ALTLIMITTIMEEND @"alt-speed-time-end" // number | when to turn off alt speeds (units: same)
#define TR_ARG_SESSION_ALTLIMITTIMEDAY @"alt-speed-time-day" // number | what day(s) to turn on alt speeds (look at tr_sched_day)
#define TR_ARG_SESSION_ALTLIMITUPRATE @"alt-speed-up" // number | max global upload speed (KBps)
#define TR_ARG_SESSION_DOWNLOADDIR @"download-dir" // string | default path to download torrents
#define TR_ARG_SESSION_DHTENABLED @"dht-enabled" // boolean | true means allow dht in public torrents

View File

@@ -35,6 +35,7 @@
@optional - (void)gotPortTestedWithSuccess:(BOOL)portIsOpen;
@optional - (void)gotAllTrackers:(NSArray*)trackerStats forTorrentWithId:(int)torrentId;
@optional - (void)gotTrackerRemoved:(int)trackerId forTorrentWithId:(int)torrentId;
@optional - (void)gotSetSettingsForTorrentWithId:(int)torrentId;
@end
@@ -70,6 +71,7 @@
- (void)stopDownloadingFilesWithIndexes:(NSArray*)indexes forTorrentWithId:(int)torrentId;
- (void)resumeDownloadingFilesWithIndexes:(NSArray*)indexes forTorrentWithId:(int)torrentId;
- (void)setPriority:(int)priority forFilesWithIndexes:(NSArray*)indexes forTorrentWithId:(int)torrentId;
- (void)setSettings:(TRInfo*)setttnigs forTorrentWithId:(int)torrentId;
- (void)getSessionInfo;
- (void)setSessionWithSessionInfo:(TRSessionInfo*)info;

View File

@@ -103,7 +103,17 @@
TR_ARG_FIELDS_RECHECKPROGRESS,
TR_ARG_FIELDS_DOWNLOADEDEVER,
TR_ARG_FIELDS_ETA,
TR_ARG_BANDWIDTHPRIORITY
TR_ARG_FIELDS_BANDWIDTHPRIORITY,
TR_ARG_FIELDS_QUEUEPOSITION,
TR_ARG_FIELDS_HONORSSESSIONLIMITS,
TR_ARG_FIELDS_SEEDIDLELIMIT,
TR_ARG_FIELDS_SEEDIDLEMODE,
TR_ARG_FIELDS_SEEDRATIOLIMIT,
TR_ARG_FIELDS_SEEDRATIOMODE,
TR_ARG_FIELDS_UPLOADLIMIT,
TR_ARG_FIELDS_UPLOADLIMITED,
TR_ARG_FIELDS_DOWNLOADLIMIT,
TR_ARG_FIELDS_DOWNLOADLIMITED
],
TR_ARG_IDS : @[@(torrentId)]
}
@@ -240,6 +250,33 @@
}];
}
- (void)setSettings:(TRInfo *)info forTorrentWithId:(int)torrentId
{
NSDictionary *requestVals = @{
TR_METHOD : TR_METHODNAME_TORRENTSET,
TR_METHOD_ARGS : @{
TR_ARG_FIELDS_QUEUEPOSITION : @(info.queuePosition),
TR_ARG_FIELDS_BANDWIDTHPRIORITY : @(info.bandwidthPriority),
TR_ARG_FIELDS_UPLOADLIMITED : @(info.uploadLimitEnabled),
TR_ARG_FIELDS_UPLOADLIMIT : @(info.uploadLimit),
TR_ARG_FIELDS_DOWNLOADLIMITED : @(info.downloadLimitEnabled),
TR_ARG_FIELDS_DOWNLOADLIMIT : @(info.downloadLimit),
TR_ARG_FIELDS_SEEDIDLEMODE : @(info.seedIdleMode),
TR_ARG_FIELDS_SEEDIDLELIMIT : @(info.seedIdleLimit),
TR_ARG_FIELDS_SEEDRATIOMODE : @(info.seedRatioMode),
TR_ARG_FIELDS_SEEDRATIOLIMIT : @(info.seedRatioLimit),
TR_ARG_IDS : @[@(torrentId)]
}
};
[self makeRequest:requestVals withName:TR_METHODNAME_TORRENTSET andHandler:^(NSDictionary *json)
{
if( _delegate && [_delegate respondsToSelector:@selector(gotSetSettingsForTorrentWithId:)])
dispatch_async(dispatch_get_main_queue(), ^{
[_delegate gotSetSettingsForTorrentWithId:torrentId];
});
}];
}
- (void)stopTorrent:(int)torrentId
{

View File

@@ -298,16 +298,20 @@
[_connector getAllTorrents];
UINavigationController *nav = _torrentController.navigationController;
UIViewController *top = nav.topViewController;
if( nav.topViewController == _torrentInfoController )
if( top == _torrentInfoController )
[_connector getDetailedInfoForTorrentWithId:_torrentInfoController.torrentId];
else if( nav.topViewController == _peerListController)
else if( top == _peerListController)
[_connector getAllPeersForTorrentWithId:_peerListController.torrentId];
else if( nav.topViewController == _fileListController )
else if( top == _fileListController )
[_connector getAllFilesForTorrentWithId:_fileListController.torrentId];
else if( top == _trackerListController )
[_connector getAllTrackersForTorrentWithId:_trackerListController.torrentId];
//if( _sessionInfo )
// update free space
// [_connector getFreeSpaceWithDownloadDir:_sessionInfo.downloadDir];
@@ -383,9 +387,6 @@
{
[self.refreshControl endRefreshing];
[_torrentController.refreshControl endRefreshing];
// clear error message
//self.headerTitleString = @"Request OK";
}
// got all torrents, refresh statues
@@ -1016,6 +1017,23 @@
[_connector getAllTrackersForTorrentWithId:torrentId];
}
- (void)applyTorrentSettings:(TRInfo *)info forTorrentWithId:(int)torrentId
{
if( _torrentInfoController )
{
UINavigationController *nav = _torrentInfoController.navigationController;
[nav popViewControllerAnimated:YES];
//NSLog(@"Setting torrent individual settings ... ");
[_connector setSettings:info forTorrentWithId:torrentId];
}
}
- (void)gotSetSettingsForTorrentWithId:(int)torrentId
{
[self showInfoPopup:NSLocalizedString(@"Torrent settings has been applied", @"")];
}
#pragma mark - TableView delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

View File

@@ -74,7 +74,18 @@
@property(nonatomic,readonly) float recheckProgress;
@property(nonatomic,readonly) NSString* recheckProgressString;
@property(nonatomic,readonly) int bandwidthPriority;
@property(nonatomic) int bandwidthPriority;
@property(nonatomic,readonly) NSString* bandwidthPriorityString;
@property(nonatomic) BOOL honorsSessionLimits;
@property(nonatomic) BOOL uploadLimitEnabled;
@property(nonatomic) int uploadLimit;
@property(nonatomic) BOOL downloadLimitEnabled;
@property(nonatomic) BOOL downloadLimit;
@property(nonatomic) int seedIdleMode;
@property(nonatomic) int seedIdleLimit;
@property(nonatomic) int seedRatioMode;
@property(nonatomic) int seedRatioLimit;
@property(nonatomic) int queuePosition;
@end

View File

@@ -212,12 +212,42 @@
_etaTimeString = (seconds > 0) ? formatHoursMinutes(seconds) : NSLocalizedString(@"unknown", @"ETA time string");
}
if( dict[TR_ARG_BANDWIDTHPRIORITY] )
if( dict[TR_ARG_FIELDS_BANDWIDTHPRIORITY] )
{
_bandwidthPriority = [dict[TR_ARG_BANDWIDTHPRIORITY] intValue];
_bandwidthPriorityString = (_bandwidthPriority == 0 ) ? @"normal" : ( _bandwidthPriority == -1 ? @"low" : @"high" );
}
if( dict[TR_ARG_FIELDS_HONORSSESSIONLIMITS] )
_honorsSessionLimits = [dict[TR_ARG_FIELDS_HONORSSESSIONLIMITS] boolValue];
if( dict[TR_ARG_FIELDS_QUEUEPOSITION] )
_queuePosition = [dict[TR_ARG_FIELDS_QUEUEPOSITION] intValue];
if( dict[TR_ARG_FIELDS_UPLOADLIMITED] )
{
_uploadLimitEnabled = [dict[TR_ARG_FIELDS_UPLOADLIMITED] boolValue];
_uploadLimit = [dict[TR_ARG_FIELDS_UPLOADLIMIT] intValue];
}
if( dict[TR_ARG_FIELDS_DOWNLOADLIMITED] )
{
_downloadLimitEnabled = [dict[TR_ARG_FIELDS_DOWNLOADLIMITED] boolValue];
_downloadLimit = [dict[TR_ARG_FIELDS_DOWNLOADLIMIT] intValue];
}
if( dict[TR_ARG_FIELDS_SEEDIDLEMODE] )
{
_seedIdleMode = [dict[TR_ARG_FIELDS_SEEDIDLEMODE] intValue];
_seedIdleLimit = [dict[TR_ARG_FIELDS_SEEDIDLELIMIT] intValue];
}
if( dict[TR_ARG_FIELDS_SEEDRATIOMODE] )
{
_seedRatioMode = [dict[TR_ARG_FIELDS_SEEDRATIOMODE] intValue];
_seedRatioLimit = [dict[TR_ARG_FIELDS_SEEDRATIOLIMIT] intValue];
}
}
return self;

View File

@@ -8,6 +8,7 @@
#import <UIKit/UIKit.h>
#import "TRInfo.h"
#import "CommonTableController.h"
#define CONTROLLER_ID_TORRENTINFO @"torrentInfoController"
#define CELL_ID_SHOWPEERS @"showPeersId"
@@ -26,10 +27,11 @@
@optional - (void)showPeersForTorrentWithId:(int)torrentId;
@optional - (void)showFilesForTorrentWithId:(int)torrentId;
@optional - (void)showTrackersForTorrentWithId:(int)torrentId;
@optional - (void)applyTorrentSettings:(TRInfo*)info forTorrentWithId:(int)torrentId;
@end
@interface TorrentInfoController : UITableViewController
@interface TorrentInfoController : CommonTableController
// holds torrent id
@property(nonatomic) int torrentId;

View File

@@ -26,6 +26,20 @@
@property (weak, nonatomic) IBOutlet UILabel *uploadingTimeLabel;
@property (weak, nonatomic) IBOutlet UILabel *downloadingTimeLabel;
@property (weak, nonatomic) IBOutlet UILabel *hashLabel;
@property (weak, nonatomic) IBOutlet UIStepper *stepperQueuePosition;
@property (weak, nonatomic) IBOutlet UILabel *queuePositionLabel;
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentBandwidthPriority;
@property (weak, nonatomic) IBOutlet UISwitch *switchUploadLimit;
@property (weak, nonatomic) IBOutlet UITextField *textUploadLimit;
@property (weak, nonatomic) IBOutlet UISwitch *switchDownloadLimit;
@property (weak, nonatomic) IBOutlet UITextField *textDownloadLimit;
@property (weak, nonatomic) IBOutlet UISwitch *switchRatioLimit;
@property (weak, nonatomic) IBOutlet UITextField *textSeedRatioLimit;
@property (weak, nonatomic) IBOutlet UISwitch *switchSeedIdleLimit;
@property (weak, nonatomic) IBOutlet UITextField *textSeedIdleLimit;
@property(nonatomic) BOOL enableControls;
@end
@@ -38,13 +52,17 @@
UIBarButtonItem *_playButton;
UIBarButtonItem *_spacerButton;
UIBarButtonItem *_checkButton;
UIBarButtonItem *_applyButton;
NSURL *_commentURL;
TRInfo *_torrentInfo;
BOOL _bFirstTime;
}
- (void)viewDidLoad {
- (void)viewDidLoad
{
[super viewDidLoad];
self.clearsSelectionOnViewWillAppear = YES;
@@ -60,11 +78,82 @@
_playButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(startTorrent)];
_spacerButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
_checkButton = [[UIBarButtonItem alloc] initWithTitle:@"Verify" style:UIBarButtonItemStylePlain target:self action:@selector(verifyTorrent)];
_applyButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Apply", @"") style:UIBarButtonItemStyleBordered target:self action:@selector(applyIndividualTorrentSettings)];
_applyButton.enabled = NO;
self.navigationItem.rightBarButtonItem = _applyButton;
// configure pull to refresh
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
self.refreshControl = refreshControl;
[refreshControl addTarget:self action:@selector(sendRequestForUpdateInfo) forControlEvents:UIControlEventValueChanged];
self.enableControls = NO;
_bFirstTime = YES;
}
- (void)applyIndividualTorrentSettings
{
TRInfo *info = [[TRInfo alloc] init];
info.bandwidthPriority = _segmentBandwidthPriority.selectedSegmentIndex - 1;
info.queuePosition = (int)_stepperQueuePosition.value;
info.uploadLimitEnabled = _switchUploadLimit.on;
info.uploadLimit = [_textUploadLimit.text intValue];
if( info.uploadLimitEnabled && info.uploadLimit <= 0 )
{
self.errorMessage = NSLocalizedString(@"Upload limit must be greater then zero", @"");
return;
}
info.downloadLimitEnabled = _switchDownloadLimit.on;
info.downloadLimit = [_textDownloadLimit.text intValue];
if( info.downloadLimitEnabled && info.downloadLimit <= 0 )
{
self.errorMessage = NSLocalizedString(@"Download limit must be greater then zero", @"");
return;
}
info.seedRatioMode = _switchRatioLimit.on ? 1 : 0;
info.seedRatioLimit = [_textSeedRatioLimit.text intValue];
if( info.seedRatioMode > 0 && info.seedRatioLimit <= 0 )
{
self.errorMessage = NSLocalizedString(@"Seed ratio limit must be greater then zero", @"");
return;
}
info.seedIdleMode = _switchSeedIdleLimit.on ? 1 : 0;
info.seedIdleLimit = [_textSeedIdleLimit.text intValue];
if( info.seedIdleMode && info.seedIdleLimit <= 0 )
{
self.errorMessage = NSLocalizedString(@"Seed idle limit must be greater then zero", @"");
return;
}
self.errorMessage = nil;
if( _delegate && [_delegate respondsToSelector:@selector(applyTorrentSettings:forTorrentWithId:)])
{
[_delegate applyTorrentSettings:info forTorrentWithId:_torrentId];
}
}
- (void)setEnableControls:(BOOL)enableControls
{
_enableControls = enableControls;
NSArray *controls = @[ _stepperQueuePosition,
_segmentBandwidthPriority,
_switchDownloadLimit,
_switchRatioLimit,
_switchSeedIdleLimit,
_switchUploadLimit
];
for( UIControl *control in controls )
control.enabled = enableControls;
}
- (void)viewWillAppear:(BOOL)animated
@@ -257,6 +346,29 @@
NSString *errMessage = [NSString stringWithFormat:@"[%i] %@", trInfo.errorNumber, trInfo.errorString];
[self showErrorMessage:errMessage];
}
if( _bFirstTime )
{
// set changable values
_stepperQueuePosition.value = trInfo.queuePosition;
_queuePositionLabel.text = [NSString stringWithFormat:@"%i", trInfo.queuePosition];
_segmentBandwidthPriority.selectedSegmentIndex = trInfo.bandwidthPriority + 1;
_switchUploadLimit.on = trInfo.uploadLimitEnabled;
_switchDownloadLimit.on = trInfo.downloadLimitEnabled;
_switchRatioLimit.on = trInfo.seedRatioMode > 0;
_switchSeedIdleLimit.on = trInfo.seedIdleMode > 0;
_textUploadLimit.text = [NSString stringWithFormat:@"%i", trInfo.uploadLimit];
_textDownloadLimit.text = [NSString stringWithFormat:@"%i", trInfo.downloadLimit];
_textSeedIdleLimit.text = [NSString stringWithFormat:@"%i", trInfo.seedIdleLimit];
_textSeedRatioLimit.text = [NSString stringWithFormat:@"%i", trInfo.seedRatioLimit];
//_applyButton.enabled = YES;
self.enableControls = YES;
_bFirstTime = NO;
}
}
#pragma mark - ActionSheeDelegate methods
@@ -290,4 +402,34 @@
_deleteButton.enabled = YES;
}
- (IBAction)queuePositionChanged:(UIStepper *)sender
{
_queuePositionLabel.text = [NSString stringWithFormat:@"%i", (int)sender.value];
_applyButton.enabled = YES;
}
- (IBAction)uploadLimitChanged:(UISwitch *)sender
{
_textUploadLimit.enabled = sender.on;
_applyButton.enabled = YES;
}
- (IBAction)downloadLimitChanged:(UISwitch *)sender
{
_textDownloadLimit.enabled = sender.on;
_applyButton.enabled = YES;
}
- (IBAction)seedRatioLimitChanged:(UISwitch *)sender
{
_textSeedRatioLimit.enabled = sender.on;
_applyButton.enabled = YES;
}
- (IBAction)seedIdleLimitChanged:(UISwitch *)sender
{
_textSeedIdleLimit.enabled = sender.on;
_applyButton.enabled = YES;
}
@end

View File

@@ -1,14 +1,14 @@
/* Class = "UILabel"; text = "Total maximum peers"; ObjectID = "0JR-EM-310"; */
/* Class = "UILabel"; text = "Максимальное число пиров"; ObjectID = "0JR-EM-310"; */
"0JR-EM-310.text" = "Максимальное число пиров";
/* Class = "UILabel"; text = "Download rate limit (KB/s)"; ObjectID = "0vZ-Sc-tn9"; */
/* Class = "UILabel"; text = "Ограничение скорости загрузки (Кб/с)"; ObjectID = "0vZ-Sc-tn9"; */
"0vZ-Sc-tn9.text" = "Ограничение скорости загрузки (Кб/с)";
/* Class = "UILabel"; text = "Upload rate limit (KB/s)"; ObjectID = "2eP-Fa-9ww"; */
/* Class = "UILabel"; text = "Ограничение скорости отдачи (Кб/с)"; ObjectID = "2eP-Fa-9ww"; */
"2eP-Fa-9ww.text" = "Ограничение скорости отдачи (Кб/с)";
/* Class = "UILabel"; text = "Downloaded"; ObjectID = "375-BA-Lgw"; */
/* Class = "UILabel"; text = "Скачено"; ObjectID = "375-BA-Lgw"; */
"375-BA-Lgw.text" = "Скачено";
/* Class = "UILabel"; text = "10"; ObjectID = "3qg-VG-g1B"; */
@@ -17,34 +17,34 @@
/* Class = "UILabel"; text = "-"; ObjectID = "4ak-eh-UpQ"; */
"4ak-eh-UpQ.text" = "-";
/* Class = "UILabel"; text = "Enable automatic port forwarding"; ObjectID = "4hU-yU-Sph"; */
/* Class = "UILabel"; text = "Автоматический проброс порта"; ObjectID = "4hU-yU-Sph"; */
"4hU-yU-Sph.text" = "Автоматический проброс порта";
/* Class = "UILabel"; text = "Show free space"; ObjectID = "56X-ZI-KZz"; */
/* Class = "UILabel"; text = "Показывать свободное место"; ObjectID = "56X-ZI-KZz"; */
"56X-ZI-KZz.text" = "Показывать свободное место";
/* Class = "UILabel"; text = "Seeding time"; ObjectID = "6Ct-WB-aTy"; */
/* Class = "UILabel"; text = "Время раздачи"; ObjectID = "6Ct-WB-aTy"; */
"6Ct-WB-aTy.text" = "Время раздачи";
/* Class = "UILabel"; text = "Download rate limit (KB/s)"; ObjectID = "6qR-bg-gbB"; */
/* Class = "UILabel"; text = "Ограничение скорости загрузки (Кб/с)"; ObjectID = "6qR-bg-gbB"; */
"6qR-bg-gbB.text" = "Ограничение скорости загрузки (Кб/с)";
/* Class = "UILabel"; text = "File name"; ObjectID = "7Y3-f0-bDc"; */
/* Class = "UILabel"; text = "Имя файла"; ObjectID = "7Y3-f0-bDc"; */
"7Y3-f0-bDc.text" = "Имя файла";
/* Class = "UILabel"; text = "-"; ObjectID = "8JU-52-6C1"; */
"8JU-52-6C1.text" = "-";
/* Class = "UILabel"; text = "100 bytes of 100 bytes"; ObjectID = "94Q-La-4Kc"; */
/* Class = "UILabel"; text = "100 байт из 100 байт"; ObjectID = "94Q-La-4Kc"; */
"94Q-La-4Kc.text" = "100 байт из 100 байт";
/* Class = "UITableViewSection"; headerTitle = "Global rate limits"; ObjectID = "9Lv-ET-toW"; */
/* Class = "UITableViewSection"; headerTitle = "Ограничение скоростей"; ObjectID = "9Lv-ET-toW"; */
"9Lv-ET-toW.headerTitle" = "Ограничение скоростей";
/* Class = "UILabel"; text = "Use SSL"; ObjectID = "9ZY-hm-ITB"; */
/* Class = "UILabel"; text = "Использовать SSL"; ObjectID = "9ZY-hm-ITB"; */
"9ZY-hm-ITB.text" = "Использовать SSL";
/* Class = "UITableViewSection"; headerTitle = "Security Settings"; ObjectID = "9an-dS-Tkl"; */
/* Class = "UITableViewSection"; headerTitle = "Настройки безопасности"; ObjectID = "9an-dS-Tkl"; */
"9an-dS-Tkl.headerTitle" = "Настройки безопасности";
/* Class = "UILabel"; text = "-"; ObjectID = "9od-9U-qM5"; */
@@ -53,15 +53,18 @@
/* Class = "UITextField"; placeholder = "1.5"; ObjectID = "AWf-Yf-DAl"; */
"AWf-Yf-DAl.placeholder" = "1.5";
/* Class = "UILabel"; text = "Stop seeding if torrent idle more than(min)"; ObjectID = "Aj1-0q-21X"; */
/* Class = "UILabel"; text = "Остановить раздачу если торрент неактивен более чем(мин)"; ObjectID = "Aj1-0q-21X"; */
"Aj1-0q-21X.text" = "Остановить раздачу если торрент неактивен более чем(мин)";
/* Class = "UILabel"; text = "Giga"; ObjectID = "Bws-TG-qbq"; */
"Bws-TG-qbq.text" = "Giga";
/* Class = "UILabel"; text = "Flags"; ObjectID = "Esm-x4-mUM"; */
/* Class = "UILabel"; text = "Флаги"; ObjectID = "Esm-x4-mUM"; */
"Esm-x4-mUM.text" = "Флаги";
/* Class = "UILabel"; text = "Указать файлы/папки для загрузки"; ObjectID = "F3g-l8-p6g"; */
"F3g-l8-p6g.text" = "Указать файлы/папки для загрузки";
/* Class = "UITextField"; placeholder = "8090"; ObjectID = "FPd-0s-og7"; */
"FPd-0s-og7.placeholder" = "8090";
@@ -71,19 +74,19 @@
/* Class = "UILabel"; text = "-"; ObjectID = "Fql-nw-zPa"; */
"Fql-nw-zPa.text" = "-";
/* Class = "UITableViewSection"; footerTitle = "Tap to show files or peers "; ObjectID = "GU2-sf-eoY"; */
/* Class = "UITableViewSection"; footerTitle = "Нажмите для просмотра списка файлов или пиров"; ObjectID = "GU2-sf-eoY"; */
"GU2-sf-eoY.footerTitle" = "Нажмите для просмотра списка файлов или пиров";
/* Class = "UITableViewSection"; headerTitle = "Peers & Files"; ObjectID = "GU2-sf-eoY"; */
/* Class = "UITableViewSection"; headerTitle = "Файлы/Пиры/Трекеры"; ObjectID = "GU2-sf-eoY"; */
"GU2-sf-eoY.headerTitle" = "Файлы/Пиры/Трекеры";
/* Class = "UILabel"; text = "Address"; ObjectID = "GvZ-l6-cHd"; */
/* Class = "UILabel"; text = "Адрес"; ObjectID = "GvZ-l6-cHd"; */
"GvZ-l6-cHd.text" = "Адрес";
/* Class = "UILabel"; text = "Downloading from 5 of 10 peers"; ObjectID = "HAT-qH-kcb"; */
/* Class = "UILabel"; text = "Загрузка с 5 из 10 пиров"; ObjectID = "HAT-qH-kcb"; */
"HAT-qH-kcb.text" = "Загрузка с 5 из 10 пиров";
/* Class = "UILabel"; text = "Add \".part\" to unfinished files"; ObjectID = "HDh-66-iu2"; */
/* Class = "UILabel"; text = "Добавлять \".part\" к незавершенным файлам"; ObjectID = "HDh-66-iu2"; */
"HDh-66-iu2.text" = "Добавлять \".part\" к незавершенным файлам";
/* Class = "UITextField"; placeholder = "/transmission/rpc"; ObjectID = "HM1-wl-lIW"; */
@@ -101,196 +104,223 @@
/* Class = "UISegmentedControl"; HOm-ho-BFw.segmentTitles[2] = "↑"; ObjectID = "HOm-ho-BFw"; */
"HOm-ho-BFw.segmentTitles[2]" = "↑";
/* Class = "UILabel"; text = "Enable DHT (Distibuted Hash Table)"; ObjectID = "HOp-Lq-jYU"; */
/* Class = "UILabel"; text = "Разрешить DHT"; ObjectID = "HOp-Lq-jYU"; */
"HOp-Lq-jYU.text" = "Разрешить DHT";
/* Class = "UILabel"; text = "Title"; ObjectID = "HeM-pZ-YWE"; */
/* Class = "UILabel"; text = "Заголовок"; ObjectID = "HeM-pZ-YWE"; */
"HeM-pZ-YWE.text" = "Заголовок";
/* Class = "UILabel"; text = "Client"; ObjectID = "HnM-Pw-eoe"; */
/* Class = "UILabel"; text = "Клиент"; ObjectID = "HnM-Pw-eoe"; */
"HnM-Pw-eoe.text" = "Клиент";
/* Class = "UILabel"; text = "Creator"; ObjectID = "I7e-jC-m1Q"; */
/* Class = "UILabel"; text = "Создатель"; ObjectID = "I7e-jC-m1Q"; */
"I7e-jC-m1Q.text" = "Создатель";
/* Class = "UILabel"; text = "Last activity"; ObjectID = "Ifl-Ld-pOv"; */
/* Class = "UILabel"; text = "Последняя активность"; ObjectID = "Ifl-Ld-pOv"; */
"Ifl-Ld-pOv.text" = "Последняя активность";
/* Class = "UITextField"; placeholder = "Kb/s"; ObjectID = "KMw-Eh-ead"; */
/* Class = "UITextField"; placeholder = "Кб/с"; ObjectID = "KMw-Eh-ead"; */
"KMw-Eh-ead.placeholder" = "Кб/с";
/* Class = "UILabel"; text = "↓DL rate"; ObjectID = "Kxc-Le-bIt"; */
/* Class = "UILabel"; text = "↓DL"; ObjectID = "Kxc-Le-bIt"; */
"Kxc-Le-bIt.text" = "↓DL";
/* Class = "UILabel"; text = "Upload rate limit (KB/s)"; ObjectID = "LD8-gw-42B"; */
/* Class = "UILabel"; text = "Ограничение скорости отдачи (Кб/с)"; ObjectID = "LD8-gw-42B"; */
"LD8-gw-42B.text" = "Ограничение скорости отдачи (Кб/с)";
/* Class = "UILabel"; text = "-"; ObjectID = "MYH-Nq-x7V"; */
"MYH-Nq-x7V.text" = "-";
/* Class = "UILabel"; text = "Hash"; ObjectID = "Ntj-cE-m1a"; */
/* Class = "UILabel"; text = "Хэш"; ObjectID = "Ntj-cE-m1a"; */
"Ntj-cE-m1a.text" = "Хэш";
/* Class = "UILabel"; text = "http://192.168.0.1:8090/transmission/rpc"; ObjectID = "OAv-EQ-tHa"; */
"OAv-EQ-tHa.text" = "http://192.168.0.1:8090/transmission/rpc";
/* Class = "UILabel"; text = "Leechers"; ObjectID = "OJf-Fy-Yc2"; */
"OJf-Fy-Yc2.text" = "Leechers";
/* Class = "UILabel"; text = "999"; ObjectID = "OPD-ix-MD5"; */
"OPD-ix-MD5.text" = "999";
/* Class = "UITableViewSection"; headerTitle = "Timeout Settings"; ObjectID = "OmW-Md-iEk"; */
/* Class = "UITableViewSection"; headerTitle = "Настройки таймаутов"; ObjectID = "OmW-Md-iEk"; */
"OmW-Md-iEk.headerTitle" = "Настройки таймаутов";
/* Class = "UILabel"; text = "Have"; ObjectID = "Pp1-T5-bel"; */
/* Class = "UILabel"; text = "Имеется"; ObjectID = "Pp1-T5-bel"; */
"Pp1-T5-bel.text" = "Имеется";
/* Class = "UILabel"; text = "-"; ObjectID = "Qfj-q6-tG4"; */
"Qfj-q6-tG4.text" = "-";
/* Class = "UITextField"; placeholder = "type your password"; ObjectID = "R6M-Wb-LPf"; */
/* Class = "UITextField"; placeholder = "ваш пароль"; ObjectID = "R6M-Wb-LPf"; */
"R6M-Wb-LPf.placeholder" = "ваш пароль";
/* Class = "UILabel"; text = "☑︎"; ObjectID = "RmB-WG-Zu7"; */
"RmB-WG-Zu7.text" = "☑︎";
/* Class = "UILabel"; text = "Refresh (s)"; ObjectID = "Rw9-Gs-O5C"; */
/* Class = "UILabel"; text = "Обновление (с)"; ObjectID = "Rw9-Gs-O5C"; */
"Rw9-Gs-O5C.text" = "Обновление (с)";
/* Class = "UITextField"; placeholder = "type your name"; ObjectID = "Sm9-YI-oby"; */
/* Class = "UITextField"; placeholder = "ваше имя"; ObjectID = "Sm9-YI-oby"; */
"Sm9-YI-oby.placeholder" = "ваше имя";
/* Class = "UILabel"; text = "-"; ObjectID = "T2X-Jo-QJA"; */
"T2X-Jo-QJA.text" = "-";
/* Class = "UILabel"; text = "Encryption"; ObjectID = "THE-kA-8rE"; */
/* Class = "UILabel"; text = "Шифрование"; ObjectID = "THE-kA-8rE"; */
"THE-kA-8rE.text" = "Шифрование";
/* Class = "UILabel"; text = "-"; ObjectID = "TVp-YQ-Qnb"; */
"TVp-YQ-Qnb.text" = "-";
/* Class = "UITextField"; placeholder = "name your server"; ObjectID = "UCK-uQ-Cl9"; */
/* Class = "UITextField"; placeholder = "укажите имя сервера"; ObjectID = "UCK-uQ-Cl9"; */
"UCK-uQ-Cl9.placeholder" = "укажите имя сервера";
/* Class = "UITextField"; placeholder = "60"; ObjectID = "UOG-Zv-kEX"; */
"UOG-Zv-kEX.placeholder" = "60";
/* Class = "UITableViewSection"; headerTitle = "Features"; ObjectID = "UOr-bV-L94"; */
/* Class = "UITableViewSection"; headerTitle = "Настройки"; ObjectID = "UOr-bV-L94"; */
"UOr-bV-L94.headerTitle" = "Настройки";
/* Class = "UILabel"; text = "05"; ObjectID = "UR2-d4-Jvy"; */
"UR2-d4-Jvy.text" = "05";
/* Class = "UILabel"; text = "Last scrape announce time"; ObjectID = "Umw-Rs-JGV"; */
"Umw-Rs-JGV.text" = "Last scrape announce time";
/* Class = "UILabel"; text = "-"; ObjectID = "Uo0-AC-D7C"; */
"Uo0-AC-D7C.text" = "-";
/* Class = "UILabel"; text = "Show trackers"; ObjectID = "V6S-dk-axY"; */
"V6S-dk-axY.text" = "Просмотр списка трекеров";
/* Class = "UILabel"; text = "-"; ObjectID = "Vp5-2R-l87"; */
"Vp5-2R-l87.text" = "-";
/* Class = "UITextField"; placeholder = "5136"; ObjectID = "VsL-r5-dCY"; */
"VsL-r5-dCY.placeholder" = "5136";
/* Class = "UILabel"; text = "Request (s)"; ObjectID = "WCI-Nz-rrA"; */
/* Class = "UILabel"; text = "Запрос (с)"; ObjectID = "WCI-Nz-rrA"; */
"WCI-Nz-rrA.text" = "Запрос (с)";
/* Class = "UILabel"; text = "Enable PEX (Peer Exchange)"; ObjectID = "Wqc-cN-4bi"; */
/* Class = "UILabel"; text = "Разрешить PEX"; ObjectID = "Wqc-cN-4bi"; */
"Wqc-cN-4bi.text" = "Разрешить PEX";
/* Class = "UILabel"; text = "-"; ObjectID = "WvN-VN-bPs"; */
"WvN-VN-bPs.text" = "-";
/* Class = "UILabel"; text = "Start download after add"; ObjectID = "WzS-rd-gA2"; */
/* Class = "UILabel"; text = "Начать загрузку после добавления"; ObjectID = "WzS-rd-gA2"; */
"WzS-rd-gA2.text" = "Начать загрузку после добавления";
/* Class = "UITableViewSection"; headerTitle = "General"; ObjectID = "X8T-ES-bp7"; */
/* Class = "UITableViewSection"; headerTitle = "Общие настройки"; ObjectID = "X8T-ES-bp7"; */
"X8T-ES-bp7.headerTitle" = "Общие настройки";
/* Class = "UILabel"; text = "RPC path"; ObjectID = "XMx-XK-XeK"; */
/* Class = "UILabel"; text = "RPC путь"; ObjectID = "XMx-XK-XeK"; */
"XMx-XK-XeK.text" = "RPC путь";
/* Class = "UITextField"; placeholder = "Kb/s"; ObjectID = "XWA-IG-5XD"; */
/* Class = "UITextField"; placeholder = "Кб/с"; ObjectID = "XWA-IG-5XD"; */
"XWA-IG-5XD.placeholder" = "Кб/с";
/* Class = "UILabel"; text = "Ratio"; ObjectID = "YN7-rU-OIN"; */
/* Class = "UILabel"; text = "Рейтинг"; ObjectID = "YN7-rU-OIN"; */
"YN7-rU-OIN.text" = "Рейтинг";
/* Class = "UILabel"; text = "Max peers per one torrent"; ObjectID = "Yg5-aF-OXv"; */
/* Class = "UILabel"; text = "Максимальное число пиров на торрент"; ObjectID = "Yg5-aF-OXv"; */
"Yg5-aF-OXv.text" = "Максимальное число пиров на торрент";
/* Class = "UITableViewSection"; headerTitle = "Details"; ObjectID = "a5E-hR-nP1"; */
/* Class = "UITableViewSection"; headerTitle = "Детали"; ObjectID = "a5E-hR-nP1"; */
"a5E-hR-nP1.headerTitle" = "Детали";
/* Class = "UILabel"; text = "Torrent name"; ObjectID = "b02-ZR-iDV"; */
/* Class = "UILabel"; text = "Tracker host"; ObjectID = "a80-Sw-DBf"; */
"a80-Sw-DBf.text" = "Tracker host";
/* Class = "UILabel"; text = "Имя торрента"; ObjectID = "b02-ZR-iDV"; */
"b02-ZR-iDV.text" = "Имя торрента";
/* Class = "UILabel"; text = "Port"; ObjectID = "b7B-p7-Ui2"; */
/* Class = "UILabel"; text = "Порт"; ObjectID = "b7B-p7-Ui2"; */
"b7B-p7-Ui2.text" = "Порт";
/* Class = "UILabel"; text = "Downloading time"; ObjectID = "bG8-Eo-ElU"; */
/* Class = "UILabel"; text = "Время загрузки"; ObjectID = "bG8-Eo-ElU"; */
"bG8-Eo-ElU.text" = "Время загрузки";
/* Class = "UILabel"; text = "Stop seeding if ratio more than"; ObjectID = "bH3-2W-RoQ"; */
/* Class = "UILabel"; text = "Остановить раздачу если рейтинг выше"; ObjectID = "bH3-2W-RoQ"; */
"bH3-2W-RoQ.text" = "Остановить раздачу если рейтинг выше";
/* Class = "UITableViewSection"; headerTitle = "Activity"; ObjectID = "bbe-iG-gF8"; */
/* Class = "UITableViewSection"; headerTitle = "Активность"; ObjectID = "bbe-iG-gF8"; */
"bbe-iG-gF8.headerTitle" = "Активность";
/* Class = "UILabel"; text = "State"; ObjectID = "c2b-hl-pB6"; */
/* Class = "UILabel"; text = "Статус"; ObjectID = "c2b-hl-pB6"; */
"c2b-hl-pB6.text" = "Статус";
/* Class = "UILabel"; text = "Show peers"; ObjectID = "c6j-2D-Zuw"; */
/* Class = "UILabel"; text = "Просмотр списка пиров"; ObjectID = "c6j-2D-Zuw"; */
"c6j-2D-Zuw.text" = "Просмотр списка пиров";
/* Class = "UITableViewSection"; headerTitle = "Alternate rate limits"; ObjectID = "cOh-W3-4Fc"; */
/* Class = "UILabel"; text = "Tracker Host"; ObjectID = "cNx-Tz-4s1"; */
"cNx-Tz-4s1.text" = "Tracker Host";
/* Class = "UITableViewSection"; headerTitle = "Альтернативные ограничения скоростей"; ObjectID = "cOh-W3-4Fc"; */
"cOh-W3-4Fc.headerTitle" = "Альтернативные ограничения скоростей";
/* Class = "UILabel"; text = "Show files"; ObjectID = "cYw-wS-J79"; */
/* Class = "UILabel"; text = "Просмотр списка файлов"; ObjectID = "cYw-wS-J79"; */
"cYw-wS-J79.text" = "Просмотр списка файлов";
/* Class = "UILabel"; text = "Uploaded"; ObjectID = "dPK-Na-V6a"; */
/* Class = "UILabel"; text = "Отдано"; ObjectID = "dPK-Na-V6a"; */
"dPK-Na-V6a.text" = "Отдано";
/* Class = "UISegmentedControl"; dUN-ex-Fmm.segmentTitles[0] = "Low"; ObjectID = "dUN-ex-Fmm"; */
/* Class = "UISegmentedControl"; dUN-ex-Fmm.segmentTitles[0] = "Низ."; ObjectID = "dUN-ex-Fmm"; */
"dUN-ex-Fmm.segmentTitles[0]" = "Низ.";
/* Class = "UISegmentedControl"; dUN-ex-Fmm.segmentTitles[1] = "Normal"; ObjectID = "dUN-ex-Fmm"; */
/* Class = "UISegmentedControl"; dUN-ex-Fmm.segmentTitles[1] = "Норм."; ObjectID = "dUN-ex-Fmm"; */
"dUN-ex-Fmm.segmentTitles[1]" = "Норм.";
/* Class = "UISegmentedControl"; dUN-ex-Fmm.segmentTitles[2] = "High"; ObjectID = "dUN-ex-Fmm"; */
/* Class = "UISegmentedControl"; dUN-ex-Fmm.segmentTitles[2] = "Выс."; ObjectID = "dUN-ex-Fmm"; */
"dUN-ex-Fmm.segmentTitles[2]" = "Выс.";
/* Class = "UILabel"; text = "-"; ObjectID = "diM-bd-pyU"; */
"diM-bd-pyU.text" = "-";
/* Class = "UILabel"; text = "Client"; ObjectID = "djO-Ue-eFG"; */
/* Class = "UILabel"; text = "Клиент"; ObjectID = "djO-Ue-eFG"; */
"djO-Ue-eFG.text" = "Клиент";
/* Class = "UITableViewSection"; headerTitle = "Seeding limits"; ObjectID = "exP-qX-7he"; */
/* Class = "UITableViewSection"; headerTitle = "Ограничения раздачи"; ObjectID = "exP-qX-7he"; */
"exP-qX-7he.headerTitle" = "Ограничения раздачи";
/* Class = "UILabel"; text = "Added"; ObjectID = "eyn-GO-hIq"; */
/* Class = "UILabel"; text = "Добавлен"; ObjectID = "eyn-GO-hIq"; */
"eyn-GO-hIq.text" = "Добавлен";
/* Class = "UILabel"; text = "234.0 Kb of 5.6 GB"; ObjectID = "fpS-ju-QSU"; */
"fpS-ju-QSU.text" = "234.0 Kb of 5.6 GB";
/* Class = "UILabel"; text = "Start torrent"; ObjectID = "gGR-5k-8BD"; */
/* Class = "UILabel"; text = "Запуск торрента"; ObjectID = "gGR-5k-8BD"; */
"gGR-5k-8BD.text" = "Запуск торрента";
/* Class = "UITableViewSection"; headerTitle = "Port settings"; ObjectID = "gNN-ax-uzO"; */
/* Class = "UITableViewSection"; headerTitle = "Настройки порта"; ObjectID = "gNN-ax-uzO"; */
"gNN-ax-uzO.headerTitle" = "Настройки порта";
/* Class = "UILabel"; text = "%"; ObjectID = "gdb-6a-49Z"; */
"gdb-6a-49Z.text" = "%";
/* Class = "UITableViewSection"; headerTitle = "Comment"; ObjectID = "hEX-eC-vB8"; */
/* Class = "UITableViewSection"; headerTitle = "Коментарий"; ObjectID = "hEX-eC-vB8"; */
"hEX-eC-vB8.headerTitle" = "Коментарий";
/* Class = "UILabel"; text = "Port"; ObjectID = "hzH-73-gue"; */
/* Class = "UILabel"; text = "Порт"; ObjectID = "hzH-73-gue"; */
"hzH-73-gue.text" = "Порт";
/* Class = "UILabel"; text = "Next scrape announce time"; ObjectID = "i2i-86-fbl"; */
"i2i-86-fbl.text" = "Next scrape announce time";
/* Class = "UILabel"; text = "Downloads"; ObjectID = "iuw-QH-sPc"; */
"iuw-QH-sPc.text" = "Downloads";
/* Class = "UILabel"; text = "Last announce time"; ObjectID = "j1j-be-GYG"; */
"j1j-be-GYG.text" = "Last announce time";
/* Class = "UILabel"; text = "Peers"; ObjectID = "j27-Lf-lP6"; */
"j27-Lf-lP6.text" = "Peers";
/* Class = "UILabel"; text = "-"; ObjectID = "kJA-N0-zJw"; */
"kJA-N0-zJw.text" = "-";
/* Class = "UILabel"; text = "Password"; ObjectID = "kea-W2-FXd"; */
/* Class = "UILabel"; text = "Пароль"; ObjectID = "kea-W2-FXd"; */
"kea-W2-FXd.text" = "Пароль";
/* Class = "UILabel"; text = "DTX?"; ObjectID = "llQ-9q-go1"; */
@@ -299,88 +329,94 @@
/* Class = "UILabel"; text = "Label"; ObjectID = "m1D-fS-JwU"; */
"m1D-fS-JwU.text" = "Label";
/* Class = "UILabel"; text = "Next announce time"; ObjectID = "mEd-Zk-846"; */
"mEd-Zk-846.text" = "Next announce time";
/* Class = "UILabel"; text = "100.0%"; ObjectID = "mJB-qz-MXe"; */
"mJB-qz-MXe.text" = "100.0%";
/* Class = "UITableViewSection"; headerTitle = "RPC Settings"; ObjectID = "mMo-Tm-3Vd"; */
/* Class = "UITableViewSection"; headerTitle = "Настройки RPC"; ObjectID = "mMo-Tm-3Vd"; */
"mMo-Tm-3Vd.headerTitle" = "Настройки RPC";
/* Class = "UILabel"; text = "Created"; ObjectID = "mWV-0U-e2z"; */
/* Class = "UILabel"; text = "Создан"; ObjectID = "mWV-0U-e2z"; */
"mWV-0U-e2z.text" = "Создан";
/* Class = "UITextField"; placeholder = "50"; ObjectID = "mot-QD-2eT"; */
"mot-QD-2eT.placeholder" = "50";
/* Class = "UILabel"; text = "Address"; ObjectID = "mwO-Hy-UAi"; */
/* Class = "UILabel"; text = "Адрес"; ObjectID = "mwO-Hy-UAi"; */
"mwO-Hy-UAi.text" = "Адрес";
/* Class = "UITextField"; placeholder = "Kb/s"; ObjectID = "o1I-Jq-xnz"; */
/* Class = "UITextField"; placeholder = "Кб/с"; ObjectID = "o1I-Jq-xnz"; */
"o1I-Jq-xnz.placeholder" = "Кб/с";
/* Class = "UITableViewSection"; headerTitle = "File settings"; ObjectID = "olf-2H-Iux"; */
/* Class = "UITableViewSection"; headerTitle = "Настройки файлов"; ObjectID = "olf-2H-Iux"; */
"olf-2H-Iux.headerTitle" = "Настройки файлов";
/* Class = "UITextField"; placeholder = "200"; ObjectID = "qDT-Vq-Ath"; */
"qDT-Vq-Ath.placeholder" = "200";
/* Class = "UILabel"; text = "Use random port on start"; ObjectID = "qb3-Gn-Puo"; */
/* Class = "UILabel"; text = "Выбрать случайный порт"; ObjectID = "qb3-Gn-Puo"; */
"qb3-Gn-Puo.text" = "Выбрать случайный порт";
/* Class = "UILabel"; text = "999 bytes/s"; ObjectID = "qpK-et-HXA"; */
"qpK-et-HXA.text" = "999 bytes/s";
/* Class = "UILabel"; text = "Seeders"; ObjectID = "qri-pg-jR1"; */
"qri-pg-jR1.text" = "Seeders";
/* Class = "UILabel"; text = "UL: 3 Mb/s"; ObjectID = "r0e-Lm-a6J"; */
"r0e-Lm-a6J.text" = "UL: 3 Mb/s";
/* Class = "UITextField"; placeholder = "Kb/s"; ObjectID = "r2F-Jq-fHv"; */
"r2F-Jq-fHv.placeholder" = "Kb/s";
/* Class = "UILabel"; text = "User name"; ObjectID = "riC-Pu-uit"; */
/* Class = "UILabel"; text = "Имя пользователя"; ObjectID = "riC-Pu-uit"; */
"riC-Pu-uit.text" = "Имя пользователя";
/* Class = "UILabel"; text = "Enable Micro Transport Protocol (μTP)"; ObjectID = "sCw-SS-b8B"; */
/* Class = "UILabel"; text = "Разрешить Micro Transport Protocol(μTP)"; ObjectID = "sCw-SS-b8B"; */
"sCw-SS-b8B.text" = "Разрешить Micro Transport Protocol(μTP)";
/* Class = "UITableViewSection"; headerTitle = "Connections"; ObjectID = "sNG-b2-8sg"; */
/* Class = "UITableViewSection"; headerTitle = "Соединения"; ObjectID = "sNG-b2-8sg"; */
"sNG-b2-8sg.headerTitle" = "Соединения";
/* Class = "UILabel"; text = "Server name"; ObjectID = "sdY-X2-3mK"; */
/* Class = "UILabel"; text = "Имя сервера"; ObjectID = "sdY-X2-3mK"; */
"sdY-X2-3mK.text" = "Имя сервера";
/* Class = "UITableViewSection"; headerTitle = "Misc"; ObjectID = "sgr-nD-tEg"; */
/* Class = "UITableViewSection"; headerTitle = "Дополнительно"; ObjectID = "sgr-nD-tEg"; */
"sgr-nD-tEg.headerTitle" = "Дополнительно";
/* Class = "UITextField"; placeholder = "type hosname"; ObjectID = "smZ-GO-STl"; */
/* Class = "UITextField"; placeholder = "имя хоста"; ObjectID = "smZ-GO-STl"; */
"smZ-GO-STl.placeholder" = "имя хоста";
/* Class = "UILabel"; text = "100.00%"; ObjectID = "tv9-Rh-5jP"; */
"tv9-Rh-5jP.text" = "100.00%";
/* Class = "UILabel"; text = "Progress"; ObjectID = "uUU-MZ-oe7"; */
/* Class = "UILabel"; text = "Прогресс"; ObjectID = "uUU-MZ-oe7"; */
"uUU-MZ-oe7.text" = "Прогресс";
/* Class = "UILabel"; text = "Enable LPD (Local Peer Descovery)"; ObjectID = "ueC-fy-EGJ"; */
/* Class = "UILabel"; text = "Разрешить LPD"; ObjectID = "ueC-fy-EGJ"; */
"ueC-fy-EGJ.text" = "Разрешить LPD";
/* Class = "UILabel"; text = "Bandwidth priority"; ObjectID = "ugc-JD-qEY"; */
/* Class = "UILabel"; text = "Приоритет трафика"; ObjectID = "ugc-JD-qEY"; */
"ugc-JD-qEY.text" = "Приоритет трафика";
/* Class = "UILabel"; text = "↑UP rate"; ObjectID = "wWp-FG-rqG"; */
/* Class = "UILabel"; text = "↑UP"; ObjectID = "wWp-FG-rqG"; */
"wWp-FG-rqG.text" = "↑UP";
/* Class = "UILabel"; text = "Completed"; ObjectID = "xOI-dc-Zt9"; */
/* Class = "UILabel"; text = "Завершен"; ObjectID = "xOI-dc-Zt9"; */
"xOI-dc-Zt9.text" = "Завершен";
/* Class = "UILabel"; text = "Label"; ObjectID = "xgI-5a-q7Q"; */
"xgI-5a-q7Q.text" = "Label";
/* Class = "UISegmentedControl"; yEn-nb-ZFk.segmentTitles[0] = "required"; ObjectID = "yEn-nb-ZFk"; */
/* Class = "UISegmentedControl"; yEn-nb-ZFk.segmentTitles[0] = "треб."; ObjectID = "yEn-nb-ZFk"; */
"yEn-nb-ZFk.segmentTitles[0]" = "треб.";
/* Class = "UISegmentedControl"; yEn-nb-ZFk.segmentTitles[1] = "preffered"; ObjectID = "yEn-nb-ZFk"; */
/* Class = "UISegmentedControl"; yEn-nb-ZFk.segmentTitles[1] = "желат."; ObjectID = "yEn-nb-ZFk"; */
"yEn-nb-ZFk.segmentTitles[1]" = "желат.";
/* Class = "UISegmentedControl"; yEn-nb-ZFk.segmentTitles[2] = "tolerated"; ObjectID = "yEn-nb-ZFk"; */
/* Class = "UISegmentedControl"; yEn-nb-ZFk.segmentTitles[2] = "нет"; ObjectID = "yEn-nb-ZFk"; */
"yEn-nb-ZFk.segmentTitles[2]" = "нет";
/* Class = "UILabel"; text = "Label"; ObjectID = "yTH-tm-9gG"; */
@@ -395,7 +431,7 @@
/* Class = "UILabel"; text = "-"; ObjectID = "yhP-4M-OvS"; */
"yhP-4M-OvS.text" = "-";
/* Class = "UILabel"; text = "Host or IP"; ObjectID = "yoe-ep-B91"; */
/* Class = "UILabel"; text = "Хост или IP"; ObjectID = "yoe-ep-B91"; */
"yoe-ep-B91.text" = "Хост или IP";
/* Class = "UILabel"; text = "-"; ObjectID = "zSt-5j-eZW"; */
@@ -403,7 +439,3 @@
/* Class = "UILabel"; text = "999 bytes/s"; ObjectID = "zaE-aW-G13"; */
"zaE-aW-G13.text" = "999 bytes/s";
/* Class = "UILabel"; text = "Select files to download"; ObjectID = "F3g-l8-p6g"; */
"F3g-l8-p6g.text" = "Указать файлы/папки для загрузки";