中国Linux公社论坛's Archiver

yunfan 发表于 2005-4-24 17:14

目前Eva保存和读取的文件说明

我在另一个帖子里已经说过了这个, 现在单独贴出来,也做为目前的文档吧。


我详细的说一下目前Eva保存和读取的文件情况:

[b][color=red]eva.sys[/color] : Eva系统配置文件[/b]
保存在$HOME/.eva里。
这里面记录着登录好友的QQ号,加密后的密码, 登录方式,网络参数。
文件用二进制保存, 数据结构为
[code:1]
typedef struct loginRecord{
        Q_UINT32 id;
        Q_UINT8  *md5Pwd; // the password is always 16 bits long. if isRecorded is false, password is 16 '0' chars
        Q_UINT8  flag;  //   bit 0 to 2 reserved, bit 3: UDP, bit 4: TCP, bit 5: HTTP Proxy, bit 6: isHidden, bit 7: isRecorded( 0 for false, 1 for true)
        Q_UINT32 proxy;
        Q_UINT16 port;
        QString  proxyUserName;
        QCString base64param;
} loginRecord;
[/code:1]

[b][color=red]sys.msg[/color] : 用户系统消息记录文件[/b]
保存在$HOME/.eva/XXX 里(XXX为用户的QQ号码)。
这里保存着系统发给用户XXX所有系统消息,包括腾讯的消息广播,
其他用户加你为好友的通知,其他用户发给你的添加请求,
其他用户同意你的添加请求, 其他用户拒绝你的添加请求。
你被群加入的通知。加入群的请求, 群同意加入的通知,
群拒绝加入的通知。
文件为2进制存储。
格式为
[code:1]
        typedef struct{
                Q_UINT16  messageType; // 标识消息的类型,一般消息,或者某个群消息
                Q_UINT8  type; // 如果是一般消息,则为详细类型,如果是群的,则为永久群 or 临时群
                Q_UINT32 from; // 消息的发送者。
                Q_UINT32 to;    // 如果是一般消息,则为自己,否则为群外部ID
                Q_UINT32 internalQunID; // 如果是一般消息,则为0,否则为群内部ID
                QString  message; // 附加的消息内容
        } sysMessage;
[/code:1]


[b][color=red]chat.msg[/color] : 用户一般聊天消息记录文件[/b]
保存在$HOME/.eva/XXX 里(XXX为用户的QQ号码)。
这里是用户和好友的聊天记录文件,不包括群聊天记录
存储格式
[code:1]
        typedef struct{
                Q_UINT32 sender; // 发送者 QQ号
                QString sNick;      // 发送者昵称
                Q_UINT32 receiver;  // 接收者 QQ号
                QString rNick;       // 接收者昵称
                Q_UINT8  type; // 0 auto reply,  1 normal
                QString  message;  // 消息内容
                QDateTime time;    // 发送时间
                Q_UINT8   fontSize;   // 字体大小
                Q_UINT8   flag; // start from right.  bit 0: u, bit 1: i, bit 2: b
                Q_UINT8   blue;  // 字体颜色中的蓝色
                Q_UINT8   green; // 字体颜色中的绿色
                Q_UINT8   red; // 字体颜色中的红色
        } chatMessage;
[/code:1]

[b]注:[/b]群聊天记录将单独存储在另一个文件中, 正在实现。

[b][color=red]user.dat[/color] : 用户资料记录文件[/b]
保存在$HOME/.eva/XXX 里(XXX为用户的QQ号码)。
包括 用户自己的资料,好友分组,好友资料 的存储
存储格式
[code:1]
存储分为顺序的三个部分:
1.  自己的资料(若干项)
2.  分组名称(若干)
3.  循环存储每个好友的全部资料(若干项)
[/code:1]

[b][color=red]qun.dat[/color] : 用户群资料记录文件[/b]
保存在$HOME/.eva/XXX 里(XXX为用户的QQ号码)。
目前保存了永久群的所有资料,包括成员资料
格式:
[code:1]
分为两个部分:
1. 存储群的资料
2. 循环存储群成员的所有资料
[/code:1]

[b][color=red]user.profile[/color] : 用户配置文件[/b]
保存在$HOME/.eva/XXX 里(XXX为用户的QQ号码)。
这个存储用户可以自定义的配置。
存储格式如下(配置以行为一项,其中可以没有任意一行)
[color=blue]关键字: 值[/color]
例如:
[code:1]
THEME_DIR:
SOUND_DIR:
FACE_SIZE:16,16
DISPLAY_QQ_BROADCAST:true
DISPLAY_TIP_MESSAGE_TIP_WINDOW:true
DISPLAY_BUDDY_ONLINE_NOTIFY:true
DISPLAY_ONLINE_BUDDIES:false
SEND_KEY:false
PLAY_SOUND:true
AUTO_REPLY_SELECTED_INDEX:0
AUTO_REPLY:对不起,我正在工作。
AUTO_REPLY:吃饭去了。/fa
AUTO_REPLY:有事不在,不好意思
QUICK_REPLY:哦。
QUICK_REPLY:好了,好了,知道了
QUICK_REPLY:/jy , 真的吗?
[/code:1]

以上就是目前Eva所有保存的文件,及其大致格式, 写出来供大家参考.


