mirror of https://gitee.com/openkylin/peony.git
122 lines
3.4 KiB
C++
122 lines
3.4 KiB
C++
![]() |
/*
|
||
|
* Peony-Qt's Library
|
||
|
*
|
||
|
* Copyright (C) 2022, KylinSoft Co., Ltd.
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Lesser General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 3 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This library is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this library. If not, see <https://www.gnu.org/licenses/>.
|
||
|
*
|
||
|
* Authors: Li ke <like1@kylinos.cn>
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "sound-effect.h"
|
||
|
|
||
|
using namespace Peony;
|
||
|
|
||
|
static SoundEffect * soundeffect_instance = nullptr;
|
||
|
|
||
|
SoundEffect::SoundEffect()
|
||
|
{
|
||
|
ca_context_create(&caContext);
|
||
|
if (QGSettings::isSchemaInstalled(KEY_SOUNDS_SCHEMA))
|
||
|
m_pSoundSettings = g_settings_new (KEY_SOUNDS_SCHEMA);
|
||
|
|
||
|
}
|
||
|
|
||
|
SoundEffect *SoundEffect::getInstance()
|
||
|
{
|
||
|
if(!soundeffect_instance){
|
||
|
soundeffect_instance = new SoundEffect;
|
||
|
}
|
||
|
return soundeffect_instance;
|
||
|
}
|
||
|
|
||
|
QList<char *> SoundEffect::listExistsPath()
|
||
|
{
|
||
|
char ** childs;
|
||
|
int len;
|
||
|
|
||
|
DConfClient * client = dconf_client_new();
|
||
|
childs = dconf_client_list (client, KEYBINDINGS_CUSTOM_DIR, &len);
|
||
|
g_object_unref (client);
|
||
|
|
||
|
QList<char *> vals;
|
||
|
|
||
|
for (int i = 0; childs[i] != NULL; i++){
|
||
|
if (dconf_is_rel_dir (childs[i], NULL)){
|
||
|
char * val = g_strdup (childs[i]);
|
||
|
|
||
|
vals.append(val);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
g_strfreev (childs);
|
||
|
return vals;
|
||
|
}
|
||
|
|
||
|
void SoundEffect::playAlertSound(QString gsettingStr)
|
||
|
{
|
||
|
gint retval;
|
||
|
const gchar *desc = "Alert Sound";
|
||
|
QString filenameStr;
|
||
|
QList<char *> existsPath = this->listExistsPath();
|
||
|
for (char * path : existsPath) {
|
||
|
char * prepath = QString(KEYBINDINGS_CUSTOM_DIR).toLatin1().data();
|
||
|
char * allpath = strcat(prepath, path);
|
||
|
const QByteArray ba(KEYBINDINGS_CUSTOM_SCHEMA);
|
||
|
const QByteArray bba(allpath);
|
||
|
if(QGSettings::isSchemaInstalled(ba)){
|
||
|
QGSettings * settings = new QGSettings(ba, bba);
|
||
|
filenameStr = settings->get(FILENAME_KEY).toString();
|
||
|
QString nameStr = settings->get(NAME_KEY).toString();
|
||
|
//此处匹配对应的gsetting接口字段
|
||
|
if (nameStr == gsettingStr){
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
const QByteArray text = filenameStr.toLocal8Bit();
|
||
|
const char *id = text.data();
|
||
|
const char *eventId =id;
|
||
|
if(desc){
|
||
|
bool status = g_settings_get_boolean(m_pSoundSettings, EVENT_SOUNDS_KEY);
|
||
|
if (status)
|
||
|
retval = ca_context_play (this->caContext, 0,
|
||
|
CA_PROP_EVENT_ID, eventId,
|
||
|
CA_PROP_EVENT_DESCRIPTION, desc, NULL);
|
||
|
|
||
|
qDebug() << "ca_context_play" << status << eventId << retval;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void SoundEffect::recycleBinClearMusic()
|
||
|
{
|
||
|
playAlertSound("recycle-bin-clear");
|
||
|
}
|
||
|
|
||
|
void SoundEffect::recycleBinDeleteMusic()
|
||
|
{
|
||
|
playAlertSound("recycle-bin-delete");
|
||
|
}
|
||
|
|
||
|
void SoundEffect::copyOrMoveSucceedMusic()
|
||
|
{
|
||
|
playAlertSound("copyormove-succeed");
|
||
|
}
|
||
|
|
||
|
void SoundEffect::copyOrMoveFailedMusic()
|
||
|
{
|
||
|
playAlertSound("copyormove-failed");
|
||
|
}
|