public UC_ExerciseSelection(Training currentTraining)
        {
            InitializeComponent();

            CurrentTraining = currentTraining;

            this.Loaded += UC_ExerciseSelection_Loaded;
        }
示例#2
0
 public void OpenDistanceChecker(Patient _currentPatient, Training _currentTraining)
 {
     using (DistanceWindow distanceWindow = new DistanceWindow(_currentPatient, _currentTraining, null))
     {
         distanceWindow.mainWindow = this;
         this.Content = distanceWindow;
     }
 }
示例#3
0
 public void OpenExerciseWindow(Patient _currentPatient, Training _currentTraining)
 {
     using (ExerciseView _exerciseView = new ExerciseView(_currentPatient, _currentTraining))
     {
         _exerciseView.MainWindow = this;
         _exerciseView.GoBackToTreatmentScreen += OpenTreatmentWindow;
         this.Content = _exerciseView;
     }
 }
        public UC_TrainingSelection(Patient currentPatient, Training currentTraining)
        {
            InitializeComponent();

            _currentPatient = currentPatient;
            _currentTraining = currentTraining;

            DataContext = _currentTraining;
        }
        public DistanceWindow(Patient currentPatient, Training currentTraining, VideoTherapy.TrainingMenu trainingMenu)
        {
            InitializeComponent();

            this.currentPatient = currentPatient;
            this.currentTraining = currentTraining;
            this.trainingMenu = trainingMenu;

            //SetKinectConnection();

            this.Loaded += DistanceWindow_Loaded;
        }
示例#6
0
        public TrainingMenu(Patient currentPatient, Training currentTraining)
        {
            InitializeComponent();

            _currentPatient = currentPatient;
            _currentTraining = currentTraining;

            this.Loaded += TrainingMenu_Loaded;

            splash = new VT_Splash();
            //splash.ErrorEvent+=

            worker = new BackgroundWorker();
            worker.DoWork += Worker_DoWork;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
        }
示例#7
0
        ///<summary>
        ///get current training moition quality score
        ///</summary>
        public static int GetTrainingQuailty(Training CurrentTraining)
        {
            float avg = 0;
            int numOfExe = 0;

            foreach (var key in CurrentTraining.Playlist.Keys)
            {
                Exercise exercise = CurrentTraining.Playlist[key][1];

                if (exercise.ExerciseScore != null && exercise.IsTraceable)
                {
                    avg += (exercise.ExerciseScore.MoitionQuality * 100);
                    numOfExe++;
                }
            }

            return (numOfExe != 0) ? (int) (avg / numOfExe) : 0;
        }
示例#8
0
 public void OpenTrainingWindow(Patient _currentPatient, Training _selectedTraining)
 {
     //OpenningWindow.Children.Clear();
     //OpenningWindow.Background = null;
     using (TrainingMenu _trainingMenu = new TrainingMenu(_currentPatient, _selectedTraining))
     {
         _trainingMenu.MainWindow = this;
         _trainingMenu.CloseApp += CloseApp;
         _trainingMenu.LogOut += LogOut;
         this.Content = _trainingMenu;
         //OpenningWindow.Children.Add(_trainingMenu);
     }
 }
示例#9
0
        private void _trainingSelection_StartPlaylist(Training currentTraining)
        {
            
            if (_currentTraining.IsTraceableTraining)
            {
                userInDistanceSemaphore = new SemaphoreSlim(1);
                userInDistanceSemaphore.Wait();

                worker.RunWorkerAsync();

                using (DistanceWindow distance = new DistanceWindow(_currentPatient, currentTraining, this))
                {
                    this.Content = distance;
                    
                    Console.WriteLine("distance wait finish");
                    //distance.trainingMenu = this;
                }
                //MainWindow.OpenDistanceChecker(_currentPatient, _currentTraining);
            }
            else
            {
                MainWindow.OpenExerciseWindow(_currentPatient, _currentTraining);
            }

            
            //barrier.SignalAndWait();
        }
示例#10
0
        public ExerciseView(Patient currentPatient, Training currentTraining)
        {
            InitializeComponent();

            CurrentPatient = currentPatient;
            CurrentTraining = currentTraining;


            this.Loaded += ExerciseView_Loaded;
        }