目前的存储方式,对于大数据量的聊天记录的查询,尤其是群聊天记录的查询,带来的低下的效率。[b]sjinny[/b]正着手实现一个新的模块来存储和查询这些数据。

bamfox 发表于 2005-4-24 18:05

请版面管理人员加精华吧 :idea:

mandrakechina 发表于 2005-4-24 18:18

既然Eva是一个KDE应用程序,就应该使用KDE提供的标准接口来存储。比如kderc、kcfg等。当然,将信息存储于kwallet也是可以考虑的。

sjinny 发表于 2005-4-24 18:24

其实我觉得一个程序应该尽量地不要对其他的开发库产生依赖……
整合当然是好的,但是死死地绑在一起就不明智了

mandrakechina 发表于 2005-4-24 18:27

Eva已经依赖了kdelibs,而kderc、kcfg和kwallet都是kdelibs中的标准接口,为何不用?

amarok、kaffeine都不是kde官方的程序,但它们都使用kcfg和kderc来存储配置。目前为止,没听说过哪个kde下的程序是自己再创造一套存储标准的。

yunfan 发表于 2005-4-24 18:30

[quote:d568513ef9="mandrakechina"]既然Eva是一个KDE应用程序,就应该使用KDE提供的标准接口来存储。比如kderc、kcfg等。当然,将信息存储于kwallet也是可以考虑的。[/quote]

目前有两个问题:
1, 就是对KDE的这种统一存储的方式,我还不大懂。
2, 这样做,是否会增加相关的编译问题。

主要是我不懂KDE的这种存储机制。我只知道rc文件可以存窗口位置,菜单项什么的。 其他的还没有研究。 做为一个KDE程序,让KDE来维护要保存的数据是最好的选择么? :(

yunfan 发表于 2005-4-24 18:33

[quote:c0af446ae3="mandrakechina"]Eva已经依赖了kdelibs,而kderc、kcfg和kwallet都是kdelibs中的标准接口,为何不用?

amarok、kaffeine都不是kde官方的程序,但它们都使用kcfg和kderc来存储配置。目前为止,没听说过哪个kde下的程序是自己再创造一套存储标准的。[/quote]

问一下,你觉得, 像聊天资料, 好友信息这些都可以用kcfg 和 kderc 来存储么?

mandrakechina 发表于 2005-4-24 18:36

[quote]问一下,你觉得, 像聊天资料, 好友信息这些都可以用kcfg 和 kderc 来存储么?[/quote]这些东西可以用kwallet来保存。Eva可以为每个QQ号创建一个相应的kwallet钱包,这样在登录的时候可以自动开启这个钱包。而一旦这个钱包开启了,在KDE的所有程序中均可通用。比如以后可以扩展Eva的功能,一旦在Eva登录后,就可以自动在Konqueror中登录到QQ社区或者QQ邮箱,这中间的接口是要通过kwallet来实现的。

rc是一个标准的ini格式文件,你在里边丢什么都可以。kcfg和rc内容一样,不过是xml格式的而已。这两个东西都是kdelibs(也可能是kdebase,这两个东西我总是搞不清 :))提供的。

至于这种策略是不是很好,我不太清楚。但我个人认为,自己从头涉及一种存储策略,没有这个必要,可能带来以后的安全隐患。尽管事实如Gaim开发者所说的,只有你自己可以访问到这些信息;但你不得不为了这种存储策略维护一个异常庞大的错误格式检测机制,这是很烦人的。

sjinny 发表于 2005-4-24 18:42

恩……可能我主要的感觉还是希望功能不要和界面捆绑起来

yunfan 发表于 2005-4-24 18:54

[quote:3d6fdc49b9="mandrakechina"][quote]问一下,你觉得, 像聊天资料, 好友信息这些都可以用kcfg 和 kderc 来存储么?[/quote]这些东西可以用kwallet来保存。Eva可以为每个QQ号创建一个相应的kwallet钱包,这样在登录的时候可以自动开启这个钱包。而一旦这个钱包开启了,在KDE的所有程序中均可通用。比如以后可以扩展Eva的功能,一旦在Eva登录后,就可以自动在Konqueror中登录到QQ社区或者QQ邮箱,这中间的接口是要通过kwallet来实现的。

rc是一个标准的ini格式文件,你在里边丢什么都可以。kcfg和rc内容一样,不过是xml格式的而已。这两个东西都是kdelibs(也可能是kdebase,这两个东西我总是搞不清 :))提供的。

至于这种策略是不是很好,我不太清楚。但我个人认为,自己从头涉及一种存储策略,没有这个必要,可能带来以后的安全隐患。尽管事实如Gaim开发者所说的,只有你自己可以访问到这些信息;但你不得不为了这种存储策略维护一个异常庞大的错误格式检测机制,这是很烦人的。[/quote]

维护一大堆数据的确比较烦人。 先研究一下kcfg,kderc 还有 kwallet 吧, 多谢。

pagx 发表于 2006-10-23 21:16

提供一个接口,然后, 由两种方法实现该接口。你爱用谁就用谁。甚至我把他存到邮箱中去也无所谓。自动根据环境来选择不就行了。

lof 发表于 2006-10-24 00:47

近来在关注安全方面的问题
觉得mandrakechina的意见还是非常需要考虑的

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.