コード例 #1
0
        /// <summary>
        /// Try to open an existng Feedbackthread
        /// </summary>
        /// <param name="threadToken">thread token for this thread</param>
        /// <returns>a populated feedback thread, null if the token is invalid or the thread closed.</returns>
        public async Task <IFeedbackThread> OpenFeedbackThreadAsync(string threadToken)
        {
            if (String.IsNullOrWhiteSpace(threadToken))
            {
                throw new ArgumentException("Token must not be empty!");
            }
            FeedbackThread fbThread = null;

            try {
                fbThread = await FeedbackThread.OpenFeedbackThreadAsync(this, threadToken);
            } catch (Exception e) {
                HandleInternalUnhandledException(e);
            }
            return(fbThread);
        }
コード例 #2
0
        private async Task InitializeAsync()
        {
            if (FeedbackManager.Instance.IsThreadOpen)
            {
                if (NetworkInterface.GetIsNetworkAvailable())
                {
                    try
                    {
                        FeedbackThread thread = await FeedbackManager.Instance.GetActiveThreadAsync();

                        if (thread != null)
                        {
                            foreach (var msg in (thread.messages))
                            {
                                this.Messages.Add(new FeedbackMessageVM(msg));
                            }
                            if (FeedbackManager.Instance.FeedbackPageTopTitle.IsEmpty() && !thread.messages.First().subject.IsEmpty())
                            {
                                Deployment.Current.Dispatcher.BeginInvoke(() => this.ThreadInfo = thread.messages.First().subject);
                            }
                        }
                        else //thread has been deleted
                        {
                            Deployment.Current.Dispatcher.BeginInvoke(() => IsThreadActive = false);
                            SwitchToMessageForm();
                        }
                    }
                    catch (Exception)
                    {
                        Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            MessageBox.Show("There has been a connection problem with the server. Please try again later.");
                        });
                    }
                }
                else //no internet connection
                {
                    //TODO warnung kein internet und zurückspringen (navigateback!?)
                }
            }
            else
            {
                Deployment.Current.Dispatcher.BeginInvoke(() => IsThreadActive = false);
                SwitchToMessageForm();
            }
            SetFormFieldDefaults();
            HideOverlay();
        }
コード例 #3
0
        internal async Task <IEnumerable <FeedbackThreadVM> > LoadFeedbackThreadsAsync()
        {
            var                     tokens    = platformHelper.GetSettingValue(FeedbackThreadTokensSettingsKey) ?? "";
            List <string>           tokenList = tokens.Split(FeedbackThreadTokensSeparator).ToList();
            List <FeedbackThreadVM> vms       = new List <FeedbackThreadVM>();

            foreach (string token in tokenList.Where(t => !String.IsNullOrEmpty(t)))
            {
                var thread = await HockeyClient.Current.AsInternal().OpenFeedbackThreadAsync(token);

                if (thread != null)
                {
                    vms.Add(new FeedbackThreadVM(thread));
                }
            }
            if (!vms.Any())
            {
                vms.Add(new FeedbackThreadVM(FeedbackThread.CreateInstance()));
            }
            this._openthreadVMs = vms;
            return(vms);
        }
コード例 #4
0
        /// <summary>
        /// Send a feedback message to the server
        /// (you should not need this if you use the provided feedback page)
        /// </summary>
        /// <param name="message">message text</param>
        /// <param name="email">email address of sender</param>
        /// <param name="subject">subject of message</param>
        /// <param name="name">name of sender</param>
        /// <param name="attachments">The attachments.</param>
        /// <returns></returns>
        public async Task <IFeedbackMessage> SendFeedback(string message, string email, string subject, string name, IEnumerable <IFeedbackAttachment> attachments)
        {
            var thread = await this.GetActiveThreadAsync() ?? FeedbackThread.CreateInstance();

            foreach (var attachment in attachments)
            {
                //convert all images to jpg for filesize
                var bitimg = new BitmapImage();
                bitimg.SetSource(new MemoryStream(attachment.DataBytes));
                var wb = new WriteableBitmap(bitimg);

                using (var stream = new MemoryStream())
                {
                    wb.SaveJpeg(stream, bitimg.PixelWidth, bitimg.PixelHeight, 0, 70);
                    stream.Seek(0, System.IO.SeekOrigin.Begin);
                    var buffer = new byte[stream.Length];
                    stream.Read(buffer, 0, (int)stream.Length);
                    attachment.DataBytes = buffer;
                }
                attachment.FileName    = Path.GetFileNameWithoutExtension(attachment.FileName) + ".jpg";
                attachment.ContentType = "image/jpeg";
            }

            IFeedbackMessage msg;

            try
            {
                msg = await thread.PostFeedbackMessageAsync(message, email, subject, name, attachments);

                PersistThreadMetaInfos(thread.Token, subject, name, email);
                this.activeThread = thread;
            }
            catch (Exception)
            {
                this.activeThread = null;
                throw;
            }
            return(msg);
        }
コード例 #5
0
 /// <summary>
 /// Create a feedback thread to post messages on
 /// </summary>
 /// <returns>an empty IFeedbackThread</returns>
 public IFeedbackThread CreateNewFeedbackThread()
 {
     return(FeedbackThread.CreateInstance());
 }
コード例 #6
0
 internal async Task RefreshFeedbackThreadVMAsync(FeedbackThreadVM threadVM)
 {
     if (!threadVM.FeedbackThread.IsNewThread)
     {
         threadVM.FeedbackThread = (await HockeyClient.Current.AsInternal().OpenFeedbackThreadAsync(threadVM.FeedbackThread.Token)) ?? FeedbackThread.CreateInstance();
     }
 }