From c82f01b360164d6e93353bea6d0bb18e138986d5 Mon Sep 17 00:00:00 2001 From: MRSa Date: Sat, 15 Aug 2020 22:40:50 +0900 Subject: [PATCH] =?utf8?q?pixpro=E5=AE=9F=E8=A3=85=E3=80=82=E7=94=BB?= =?utf8?q?=E5=83=8F=E6=83=85=E5=A0=B1=E3=81=AE=E4=B8=80=E8=A6=A7=E5=8F=96?= =?utf8?q?=E5=BE=97=E3=81=BE=E3=81=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../pixpro/wrapper/PixproInterfaceProvider.java | 10 ++++- .../wrapper/playback/PixproPlaybackControl.java | 45 +++++++++++++++++++++- .../preference/IPreferencePropertyAccessor.java | 3 ++ .../pixpro/PixproPreferenceFragment.java | 4 ++ app/src/main/res/values-ja/strings.xml | 3 ++ app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/preferences_pixpro.xml | 8 ++++ 7 files changed, 74 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/PixproInterfaceProvider.java b/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/PixproInterfaceProvider.java index 141973e..9eba94c 100644 --- a/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/PixproInterfaceProvider.java +++ b/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/PixproInterfaceProvider.java @@ -38,6 +38,7 @@ import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.status.PixproCamer import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.status.PixproCameraInformation; import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.status.PixproRunMode; import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.status.PixproStatusChecker; +import net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor; import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT; import static net.osdn.gokigen.pkremote.preference.IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE; @@ -72,17 +73,24 @@ public class PixproInterfaceProvider implements IPixproInterfaceProvider, IDispl { String ipAddress; String controlPortStr; + int communicationTimeoutMs; try { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); ipAddress = preferences.getString(PIXPRO_HOST_IP, PIXPRO_HOST_IP_DEFAULT_VALUE); controlPortStr = preferences.getString(PIXPRO_COMMAND_PORT, PIXPRO_COMMAND_PORT_DEFAULT_VALUE); + communicationTimeoutMs = parseInt(preferences.getString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE), 30) * 1000; + if (communicationTimeoutMs < 3000) + { + communicationTimeoutMs = 3000; // 最小値は 3000msとする。 + } } catch (Exception e) { e.printStackTrace(); ipAddress = "172.16.0.254"; controlPortStr = "9175"; + communicationTimeoutMs = 30000; // エラー時は 30000msとする。 } int controlPort = parseInt(controlPortStr, 9175); this.commandCommunicator = new PixproCommandCommunicator(this, ipAddress, controlPort, true, false); @@ -93,7 +101,7 @@ public class PixproInterfaceProvider implements IPixproInterfaceProvider, IDispl this.pixproConnection = new PixproConnection(activity, provider, this, statusChecker); this.hardwarestatus = new PixproCameraHardwareStatus(); this.runMode = new PixproRunMode(); - this.playbackControl = new PixproPlaybackControl(this); + this.playbackControl = new PixproPlaybackControl(ipAddress, communicationTimeoutMs,this); } private int parseInt(@NonNull String key, int defaultValue) diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/playback/PixproPlaybackControl.java b/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/playback/PixproPlaybackControl.java index 27a5cef..f961595 100644 --- a/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/playback/PixproPlaybackControl.java +++ b/app/src/main/java/net/osdn/gokigen/pkremote/camera/vendor/pixpro/wrapper/playback/PixproPlaybackControl.java @@ -4,6 +4,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContent; import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback; import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo; import net.osdn.gokigen.pkremote.camera.interfaces.playback.IContentInfoCallback; @@ -11,17 +12,29 @@ import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentCall import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentListCallback; import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadThumbnailImageCallback; import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl; +import net.osdn.gokigen.pkremote.camera.utils.SimpleHttpClient; import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.IConnectionKeyProvider; +import java.util.ArrayList; +import java.util.List; + public class PixproPlaybackControl implements IPlaybackControl { private final String TAG = toString(); + private static final int DEFAULT_TIMEOUT = 3000; + private final String ipAddress; private final IConnectionKeyProvider keyProvider; + private final int timeoutValue; + + private List cameraContentList; - public PixproPlaybackControl(@NonNull IConnectionKeyProvider keyProvider) + public PixproPlaybackControl(@NonNull String ipAddress, int timeoutMs, @NonNull IConnectionKeyProvider keyProvider) { + this.ipAddress = ipAddress; this.keyProvider = keyProvider; + this.timeoutValue = Math.max(timeoutMs, DEFAULT_TIMEOUT); + cameraContentList = new ArrayList<>(); } @@ -71,9 +84,39 @@ public class PixproPlaybackControl implements IPlaybackControl @Override public void getCameraContentList(ICameraContentListCallback callback) { + try + { + String imageListurl = "http://" + ipAddress + "/?custom=1&" + getConnectionString(); + String receivedMessage = SimpleHttpClient.httpGet(imageListurl, timeoutValue); + if (receivedMessage == null) + { + // ぬるぽ発行 + callback.onErrorOccurred(new NullPointerException()); + cameraContentList.clear(); + return; + } + // 応答を受信した場合... + Log.v(TAG, " RECEIVED CONTENT REPLY : " + receivedMessage.length()); + parseContentList(receivedMessage); + callback.onCompleted(cameraContentList); + } + catch (Exception e) + { + e.printStackTrace(); + + // 例外時にはぬるぽを発行する + callback.onErrorOccurred(new NullPointerException()); + } + } + + private void parseContentList(@NonNull String receivedMessage) + { + // 受信したボディを解析して、画像一覧を cameraContentList に入れる + } + @Override public void showPictureStarted() { diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/preference/IPreferencePropertyAccessor.java b/app/src/main/java/net/osdn/gokigen/pkremote/preference/IPreferencePropertyAccessor.java index ef715ca..8563ac4 100644 --- a/app/src/main/java/net/osdn/gokigen/pkremote/preference/IPreferencePropertyAccessor.java +++ b/app/src/main/java/net/osdn/gokigen/pkremote/preference/IPreferencePropertyAccessor.java @@ -125,6 +125,9 @@ public interface IPreferencePropertyAccessor String PIXPRO_COMMAND_PORT = "pixpro_command_port"; String PIXPRO_COMMAND_PORT_DEFAULT_VALUE = "9175"; + String PIXPRO_GET_PICS_LIST_TIMEOUT = "pixpro_get_pics_list_timeout"; + String PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE = "30"; + /* //String GR2_DISPLAY_MODE = "gr2_display_mode"; //String GR2_DISPLAY_MODE_DEFAULT_VALUE = "0"; diff --git a/app/src/main/java/net/osdn/gokigen/pkremote/preference/pixpro/PixproPreferenceFragment.java b/app/src/main/java/net/osdn/gokigen/pkremote/preference/pixpro/PixproPreferenceFragment.java index 60ede1b..f51c0d8 100644 --- a/app/src/main/java/net/osdn/gokigen/pkremote/preference/pixpro/PixproPreferenceFragment.java +++ b/app/src/main/java/net/osdn/gokigen/pkremote/preference/pixpro/PixproPreferenceFragment.java @@ -137,6 +137,10 @@ public class PixproPreferenceFragment extends PreferenceFragmentCompat implemen { editor.putString(IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT, IPreferencePropertyAccessor.PIXPRO_COMMAND_PORT_DEFAULT_VALUE); } + if (!items.containsKey(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT)) + { + editor.putString(IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.PIXPRO_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE); + } editor.apply(); } catch (Exception e) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 566c35a..a9f145a 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -366,4 +366,7 @@ カメラへのコマンド送信回線が切断されました。再試行してください。 接続失敗(PIXPRO) + 撮影画像一覧取得時のタイムアウト(単位:秒) + 通常、変更は不要です (初期値:30) + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49d3944..eea2c67 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -368,4 +368,7 @@ The command communication line is disconnected. (RETRY please.) Connect failed (PIXPRO) + Get Pics List Timeout(unit: sec.) + If the camera has many number of Pics, increase number. + diff --git a/app/src/main/res/xml/preferences_pixpro.xml b/app/src/main/res/xml/preferences_pixpro.xml index 3de06ac..1d7290b 100644 --- a/app/src/main/res/xml/preferences_pixpro.xml +++ b/app/src/main/res/xml/preferences_pixpro.xml @@ -36,6 +36,14 @@ android:title="@string/pref_pixpro_control_port" android:defaultValue="9175" android:summary="@string/pref_summary_pixpro_control_port" /> + + +