licq_interests.diff is a first attemp to check for the Users 's personal 
interests 
i know that the right thing (...) would be to store the array of interests 
in this first patch my aproach is to "render" the string.

qt_interests.diff is my aproach to add it to the Users Info Dialog.. Note 
that it display de info in About dialog. (and i don't know yet why)
(i am not a c++ programer)

Feel free to test, fix, and comment.

The main thing. Store the array as 
Eg:
interests_n = 3
interests_sz_1 = C, AWK ...
Interests_cat_1 = 68000
....
?
So...do you think i should change this code to save the array?

Regards,
        Juan.

? licqd_personal.diff
Index: include/licq_events.h
===================================================================
RCS file: /cvsroot/licq/licq/include/licq_events.h,v
retrieving revision 1.13
diff -u -1 -b -p -r1.13 licq_events.h
--- include/licq_events.h	1 Dec 2001 15:50:40 -0000	1.13
+++ include/licq_events.h	16 Apr 2002 22:04:06 -0000
@@ -292,2 +292,3 @@ const unsigned long USER_ABOUT          
 const unsigned long USER_SECURITY               = 9;
+const unsigned long USER_INTERESTS		= 10;
 
Index: include/licq_user.h
===================================================================
RCS file: /cvsroot/licq/licq/include/licq_user.h,v
retrieving revision 1.23
diff -u -1 -b -p -r1.23 licq_user.h
--- include/licq_user.h	20 Mar 2002 06:35:46 -0000	1.23
+++ include/licq_user.h	16 Apr 2002 22:04:06 -0000
@@ -163,2 +163,3 @@ public:
   void SaveAboutInfo();
+  void SaveInterestsInfo();
   void SaveExtInfo();
@@ -212,2 +213,3 @@ public:
   char *GetAbout()                      { return m_szAbout; }
+  char *GetInterests()			{ return m_szInterests; }
 
@@ -294,3 +296,4 @@ public:
   void SetAbout(const char *n)        {  SetString(&m_szAbout, n);  SaveAboutInfo();  }
-
+  // Personal Interets Info
+  void SetInterests( const char *n)   {  SetString(&m_szInterests,n); SaveInterestsInfo(); }
   // Licq Info
@@ -416,2 +419,3 @@ protected:
   void LoadAboutInfo();
+  void LoadInterestsInfo();
   void LoadLicqInfo();
@@ -505,2 +509,4 @@ protected:
   char *m_szAbout;
+  // Personal Interests
+  char *m_szInterests;
 
Index: src/icqd-srv.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/icqd-srv.cpp,v
retrieving revision 1.29
diff -u -1 -b -p -r1.29 icqd-srv.cpp
--- src/icqd-srv.cpp	9 Apr 2002 20:58:59 -0000	1.29
+++ src/icqd-srv.cpp	16 Apr 2002 22:04:07 -0000
@@ -1125,2 +1125,24 @@ void CICQDaemon::ProcessLocationFam(cons
 
+static const char * info_category2str( unsigned short cat )
+{	struct _table
+	{	unsigned short cat ;
+		const  char * str ;
+	} ;
+	static struct _table t[] = 
+	{
+		{	0x0068, "Computer" }
+	};
+	unsigned i;
+	const char *ret = "unknown";
+	
+	for( i=0 ; i < sizeof(t)/sizeof(*t) ; i++ )
+	{	if( cat == t[i].cat )
+		{	ret = t[i].str;
+		 	break;
+		 }
+	}
+
+	return ret;
+}
+
 //--------ProcessBuddyFam--------------------------------------------------
@@ -2446,8 +2468,39 @@ void CICQDaemon::ProcessVariousFam(CBuff
 	    // personal interests info
+	    unsigned int n_info;
+	    unsigned short category;
+	    char s[MAX_DATA_LEN]={0};
+	    char *tmp;
+	    const char *szCat;
+	    int len=sizeof(s);
+	    #define sz_sep ": "
+
+	    gLog.Info("%sPersonal Interests Info on %s (%ld).\n", L_SRVxSTR,
+	   		u->GetAlias(), u ->Uin());
+
+	    n_info = msg.UnpackChar() ;
+	    for ( ; n_info > 0 ; n_info -- )
+	    {	/* To do less work i save the interests as only one 
+	         * string. (versus Interests1,...,InterestsN,ICat1..ICatN)
+	         */
+
+	    	 category=msg.UnpackUnsignedShort();
+	 	 tmp = msg.UnpackString();    	 
+	 	 szCat = info_category2str(category);
+
+		 len -= strlen(tmp) + strlen(sz_sep) + strlen(szCat) + 1 ;
+		 if( len > 0 )
+		 {	strcat(s,szCat);
+		 	strcat(s,sz_sep);
+		 	strcat(s,tmp);
+		 	strcat(s,"\n");
+		 }
+		 else
+		 	break;
+	    	 delete tmp;
+	    }
 
-	    char * buf;
-
-	    gLog.Unknown("%spersonal interests: %04hx\n%s\n", L_UNKNOWNxSTR,
-				    nSubSequence, packet.print(buf));
-	    delete [] buf;
+	    // save the user infomation
+	    u->SetInterests( s );
+	    u->SetEnableSave(true);
+	    u->SaveInterestsInfo();
 
@@ -2456,2 +2509,4 @@ void CICQDaemon::ProcessVariousFam(CBuff
 
+	    PushPluginSignal(new CICQSignal(SIGNAL_UPDATExUSER, USER_INTERESTS,
+	    			u->Uin()));
 	    break;
Index: src/user.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/user.cpp,v
retrieving revision 1.36
diff -u -1 -b -p -r1.36 user.cpp
--- src/user.cpp	19 Mar 2002 06:54:24 -0000	1.36
+++ src/user.cpp	16 Apr 2002 22:04:08 -0000
@@ -795,2 +795,3 @@ bool ICQUser::LoadInfo()
   LoadAboutInfo();
+  LoadInterestsInfo();
   LoadLicqInfo();
@@ -871,2 +872,11 @@ void ICQUser::LoadAboutInfo()
 
+//-----ICQUser::LoadInterestsInfo-----------------------------------------------
+void ICQUser::LoadInterestsInfo()
+{
+	// read in the fields, checking for errors each timei
+	char szTemp[MAX_DATA_LEN];
+	m_fConf.SetSection("user");
+	m_fConf.ReadStr("Interests", szTemp, ""); SetAbout(szTemp);
+		
+}
 //-----ICQUser::LoadLicqInfo-------------------------------------------------
@@ -999,2 +1009,4 @@ ICQUser::~ICQUser()
       free( m_szAbout );
+  if( m_szInterests )
+      free( m_szInterests );
   if ( m_szCustomAutoResponse )
@@ -1089,2 +1101,4 @@ void ICQUser::Init(unsigned long _nUin)
   m_szAbout = NULL;
+  // Personal Interests
+  m_szInterests = NULL;
 
@@ -1156,2 +1170,3 @@ void ICQUser::SetDefaults()
   SetAbout(szTemp);
+  SetInterests(szTemp);
   SetCustomAutoResponse(szTemp);
@@ -1847,2 +1862,25 @@ void ICQUser::SaveAboutInfo()
 
+//-----ICQUser::SaveInterestsInfo---------------------------------------------
+void ICQUser::SaveInterestsInfo()
+{	
+	if (!EnableSave()) return;
+
+	if (!m_fConf.ReloadFile())
+	{	gLog.Error("%sError opening '%s' for reading.\n"
+			   "%sSee log for details.\n",
+			   L_ERRORxSTR, m_fConf.FileName(), L_BLANKxSTR);
+		return ;
+	}
+
+   	m_fConf.SetSection("user");
+   	m_fConf.WriteStr("Interests", m_szInterests);
+
+	if (!m_fConf.FlushFile())
+	{	 gLog.Error("%sError opening '%s' for writing.\n"
+		 	    "%sSee log for details.\n", L_ERRORxSTR,
+		 	    	m_fConf.FileName(), L_BLANKxSTR);
+
+		return; 
+	} 
+}
 
Index: userinfodlg.cpp
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/userinfodlg.cpp,v
retrieving revision 1.39
diff -u -1 -b -p -r1.39 userinfodlg.cpp
--- userinfodlg.cpp	8 Apr 2002 16:12:56 -0000	1.39
+++ userinfodlg.cpp	16 Apr 2002 22:03:13 -0000
@@ -71,2 +71,3 @@ UserInfoDlg::UserInfoDlg(CICQDaemon *s, 
   CreateAbout();
+  CreateInterests();
   CreateHistory();
@@ -83,2 +84,3 @@ UserInfoDlg::UserInfoDlg(CICQDaemon *s, 
   tabs->addTab(tabList[AboutInfo].tab, tabList[AboutInfo].label);
+  tabs->addTab(tabList[InterestsInfo].tab, tabList[InterestsInfo].label);
   tabs->addTab(tabList[HistoryInfo].tab, tabList[HistoryInfo].label);
@@ -801,3 +803,3 @@ void UserInfoDlg::SetAbout(ICQUser *u)
   mleAbout->setText(aboutstr);
-
+  cout << aboutstr ;
   if (bDropUser) gUserManager.DropUser(u);
@@ -816,2 +818,53 @@ void UserInfoDlg::SaveAbout()
 
+// ----Personal Interests--------------------------------------------------
+void UserInfoDlg::CreateInterests()
+{
+  tabList[InterestsInfo].label = tr("&Interests");
+  tabList[InterestsInfo].tab = new QVBox(this, tabList[InterestsInfo].label.latin1());
+  tabList[InterestsInfo].loaded = false;
+
+  QVBox *p = (QVBox *)tabList[InterestsInfo].tab;
+
+  p->setMargin(8);
+  p->setSpacing(8);
+
+  lblInterests = new QLabel(tr("Interests:"), p);
+  mleInterests = new MLEditWrap(true, p);
+  mleInterests->setReadOnly(!m_bOwner);
+
+}
+
+void UserInfoDlg::SetInterests(ICQUser *u)
+{
+  tabList[InterestsInfo].loaded = true;
+  bool bDropUser = false;
+
+  if (u == NULL)
+  {
+    u = gUserManager.FetchUser(m_nUin, LOCK_R);
+    if (u == NULL) return;
+    bDropUser = true;
+  }
+
+  QTextCodec * codec = UserCodec::codecForICQUser(u);
+
+  QString intereststr = codec->toUnicode(u->GetInterests());
+  intereststr.replace(QRegExp("\r"), "");
+  mleInterests->setText(intereststr);
+
+  if (bDropUser) gUserManager.DropUser(u);
+
+}
+
+void UserInfoDlg::SaveInterests()
+{
+  ICQUser *u = gUserManager.FetchUser(m_nUin, LOCK_W);
+  if (u == NULL) return;
+
+  QTextCodec * codec = UserCodec::codecForICQUser(u);
+
+  u->SetInterests(codec->fromUnicode(mleInterests->text()));
+  gUserManager.DropUser(u);
+}
+
 //-----LastCounters--------------------------------------------------------
@@ -1194,2 +1247,3 @@ void UserInfoDlg::updateTab(const QStrin
 {
+	cout << txt;
   if (txt == tabList[GeneralInfo].label)
@@ -1234,2 +1288,12 @@ void UserInfoDlg::updateTab(const QStrin
   }
+  else if( txt == tabList[InterestsInfo].label) 
+  {
+    btnMain3->setText(tr("&Update"));
+    btnMain2->setText(m_bOwner ? tr("Retrieve") : tr("&Save"));
+    btnMain3->setEnabled(true);
+    btnMain2->setEnabled(true);
+    currentTab = InterestsInfo;
+    if (!tabList[InterestsInfo].loaded)
+      SetInterests(NULL);
+  }
   else if (txt == tabList[HistoryInfo].label)
@@ -1276,2 +1340,5 @@ void UserInfoDlg::SaveSettings()
     break;
+  case InterestsInfo:
+    SaveInterests();
+    break;
   case HistoryInfo:
@@ -1314,2 +1381,3 @@ void UserInfoDlg::slotRetrieve()
     case AboutInfo:   icqEventTag = server->icqRequestMetaInfo(m_nUin);  break;
+    case InterestsInfo: icqEventTag = server->icqRequestMetaInfo(m_nUin); break;
   }
@@ -1397,2 +1465,3 @@ void UserInfoDlg::slotUpdate()
   case AboutInfo:    icqEventTag = server->icqSetAbout(codec->fromUnicode(mleAbout->text()));  break;
+ // case InterestsInfo: icqEventTag = server->icqSetInterests(codec->fromUnicode(mleInterests->text()));break
   case HistoryInfo:  ShowHistoryNext();  break;
@@ -1469,2 +1538,5 @@ void UserInfoDlg::updatedUser(CICQSignal
     SetAbout(u);
+    break;
+  case USER_INTERESTS:
+    SetInterests(u);
     break;
Index: userinfodlg.h
===================================================================
RCS file: /cvsroot/licq/qt-gui/src/userinfodlg.h,v
retrieving revision 1.16
diff -u -1 -b -p -r1.16 userinfodlg.h
--- userinfodlg.h	5 Mar 2002 17:32:04 -0000	1.16
+++ userinfodlg.h	16 Apr 2002 22:03:13 -0000
@@ -52,2 +52,3 @@ public:
     AboutInfo,
+    InterestsInfo,
     HistoryInfo,
@@ -114,2 +115,7 @@ protected:
 
+  // Interests
+  void CreateInterests();
+  QLabel *lblInterests;
+  MLEditWrap *mleInterests;
+
   // Last Counters
@@ -139,2 +145,3 @@ protected:
   void SetAbout(ICQUser *);
+  void SetInterests(ICQUser *);
   void SetLastCountersInfo(ICQUser *);
@@ -144,2 +151,3 @@ protected:
   void SaveAbout();
+  void SaveInterests();
 

Reply via email to