OSDN Git Service

pixpro実装。サムネイル画像をキャッシュするサイズを変更できるようにした。(メモリが少ない端末への対策)
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / camera / vendor / pixpro / wrapper / playback / PixproPlaybackControl.java
1 package net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.playback;
2
3 import android.graphics.Bitmap;
4 import android.util.Log;
5
6 import androidx.annotation.NonNull;
7
8 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContent;
9 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback;
10 import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
11 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IContentInfoCallback;
12 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentCallback;
13 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentListCallback;
14 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadThumbnailImageCallback;
15 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl;
16 import net.osdn.gokigen.pkremote.camera.playback.ProgressEvent;
17 import net.osdn.gokigen.pkremote.camera.utils.SimpleHttpClient;
18 import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.IConnectionKeyProvider;
19
20 import java.util.HashMap;
21 import java.util.List;
22
23 public class PixproPlaybackControl implements IPlaybackControl
24 {
25     private final String TAG = toString();
26     private static final int DEFAULT_TIMEOUT = 3000;
27
28     private final String ipAddress;
29     private final IConnectionKeyProvider keyProvider;
30     private final int timeoutValue;
31
32     private PixproContentListParser contentListParser;
33
34     public PixproPlaybackControl(@NonNull String ipAddress, int timeoutMs, @NonNull IConnectionKeyProvider keyProvider)
35     {
36         this.ipAddress = ipAddress;
37         this.keyProvider = keyProvider;
38         this.timeoutValue  = Math.max(timeoutMs, DEFAULT_TIMEOUT);
39         contentListParser = new PixproContentListParser();
40     }
41
42
43     @Override
44     public String getRawFileSuffix()
45     {
46         return (null);
47     }
48
49     @Override
50     public void downloadContentList(IDownloadContentListCallback callback)
51     {
52         Log.v(TAG, " downloadContentList()");
53     }
54
55     @Override
56     public void getContentInfo(String path, String name, IContentInfoCallback callback)
57     {
58         Log.v(TAG, " getContentInfo() : " + path + " / " + name);
59     }
60
61     @Override
62     public void updateCameraFileInfo(ICameraFileInfo info)
63     {
64         Log.v(TAG, " updateCameraFileInfo() : " + info.getFilename());
65     }
66
67     @Override
68     public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback)
69     {
70         downloadContentThumbnail(path, callback);
71 /*
72         try
73         {
74             int index = path.indexOf(".");
75             String urlToGet = "http://" + ipAddress + path.substring(0, index) + ".scn?" + getConnectionString();
76             Log.v(TAG, "downloadContentThumbnail() : " + urlToGet);
77
78             Bitmap bmp = SimpleHttpClient.httpGetBitmap(urlToGet, null, timeoutValue);
79             HashMap<String, Object> map = new HashMap<>();
80             map.put("Orientation", 0);
81             callback.onCompleted(bmp, map);
82         }
83         catch (Throwable e)
84         {
85             e.printStackTrace();
86             callback.onErrorOccurred(new NullPointerException());
87         }
88 */
89     }
90
91     @Override
92     public void downloadContentThumbnail(String path, IDownloadThumbnailImageCallback callback)
93     {
94         try
95         {
96             int index = path.indexOf(".");
97             String urlToGet = "http://" + ipAddress + path.substring(0, index) + ".thm?" + getConnectionString();
98             Log.v(TAG, "downloadContentThumbnail() : " + urlToGet);
99
100             Bitmap bmp = SimpleHttpClient.httpGetBitmap(urlToGet, null, timeoutValue);
101             HashMap<String, Object> map = new HashMap<>();
102             map.put("Orientation", 0);
103             callback.onCompleted(bmp, map);
104         }
105         catch (Throwable e)
106         {
107             e.printStackTrace();
108             callback.onErrorOccurred(new NullPointerException());
109         }
110     }
111
112     @Override
113     public void downloadContent(String path, boolean isSmallSize, final IDownloadContentCallback callback)
114     {
115         try
116         {
117             String urlToGet = "http://" + ipAddress + path + "?" + getConnectionString();
118             if (isSmallSize)
119             {
120                 int index = path.indexOf(".");
121                 urlToGet = "http://" + ipAddress + path.substring(0, index) + ".scn?" + getConnectionString();
122                 urlToGet = urlToGet.toLowerCase();
123                 urlToGet = urlToGet.replace("dcim", "scn");
124             }
125             SimpleHttpClient.httpGetBytes(urlToGet, null, timeoutValue, new SimpleHttpClient.IReceivedMessageCallback() {
126                 @Override
127                 public void onCompleted() {
128                     callback.onCompleted();
129                 }
130
131                 @Override
132                 public void onErrorOccurred(Exception e) {
133                     callback.onErrorOccurred(e);
134                 }
135
136                 @Override
137                 public void onReceive(int readBytes, int length, int size, byte[] data) {
138                     float percent = (length == 0) ? 0.0f : ((float) readBytes / (float) length);
139                     //Log.v(TAG, " onReceive : " + readBytes + " " + length + " " + size);
140                     ProgressEvent event = new ProgressEvent(percent, null);
141                     callback.onProgress(data, size, event);
142                 }
143             });
144         }
145         catch (Throwable e)
146         {
147             e.printStackTrace();
148             callback.onErrorOccurred(new NullPointerException());
149         }
150     }
151
152     @Override
153     public void getCameraContentList(ICameraContentListCallback callback)
154     {
155         try
156         {
157             String imageListurl = "http://" + ipAddress + "/?custom=1&" + getConnectionString();
158             String receivedMessage = SimpleHttpClient.httpGet(imageListurl, timeoutValue);
159             if (receivedMessage == null)
160             {
161                 // ぬるぽ発行
162                 callback.onErrorOccurred(new NullPointerException());
163                 return;
164             }
165             // 応答を受信した場合...受信データを parseして応答する。
166             Log.v(TAG, " RECEIVED CONTENT REPLY : " + receivedMessage.length());
167             List<ICameraContent> cameraContentList = contentListParser.parseContentList(receivedMessage);
168             callback.onCompleted(cameraContentList);
169             System.gc();
170         }
171         catch (Exception e)
172         {
173             e.printStackTrace();
174
175             // 例外時にはぬるぽを発行する
176             callback.onErrorOccurred(new NullPointerException());
177         }
178     }
179
180     @Override
181     public void showPictureStarted()
182     {
183
184     }
185
186     @Override
187     public void showPictureFinished()
188     {
189
190     }
191
192     private String getConnectionString()
193     {
194         return (keyProvider.getUserString() + "&" + keyProvider.getPasswordString());
195         // Log.v(TAG, " connectionString : " + connectionString);
196         //return (connectionString);
197     }
198
199 }