public async Task <Message> DeleteMediaCall(BaseData baseData, MediaIdListBody mediaIdListBody)
        {
            //  @POST("https://rest-{tier}.immedia-semi.com/api/v1/accounts/{accountId}/media/delete")
            //  Single<Object> deleteMedia(@Body MediaIdListBody paramMediaIdListBody, @Path("accountId") long paramLong, @Path("tier") String paramString);

            //  @POST("https://rest-{tier}.immedia-semi.com/api/v1/accounts/{accountId}/media/delete")
            //  Call<Object> deleteMediaCall(@Body MediaIdListBody paramMediaIdListBody, @Path("accountId") long paramLong, @Path("tier") String paramString);
            var uri       = $"https://rest-{baseData.RegionTier}.immedia-semi.com/api/v1/accounts/{baseData.AccountId}/media/delete";
            var retString = await FirePostCallAsync(uri, mediaIdListBody, baseData.AuthToken);

            var ret = JsonConvert.DeserializeObject <Message>(retString);

            return(ret);
        }
예제 #2
0
        private void p0_btn_Start_Click(object sender, EventArgs e)
        {
            if (!IsDownloadRunning)
            {
                if (!AreAllNeededValuesGiven())
                {
                    return;
                }
                EmptyInfoText           = false;
                p0_txtBox_Info.Text     = p0_txtBox_VerifyPin.Text = string.Empty;
                p0_txtBox_Email.Enabled = p0_txtBox_Password.Enabled = p0_checkBox_AreYouInGermany.Enabled = p0_btn_SelectSavePath.Enabled = p0_btn_Start.Enabled
                                                                                                                                                 = p0_txtBox_VerifyPin.Enabled = p0_txtBox_VerifyPin.Enabled = false;
                p0_btn_Start.Text = "Running ...";

                DisableOrEnableallTabPagesExceptTheGiven(false, 0);
                ResetTabPage01Values();
                ResetTabPage02Values();
                ResetTabPage99Values();
                // ToDo: Do NOT remove this "ToDo" line and add here a "ResetTabPage_xx_Values();" method call in case a new tabPage is added to "tabControl0"!

                var taskA = Task.Factory.StartNew(() =>
                {
                    var mediaIdListBody = new MediaIdListBody
                    {
                        media_list = new List <long>()
                    };
                    BaseData = new InitAndDownload().Start(this, p0_txtBox_Email.Text, p0_txtBox_Password.Text, p0_txtBox_SaveDirectory.Text, p0_checkBox_AreYouInGermany.Checked, mediaIdListBody);
                    if (BaseData == null)
                    {
                        return;
                    }
                    if (mediaIdListBody != null && mediaIdListBody.media_list.Any())
                    {
                        var question = string.Empty;
                        if (mediaIdListBody.media_list.Count == 1)
                        {
                            question =
                                "One video was successfull downloaded.\r\n" +
                                "Should it be tried to delete the video on the server?";
                        }
                        else
                        {
                            question =
                                $"{mediaIdListBody.media_list.Count} videos were successfull downloaded.\r\n" +
                                "Should it be tried to delete all of them on the server?";
                        }
                        if (MessageBox.Show(question, Config.TitleAppNameAndVersion, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            var message = new UweR70_PostCallWithNonEmptyBody().DeleteMediaCall(BaseData, mediaIdListBody).Result;
                            MessageBox.Show($"Deleted! Server response:\r\n{message.message}", Config.TitleAppNameAndVersion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(BaseData.StoragePathNetwork))
                    {
                        if (MessageBox.Show(
                                "Should the storage path be opened?",
                                Config.TitleAppNameAndVersion,
                                MessageBoxButtons.YesNo,
                                MessageBoxIcon.Question)
                            == DialogResult.Yes)
                        {
                            Process.Start(BaseData.StoragePathMain);
                        }
                    }
                }).ContinueWith(result =>
                {
                    // Controls are handled here to avoid a "cross-thread" error.
                    // And: Except PageTab it must also be worked out in case "StartAsyny(...)" returned "null" in error case!
                    if (BaseData != null)
                    {
                        DisableOrEnableallTabPagesExceptTheGiven(true, 0);
                    }
                    p0_btn_Start.Enabled = true;
                    p0_btn_Start.Text    = "Reset application";

                    p0_txtBox_VerifyPin.Enabled = p0_txtBox_VerifyPin.Enabled = true;
                    p0_txtBox_VerifyPin.Focus();

                    SetTabPage01Values(BaseData);
                    SetTabPage02Values(BaseData);
                    SetTabPage99Values(BaseData);
                    // ToDo: Do NOT remove this "ToDo" line and add here a "SetTabPage_xx_Values(BaseData);" method call in case a new tabPage is added to "tabControl0"!
                }, TaskScheduler.FromCurrentSynchronizationContext());
                // Do NOT add here something like
                //      var x = taskA.Result;
                // because this would block "taskA" ..
            }
            else
            {
                EmptyInfoText               = true;
                p0_txtBox_Info.Text         = HelpStart();
                p0_txtBox_Email.Enabled     = p0_txtBox_Password.Enabled = p0_checkBox_AreYouInGermany.Enabled = p0_btn_SelectSavePath.Enabled = p0_btn_Start.Enabled = true;
                p0_txtBox_VerifyPin.Text    = string.Empty;
                p0_txtBox_VerifyPin.Enabled = p0_txtBox_VerifyPin.Enabled = false;
                p0_btn_Start.Text           = "Start";

                DisableOrEnableallTabPagesExceptTheGiven(false, 0);
                ResetTabPage01Values();
                ResetTabPage02Values();
                ResetTabPage99Values();
                // ToDo: Do NOT remove this "ToDo" line and add here a "ResetTabPage_xx_Values();" method call in case a new tabPage is added to "tabControl0"!
            }
            IsDownloadRunning = !IsDownloadRunning;
        }
예제 #3
0
        public BaseData Start(Form1 form, string email, string password, string saveDirectory, bool isGerman, MediaIdListBody mediaIdListBody)
        {
            try
            {
                form.SetP0TxtBoxInfoText("Started.");
                form.SetP0TxtBoxInfoText(string.Empty);

                var common         = new Common();
                var uweR70_Get     = new UweR70_Get();
                var uweR70_GetData = new UweR70_GetData();
                var uweR70_PostCallWithNonEmptyBody = new UweR70_PostCallWithNonEmptyBody();

                var storeIt = new StoreIt();

                var baseData = new BaseData
                {
                    Email     = email,
                    LoginTier = isGerman ? "prde" : "prod",
                    Networks  = new List <BaseData.Network>()
                };

                Blink.BatteryUsage batteryUssage = null;

                var alreadyStoredAuthTokens = storeIt.ReadAuthToken();
                var alreadyStoredMainData   = storeIt.ReadMainData();
                var oldAuthTokenWorked      = false;
                if (alreadyStoredAuthTokens != null && alreadyStoredAuthTokens.Count != 0 && alreadyStoredMainData != null)
                {
                    try
                    {
                        baseData.RegionTier        = alreadyStoredMainData.RegionTier;
                        baseData.RegionDescription = alreadyStoredMainData.RegionDescription;
                        baseData.AuthToken         = alreadyStoredAuthTokens[alreadyStoredAuthTokens.Count - 1].Token;
                        baseData.AccountId         = alreadyStoredMainData.AccountId;
                        baseData.ClientId          = alreadyStoredMainData.ClientId;

                        batteryUssage = uweR70_Get.BatteryUssageAsync(baseData).Result;

                        oldAuthTokenWorked = true;
                    }
                    catch {}
                }
                if (!oldAuthTokenWorked)
                {
                    // Authentification api call
                    var login = uweR70_PostCallWithNonEmptyBody.LoginAsync(baseData, new LoginBody
                    {
                        email    = email,
                        password = password
                    }).Result;

                    baseData.RegionTier        = login.region.tier;
                    baseData.RegionDescription = login.region.description;
                    baseData.AuthToken         = login.authtoken.authtoken;
                    baseData.AccountId         = login.account.id;
                    baseData.ClientId          = login.client.id;

                    batteryUssage = uweR70_Get.BatteryUssageAsync(baseData).Result;
                    storeIt.StoreData(baseData, batteryUssage);
                }

                for (var i = 0; i < batteryUssage.networks.Length; i++)
                {
                    baseData.Networks.Add(new BaseData.Network
                    {
                        Id      = batteryUssage.networks[i].network_id,
                        Name    = batteryUssage.networks[i].name,
                        Cameras = new List <BaseData.Camera>()
                    });

                    var minData = new MinimumData
                    {
                        AuthToken  = baseData.AuthToken,
                        RegionTier = baseData.RegionTier,
                        NetworkId  = baseData.Networks[i].Id
                    };

                    form.SetP0TxtBoxInfoText($"Network id >{baseData.Networks[i].Id}<");
                    form.SetP0TxtBoxInfoText($"Network name >{baseData.Networks[i].Name}<");
                    form.SetP0TxtBoxInfoText($"camera count >{batteryUssage.networks[i].cameras.Length}<");

                    for (var n = 0; n < batteryUssage.networks[i].cameras.Length; n++)
                    {
                        form.SetP0TxtBoxInfoText(string.Empty);
                        form.SetP0TxtBoxInfoText($"camera #{n + 1:D2}");

                        baseData.Networks[i].Cameras.Add(new BaseData.Camera
                        {
                            Id    = batteryUssage.networks[i].cameras[n].id,
                            Name  = batteryUssage.networks[i].cameras[n].name,
                            Media = new BaseData.Media()
                        });

                        minData.CameraId = baseData.Networks[i].Cameras[n].Id;

                        form.SetP0TxtBoxInfoText($"camera id >{baseData.Networks[i].Cameras[n].Id}<");
                        form.SetP0TxtBoxInfoText($"camera name >{baseData.Networks[i].Cameras[n].Name}<");

                        var cameraStatus = uweR70_Get.CameraStatusAsync(minData).Result;

                        var cameraThumbnail = cameraStatus.camera_status.thumbnail;

                        var networkNameAndId = common.CombineNameAndId(baseData.Networks[i].Name, baseData.Networks[i].Id);
                        var cameraNameAndId  = common.CombineNameAndId(batteryUssage.networks[i].cameras[n].name, batteryUssage.networks[i].cameras[n].id);
                        var storagePath      = GetStoragePath(saveDirectory, networkNameAndId, cameraNameAndId);
                        if (string.IsNullOrEmpty(baseData.StoragePathNetwork))
                        {   /* Both folligng directories where created while  "GetStoragePath(...)" worked out!
                             * because the there combined path contains all parts of the following two combined directories.
                             */
                            baseData.StoragePathNetwork = Path.Combine(saveDirectory, $"{Config.StoragePartBase}\\{networkNameAndId}");
                            baseData.StoragePathMain    = $"{baseData.StoragePathNetwork}\\{Config.StoragePartMain}";
                        }
                        var cameraThumbnailFileName        = GetAdjustedCameraThumbnailFileName(Path.GetFileName(cameraThumbnail));
                        var cameraThumbnailPathAndFileName = $"{storagePath}\\{cameraThumbnailFileName}";
                        baseData.Networks[i].Cameras[n].Media.PathAndFileNameThumbnail = cameraThumbnailPathAndFileName;
                        baseData.Networks[i].Cameras[n].Media.PathAndFileNameVideos    = new List <string>();
                        if (!File.Exists(cameraThumbnailPathAndFileName))
                        {
                            var cameraThumbnailByteArray = uweR70_GetData.ThumbnailImageAsync(minData, cameraThumbnail).Result;
                            File.WriteAllBytes(cameraThumbnailPathAndFileName, cameraThumbnailByteArray);
                        }
                    }
                }

                var timestampFormatter = common.GetTimestampFormatter();

                var pageCounter = 0;
                var aborted     = false;
                form.SetP0TxtBoxInfoText(string.Empty);
                form.SetP0TxtBoxInfoText($"Try to download videos.");
                do
                {
                    pageCounter++;

                    var changedMedia = uweR70_Get.ChangedMediaAsync(baseData, pageCounter).Result;
                    if (changedMedia.media == null || changedMedia.media.Length == 0)
                    {
                        break;
                    }

                    form.SetP0TxtBoxInfoText(string.Empty);
                    form.SetP0TxtBoxInfoText($"Page #{pageCounter} contains {changedMedia.media.Length} videos.");

                    var counterMarkedAsDeleted         = 0;
                    var counterAlreadyBeforeDownloaded = 0;
                    var counterDownloaded = 0;

                    form.SetP0TxtBoxInfoText($"\tMarked as deleted #{counterMarkedAsDeleted}.");
                    form.SetP0TxtBoxInfoText($"\tAlready before downloaded #{counterAlreadyBeforeDownloaded}.");
                    form.SetP0TxtBoxInfoText($"\tDownloaded #{counterDownloaded}.");

                    for (var i = 0; i < changedMedia.media.Length; i++)
                    {
                        if (changedMedia.media[i].deleted)
                        {
                            counterMarkedAsDeleted++;
                            AdjustInfo(form, common, $"\tMarked as deleted #{counterMarkedAsDeleted - 1}.", $"\tMarked as deleted #{counterMarkedAsDeleted}.");

                            if (counterMarkedAsDeleted == MagicNumberVideosPerPage)
                            {
                                form.SetP0TxtBoxInfoText($"Download aborted becasue current page cantains {MagicNumberVideosPerPage} as deleted marked videos!");
                                aborted = true;
                                break;
                            }
                            continue;
                        }

                        var networkObject = baseData.Networks.Where(x => x.Id == changedMedia.media[i].network_id).ToList();
                        if (networkObject == null || networkObject.Count() != 1)
                        {
                            // Should never be true!
                            continue;
                        }
                        var cameraObject = networkObject[0].Cameras.Where(x => x.Id == changedMedia.media[i].device_id).ToList();
                        if (cameraObject == null || cameraObject.Count() != 1)
                        {
                            // Should never be true!
                            continue;
                        }

                        // Method called and not just path combined because called method creates directory if it does not exist.
                        var networkNameAndId     = common.CombineNameAndId(changedMedia.media[i].network_name, changedMedia.media[i].network_id);
                        var cameraNameAndId      = common.CombineNameAndId(changedMedia.media[i].device_name, changedMedia.media[i].device_id);
                        var storagePath          = GetStoragePath(saveDirectory, networkNameAndId, cameraNameAndId);
                        var videoFileName        = changedMedia.media[i].created_at.ToString(timestampFormatter) + ".mp4";
                        var videoPathAndFileName = $"{storagePath}\\{videoFileName}";
                        cameraObject[0].Media.PathAndFileNameVideos.Add(videoPathAndFileName);
                        if (!File.Exists(videoPathAndFileName))
                        {
                            var videoByteArray = uweR70_GetData.VideoAsync(baseData, changedMedia.media[i].media).Result;
                            mediaIdListBody.media_list.Add(changedMedia.media[i].id);
                            File.WriteAllBytes(videoPathAndFileName, videoByteArray);
                            counterDownloaded++;
                            AdjustInfo(form, common, $"\tDownloaded #{counterDownloaded - 1}.", $"\tDownloaded #{counterDownloaded}.");
                        }
                        else
                        {
                            counterAlreadyBeforeDownloaded++;
                            AdjustInfo(form, common, $"\tAlready before downloaded #{counterAlreadyBeforeDownloaded - 1}.", $"\tAlready before downloaded #{counterAlreadyBeforeDownloaded}.");
                        }
                    }
                } while (!aborted);

                form.SetP0TxtBoxInfoText(string.Empty);
                form.SetP0TxtBoxInfoText("Done!");
                return(baseData);
            }
            catch (Exception ex)
            {
                form.SetP0TxtBoxInfoText(string.Empty);
                form.SetP0TxtBoxInfoText($"### ERROR ###");
                var errorMessage = ex.Message;
                if (ex.InnerException != null && !string.IsNullOrEmpty(ex.InnerException.Message))
                {
                    errorMessage = ex.InnerException.Message;
                }
                form.SetP0TxtBoxInfoText($"\t{errorMessage}");
                return(null);
            }
        }