Пример #1
0
 public function gcodedetail()
 {
     $data_json = array();
     $gid = $this->input->get('id');
     $array_data = array();
     $check_left = NULL;
     $check_right = NULL;
     $change_left = NULL;
     $change_right = NULL;
     $enable_print = TRUE;
     $key_suggest_temper = 'suggest_temperature';
     $bicolor = $this->config->item('nb_extruder') >= 2;
     $heat_bed = $this->config->item('heat_bed');
     $this->load->helper(array('printerstoring', 'printerstate'));
     $data_json = PrinterStoring_getInfo('gcode', $gid);
     if (is_null($data_json)) {
         $this->output->set_header('Location: /printerstoring/listgcode');
         return;
     }
     $this->load->library('parser');
     $this->lang->load('printerstoring/gcodedetail', $this->config->item('language'));
     $check_left = $check_right = t('filament_ok');
     $change_left = $change_right = t('change_filament');
     foreach (array('r', 'l') as $abb_filament) {
         $data_cartridge = array();
         $tmp_ret = 0;
         $volume_need = 0;
         $key_length = NULL;
         $key_material = NULL;
         if ($abb_filament == 'l') {
             $key_length = PRINTERSTORING_TITLE_LENG_L;
             $key_material = PRINTERSTORING_TITLE_MATER_L;
         } else {
             // $abb_filament == 'r'
             $key_length = PRINTERSTORING_TITLE_LENG_R;
             $key_material = PRINTERSTORING_TITLE_MATER_R;
         }
         if ($data_json[$key_length] > 0) {
             $volume_need = $data_json[$key_length];
             // 				$array_need[$abb_filament] = 'true';
         } else {
             if ($abb_filament == 'l') {
                 $check_left = t('filament_not_need');
             } else {
                 // $abb_filament == 'r'
                 $check_right = t('filament_not_need');
             }
         }
         // check mono extruder case (normally, it's not necessary)
         if ($bicolor == FALSE && $abb_filament == 'l') {
             $tmp_ret = ERROR_MISS_LEFT_CART;
         } else {
             $tmp_ret = PrinterState_checkFilament($abb_filament, $volume_need, $data_cartridge);
         }
         if (in_array($tmp_ret, array(ERROR_OK, ERROR_MISS_LEFT_FILA, ERROR_MISS_RIGT_FILA, ERROR_LOW_LEFT_FILA, ERROR_LOW_RIGT_FILA))) {
             $array_data[$abb_filament] = array(PRINTERSTATE_TITLE_COLOR => $data_cartridge[PRINTERSTATE_TITLE_COLOR], PRINTERSTATE_TITLE_EXT_TEMPER => $data_cartridge[PRINTERSTATE_TITLE_EXT_TEMPER], PRINTERSTATE_TITLE_MATERIAL => $data_cartridge[PRINTERSTATE_TITLE_MATERIAL]);
             // set default temperature if pla
             if ($data_cartridge[PRINTERSTATE_TITLE_MATERIAL] == PRINTERSTATE_DESP_MATERIAL_PLA) {
                 $array_data[$abb_filament][PRINTERSTATE_TITLE_EXT_TEMPER] = PRINTERSTATE_VALUE_FILAMENT_PLA_PRINT_TEMPER;
             }
         } else {
             $array_data[$abb_filament] = array(PRINTERSTATE_TITLE_COLOR => PRINTERSTATE_VALUE_DEFAULT_COLOR, PRINTERSTATE_TITLE_EXT_TEMPER => 0, PRINTERSTATE_TITLE_MATERIAL => NULL);
         }
         $array_data[$abb_filament][PRINTERSTATE_TITLE_NEED_L] = $volume_need;
         $array_data[$abb_filament][$key_suggest_temper] = 0;
         if ($volume_need > 0 && $data_json[$key_material] != $array_data[$abb_filament][PRINTERSTATE_TITLE_MATERIAL]) {
             $required_material = t('require_' . $data_json[$key_material]);
             if ($abb_filament == 'l') {
                 $check_left = $required_material;
             } else {
                 // $abb_filament == 'r'
                 $check_right = $required_material;
             }
             $enable_print = FALSE;
             // disable print when material is different
         } else {
             // treat error
             switch ($tmp_ret) {
                 case ERROR_OK:
                     // do nothing if no error
                     break;
                 case ERROR_LOW_RIGT_FILA:
                     $check_right = t('filament_not_enough');
                     break;
                 case ERROR_MISS_RIGT_FILA:
                     $check_right = t('filament_unloaded');
                     $change_right = t('load_filament');
                     break;
                 case ERROR_MISS_RIGT_CART:
                     $check_right = t('filament_empty');
                     $change_right = t('load_filament');
                     break;
                 case ERROR_LOW_LEFT_FILA:
                     $check_left = t('filament_not_enough');
                     break;
                 case ERROR_MISS_LEFT_FILA:
                     $check_left = t('filament_unloaded');
                     $change_left = t('load_filament');
                     break;
                 case ERROR_MISS_LEFT_CART:
                     $check_left = t('filament_empty');
                     $change_left = t('load_filament');
                     break;
                 default:
                     $this->load->helper('printerlog');
                     PrinterLog_logError('unexpected return when getting detail of gcode library model: ' . $cr, __FILE__, __LINE__);
                     // assign error message if necessary
                     if ($abb_filament == 'l') {
                         $check_left = t('filament_error');
                     } else {
                         // $abb_filament == 'r'
                         $check_right = t('filament_error');
                     }
                     break;
             }
         }
         // block print
         if ($enable_print == TRUE && $tmp_ret != ERROR_OK && $volume_need > 0) {
             $enable_print = FALSE;
         }
     }
     $template_data = array('home' => t('home'), 'back' => t('back'), 'id' => $gid, 'title' => $data_json['name'], 'photo_title' => t('photo_title'), 'title_current' => t('filament_title'), 'msg_ok' => t('filament_ok'), 'state_c_l' => $array_data['l'][PRINTERSTATE_TITLE_COLOR], 'state_c_r' => $array_data['r'][PRINTERSTATE_TITLE_COLOR], 'state_f_l' => $check_left, 'state_f_r' => $check_right, 'need_filament_l' => $array_data['l'][PRINTERSTATE_TITLE_NEED_L], 'need_filament_r' => $array_data['r'][PRINTERSTATE_TITLE_NEED_L], 'temper_filament_l' => $array_data['l'][PRINTERSTATE_TITLE_EXT_TEMPER], 'temper_filament_r' => $array_data['r'][PRINTERSTATE_TITLE_EXT_TEMPER], 'temper_suggest_l' => $array_data['l'][$key_suggest_temper], 'temper_suggest_r' => $array_data['r'][$key_suggest_temper], 'print_button' => t('print_button'), 'change_filament_l' => $change_left, 'change_filament_r' => $change_right, 'enable_print' => $enable_print ? 'true' : 'false', 'temp_adjustments_l' => t('temp_adjustments_l'), 'temp_adjustments_r' => t('temp_adjustments_r'), 'temp_adjustments' => t('temp_adjustments'), 'advanced' => t('advanced'), 'gcode_link' => t('gcode_link'), '2drender_link' => t('2drender_link'), 'temper_max' => PRINTERSTATE_TEMPER_CHANGE_MAX, 'temper_min' => PRINTERSTATE_TEMPER_CHANGE_MIN, 'temper_delta' => PRINTERSTATE_TEMPER_CHANGE_VAL, 'bicolor' => $bicolor ? 'true' : 'false', 'extrud_multiply' => t('extrud_multiply'), 'left_extrud_mult' => t('left_extrud_mult'), 'right_extrud_mult' => t('right_extrud_mult'), 'extrud_r' => PRINTERSTATE_EXT_MULTIPLY_DEFAULT, 'extrud_l' => PRINTERSTATE_EXT_MULTIPLY_DEFAULT, 'extrud_min' => PRINTERSTATE_EXT_MULTIPLY_MIN, 'extrud_max' => PRINTERSTATE_EXT_MULTIPLY_MAX, 'title_heatbed' => t('title_heatbed'), 'button_bed_off' => t('button_bed_off'), 'heat_bed' => $heat_bed ? 'true' : 'false', 'bed_temper_pla' => PRINTERSTATE_TEMPER_BED_PLA, 'bed_temper_abs' => PRINTERSTATE_TEMPER_BED_ABS, 'bed_temper_max' => PRINTERSTATE_TEMPER_MAX_H);
     // parse all page
     $this->_parseBaseTemplate(t('printerstoring_gcodedetail_pagetitle'), $this->parser->parse('printerstoring/gcodedetail', $template_data, TRUE));
     return;
 }
