예제 #1
0
    private async Task RunAsync(CancellationToken cancellationToken)
    {
        // TODO: Remplacez le texte suivant par votre propre logique.
        while (!cancellationToken.IsCancellationRequested)
        {
            Trace.TraceInformation("Working");
            TASK_Service taskService = new TASK_Service();

            List <TASK> listOfTasks = taskService.GetListOfTaskByStatusToDoOrToMerge();

            if (listOfTasks.Count() > 0)
            {
                TASK task = listOfTasks.First();

                task.DATE_BEGIN_CONVERSION = DateTime.Now;
                taskService.AddOrUpdateTask(task);
                new TRACE_Service().AddTrace(new TRACE()
                {
                    FK_ID_TASK = task.PK_ID_TASK, FK_ID_SERVER = 1, METHOD = "INITIALISATION TASK", DESCRIPTION = "Récupération de la tache à effectuer"
                });
                TranscoderService.DoFFmpegConversion(task);
            }

            await Task.Delay(60000);
        }
    }
예제 #2
0
        public static bool DoFFmpegConversion(TASK Task)
        {
            InitWorkspace();
            FORMAT formatToConvert = new FORMAT_Service().GetFormatById((int)Task.FK_ID_FORMAT_TO_CONVERT);

            try
            {
                if (Task.STATUS == (int)EnumManager.PARAM_TASK_STATUS.A_REASSEMBLER)
                {
                    Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.EN_COURS;
                    new TASK_Service().AddOrUpdateTask(Task);

                    List <TASK> listOfSubTaskByParent = new TASK_Service().GetSubTaskByMotherTask(Task.PK_ID_TASK);
                    bool        isMerged = FFmpegMergeSplits(Task, listOfSubTaskByParent);

                    if (isMerged)
                    {
                        Task.DATE_END_CONVERSION = DateTime.Now;
                        Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.EFFECTUE;
                    }
                }
                else
                if (!GetTaskAndSetIfTaskIsSplitted(Task, formatToConvert))
                {
                    Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.EN_COURS;
                    new TASK_Service().AddOrUpdateTask(Task);
                    FFMpegService.Execute(Task.FILE_URL_TEMP, formatToConvert.FORMAT_FFMPEG_VALUE, Task.FILE_URL_DESTINATION);
                    Task.DATE_END_CONVERSION = DateTime.Now;
                    Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.EFFECTUE;
                    // Verification si c'est une sous tache
                    // On vérifie si les sous taches ont été effectué ou pas.
                    if (Task.FK_ID_PARENT_TASK != null)
                    {
                        List <TASK> listOfSubTaskByParent = new TASK_Service().GetSubTaskByMotherTask((int)Task.FK_ID_PARENT_TASK);
                        int         totalEffectue         = listOfSubTaskByParent.Count(x => x.STATUS == (int)EnumManager.PARAM_TASK_STATUS.EFFECTUE);
                        if (totalEffectue.Equals(listOfSubTaskByParent.Count))
                        {
                            TASK MotherTask = new TASK_Service().GetTaskById((int)Task.FK_ID_PARENT_TASK);
                            MotherTask.STATUS = (int)EnumManager.PARAM_TASK_STATUS.A_REASSEMBLER;
                            new TASK_Service().AddOrUpdateTask(MotherTask);
                        }
                    }
                }

                new TASK_Service().AddOrUpdateTask(Task);
                return(true);
            }
            catch (Exception e)
            {
                Task.DATE_END_CONVERSION = DateTime.Now;
                Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.ERREUR;
                new TASK_Service().AddOrUpdateTask(Task);

                TRACE Trace = new TRACE {
                    FK_ID_TASK = Task.PK_ID_TASK, FK_ID_SERVER = 1, DATE_TRACE = DateTime.Now, NOM_SERVER = System.Environment.MachineName, DESCRIPTION = e.Message, METHOD = "CONVERSION FFMPEG", TYPE = "ERROR"
                };
                new TRACE_Service().AddTrace(Trace);
                return(false);
            }
        }
예제 #3
0
        public ActionResult Telecharger(int id)
        {
            TASK   task  = new TASK_Service().GetTaskById(id);
            int    index = task.FILE_URL_DESTINATION.LastIndexOf('\\') + 1;
            string file  = task.FILE_URL_DESTINATION.Substring(index);

            DownloadFile(file, task.FILE_URL_DESTINATION);

            return(RedirectToAction("MesConversions"));
        }
예제 #4
0
 public ActionResult DeleteConversion(int id)
 {
     if (id != 0)
     {
         bool isDeleted = new TASK_Service().DeleteTaskById(id);
         if (isDeleted)
         {
             return(RedirectToAction("Panier"));
         }
     }
     return(RedirectToAction("Panier"));
 }
예제 #5
0
        public ActionResult MesConversions()
        {
            int UserId = CookieUtil.GetUserId(this);

            if (UserId == 0)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var commandes = new TASK_Service().GetListCommandesViewModel(UserId);

            return(View("ListCommandes", commandes));
        }