示例#11
0
        /// <summary>
        /// Parse from json content to current patient training
        /// </summary>
        /// <param name="_JSONcontent">The response json</param>
        /// <param name="_training">The _training object</param>
        public static void GettingPatientTraining2(Training _training, string _JSONcontent)
        {
            dynamic d =
                    (JsonConvert.DeserializeObject<IDictionary<string, object>>(_JSONcontent));

            //checking errors
            bool checkError = checkForErrors((int)d["code"]);
            if (checkError)
            {
                ErrorEvent(null, new ErrorMessege(((ServerCode)d["code"].code).ToString(), (int)d["code"].code));
                return;
            }

            _training.Playlist = new Dictionary<int, List<Exercise>>();
            int numOfExercises = 1;

            //iterat over the exercise session
            foreach (var item in d["data"].sessions)
            {
                //Creating demo exercise
                Exercise demoExercise = new Exercise();
                demoExercise.ExerciseName = item.exerciseLabel;
                demoExercise.ExerciseId = item.exerciseId;
                demoExercise.ExerciseThumbs = item.exerciseThumbnail;
                string tt = item.exerciseVideoDemo;
                demoExercise.VideoPath = new Uri(HttpsReplaceToHttp.ReplaceHttpsToHttp(tt));
                demoExercise.ExerciseNum = numOfExercises;
                demoExercise.isDemo = true;
                demoExercise.SessionId = item.sessionId;
                demoExercise.Mode = Exercise.ExerciseMode.Demo;

                int temp = item.sessionId;
                _training.Playlist[temp] = new List<Exercise>();
                _training.Playlist[temp].Add(demoExercise);

                numOfExercises++;

                //duplicate the exercise if there are repeats for him by therapist
                //sessRepeats - number of duplicates exercise
                int x = item.sessRepeats;
                for (int i = 1; i <= x; i++)
                {
                    Exercise newExercise = new Exercise();

                    newExercise.ExerciseName = item.exerciseLabel;
                    newExercise.ExerciseId = item.exerciseId;
                    newExercise.ExerciseThumbs = item.exerciseThumbnail;
                    tt = item.exerciseVideo;
                    newExercise.VideoPath = new Uri(HttpsReplaceToHttp.ReplaceHttpsToHttp(tt));
                    newExercise.Repetitions = item.exerciseCycles;
                    newExercise.ExerciseNum = numOfExercises;
                    newExercise.SessionId = item.sessionId;
                    newExercise.IsTraceable = item.isTrackable;
                    newExercise.Mode = (bool) item.isTrackable ? Exercise.ExerciseMode.Traceable : Exercise.ExerciseMode.NonTraceable;

                    //todo - should be from server
                    newExercise.VideoComplianceValue = 2;
                    newExercise.SuccessRate = 0.5f;

                    //for future download for not duplicate the same file
                    if (i != 1)
                    {
                        newExercise.Mode = newExercise.Mode == Exercise.ExerciseMode.Traceable ? Exercise.ExerciseMode.TraceableDuplicate : Exercise.ExerciseMode.NonTraceableDuplicate;
                        newExercise.isDuplicate = true;
                    }
                    numOfExercises++;

                    _training.Playlist[temp].Add(newExercise);
                }

            }

            foreach (var exercises in _training.Playlist.Values)
            {
                if (exercises[1].IsTraceable)
                {
                    _training.IsTraceableTraining = true;
                    break;
                }
            }
        }
示例#12
0
        /// <summary>
        /// Parse from json content to training list
        /// <param name="_JSONcontent">The response json</param>
        /// </summary>
        public static List<Training> CreateTrainingList(string _JSONcontent)
        {
            List<Training> trainingList = new List<Training>();

            Dictionary<int, object> trainingListJson = JsonConvert.DeserializeObject<Dictionary<int, object>>(_JSONcontent);

            //List<object> trainingListJson = JsonConvert.DeserializeObject<List<object>>(_JSONcontent);

            foreach (object item in trainingListJson.Values)
            {
                Training newTraining = new Training();
                object temp;
                int tempInt;
                float tempFloat1, tempFloat2;

                Dictionary<string, object> currentObj = JsonConvert.DeserializeObject<Dictionary<string, object>>(item.ToString());

                trainingList.Add(newTraining);

                newTraining.TrainingNumber = trainingList.IndexOf(newTraining) + 1;
                currentObj.TryGetValue("label", out temp);
                newTraining.TrainingName = temp.ToString();

                currentObj.TryGetValue("id", out temp);
                Int32.TryParse(temp.ToString(), out tempInt);
                newTraining.TrainingId = tempInt;

                currentObj.TryGetValue("thumbnail", out temp);
                newTraining.TrainingThumbs = temp.ToString();

                //todo - yoav need to change the api
                currentObj.TryGetValue("lastTrainedDate", out temp);
                if (!temp.ToString().Equals("[]"))
                {
                    Dictionary<string, string> tempDate = JsonConvert.DeserializeObject<Dictionary<string, string>>(temp.ToString());
                    DateTime tempDateTime;
                    DateTime.TryParse(tempDate["date"].ToString(), out tempDateTime);

                    newTraining.LastViewed = tempDateTime;
                }
                else
                {
                    newTraining.LastViewed = null;
                }

                //add scoring!!
                Dictionary<string, float> scoringDic = JsonConvert.DeserializeObject<Dictionary<string, float>>(currentObj["session_usage"].ToString());
                scoringDic.TryGetValue("num_repeatition_done", out tempFloat1);
                scoringDic.TryGetValue("num_repeatition_total", out tempFloat2);
                if (tempFloat1 == 0)
                {
                    newTraining.TrainingScore = 0;
                }
                else
                {
                    newTraining.TrainingScore = (int)(tempFloat1 / tempFloat2 * 100);
                }
                //newTraining.TrainingCompliance = (int)(scoringDic["num_repeatition_done"] / scoringDic["num_repeatition_total"] * 100);

                scoringDic.TryGetValue("motion_quality", out tempFloat1);
                newTraining.TrainingQuality = (int)(tempFloat1 * 100);
                //newTraining.TrainingScore = (int)(scoringDic["motion_quality"] * 100);

                //check if there is calEvents exist
                object tempCalEvents;
                currentObj.TryGetValue("calEventsUsage", out tempCalEvents);

                if (tempCalEvents is JObject)
                {
                    Dictionary<string, int> calEvents = JsonConvert.DeserializeObject<Dictionary<string, int>>(tempCalEvents.ToString());
                    calEvents.TryGetValue("total", out tempInt);
                    newTraining.Repetitions = tempInt;
                    //newTraining.Repetitions = Int32.Parse(calEvents["total"].ToString());

                    calEvents.TryGetValue("completed", out tempInt);
                    newTraining.TrainingCompleted = tempInt;
                    //newTraining.TrainingCompleted = Int32.Parse(calEvents["completed"].ToString());
                }

                object calGuid;
                currentObj.TryGetValue("cal_guid", out calGuid);
                newTraining.CalGuid = calGuid.ToString();

                object calEvent;
                currentObj.TryGetValue("next_cal_event_id", out calEvent);
                newTraining.CalEventId = calEvent.ToString();

                //check if this training is the upcoming one
                Object checkUpComming = false;
                currentObj.TryGetValue("upcomingEvent", out checkUpComming);
                if (checkUpComming != null && (Boolean)checkUpComming && !newTraining.CalEventId.Equals(""))
                {
                    newTraining.IsRecommended = true;
                }

                newTraining.TrainingComplianceValue = Training.TRAINING_COMPLIANCE;
            }

            return trainingList;
        }
