summaryrefslogtreecommitdiff
authorandyq <andyq>2002-10-16 21:24:23 (UTC)
committer andyq <andyq>2002-10-16 21:24:23 (UTC)
commit6c5cf5e778ce7cce306b5e02c1ce66a536d3a11c (patch) (unidiff)
tree472f959c5e6bdda1468a405af93e6794f4eb6332
parentb44c3eeb732a115e7c49e6ca9880e674f28da43e (diff)
downloadopie-6c5cf5e778ce7cce306b5e02c1ce66a536d3a11c.zip
opie-6c5cf5e778ce7cce306b5e02c1ce66a536d3a11c.tar.gz
opie-6c5cf5e778ce7cce306b5e02c1ce66a536d3a11c.tar.bz2
Changed active server - found out you can have many (ipkg is so clever)
Now active is set in server class. Also, currently ignores commented out servers in ipkg.conf
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/datamgr.cpp45
1 files changed, 7 insertions, 38 deletions
diff --git a/noncore/settings/aqpkg/datamgr.cpp b/noncore/settings/aqpkg/datamgr.cpp
index bb86766..7c49621 100644
--- a/noncore/settings/aqpkg/datamgr.cpp
+++ b/noncore/settings/aqpkg/datamgr.cpp
@@ -1,223 +1,192 @@
1/*************************************************************************** 1/***************************************************************************
2 datamgr.cpp - description 2 datamgr.cpp - description
3 ------------------- 3 -------------------
4 begin : Thu Aug 29 2002 4 begin : Thu Aug 29 2002
5 copyright : (C) 2002 by Andy Qua 5 copyright : (C) 2002 by Andy Qua
6 email : andy.qua@blueyonder.co.uk 6 email : andy.qua@blueyonder.co.uk
7 ***************************************************************************/ 7 ***************************************************************************/
8 8
9/*************************************************************************** 9/***************************************************************************
10 * * 10 * *
11 * This program is free software; you can redistribute it and/or modify * 11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by * 12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or * 13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. * 14 * (at your option) any later version. *
15 * * 15 * *
16 ***************************************************************************/ 16 ***************************************************************************/
17#include <fstream> 17#include <fstream>
18#include <iostream> 18#include <iostream>
19using namespace std; 19using namespace std;
20 20
21#include <stdio.h> 21#include <stdio.h>
22 22
23#include "datamgr.h" 23#include "datamgr.h"
24#include "global.h" 24#include "global.h"
25 25
26 26
27DataManager::DataManager() 27DataManager::DataManager()
28{ 28{
29 activeServer = ""; 29 activeServer = "";
30} 30}
31 31
32DataManager::~DataManager() 32DataManager::~DataManager()
33{ 33{
34} 34}
35 35
36Server *DataManager :: getServer( const char *name ) 36Server *DataManager :: getServer( const char *name )
37{ 37{
38 Server *s = 0; 38 Server *s = 0;
39 vector<Server>::iterator it = serverList.begin(); 39 vector<Server>::iterator it = serverList.begin();
40 while ( it != serverList.end() && s == 0 ) 40 while ( it != serverList.end() && s == 0 )
41 { 41 {
42 if ( it->getServerName() == name ) 42 if ( it->getServerName() == name )
43 s = &(*it); 43 s = &(*it);
44 44
45 ++it; 45 ++it;
46 } 46 }
47 47
48 return s; 48 return s;
49} 49}
50 50
51Destination *DataManager :: getDestination( const char *name ) 51Destination *DataManager :: getDestination( const char *name )
52{ 52{
53 Destination *d = 0; 53 Destination *d = 0;
54 vector<Destination>::iterator it = destList.begin(); 54 vector<Destination>::iterator it = destList.begin();
55 while ( it != destList.end() && d == 0 ) 55 while ( it != destList.end() && d == 0 )
56 { 56 {
57 if ( it->getDestinationName() == name ) 57 if ( it->getDestinationName() == name )
58 d = &(*it); 58 d = &(*it);
59 59
60 ++it; 60 ++it;
61 } 61 }
62 62
63 return d; 63 return d;
64} 64}
65 65
66void DataManager :: loadServers() 66void DataManager :: loadServers()
67{ 67{
68 // First add our local server - not really a server but 68 // First add our local server - not really a server but
69 // the local config (which packages are installed) 69 // the local config (which packages are installed)
70 serverList.push_back( Server( LOCAL_SERVER, "" ) ); 70 serverList.push_back( Server( LOCAL_SERVER, "" ) );
71 serverList.push_back( Server( LOCAL_IPKGS, "" ) ); 71 serverList.push_back( Server( LOCAL_IPKGS, "" ) );
72 72
73 // Read file from /etc/ipkg.conf 73 // Read file from /etc/ipkg.conf
74 QString ipkg_conf = IPKG_CONF; 74 QString ipkg_conf = IPKG_CONF;
75 FILE *fp; 75 FILE *fp;
76 fp = fopen( ipkg_conf, "r" ); 76 fp = fopen( ipkg_conf, "r" );
77 char line[130]; 77 char line[130];
78 QString lineStr; 78 QString lineStr;
79 if ( fp == NULL ) 79 if ( fp == NULL )
80 { 80 {
81 cout << "Couldn't open " << ipkg_conf << "! err = " << fp << endl; 81 cout << "Couldn't open " << ipkg_conf << "! err = " << fp << endl;
82 return; 82 return;
83 } 83 }
84 else 84 else
85 { 85 {
86 while ( fgets( line, sizeof line, fp) != NULL ) 86 while ( fgets( line, sizeof line, fp) != NULL )
87 { 87 {
88 lineStr = line; 88 lineStr = line;
89 if ( lineStr.startsWith( "src" ) || lineStr.startsWith( "#src" ) || lineStr.startsWith( "# src" ) ) 89 if ( lineStr.startsWith( "src" ) ) //|| lineStr.startsWith( "#src" ) || lineStr.startsWith( "# src" ) )
90 { 90 {
91 char alias[20]; 91 char alias[20];
92 char url[100]; 92 char url[100];
93 93
94 94
95 // Looks a little wierd but read up to the r of src (throwing it away), 95 // Looks a little wierd but read up to the r of src (throwing it away),
96 // then read up to the next space and throw that away, the alias 96 // then read up to the next space and throw that away, the alias
97 // is next. 97 // is next.
98 // Should Handle #src, # src, src, and combinations of 98 // Should Handle #src, # src, src, and combinations of
99 sscanf( lineStr, "%*[^r]%*[^ ] %s %s", alias, url ); 99 sscanf( lineStr, "%*[^r]%*[^ ] %s %s", alias, url );
100 Server s( alias, url ); 100 Server s( alias, url );
101 if ( lineStr.startsWith( "src" ) )
102 s.setActive( true );
103 else
104 s.setActive( false );
105
101 serverList.push_back( s ); 106 serverList.push_back( s );
102 107
103 if ( lineStr.startsWith( "src" ) )
104 setActiveServer( alias );
105 } 108 }
106 else if ( lineStr.startsWith( "dest" ) ) 109 else if ( lineStr.startsWith( "dest" ) )
107 { 110 {
108 char alias[20]; 111 char alias[20];
109 char path[50]; 112 char path[50];
110 sscanf( lineStr, "%*[^ ] %s %s", alias, path ); 113 sscanf( lineStr, "%*[^ ] %s %s", alias, path );
111 Destination d( alias, path ); 114 Destination d( alias, path );
112 destList.push_back( d ); 115 destList.push_back( d );
113 } 116 }
114 } 117 }
115 } 118 }
116 fclose( fp ); 119 fclose( fp );
117 120
118 // Go through the server destination list and add root, cf and card if they
119 // don't already exist
120/* AQ - commented out as if you don't have a CF or SD card in then
121 * this causes IPKG to try to create directories on non existant devices
122 * (which of course fails), gives a nasty error message and can cause ipkg
123 * to seg fault.
124 *
125 vector<Destination>::iterator dit;
126 bool foundRoot = false;
127 bool foundCF = false;
128 bool foundCard = false;
129 for ( dit = destList.begin() ; dit != destList.end() ; ++dit )
130 {
131 if ( dit->getDestinationPath() == "/" )
132 foundRoot = true;
133 if ( dit->getDestinationPath() == "/mnt/cf" )
134 foundCF = true;
135 if ( dit->getDestinationPath() == "/mnt/card" )
136 foundCard = true;
137 }
138
139 // If running on a Zaurus (arm) then if we didn't find root, CF or card
140 // destinations, add them as default
141#ifdef QWS
142#ifndef X86
143 if ( !foundRoot )
144 destList.push_back( Destination( "root", "/" ) );
145 if ( !foundCF )
146 destList.push_back( Destination( "cf", "/mnt/cf" ) );
147 if ( !foundCF )
148 destList.push_back( Destination( "card", "/mnt/card" ) );
149#endif
150#endif
151*/
152 vector<Server>::iterator it; 121 vector<Server>::iterator it;
153 for ( it = serverList.begin() ; it != serverList.end() ; ++it ) 122 for ( it = serverList.begin() ; it != serverList.end() ; ++it )
154 reloadServerData( it->getServerName() ); 123 reloadServerData( it->getServerName() );
155} 124}
156 125
157void DataManager :: reloadServerData( const char *serverName ) 126void DataManager :: reloadServerData( const char *serverName )
158{ 127{
159 Server *s = getServer( serverName ); 128 Server *s = getServer( serverName );
160 // Now we've read the config file in we need to read the servers 129 // Now we've read the config file in we need to read the servers
161 // The local server is a special case. This holds the contents of the 130 // The local server is a special case. This holds the contents of the
162 // status files the number of which depends on how many destinations 131 // status files the number of which depends on how many destinations
163 // we've set up 132 // we've set up
164 // The other servers files hold the contents of the server package list 133 // The other servers files hold the contents of the server package list
165 if ( s->getServerName() == LOCAL_SERVER ) 134 if ( s->getServerName() == LOCAL_SERVER )
166 s->readStatusFile( destList ); 135 s->readStatusFile( destList );
167 else if ( s->getServerName() == LOCAL_IPKGS ) 136 else if ( s->getServerName() == LOCAL_IPKGS )
168 s->readLocalIpks( getServer( LOCAL_SERVER ) ); 137 s->readLocalIpks( getServer( LOCAL_SERVER ) );
169 else 138 else
170 s->readPackageFile( getServer( LOCAL_SERVER ) ); 139 s->readPackageFile( getServer( LOCAL_SERVER ) );
171 140
172} 141}
173 142
174void DataManager :: writeOutIpkgConf() 143void DataManager :: writeOutIpkgConf()
175{ 144{
176 QString ipkg_conf = IPKG_CONF; 145 QString ipkg_conf = IPKG_CONF;
177 ofstream out( ipkg_conf ); 146 ofstream out( ipkg_conf );
178 147
179 out << "# Written by AQPkg" << endl; 148 out << "# Written by AQPkg" << endl;
180 out << "# Must have one or more source entries of the form:" << endl; 149 out << "# Must have one or more source entries of the form:" << endl;
181 out << "#" << endl; 150 out << "#" << endl;
182 out << "# src <src-name> <source-url>" << endl; 151 out << "# src <src-name> <source-url>" << endl;
183 out << "#" << endl; 152 out << "#" << endl;
184 out << "# and one or more destination entries of the form:" << endl; 153 out << "# and one or more destination entries of the form:" << endl;
185 out << "#" << endl; 154 out << "#" << endl;
186 out << "# dest <dest-name> <target-path>" << endl; 155 out << "# dest <dest-name> <target-path>" << endl;
187 out << "#" << endl; 156 out << "#" << endl;
188 out << "# where <src-name> and <dest-names> are identifiers that" << endl; 157 out << "# where <src-name> and <dest-names> are identifiers that" << endl;
189 out << "# should match [a-zA-Z0-9._-]+, <source-url> should be a" << endl; 158 out << "# should match [a-zA-Z0-9._-]+, <source-url> should be a" << endl;
190 out << "# URL that points to a directory containing a Familiar" << endl; 159 out << "# URL that points to a directory containing a Familiar" << endl;
191 out << "# Packages file, and <target-path> should be a directory" << endl; 160 out << "# Packages file, and <target-path> should be a directory" << endl;
192 out << "# that exists on the target system." << endl << endl; 161 out << "# that exists on the target system." << endl << endl;
193 162
194 // Write out servers 163 // Write out servers
195 vector<Server>::iterator it = serverList.begin(); 164 vector<Server>::iterator it = serverList.begin();
196 while ( it != serverList.end() ) 165 while ( it != serverList.end() )
197 { 166 {
198 QString alias = it->getServerName(); 167 QString alias = it->getServerName();
199 // Don't write out local as its a dummy 168 // Don't write out local as its a dummy
200 if ( alias != LOCAL_SERVER && alias != LOCAL_IPKGS ) 169 if ( alias != LOCAL_SERVER && alias != LOCAL_IPKGS )
201 { 170 {
202 QString url = it->getServerUrl();; 171 QString url = it->getServerUrl();;
203 172
204 if ( !activeServer || alias != activeServer ) 173 if ( !it->isServerActive() )
205 out << "#"; 174 out << "#";
206 out << "src " << alias << " " << url << endl; 175 out << "src " << alias << " " << url << endl;
207 } 176 }
208 177
209 it++; 178 it++;
210 } 179 }
211 180
212 out << endl; 181 out << endl;
213 182
214 // Write out destinations 183 // Write out destinations
215 vector<Destination>::iterator it2 = destList.begin(); 184 vector<Destination>::iterator it2 = destList.begin();
216 while ( it2 != destList.end() ) 185 while ( it2 != destList.end() )
217 { 186 {
218 out << "dest " << it2->getDestinationName() << " " << it2->getDestinationPath() << endl; 187 out << "dest " << it2->getDestinationName() << " " << it2->getDestinationPath() << endl;
219 it2++; 188 it2++;
220 } 189 }
221 190
222 out.close(); 191 out.close();
223} 192}