예제 #6
0
        public ActionResult Panier()
        {
            int UserId = CookieUtil.GetUserId(this);

            if (UserId == 0)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var panier = new TASK_Service().GetPanierViewModel(UserId);

            return(View("Panier", panier));
        }
예제 #7
0
        public ActionResult AddConversion()
        {
            int UserId = CookieUtil.GetUserId(this);

            if (UserId == 0)
            {
                CreateTaskViewModel model = new TASK_Service().InitCreateTaskViewModelFromAnonymous();
                return(View(model));
            }
            {
                CreateTaskViewModel model = new TASK_Service().InitCreateTaskViewModel(UserId);
                return(View(model));
            }
        }
        private void WorkerFunction()
        {
            // start an endless loop; loop will abort only when "serviceStarted" flag = false
            while (true)
            {
                try
                {
                    tick++;
                    CreateFileData("Events.txt", "tick: " + tick.ToString() + " Date : " + DateTime.Now.ToString());
                    CreateFileData("Events.txt", "avant requete : ok");
                    TASK_Service taskService = new TASK_Service();
                    TASK         task        = taskService.GetLastTaskToConvert();


                    if (task != null)
                    {
                        CreateFileData("Events.txt", "tache trouvée : " + task.PK_ID_TASK.ToString());
                        lock (_lockObject)
                        {
                            CreateFileData("Events.txt", "tache not null et lock : ok");
                            task.DATE_BEGIN_CONVERSION = DateTime.Now;
                            taskService.UpdateTask(task);
                            new TRACE_Service().AddTrace(new TRACE()
                            {
                                FK_ID_TASK = task.PK_ID_TASK, FK_ID_SERVER = 1, DATE_TRACE = DateTime.Now, NOM_SERVER = System.Environment.MachineName, METHOD = "INITIALISATION TASK", DESCRIPTION = "Récupération de la tache à effectuer"
                            });
                            TranscoderService.DoFFmpegConversion(task);
                        }
                    }
                }
                catch (Exception f)
                {
                    string       path          = ConfigurationManager.AppSettings["TranscoderRootServiceForLogs"] + "Exception.txt";
                    StreamWriter oStreamWriter = new StreamWriter(path, true);
                    oStreamWriter.WriteLine("DATE : " + DateTime.Now.ToString());
                    oStreamWriter.WriteLine(f.Message);
                    oStreamWriter.WriteLine(f.InnerException);
                    oStreamWriter.WriteLine(f.StackTrace);
                    oStreamWriter.Close();
                    oStreamWriter  = null;
                    serviceStarted = false;
                }
                Thread.Sleep(5000);
                serviceStarted = true;
            }
            // time to end the thread
            // Thread.CurrentThread.Abort();
        }