示例#13
0
        /// <summary>
        /// Handling the selection of the training and open his window
        /// </summary>
        /// <param name="_selectedTraining">The select training</param>
        private void _trainingSeleciton_trainingSelectedEvent(Training _selectedTraining)
        {
            _currentPatient.PatientTreatment.CurrentTraining = _selectedTraining;
            MainWindow.OpenTrainingWindow(_currentPatient, _selectedTraining);

            //todo - start download gdb files
            //
        }
示例#14
0
        /// <summary>
        /// Report training compliance, use only when compliance pass the value
        /// <param name="training">Current training</param>
        /// </summary>
        public static async Task<string> ReportTrainingComplianceApiAsync(Training training)
        {
            if (!training.CalEventId.Equals(""))
            {
                Dictionary<string, string> _pairs = PairsDictinaryForApi(ApiType.ReportTrainingCompliance, "calGuid", training.CalGuid,
                                    "eventId", training.CalEventId);

                return await ConnectingApiAsync(_pairs);
            }

            return null;
        }
示例#15
0
        /// <summary>
        /// 
        /// <param name="_exerciseId">Active instance of the KinectSensor</param>
        /// </summary>
        public static async Task<string> ReportExerciseScoreApiAsync(Exercise exercise, Training training)
        {
            if (!training.CalEventId.Equals(""))
            {
                Dictionary<string, string> _pairs = PairsDictinaryForApi(ApiType.ReportExercise, "exerciseId", exercise.ExerciseId.ToString(), "numRepitionTotal", exercise.ExerciseScore.TotalRepetitions.ToString(),
                                                            "numRepitionDone", exercise.ExerciseScore.TotalRepetitionsDone.ToString(), "motionQuality", exercise.ExerciseScore.MoitionQuality.ToString(),
                                                            "calGuid", training.CalGuid, "calEventId", training.CalEventId);

                return await ConnectingApiAsync(_pairs);
            }

            return null;
        }
示例#16
0
        ///<summary>
        ///get current training score - num of repititions completed
        ///</summary>
        public static int GetTrainingScore(Training CurrentTraining)
        {
            int numOfSuccess = 0;
            int numOfExercises = 0;
            foreach (var key in CurrentTraining.Playlist.Keys)
            {
                Exercise exercise = CurrentTraining.Playlist[key][1];

                if (exercise.ExerciseScore != null && exercise.IsTraceable) //meaning that is a traceable
                {
                    numOfExercises += exercise.ExerciseScore.TotalRepetitions;
                    numOfSuccess += exercise.ExerciseScore.TotalRepetitionsDone;
                }
                else
                {
                    numOfExercises += exercise.Repetitions;
                }
            }

            float scoreRep = (numOfSuccess * 100 )/ (float) numOfExercises;
            //int scoreRep = (int)(t);
            return (numOfExercises != 0) ? (int) scoreRep : 0;
        }