Пример #2
0
 public function youtube_form()
 {
     $array_status = array();
     $model_displayname = NULL;
     $this->load->library('parser');
     $this->lang->load('youtube_form', $this->config->item('language'));
     $this->lang->load('printdetail', $this->config->item('language'));
     // timelapse default model name
     $this->load->helper('corestatus');
     if (CoreStatus_checkInIdle($status_current, $array_status) && array_key_exists(CORESTATUS_TITLE_PRINTMODEL, $array_status)) {
         $model_id = NULL;
         if (strpos($array_status[CORESTATUS_TITLE_PRINTMODEL], CORESTATUS_VALUE_MID_PREFIXGCODE) === 0) {
             // gcode library model
             $gcode_info = array();
             $gid = (int) substr($array_status[CORESTATUS_TITLE_PRINTMODEL], strlen(CORESTATUS_VALUE_MID_PREFIXGCODE));
             $model_displayname = t('timelapse_info_modelname_unknown');
             $this->load->helper('printerstoring');
             $gcode_info = PrinterStoring_getInfo("gcode", $gid);
             if (!is_null($gcode_info) && array_key_exists("name", $gcode_info)) {
                 $model_displayname = $gcode_info["name"];
             }
         } else {
             switch ($array_status[CORESTATUS_TITLE_PRINTMODEL]) {
                 case CORESTATUS_VALUE_MID_SLICE:
                     $preset_id = NULL;
                     $model_filename = array();
                     $this->load->helper('slicer');
                     if (ERROR_OK == Slicer_getModelFile(0, $model_filename, TRUE)) {
                         foreach ($model_filename as $model_basename) {
                             if (strlen($model_displayname)) {
                                 $model_displayname .= ' + ' . $model_basename;
                             } else {
                                 $model_displayname = $model_basename;
                             }
                         }
                     } else {
                         $model_displayname = t('timelapse_info_modelname_slice');
                     }
                     break;
                 default:
                     // treat as pre-sliced model
                     $model_data = array();
                     $model_displayname = "";
                     if (is_null($model_id)) {
                         $this->load->helper('printlist');
                         $model_id = $array_status[CORESTATUS_TITLE_PRINTMODEL];
                     }
                     if (ERROR_OK == ModelList__getDetailAsArray($model_id, $model_data, TRUE)) {
                         $model_displayname = $model_data[PRINTLIST_TITLE_NAME];
                     }
                     break;
             }
         }
     }
     if ($this->input->server('REQUEST_METHOD') == 'POST') {
         $this->load->library("session");
         $title = isset($_POST['yt_title']) ? $_POST['yt_title'] : t('yt_title') . $model_displayname;
         $description = isset($_POST['yt_description']) ? $_POST['yt_description'] : t('yt_desc');
         // 			$tags = explode(',', $_POST['yt_tags'] ? $_POST['yt_tags'] : t('yt_tags'));
         $tags = explode(',', t('yt_tags'));
         $tags = array_map('trim', $tags);
         $video_infos = array('yt_title' => $title, 'yt_tags' => $tags, 'yt_desc' => $description, 'yt_privacy' => $_POST["yt_privacy"]);
         $this->session->set_userdata($video_infos);
         $this->output->set_header("Location: /share/connect_google");
         return;
     }
     $data = array('yt_title' => t('yt_title') . $model_displayname, 'yt_desc' => t('yt_desc'), 'yt_privacy_public' => t('yt_privacy_public'), 'yt_privacy_private' => t('yt_privacy_private'), 'yt_privacy_unlisted' => t('yt_privacy_unlisted'), 'upload_to_yt' => t('upload_to_yt'), 'title_label' => t('title_label'), 'desc_label' => t('desc_label'), 'tags_label' => t('tags_label'), 'privacy_label' => t('privacy_label'), 'back' => t('back'));
     $this->_parseBaseTemplate(t('youtube_title'), $this->parser->parse('share/youtube_form', $data, TRUE));
     return;
 }