예제 #9
0
        public ActionResult AddConversion(CreateTaskViewModel model)
        {
            //if (!ModelState.IsValid)
            //    return View(model);


            bool isEdited = new TASK_Service().AddTaskByViewModel(model);

            FlashMessage.Confirmation(@UiStrings.add_conversion_message_added_to_cart);
            if (model.ShortEditUserViewModel.PK_ID_USER == 0)
            {
                return(LoginAuto(model.ShortEditUserViewModel));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
        public HomeAuthViewModel GetDataFromUserId(int userId)
        {
            var taskService = new TASK_Service();
            var lastTask    = taskService.GetLastTaskByUserId(userId);

            var vm = new HomeAuthViewModel();

            if (lastTask != null)
            {
                var    status   = new PARAM_TASK_STATUS_Service().GetAll().Where(x => x.PK_ID_STATUS == lastTask.STATUS).FirstOrDefault();
                string fileName = lastTask.FILE_URL.Substring(lastTask.FILE_URL.LastIndexOf(@"\") + 1);
                vm = new HomeAuthViewModel()
                {
                    DateDemande   = lastTask.TRANSACTION.DATE_TRANSACTION,
                    LastTranscode = fileName,
                    Status        = status.LIBELLE
                };
            }
            return(vm);
        }
        public void StartDebug()
        {
            while (true)
            {
                try
                {
                    CreateFileData("Events.txt", "avant requete : ok");
                    TASK_Service taskService = new TASK_Service();
                    TASK         task        = taskService.GetListOfTaskByStatusToDoOrToMerge().FirstOrDefault();
                    CreateFileData("Events.txt", "tache trouvée : " + task.PK_ID_TASK.ToString());

                    lock (_lockObject)
                    {
                        CreateFileData("Events.txt", "lock : ok");
                        if (task != null)
                        {
                            CreateFileData("Events.txt", "tache not null : ok");
                            task.DATE_BEGIN_CONVERSION = DateTime.Now;
                            taskService.UpdateTask(task);
                            new TRACE_Service().AddTrace(new TRACE()
                            {
                                FK_ID_TASK = task.PK_ID_TASK, FK_ID_SERVER = 1, DATE_TRACE = DateTime.Now, NOM_SERVER = System.Environment.MachineName, METHOD = "INITIALISATION TASK", DESCRIPTION = "Récupération de la tache à effectuer"
                            });
                            TranscoderService.DoFFmpegConversion(task);
                        }
                    }
                }
                catch (Exception f)
                {
                    string       path          = ConfigurationManager.AppSettings["TranscoderRootServiceForLogs"] + "Exception.txt";
                    StreamWriter oStreamWriter = new StreamWriter(path, true);
                    oStreamWriter.WriteLine(f.Message);
                    oStreamWriter.WriteLine(f.InnerException);
                    oStreamWriter.WriteLine(f.StackTrace);
                    oStreamWriter.Close();
                    oStreamWriter = null;
                }
            }
        }
        //ConfigurationManager.AppSettings["TranscoderTempRootDestination"];

        public static bool DoFFmpegConversion(TASK Task)
        {
            InitWorkspace();
            // on récupère le format de conversion de la tache
            FORMAT formatToConvert = new FORMAT_Service().GetFormatById((int)Task.FK_ID_FORMAT_TO_CONVERT);
            FORMAT formatBase      = new FORMAT_Service().GetFormatById((int)Task.FK_ID_FORMAT_BASE);
            var    formatTypeBase  = new FORMAT_TYPE_Service().findById((int)formatBase.FK_ID_FORMAT_TYPE);

            FORMAT_TYPE formatTypeDestination = new FORMAT_TYPE_Service().findById((int)Task.FORMAT.FK_ID_FORMAT_TYPE);

            // S'il s'agit d'une extraction audio
            if (formatTypeDestination != null && formatTypeBase.PK_ID_FORMAT_TYPE == (int)EnumManager.FORMAT_TYPE.VIDEO && formatTypeDestination.PK_ID_FORMAT_TYPE == (int)EnumManager.FORMAT_TYPE.AUDIO)
            {
                return(ExtractAudioSegment(Task));
            }
            try
            {  // On vérifie si la tache est à reassembler ou pas
                if (Task.STATUS == (int)EnumManager.PARAM_TASK_STATUS.A_REASSEMBLER)
                {
                    // On met le statut en cours
                    Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.EN_COURS;
                    new TASK_Service().UpdateTask(Task);

                    // On liste les sous taches
                    List <TASK> listOfSubTaskByParent = new TASK_Service().GetSubTaskByMotherTask(Task.PK_ID_TASK);
                    // On va merge les sous taches pour renvoyer la conversion complete
                    bool isMerged = FFmpegMergeSplits(Task, listOfSubTaskByParent);
                    // si le merge s'est bien passé on change le statut de notre Tache.
                    if (isMerged)
                    {
                        Task.DATE_END_CONVERSION = DateTime.Now;
                        Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.EFFECTUE;
                        // On envoie la notification par mail
                        MailUtil.SendMail(StringManager.CONVERSION_TERMINEE, Task);
                    }
                }
                else
                // Dans le cas ou la tache n'a pas besoin d'etre splitté, on fait le traitement habituel.
                if (!GetTaskAndSetIfTaskIsSplitted(Task, formatToConvert))
                {
                    // On lance la conversion
                    ConvertTask(Task, formatToConvert);

                    // Verification si c'est une sous tache
                    // On vérifie si les sous taches ont été effectuées ou pas.
                    if (Task.FK_ID_PARENT_TASK != null)
                    {
                        List <TASK> listOfSubTaskByParent = new TASK_Service().GetSubTaskByMotherTask((int)Task.FK_ID_PARENT_TASK);
                        int         totalEffectue         = listOfSubTaskByParent.Count(x => x.STATUS == (int)EnumManager.PARAM_TASK_STATUS.EFFECTUE);
                        if (totalEffectue.Equals(listOfSubTaskByParent.Count))
                        {
                            TASK MotherTask = new TASK_Service().GetTaskById((int)Task.FK_ID_PARENT_TASK);
                            MotherTask.STATUS = (int)EnumManager.PARAM_TASK_STATUS.A_REASSEMBLER;
                            new TASK_Service().UpdateTask(MotherTask);
                        }
                    }
                    if (Task.STATUS == (int)EnumManager.PARAM_TASK_STATUS.EFFECTUE && Task.FK_ID_PARENT_TASK == null)
                    {
                        // On envoie la notification par mail
                        MailUtil.SendMail(StringManager.CONVERSION_TERMINEE, Task);
                    }
                }
                new TASK_Service().UpdateTask(Task);
                return(true);
            }
            catch (Exception e)
            {
                Task.DATE_END_CONVERSION = DateTime.Now;
                Task.STATUS = (int)EnumManager.PARAM_TASK_STATUS.ERREUR;
                new TASK_Service().UpdateTask(Task);

                TRACE Trace = new TRACE {
                    FK_ID_TASK = Task.PK_ID_TASK, DATE_TRACE = DateTime.Now, NOM_SERVER = System.Environment.MachineName, FK_ID_SERVER = 1, DESCRIPTION = e.Message + " " + e.InnerException, METHOD = "CONVERSION FFMPEG", TYPE = "ERROR"
                };
                new TRACE_Service().AddTrace(Trace);
                return(false);
            }
        }