Plugin Directory

Changeset 3283963


Ignore:
Timestamp:
04/29/2025 09:40:01 AM (11 months ago)
Author:
sergiotrinity
Message:

v5.20.0

Location:
trinity-audio/trunk
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trinity-audio/trunk/README.txt

    r3272573 r3283963  
    87871. Choose the default source language.
    88882. Filter the gender you prefer.
    89 3. Open the premium voice tab.
    90 4. If locked, choose standard voices.
     893. If your plan includes GenAI voices, choose the GenAI voice tab.
     904. If your plan doesn't include GenAI voices, choose the Premium voices tab.
    91915. Listen to the different narrators and choose the one you find as best.
    92926. Choose a voice style you like and click on the player to listen to the sample.
     
    153153
    154154== Changelog ==
    155 = 5.13 =
     155= 5.20.0 =
     156 *Release Date - Apr 29, 2025*
     157 * Implemented a new voice selector component at the post level
     158
     159= 5.13.0 =
    156160 *Release Date - Feb 4, 2025*
    157161 * Trim entered values
    158162
    159 = 5.12 =
     163= 5.12.0 =
    160164 *Release Date - Jan 9, 2025*
    161165 * Added pauses for text with new lines
    162166
    163 = 5.11 =
     167= 5.11.0 =
    164168 *Release Date - Wed 6, 2024*
    165169 * Added integration type
    166170
    167 = 5.10 =
     171= 5.10.0 =
    168172 *Release Date - Oct 21, 2024*
    169173 * Avoid render plugin on preview posts list
    170174
    171 = 5.9 =
     175= 5.9.0 =
    172176 *Release Date - May 27, 2024*
    173177 * Change text output to support new format
  • trinity-audio/trunk/admin/inc/info-content.php

    r2949358 r3283963  
    138138                      </td>
    139139                    </tr>
    140                     <tr>
    141                       <td>
    142                         Speed and ability to connect to <strong>endpoint #2</strong> using wp_remote_get
    143                       </td>
    144                       <td colspan="2">
    145                         <?php echo trinity_init_checks_speed_wp(TRINITY_AUDIO_STANDARD_VOICES_URL); ?> ms
    146                       </td>
    147                     </tr>
    148                     <tr>
    149                       <td>
    150                         Speed and ability to connect to <strong>endpoint #2</strong> using curl
    151                       </td>
    152                       <td colspan="2">
    153                         <?php echo trinity_init_checks_speed_curl(TRINITY_AUDIO_STANDARD_VOICES_URL); ?> ms
    154                       </td>
    155                     </tr>
    156140                    </tbody>
    157141                  </table>
  • trinity-audio/trunk/admin/inc/settings.php

    r3009383 r3283963  
    1616
    1717  $package_data = trinity_get_package_data();
    18 
    19   $languages = trinity_get_languages($package_data->package->isPremium);
    20 
    21   if (!$languages) {
    22     die(trinity_can_not_connect_error_message("<div class='notice notice-error'><p>Can't get list of supported languages.</p><p>") . '</p></div>');
    23   }
    2418
    2519  notifications($package_data);
     
    10498            </div>
    10599
    106             <div class="section-form-group" style="display: none">
    107               <label class="section-form-title" for="<?php echo TRINITY_AUDIO_PRECONNECT; ?>">
    108                 Translate:
    109               </label>
    110 
    111               <?php trinity_translate(); ?>
    112             </div>
    113 
    114100            <div class="section-form-group">
    115101
     
    230216  }
    231217
    232   function trinity_translate() {
    233     echo "<label for='" . TRINITY_AUDIO_TRANSLATE . "' class='custom-checkbox'>
    234             <div class='text-label'>
    235             Translate
    236             </div>
    237             <input type='checkbox' name='" . TRINITY_AUDIO_TRANSLATE . "' id='" . TRINITY_AUDIO_TRANSLATE . "'>
    238             <div class='custom-hitbox'></div>
    239           </label>";
    240   }
    241 
    242218  function trinity_skip_tags() {
    243219    $value = implode(',', trinity_get_skip_tags());
  • trinity-audio/trunk/admin/index.php

    r3219583 r3283963  
    5555        'TRINITY_AUDIO_RECOVER_INSTALLKEY'   => TRINITY_AUDIO_RECOVER_INSTALLKEY,
    5656        'TRINITY_AUDIO_FIRST_CHANGES_SAVE'   => TRINITY_AUDIO_FIRST_CHANGES_SAVE,
    57         'LANGUAGES'                          => trinity_get_voices(),
    5857        'TRINITY_AUDIO_BULK_UPDATE_PROGRESS' => $bulk_progress,
    5958        TRINITY_AUDIO_SKIP_TAGS              => implode(',', trinity_get_skip_tags()),
     
    108107    add_option(TRINITY_AUDIO_POWERED_BY, 1, '', true);
    109108    add_option(TRINITY_AUDIO_PRECONNECT, 1, '', true);
    110     add_option(TRINITY_AUDIO_GENDER_ID, 'f', '', true);
    111     add_option(TRINITY_AUDIO_VOICE_ID, 'Joanna', '', true);
    112109    add_option(TRINITY_AUDIO_PLAYER_LABEL, '', '', true);
    113110    add_option(TRINITY_AUDIO_SOURCE_NEW_POSTS_DEFAULT, 1, '', true);
     
    116113    add_option(TRINITY_AUDIO_CHECK_FOR_LOOP, 0, '', true);
    117114    add_option(TRINITY_AUDIO_ACTIVATE_ON_API_POST_CREATION, 0, '', true);
    118     add_option(TRINITY_AUDIO_TRANSLATE, 0, '', true);
    119115    add_option(TRINITY_AUDIO_FIRST_CHANGES_SAVE, 0, '', true);
    120116  }
     
    197193    register_setting(TRINITY_AUDIO, TRINITY_AUDIO_SOURCE_LANGUAGE);
    198194
    199     // TODO: remove this setting after drop $_GET[postConfig]
    200     register_setting(TRINITY_AUDIO, TRINITY_AUDIO_GENDER_ID);
    201 
    202195    // allow to save to DB.
    203196    register_setting(TRINITY_AUDIO, TRINITY_AUDIO_SOURCE_NEW_POSTS_DEFAULT);
    204     register_setting(TRINITY_AUDIO, TRINITY_AUDIO_VOICE_ID);
    205 
    206197    register_setting(TRINITY_AUDIO, TRINITY_AUDIO_PLAYER_LABEL);
    207198    register_setting(TRINITY_AUDIO, TRINITY_AUDIO_POWERED_BY);
    208199    register_setting(TRINITY_AUDIO, TRINITY_AUDIO_PRECONNECT);
    209 
    210     register_setting(TRINITY_AUDIO, TRINITY_AUDIO_TRANSLATE);
    211200
    212201    register_setting(TRINITY_AUDIO, TRINITY_AUDIO_FIRST_CHANGES_SAVE);
  • trinity-audio/trunk/inc/common.php

    r3182987 r3283963  
    100100  }
    101101
    102   function trinity_get_gender() {
    103     return get_option(TRINITY_AUDIO_GENDER_ID);
    104   }
    105 
    106102  function trinity_get_new_posts_default() {
    107103    return get_option(TRINITY_AUDIO_SOURCE_NEW_POSTS_DEFAULT);
     
    128124  }
    129125
    130   function trinity_get_voice_id() {
    131     return get_option(TRINITY_AUDIO_VOICE_ID);
    132   }
    133 
    134126  function trinity_get_is_first_changes_saved() {
    135127    return get_option(TRINITY_AUDIO_FIRST_CHANGES_SAVE);
     
    150142  function trinity_get_is_account_key_linked() {
    151143    return get_option(TRINITY_AUDIO_IS_ACCOUNT_KEY_LINKED);
    152   }
    153 
    154   function trinity_is_migration_v5_failed() {
    155     return get_option(TRINITY_AUDIO_CONFIGURATION_V5_FAILED);
    156144  }
    157145
     
    169157  }
    170158
    171   function trinity_get_voices($languages_url = TRINITY_AUDIO_STANDARD_VOICES_URL) {
    172     $result = trinity_curl_get($languages_url, trinity_can_not_connect_error_message('Can\'t get list of supported languages.'), false);
    173 
    174     if (!$result) return false;
    175 
    176     $languages = [];
    177 
    178     foreach (json_decode($result) as $lang) {
    179       $voiceIds = [];
    180       foreach ($lang->voices as $gender => $voice) {
    181         if (isset($voice->voiceId)) $voiceIds[$gender] = $voice->voiceId;
    182         else if (isset($voice->providerVoiceId)) $voiceIds[$gender] = $voice->providerVoiceId;
    183       }
    184 
    185       $languageObj = (object)[
    186         'name'    => $lang->languageName,
    187         'code'    => $lang->code,
    188         'genders' => array_keys((array)$lang->voices),
    189         'voices'  => $voiceIds
    190       ];
    191 
    192       if ($lang->country) $languageObj->name .= " ($lang->country)";
    193 
    194       array_push($languages, $languageObj);
    195     }
    196 
    197     $languages = array_values($languages);
    198 
    199     return $languages;
    200   }
    201 
    202159  function trinity_include_audio_player($page_content) {
    203160    $date    = trinity_get_date();
     
    205162
    206163    $post_hash = trinity_ph_get_audio_posthash($post_id);
    207 
    208     $gender      = get_post_meta($post_id, TRINITY_AUDIO_GENDER_ID, true);
    209164
    210165    $whitelist_shortcodes = trinity_get_allowed_shortcodes();
     
    224179
    225180    $source_language = get_post_meta($post_id, TRINITY_AUDIO_SOURCE_LANGUAGE, true);
    226 
    227     /*
    228     * Unfortunately AWS Polly and AWS Translate support different namings.
    229     *
    230     * @link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html
    231     * @link https://docs.aws.amazon.com/translate/latest/dg/what-is.html
    232     */
    233     $language_code_map = [
    234       'arb'    => 'ar', // cmn-CN code is zh language (Arabic)
    235       'cmn-CN' => 'zh', // cmn-CN code is zh language (Chinese)
    236     ];
    237181
    238182    if (isset($language_code_map[$source_language])) {
     
    257201      'postHashV2'  => $post_hash,
    258202      'language'    => $source_language,
    259       'voiceGender' => $gender,
    260203      'pageURL'     => get_permalink()
    261204    ];
     
    263206    $post_voice_id = get_post_meta($post_id, TRINITY_AUDIO_VOICE_ID, true);
    264207    if ($post_voice_id) $player_query_params['voiceId'] = $post_voice_id;
    265 
    266     if (trinity_is_migration_v5_failed()) {
    267       unset($player_query_params['postConfig']);
    268 
    269       $poweredby = trinity_get_powered_by();
    270       $poweredby = $poweredby ? $poweredby : 0;
    271 
    272       $player_query_params['poweredby'] = $poweredby;
    273     }
    274208
    275209    // do NOT include trinityAudioPlaceholder with PB when we already have in source code, because of using shortcodes, themes, etc... otherwise it will be flashing in wrong position
     
    476410    $data = [
    477411      'installkey' => trinity_get_install_key(), // need for auth
    478       'powered_by' => trinity_get_powered_by(),
    479       'voice_id'   => trinity_get_voice_id()
     412      'powered_by' => trinity_get_powered_by()
    480413    ];
    481414
     
    496429      'language'     => $_GET['language'],
    497430      'voiceStyle'   => $_GET['voiceStyle'],
    498       'engine'       => $_GET['engine'],
    499431      'themeId'      => $_GET['themeId'],
    500432      'voice'        => $_GET['voice'],
    501433      'fab'          => $_GET['fab'],
    502434      'powered_by'   => $_GET['poweredBy'],
    503       'gender'       => $_GET['gender'],
    504435      'showSettings' => $_GET['showSettings'],
    505436      'shareEnabled' => $_GET['shareEnabled']
     
    511442        'url'           => TRINITY_AUDIO_UPDATE_FULL_UNIT_CONFIG_URL,
    512443        'error_message' => trinity_can_not_connect_error_message('Can\'t update plugin details.'),
    513         'die'           => false
    514       ]
    515     );
    516   }
    517 
    518   function trinity_send_stat_migrate_v5_settings() {
    519     $data = [
    520       'installkey'      => trinity_get_install_key(), // need for auth
    521       'source_language' => trinity_get_source_language(),
    522       'powered_by'      => trinity_get_powered_by(),
    523       'gender'          => trinity_get_gender()
    524     ];
    525 
    526     return trinity_curl_post(
    527       [
    528         'post_data'     => $data,
    529         'url'           => TRINITY_AUDIO_UPDATE_PLUGIN_MIGRATION_URL,
    530         'error_message' => trinity_can_not_connect_error_message('Can\'t migrate plugin details.'),
    531444        'die'           => false
    532445      ]
     
    728641    return TRINITY_AUDIO_PRICING_URL;
    729642  }
    730 
    731   function trinity_get_languages($is_premium = false, $is_package_known = false) {
    732     $cached_languages = get_transient(TRINITY_AUDIO_LANGUAGES_CACHE);
    733     $languages        = json_decode($cached_languages);
    734 
    735     if ($languages) return $languages;
    736 
    737     if ($is_package_known === false) {
    738       $package_data = trinity_get_package_data();
    739       $is_premium   = $package_data->package->isPremium;
    740     }
    741 
    742     $languages_url = $is_premium ? TRINITY_AUDIO_EXTENDED_VOICES_URL : TRINITY_AUDIO_STANDARD_VOICES_URL;
    743 
    744     $languages = trinity_get_voices($languages_url);
    745 
    746     set_transient(TRINITY_AUDIO_LANGUAGES_CACHE, json_encode($languages), 10800); // 3h
    747 
    748     return $languages;
    749   }
    750 
  • trinity-audio/trunk/inc/constants.php

    r3093666 r3283963  
    2828  define('TRINITY_AUDIO_INFO_HTML', TRINITY_AUDIO_LOG_DIR . '/' . TRINITY_AUDIO_INFO_FILE_PART_NAME . '-' . get_log_prefix() . '.html');
    2929
    30   const TRINITY_AUDIO_LABEL_DEFAULT = 'Default';
    31 
    3230  const BREAK_MACRO = '⏸';
    3331  const BLOCK_MACRO = '▇';
     
    4038  }
    4139
    42   const TRINITY_AUDIO_GENDER_ARRAY = [
    43     'm' => 'Male',
    44     'f' => 'Female',
    45   ];
    46 
    4740  const TRINITY_AUDIO_INSTALLKEY                    = 'trinity_audio_installkey';
    4841  const TRINITY_AUDIO_VIEWKEY                       = 'trinity_audio_viewkey';
    4942  const TRINITY_AUDIO_PLUGIN_VERSION                = 'trinity_audio_plugin_version'; // array
    5043  const TRINITY_AUDIO_PLUGIN_MIGRATION              = 'trinity_audio_plugin_migration'; // array
    51   const TRINITY_AUDIO_GENDER_ID                     = 'trinity_audio_gender_id';
    5244  const TRINITY_AUDIO_SOURCE_LANGUAGE               = 'trinity_audio_source_language';
    5345  const TRINITY_AUDIO_VOICE_ID                      = 'trinity_audio_voice_id';
     
    6759  const TRINITY_AUDIO_FIRST_CHANGES_SAVE            = 'trinity_audio_first_changes_save';
    6860  const TRINITY_AUDIO_IS_ACCOUNT_KEY_LINKED         = 'trinity_audio_is_account_linked';
    69   const TRINITY_AUDIO_TRANSLATE                     = 'trinity_audio_translate';
    7061  const TRINITY_AUDIO_UPDATE_UNIT_CONFIG            = 'trinity_audio_update_unit_config';
    7162  const TRINITY_AUDIO_SEND_METRIC                   = 'trinity_audio_send_metric';
     
    7465  const TRINITY_AUDIO_ACTIVATE_ON_API_POST_CREATION = 'trinity_audio_activate_on_api_post_creation';
    7566
    76   const TRINITY_AUDIO_LANGUAGES_CACHE = 'trinity_audio_languages_cache';
     67  const TRINITY_AUDIO_WP_SERVICE                    = TRINITY_AUDIO_SERVICE . '/wordpress';
     68  const TRINITY_AUDIO_BULK_UPDATE_URL               = TRINITY_AUDIO_WP_SERVICE . '/bulk_update';
     69  const TRINITY_AUDIO_POST_HASH_URL_V2              = TRINITY_AUDIO_WP_SERVICE . '/v2/posthash';
     70  const TRINITY_AUDIO_UPDATE_PLUGIN_CONFIG_URL      = TRINITY_AUDIO_WP_SERVICE . '/config';
     71  const TRINITY_AUDIO_METRICS_URL                   = TRINITY_AUDIO_WP_SERVICE . '/metrics';
    7772
    78   const TRINITY_AUDIO_CONFIGURATION_V5_FAILED = 'trinity_audio_configuration_v5_failed';
    79 
    80   const TRINITY_AUDIO_WP_SERVICE               = TRINITY_AUDIO_SERVICE . '/wordpress';
    81   const TRINITY_AUDIO_STANDARD_VOICES_URL      = TRINITY_AUDIO_SERVICE . '/standard-voices';
    82   const TRINITY_AUDIO_EXTENDED_VOICES_URL      = TRINITY_AUDIO_SERVICE . '/extended-voices';
    83   const TRINITY_AUDIO_BULK_UPDATE_URL          = TRINITY_AUDIO_WP_SERVICE . '/bulk_update';
    84   const TRINITY_AUDIO_POST_HASH_URL_V2         = TRINITY_AUDIO_WP_SERVICE . '/v2/posthash';
    85   const TRINITY_AUDIO_UPDATE_PLUGIN_CONFIG_URL = TRINITY_AUDIO_WP_SERVICE . '/config';
    86   // TODO: remove after there is no publishers with v < 5.0.0
    87   const TRINITY_AUDIO_UPDATE_PLUGIN_MIGRATION_URL = TRINITY_AUDIO_WP_SERVICE . '/config_migration';
    88   const TRINITY_AUDIO_METRICS_URL                 = TRINITY_AUDIO_WP_SERVICE . '/metrics';
    89 
    90   const TRINITY_AUDIO_CREDITS_URL                 = TRINITY_AUDIO_WP_SERVICE . '/credits';
    91   const TRINITY_AUDIO_KEYS_URL                    = TRINITY_AUDIO_WP_SERVICE . '/signup';
    92   const TRINITY_AUDIO_CONTACT_US_URL              = TRINITY_AUDIO_WP_SERVICE . '/contact-us';
    93   const TRINITY_AUDIO_UPDATE_PLUGIN_DETAILS_URL   = TRINITY_AUDIO_WP_SERVICE . '/update_plugin_details';
    94   const TRINITY_AUDIO_PUBLISHER_TOKEN_URL         = TRINITY_AUDIO_WP_SERVICE . '/assign-unit-to-publisher';
    95   const TRINITY_AUDIO_UPDATE_FULL_UNIT_CONFIG_URL = TRINITY_AUDIO_WP_SERVICE . '/unit-config';
    96   const TRINITY_AUDIO_NOTIFICATIONS_URL           = TRINITY_AUDIO_WP_SERVICE . '/notification';
     73  const TRINITY_AUDIO_CREDITS_URL                   = TRINITY_AUDIO_WP_SERVICE . '/credits';
     74  const TRINITY_AUDIO_KEYS_URL                      = TRINITY_AUDIO_WP_SERVICE . '/signup';
     75  const TRINITY_AUDIO_CONTACT_US_URL                = TRINITY_AUDIO_WP_SERVICE . '/contact-us';
     76  const TRINITY_AUDIO_UPDATE_PLUGIN_DETAILS_URL     = TRINITY_AUDIO_WP_SERVICE . '/update_plugin_details';
     77  const TRINITY_AUDIO_PUBLISHER_TOKEN_URL           = TRINITY_AUDIO_WP_SERVICE . '/assign-unit-to-publisher';
     78  const TRINITY_AUDIO_UPDATE_FULL_UNIT_CONFIG_URL   = TRINITY_AUDIO_WP_SERVICE . '/unit-config';
     79  const TRINITY_AUDIO_NOTIFICATIONS_URL             = TRINITY_AUDIO_WP_SERVICE . '/notification';
    9780
    9881  const TRINITY_AUDIO_ENABLED = 'trinity_audio_enable';
     
    125108
    126109  const TRINITY_AUDIO_POST_META_MAP = [
    127     'content'               => 'c',
    128     'title_content'         => 'tc',
    129     'excerpt_content'       => 'ec',
    130     'title_excerpt_content' => 'tec'
     110    'title_content'         => 'tc'
    131111  ];
    132112
  • trinity-audio/trunk/inc/post-hashes.php

    r2962932 r3283963  
    232232      trinity_audio_enable_player_for_post_id($post_id, $is_enable);
    233233
    234       // Update post gender
    235       update_post_meta($post_id, TRINITY_AUDIO_GENDER_ID, sanitize_text_field($_POST[TRINITY_AUDIO_GENDER_ID]));
    236 
    237234      // Update post source language
    238235      update_post_meta($post_id, TRINITY_AUDIO_SOURCE_LANGUAGE, sanitize_text_field($_POST[TRINITY_AUDIO_SOURCE_LANGUAGE]));
  • trinity-audio/trunk/js/admin.js

    r3234829 r3283963  
    113113      else trinityUpdateBulkProgress({statusName: 'error'});
    114114    });
    115   }
    116 
    117   /**
    118    * Disable genders that are not supported for particular languages.
    119    * Switch back to default selected gender, when it's available.
    120    */
    121   function initLanguageSelect() {
    122     const defaultSelectedGender = $('#trinity_audio_gender_id').val();
    123 
    124     function callback() {
    125       const lang = this.value;
    126       const foundLang = TRINITY_WP_ADMIN.LANGUAGES.find(function (value) {
    127         return value.code === lang;
    128       });
    129 
    130       if (foundLang) {
    131         const genders = foundLang.genders;
    132         $('#trinity_audio_gender_id option').each(function (key, el) {
    133           const isEnabled = genders.includes(el.value) || el.value === '';
    134 
    135           $(el).attr('disabled', !isEnabled);
    136           if (!isEnabled) $(el).removeAttr('selected');
    137         });
    138 
    139         const shouldSelectEl = $('#trinity_audio_gender_id option[value="' + defaultSelectedGender + '"]:not([disabled])');
    140         if (shouldSelectEl.length) {
    141           shouldSelectEl.attr('selected', true);
    142         } else {
    143           $('#trinity_audio_gender_id option:not([disabled]):first').attr('selected', true)
    144         }
    145       }
    146     }
    147 
    148     $('#trinity_audio_source_language').change(callback);
    149     $('#trinity_audio_source_language').change();
    150115  }
    151116
     
    195160  }, TRINITY_BULK_POLLING_TIMEOUT);
    196161
    197   initLanguageSelect();
    198162  initContactUs();
    199163  $("#register-site").submit(trinityAudioOnRegisterFormSubmit);
     
    276240
    277241async function isFormValid() {
    278   return (await TRINITY_UNIT_CONFIGURATION.validate()).isValid;
     242  return (await window.TRINITY_UNIT_CONFIGURATION.validate()).isValid;
    279243}
    280244
    281245// check if we need to disable/enable save button
    282246setInterval(async () => {
    283   if (!window.TRINITY_UNIT_CONFIGURATION) return;
     247  if (!window.TRINITY_UNIT_CONFIGURATION?.validate) return;
    284248
    285249  const isValid = await isFormValid();
     
    303267      voice,
    304268      voiceStyle,
    305       engine,
    306269      theme,
    307270      language,
    308271      speed,
    309272      fab,
    310       gender,
    311273      showSettings,
    312274      shareEnabled
     
    322284        action: window.TRINITY_WP_ADMIN.TRINITY_AUDIO_UPDATE_UNIT_CONFIG,
    323285        speed,
    324         gender,
    325286        language,
    326287        voiceStyle,
    327         engine,
    328288        themeId: theme,
    329289        voice,
  • trinity-audio/trunk/js/metaboxes.js

    r2939325 r3283963  
    1 function updateVoiceValue() {
    2   const voiceField = document.querySelector('#trinity_audio_voice_id.trinity-audio-metaboxes-element');
    3   const languageField = document.querySelector('#trinity_audio_source_language');
    4   const genderField = document.querySelector('#trinity_audio_gender_id');
     1async function trinityMetaVoiceConfig() {
     2  const {dispatch} = wp.data;
     3  const editorDispatch = dispatch('core/editor');
    54
    6   if (!voiceField || !languageField || !genderField) return;
     5  // Save original savePost
     6  const originalSavePost = editorDispatch.savePost;
    77
    8   let languageVoices = languageField.selectedOptions?.[0].attributes['data-voices']?.value;
     8  let originalConfig;
     9  waitForExpression(() => window.TRINITY_UNIT_CONFIGURATION.getFormData).then(async () => {
     10    originalConfig = await window.TRINITY_UNIT_CONFIGURATION.getFormData();
     11  });
    912
    10   if (!languageVoices) return voiceField.value = '';
    11   else languageVoices = JSON.parse(languageVoices);
     13  // Replace savePost with our wrapper
     14  editorDispatch.savePost = async (...args) => {
     15    const formData = await window.TRINITY_UNIT_CONFIGURATION.getFormData();
    1216
    13   const currentGender = genderField.value;
     17    if (originalConfig && JSON.stringify(originalConfig) !== JSON.stringify(formData)) {
     18      const voiceIdInputEl = document.getElementById('trinity_audio_voice_id');
     19      voiceIdInputEl.value = formData.voiceId; // set public voiceId
    1420
    15   voiceField.value = languageVoices[currentGender] || languageVoices[Object.keys(languageVoices)[0]];
     21      // Good to save locale and not only voiceId, since if voiceId get removed, we have locale which we can rely on
     22      const languageInputEl = document.getElementById('trinity_audio_source_language');
     23      languageInputEl.value = formData.code;
     24    }
     25
     26    // Continue with original save
     27    return originalSavePost(...args);
     28  };
    1629}
    1730
     
    2538      action: window.TRINITY_WP_ADMIN.TRINITY_AUDIO_SEND_METRIC
    2639    }
     40  });
     41}
     42
     43function waitForExpression(expressionFn) {
     44  return new Promise((resolve) => {
     45    const t = setInterval(() => {
     46      if (!!expressionFn()) {
     47        resolve();
     48        clearInterval(t);
     49      }
     50    }, 1000);
    2751  });
    2852}
     
    91115
    92116  initTabPanel();
    93   updateVoiceValue($);
    94117})(jQuery);
  • trinity-audio/trunk/metaboxes.php

    r2939325 r3283963  
    3131    }
    3232
    33     echo "<input type='checkbox' name='" . esc_attr(TRINITY_AUDIO_ENABLED) . "' id='" . esc_attr(TRINITY_AUDIO_ENABLED) . "'" . checked( $checked, 'checked', false ) . '/>';
    34   }
    35 
    36   function trinity_meta_source_gender($post_id) {
    37     echo "<select onchange='updateVoiceValue()' name='" . esc_attr(TRINITY_AUDIO_GENDER_ID) . "' id='" . esc_attr(TRINITY_AUDIO_GENDER_ID) . "'>";
    38 
    39     $post_gender = get_post_meta($post_id, TRINITY_AUDIO_GENDER_ID, true);
    40     $genders     = array_merge(['' => TRINITY_AUDIO_LABEL_DEFAULT], TRINITY_AUDIO_GENDER_ARRAY);
    41 
    42     foreach ($genders as $key => $value) {
    43       $selected = $post_gender === $key ? 'selected' : '';
    44 
    45       echo "<option value='" . esc_attr($key) . "' " . esc_attr($selected) . '>' . esc_html($value) . '</option>';
    46     }
    47 
    48     echo '</select>';
     33    echo "<input type='checkbox' name='" . esc_attr(TRINITY_AUDIO_ENABLED) . "' id='" . esc_attr(TRINITY_AUDIO_ENABLED) . "'" . checked($checked, 'checked', false) . '/>';
    4934  }
    5035
    5136  function trinity_meta_source_language($post_id) {
    52     $languages = trinity_get_languages();
     37    $post_voice_id = get_post_meta($post_id, TRINITY_AUDIO_VOICE_ID, true);
     38    $voice_config_widget_url = TRINITY_DASHBOARD_SERVICE . 'backend/v1/apps/unit-configuration/wp/' . trinity_get_install_key() . '?voice_selection_only=1&voice_id=' . $post_voice_id;
     39    ?>
    5340
    54     echo "<input type='hidden' name='" . esc_attr(TRINITY_AUDIO_VOICE_ID) . "' id='" . esc_attr(TRINITY_AUDIO_VOICE_ID) . "' class='trinity-audio-metaboxes-element'/>";
    55     echo "<select onchange='updateVoiceValue()' name='" . esc_attr(TRINITY_AUDIO_SOURCE_LANGUAGE) . "' id='" . esc_attr(TRINITY_AUDIO_SOURCE_LANGUAGE) . "'>";
     41    <script defer src="<?= $voice_config_widget_url ?>"></script>
     42    <script>
     43        jQuery(document).ready(async () => {
     44          await trinityMetaVoiceConfig();
     45        });
     46    </script>
    5647
    57     $post_language    = get_post_meta($post_id, TRINITY_AUDIO_SOURCE_LANGUAGE, true);
    58     $result_languages = array_merge(
    59       [
    60         (object)[
    61           'code' => '',
    62           'name' => TRINITY_AUDIO_LABEL_DEFAULT,
    63         ],
    64       ],
    65       $languages
    66     );
    67 
    68     foreach ($result_languages as $lang) {
    69       $language_code = $lang->code;
    70       $language_name = $lang->name;
    71 
    72       if (isset($lang->voices)) $voicesEncoded = json_encode($lang->voices);
    73       else $voicesEncoded = '';
    74 
    75 
    76       $selected = $post_language === $language_code ? 'selected' : '';
    77 
    78       echo "<option data-voices='$voicesEncoded' value='" . esc_attr($language_code) . "' " . esc_attr($selected) . '>' . esc_html($language_name) . '</option>';
    79     }
    80 
    81     echo '</select>';
     48    <input type='hidden' name="<?php echo esc_attr(TRINITY_AUDIO_SOURCE_LANGUAGE); ?>"
     49         id="<?php echo esc_attr(TRINITY_AUDIO_SOURCE_LANGUAGE); ?>"
     50         class="trinity-audio-metaboxes-element" />
     51    <input type='hidden' name="<?php echo esc_attr(TRINITY_AUDIO_VOICE_ID); ?>"
     52         id="<?php echo esc_attr(TRINITY_AUDIO_VOICE_ID); ?>"
     53         class="trinity-audio-metaboxes-element" />
     54  <?php
    8255  }
    8356
     
    10578          <table class="form-table">
    10679            <tr>
    107               <th style="width: 250px;">
     80              <th>
    10881                <label for="<?php echo esc_attr(TRINITY_AUDIO_ENABLED); ?>">
    109                   Enable Text-To-Speech (Trinity audio):
     82                  Enable TTS (Trinity audio):
    11083                </label>
    11184              </th>
     
    12194            <tr>
    12295              <th>
    123                 <label for="<?php echo esc_attr(TRINITY_AUDIO_GENDER_ID); ?>">Gender:</label>
    124               </th>
    125               <td>
    126                 <?php trinity_meta_source_gender($post->ID); ?>
    127               </td>
    128             </tr>
    129             <tr>
    130               <th>
    131                 <label for="<?php echo esc_attr(TRINITY_AUDIO_SOURCE_LANGUAGE); ?>">Language:</label>
     96                <label for="<?php echo esc_attr(TRINITY_AUDIO_SOURCE_LANGUAGE); ?>">Voice:</label>
    13297              </th>
    13398              <td>
  • trinity-audio/trunk/migrations/inc/2022-06-21-21-00.php

    r2865135 r3283963  
    33  if (!trinity_should_migrate_for('4.2.4')) return;
    44
    5   $response = trinity_send_stat_migrate_v5_settings();
    6 
    7   if ($response->STATUS === 'error') update_option(TRINITY_AUDIO_CONFIGURATION_V5_FAILED, 1);
    8 
     5//  $response = trinity_send_stat_migrate_v5_settings();
     6//
     7//  if ($response->STATUS === 'error') update_option(TRINITY_AUDIO_CONFIGURATION_V5_FAILED, 1);
  • trinity-audio/trunk/migrations/index.php

    r2933259 r3283963  
    4545
    4646      foreach ($migrations as $migration) {
     47        if (!str_ends_with($migration, '.php')) continue;
     48
    4749        $migration_version = str_replace('.php', '', $migration);
    4850
  • trinity-audio/trunk/trinity.php

    r3234829 r3283963  
    99   * Plugin URI:        https://wordpress.org/plugins/trinity-audio/
    1010   * Description:       This plugin generates an audio version of the post, for absolutely FREE. You can choose the language and the gender of the voice reading your content. You also have the option to add Trinity Audio's player on select posts or have it audiofy all of your content. In both cases, it only takes a few simple clicks to get it done. The plugin is built through collaboration with the Amazon Polly team.
    11    * Version:           5.13
     11   * Version:           5.20.0
    1212   * Author:            Trinity Audio
    1313   * Author URI:        https://trinityaudio.ai/
  • trinity-audio/trunk/uninstall.php

    r2939325 r3283963  
    2020    delete_option(TRINITY_AUDIO_PLUGIN_VERSION);
    2121    delete_option(TRINITY_AUDIO_PLUGIN_MIGRATION);
    22     delete_option(TRINITY_AUDIO_GENDER_ID);
    2322    delete_option(TRINITY_AUDIO_SOURCE_LANGUAGE);
    2423    delete_option(TRINITY_AUDIO_SOURCE_NEW_POSTS_DEFAULT);
     
    3231    delete_option(TRINITY_AUDIO_PHBU_FAILED_POSTS);
    3332    delete_option(TRINITY_AUDIO_PHBU_BULK_UPDATE_DONE);
    34     delete_option(TRINITY_AUDIO_TRANSLATE);
    3533    delete_option(TRINITY_AUDIO_FIRST_CHANGES_SAVE);
    3634    delete_option(TRINITY_AUDIO_VOICE_ID);
Note: See TracChangeset for help on using the changeset viewer.