Пример #3
0
function PrinterStoring_deleteGcode($id)
{
    $gcode_info = array();
    $CI =& get_instance();
    $model_folder = $CI->config->item('gcode_library') . sprintf('%06d', $id) . '/';
    // check if library folder exist
    if (@is_dir($model_folder) == false) {
        $CI->load->helper('printerlog');
        PrinterLog_logError('gcode model id not found', __FILE__, __LINE__);
        return ERROR_UNKNOWN_MODEL;
    }
    $gcode_info = PrinterStoring_getInfo('gcode', $id);
    if (is_null($gcode_info)) {
        return ERROR_UNKNOWN_MODEL;
    } else {
        // stats info
        $nb_models = 0;
        foreach (array(PRINTERSTORING_TITLE_LENG_R, PRINTERSTORING_TITLE_LENG_L) as $check_key) {
            if (isset($gcode_info[$check_key]) && $gcode_info[$check_key] > 0) {
                ++$nb_models;
            }
        }
        $CI->load->helper('printerlog');
        PrinterLog_statsLibraryGcode(PRINTERLOG_STATS_LABEL_DELETE, $nb_models);
    }
    $CI->load->helper('file');
    delete_files($model_folder, TRUE);
    //there are no folders inside normally, but we delete all
    if (!rmdir($model_folder)) {
        $CI->load->helper('printerlog');
        PrinterLog_logError('could not delete the gcode model', __FILE__, __LINE__);
        return ERROR_INTERNAL;
    }
    return ERROR_OK;
}
Пример #4
0
 public function timelapse()
 {
     $template_data = array();
     $array_info = array();
     $status_current = NULL;
     $array_status = array();
     $restart_url = NULL;
     $model_displayname = NULL;
     $show_storegcode = FALSE;
     $this->load->library('parser');
     $this->load->helper('zimapi');
     $this->lang->load('printdetail', $this->config->item('language'));
     if (CoreStatus_checkInIdle($status_current, $array_status) && array_key_exists(CORESTATUS_TITLE_PRINTMODEL, $array_status)) {
         $model_id = NULL;
         $abb_cartridge = NULL;
         $model_temper = NULL;
         if (strpos($array_status[CORESTATUS_TITLE_PRINTMODEL], CORESTATUS_VALUE_MID_PREFIXGCODE) === 0) {
             // gcode library model
             $gcode_info = array();
             $gid = (int) substr($array_status[CORESTATUS_TITLE_PRINTMODEL], strlen(CORESTATUS_VALUE_MID_PREFIXGCODE));
             $model_displayname = t('timelapse_info_modelname_unknown');
             $this->load->helper('printerstoring');
             $gcode_info = PrinterStoring_getInfo("gcode", $gid);
             if (!is_null($gcode_info) && array_key_exists("name", $gcode_info)) {
                 $model_displayname = $gcode_info["name"];
             }
             $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => $model_displayname);
             $restart_url = '/printdetail/printgcode?id=' . $gid;
         } else {
             switch ($array_status[CORESTATUS_TITLE_PRINTMODEL]) {
                 case CORESTATUS_VALUE_MID_SLICE:
                     $preset_id = NULL;
                     $model_filename = array();
                     $preset_name = t('timelapse_info_presetname_unknown');
                     $this->load->helper('slicer');
                     if (ERROR_OK == Slicer_getModelFile(0, $model_filename, TRUE)) {
                         foreach ($model_filename as $model_basename) {
                             if (strlen($model_displayname)) {
                                 $model_displayname .= ' + ' . $model_basename;
                             } else {
                                 $model_displayname = $model_basename;
                             }
                         }
                     } else {
                         $model_displayname = t('timelapse_info_modelname_slice');
                     }
                     $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => $model_displayname);
                     if (ZimAPI_getPreset($preset_id)) {
                         $array_json = array();
                         if (ERROR_OK == ZimAPI_getPresetInfoAsArray($preset_id, $array_json)) {
                             $preset_name = $array_json[ZIMAPI_TITLE_PRESET_NAME];
                         }
                     }
                     $array_info[] = array('title' => t('timelapse_info_presetname_title'), 'value' => $preset_name);
                     $restart_url = '/printdetail/printslice';
                     $show_storegcode = TRUE;
                     break;
                 case CORESTATUS_VALUE_MID_PRIME_R:
                     $abb_cartridge = 'r';
                     // treat priming in the same way
                 // treat priming in the same way
                 case CORESTATUS_VALUE_MID_PRIME_L:
                     // never reach here normally (no timelapse for priming in principe, just for safety)
                     $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => t('timelapse_info_modelname_prime'));
                     if (is_null($abb_cartridge)) {
                         $abb_cartridge = 'l';
                     }
                     $restart_url = '/printdetail/printprime?r&v=' . $abb_cartridge;
                     //TODO we lose callback info here
                     break;
                 case CORESTATUS_VALUE_MID_CALIBRATION:
                     // never reach here normally (no timelapse for calibration model, just for safety)
                     $this->load->helper('printlist');
                     $model_id = ModelList_codeModelHash(PRINTLIST_MODEL_CALIBRATION);
                     $restart_url = '/printmodel/detail?id=calibration';
                     // treat as a normal pre-sliced model
                 // treat as a normal pre-sliced model
                 default:
                     // treat as pre-sliced model
                     $model_data = array();
                     $model_displayname = t('timelapse_info_modelname_unknown');
                     if (is_null($model_id)) {
                         $this->load->helper('printlist');
                         $model_id = $array_status[CORESTATUS_TITLE_PRINTMODEL];
                     }
                     if (ERROR_OK == ModelList__getDetailAsArray($model_id, $model_data, TRUE)) {
                         $model_displayname = $model_data[PRINTLIST_TITLE_NAME];
                     }
                     $array_info[] = array('title' => t('timelapse_info_modelname_title'), 'value' => $model_displayname);
                     if (is_null($restart_url)) {
                         $restart_url = '/printdetail/printmodel?id=' . $model_id;
                     }
                     break;
             }
         }
         if (array_key_exists(CORESTATUS_TITLE_ELAPSED_TIME, $array_status)) {
             $display_time = NULL;
             $this->load->helper('timedisplay');
             $display_time = TimeDisplay__convertsecond($array_status[CORESTATUS_TITLE_ELAPSED_TIME], '');
             $array_info[] = array('title' => t('timelapse_info_elapsedtime_title'), 'value' => $display_time);
         }
         if ($this->config->item('nb_extruder') < 2 && array_key_exists(CORESTATUS_TITLE_P_TEMPER_R, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_R] > 0) {
             $model_temper = t('timelapse_info_temperature_value_mono', array($array_status[CORESTATUS_TITLE_P_TEMPER_R]));
         } else {
             if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_L, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_L] > 0 && array_key_exists(CORESTATUS_TITLE_P_TEMPER_R, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_R] > 0) {
                 $model_temper = t('timelapse_info_temperature_values', array($array_status[CORESTATUS_TITLE_P_TEMPER_L], $array_status[CORESTATUS_TITLE_P_TEMPER_R]));
             } else {
                 if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_R, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_R] > 0) {
                     $model_temper = t('timelapse_info_temperature_value_r', array($array_status[CORESTATUS_TITLE_P_TEMPER_R]));
                 } else {
                     if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_L, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_L] > 0) {
                         $model_temper = t('timelapse_info_temperature_value_l', array($array_status[CORESTATUS_TITLE_P_TEMPER_L]));
                     }
                 }
             }
         }
         if ($model_temper) {
             if (array_key_exists(CORESTATUS_TITLE_P_TEMPER_B, $array_status) && $array_status[CORESTATUS_TITLE_P_TEMPER_B] > 0) {
                 $model_temper .= t('timelapse_info_extra_temperature_value_b', array($array_status[CORESTATUS_TITLE_P_TEMPER_B]));
             }
             $array_info[] = array('title' => t('timelapse_info_temperature_title'), 'value' => $model_temper);
         }
     } else {
         $this->load->helper('printerlog');
         PrinterLog_logError('unintended status detected in timelapse page: ' . $status_current, __FILE__, __LINE__);
         $this->output->set_header('Location: /');
         return;
     }
     // parse the main body
     $template_data = array('internet_ok' => @file_get_contents("https://sso.zeepro.com/login.ashx") === FALSE ? 'false' : 'true', 'loading_player' => t('timelapse_info'), 'finish_info' => t('Congratulation, your printing is complete!'), 'home_button' => t('Home'), 'home_popup_text' => t('home_popup_text'), 'yes' => t('Yes'), 'no' => t('No'), 'video_error' => t('video_error'), 'timelapse_title' => t('timelapse_title'), 'send_email_button' => t('send_email_button'), 'send_yt_button' => t('send_yt_button'), 'send_fb_button' => t('send_fb_button'), 'send_email_hint' => t('send_email_hint'), 'send_email_action' => t('send_email_action'), 'send_email_error' => t('send_email_error'), 'send_email_wrong' => t('send_email_wrong'), 'send_email_multi' => t('send_email_multi'), 'video_url' => '/tmp/' . ZIMAPI_FILENAME_TIMELAPSE . '?_=' . time(), 'timelapse_info_title' => t('timelapse_info_title'), 'timelapse_info' => $array_info, 'again_button' => t('Print again'), 'restart_url' => $restart_url ? $restart_url : '/', 'send_email_modelname' => $model_displayname, 'display_storegocde' => $show_storegcode ? 'true' : 'false', 'storegcode_checkbox' => t('storegcode_info'), 'storegcode_hint' => t('storegcode_name'), 'storegcode_err_cfm' => t('storegcode_err_cfm'), 'storegcode_title' => t('storegcode_title'));
     // parse all page
     $this->_parseBaseTemplate(t('ZeePro Personal Printer 21 - Printing details'), $this->parser->parse('printdetail/timelapse', $template_data, TRUE));
     return;
 }
