/// <summary>
        /// Beginining of the background worker tasks
        /// </summary>
        public void PublishData()
        {
            StartTime = DateTime.Now;

            Data = PrepareData();

            if (File.Exists(Info.LocalFilePath) || TempImage != null || !string.IsNullOrEmpty(TempText))
            {
                // Note: We need write text or image first
                if (WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.LocalDisk))
                {
                    switch (Job1)
                    {
                        case EDataType.Text:
                        case EDataType.URL:
                            WriteText(TempText);
                            break;
                        default:
                            WriteImage(TempImage);
                            break;
                    }

                    var ur_local = new UploadResult
                                       {
                                           Host = OutputEnum.LocalDisk.GetDescription(),
                                           LocalFilePath = Info.LocalFilePath,
                                       };
                    if (!WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.RemoteHost))
                    {
                        ur_local.URL = ur_local.GetLocalFilePathAsUri(Info.LocalFilePath);
                        AddUploadResult(ur_local);
                    }
                }

                if (WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.RemoteHost))
                {
                    switch (Job1)
                    {
                        case EDataType.Image:
                            UploadImage();
                            break;

                        case EDataType.Text:
                        case EDataType.URL:
                            switch (Job2)
                            {
                                case JobLevel2.Translate:
                                    SetTranslationInfo(
                                        new GoogleTranslate(Engine.ConfigUI.ApiKeysConfig.GoogleApiKey).TranslateText(TranslationInfo));
                                    SetText(TranslationInfo.Result);
                                    break;
                                default:
                                    UploadText();
                                    break;
                            }
                            break;

                        case EDataType.File:
                            UploadFile();
                            break;
                    }
                }

                if (WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.SharedFolder))
                {
                    switch (Job1)
                    {
                        case EDataType.File:
                            UploadToSharedFolder(Engine.ConfigUploaders.LocalhostSelectedFiles);
                            break;
                        case EDataType.Image:
                            UploadToSharedFolder(Engine.ConfigUploaders.LocalhostSelectedImages);
                            break;
                        case EDataType.Text:
                        case EDataType.URL:
                            UploadToSharedFolder(Engine.ConfigUploaders.LocalhostSelectedText);
                            break;
                    }
                }

                if (WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.Email))
                {
                    SendEmail();
                }

                if (WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.Printer))
                {
                    Print();
                }

                if (WorkflowConfig.DestConfig.Outputs.Contains(OutputEnum.Clipboard) &&
                    WorkflowConfig.DestConfig.Outputs.Count == 1)
                {
                    SetClipboardContent();
                }

                if (UploadResults.Count > 0)
                {
                    FlashIcon();
                }
            }

            EndTime = DateTime.Now;
        }