Пример #5
0
function Printer_getFileFromModel($type_model, $id_model, &$gcode_path, $filename = NULL, &$array_info = NULL)
{
    $model_path = NULL;
    $bz2_path = NULL;
    $command = '';
    $output = array();
    $ret_val = 0;
    $filename_json = NULL;
    $filename_bz2 = NULL;
    $filename_gcode = NULL;
    $CI =& get_instance();
    switch ($type_model) {
        case PRINTER_TYPE_MODELLIST:
            $CI->load->helper('printlist');
            $filename_json = PRINTLIST_FILE_JSON;
            $filename_bz2 = PRINTLIST_FILE_GCODE_BZ2;
            $filename_gcode = PRINTLIST_FILE_GCODE;
            $model_cr = ModelList__find($id_model, $model_path);
            // get json info
            if (is_array($array_info)) {
                $json_data = array();
                try {
                    $json_data = json_read($model_path . $filename_json, TRUE);
                    if ($json_data['error']) {
                        throw new Exception('read json error');
                    }
                } catch (Exception $e) {
                    return ERROR_INTERNAL;
                }
                $array_info = $json_data['json'];
            }
            break;
        case PRINTER_TYPE_GCODELIB:
            $CI->load->helper('printerstoring');
            $tmp_array = NULL;
            $filename_json = PRINTERSTORING_FILE_INFO_JSON;
            $filename_bz2 = PRINTERSTORING_FILE_GCODE_BZ2;
            $filename_gcode = PRINTERSTORING_FILE_GCODE_EXT;
            $array_info = PrinterStoring_getInfo('gcode', $id_model, $model_path);
            if (is_null($array_info)) {
                $model_cr = ERROR_WRONG_PRM;
            } else {
                $model_cr = ERROR_OK;
            }
    }
    if ($model_cr == ERROR_OK && $model_path) {
        $ret_val = 0;
        //		//if we don't fix the filename of gcode
        // 		try {
        // 			$json_data = json_read($model_path . PRINTLIST_FILE_JSON);
        // 			if ($json_data['error']) {
        // 				throw new Exception('read json error');
        // 			}
        // 		} catch (Exception $e) {
        // 			return ERROR_INTERNAL;
        // 		}
        // 		$gcode_path = $json_data['json'][PRINTLIST_TITLE_GCODE];
        $bz2_path = $model_path . $filename_bz2;
        $filename = is_null($filename) ? $filename_gcode : $filename;
        $gcode_path = $CI->config->item('temp') . $filename;
        $command = 'bzip2 -dkcf ' . $bz2_path . ' > ' . $gcode_path;
        @unlink($gcode_path);
        // delete old file
        exec($command, $output, $ret_val);
        if ($ret_val != ERROR_NORMAL_RC_OK) {
            return ERROR_INTERNAL;
        }
        return ERROR_OK;
    } else {
        return ERROR_UNKNOWN_MODEL;
    }
    return ERROR_OK;
    // never reach here
}