~ubuntu-branches/ubuntu/lucid/kdebase/lucid

« back to all changes in this revision

Viewing changes to kioslave/home/kio_home.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Ana Beatriz Guerrero Lopez
  • Date: 2009-04-05 05:22:13 UTC
  • mfrom: (0.4.2 experimental) (0.2.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 235.
  • Revision ID: james.westby@ubuntu.com-20090405052213-39thr4l6p2ss07uj
Tags: 4:4.2.2-1
* New upstream release:
  - khtml fixes. (Closes: #290285, #359680)
  - Default konsole sessions can be deleted. (Closes: #286342)
  - Tag widget uses standard application palette. (Closes: #444800)
  - ... and surely many more but we have lost track...

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* This file is part of the KDE project
2
 
   Copyright (c) 2005 Kevin Ottens <ervin ipsquad net>
3
 
 
4
 
   This library is free software; you can redistribute it and/or
5
 
   modify it under the terms of the GNU Library General Public
6
 
   License as published by the Free Software Foundation; either
7
 
   version 2 of the License, or (at your option) any later version.
8
 
 
9
 
   This library is distributed in the hope that it will be useful,
10
 
   but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 
   Library General Public License for more details.
13
 
 
14
 
   You should have received a copy of the GNU Library General Public License
15
 
   along with this library; see the file COPYING.LIB.  If not, write to
16
 
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17
 
   Boston, MA 02110-1301, USA.
18
 
*/
19
 
 
20
 
#include <stdlib.h>
21
 
 
22
 
#include <kdebug.h>
23
 
#include <klocale.h>
24
 
#include <kapplication.h>
25
 
#include <dcopclient.h>
26
 
#include <kcmdlineargs.h>
27
 
#include <kglobal.h>
28
 
 
29
 
 
30
 
#include "kio_home.h"
31
 
 
32
 
static const KCmdLineOptions options[] =
33
 
{
34
 
        { "+protocol", I18N_NOOP( "Protocol name" ), 0 },
35
 
        { "+pool", I18N_NOOP( "Socket name" ), 0 },
36
 
        { "+app", I18N_NOOP( "Socket name" ), 0 },
37
 
        KCmdLineLastOption
38
 
};
39
 
 
40
 
extern "C" {
41
 
        int KDE_EXPORT kdemain( int argc, char **argv )
42
 
        {
43
 
                // KApplication is necessary to use other ioslaves
44
 
                putenv(strdup("SESSION_MANAGER="));
45
 
                KCmdLineArgs::init(argc, argv, "kio_home", 0, 0, 0, 0);
46
 
                KCmdLineArgs::addCmdLineOptions( options );
47
 
                KApplication app( false, false );
48
 
                // We want to be anonymous even if we use DCOP
49
 
                app.dcopClient()->attach();
50
 
 
51
 
                KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
52
 
                HomeProtocol slave( args->arg(0), args->arg(1), args->arg(2) );
53
 
                slave.dispatchLoop();
54
 
                return 0;
55
 
        }
56
 
}
57
 
 
58
 
 
59
 
HomeProtocol::HomeProtocol(const QCString &protocol,
60
 
                               const QCString &pool, const QCString &app)
61
 
        : ForwardingSlaveBase(protocol, pool, app)
62
 
{
63
 
}
64
 
 
65
 
HomeProtocol::~HomeProtocol()
66
 
{
67
 
}
68
 
 
69
 
bool HomeProtocol::rewriteURL(const KURL &url, KURL &newUrl)
70
 
{
71
 
        QString name, path;
72
 
 
73
 
        if ( !m_impl.parseURL(url, name, path) )
74
 
        {
75
 
                error(KIO::ERR_MALFORMED_URL, url.prettyURL());
76
 
                return false;
77
 
        }
78
 
 
79
 
 
80
 
        if ( !m_impl.realURL(name, path, newUrl) )
81
 
        {
82
 
                error(KIO::ERR_MALFORMED_URL, url.prettyURL());
83
 
                return false;
84
 
        }
85
 
 
86
 
        return true;
87
 
}
88
 
 
89
 
 
90
 
void HomeProtocol::listDir(const KURL &url)
91
 
{
92
 
        kdDebug() << "HomeProtocol::listDir: " << url << endl;
93
 
 
94
 
        if ( url.path().length() <= 1 )
95
 
        {
96
 
                listRoot();
97
 
                return;
98
 
        }
99
 
 
100
 
        QString name, path;
101
 
        bool ok = m_impl.parseURL(url, name, path);
102
 
 
103
 
        if ( !ok )
104
 
        {
105
 
                error(KIO::ERR_MALFORMED_URL, url.prettyURL());
106
 
                return;
107
 
        }
108
 
        
109
 
        ForwardingSlaveBase::listDir(url);
110
 
}
111
 
 
112
 
void HomeProtocol::listRoot()
113
 
{
114
 
        KIO::UDSEntry entry;
115
 
 
116
 
        KIO::UDSEntryList home_entries;
117
 
        bool ok = m_impl.listHomes(home_entries);
118
 
 
119
 
        if (!ok) // can't happen
120
 
        {
121
 
                error(KIO::ERR_UNKNOWN, "");
122
 
                return;
123
 
        }
124
 
 
125
 
        totalSize(home_entries.count()+1);
126
 
 
127
 
        m_impl.createTopLevelEntry(entry);
128
 
        listEntry(entry, false);
129
 
 
130
 
        KIO::UDSEntryListIterator it = home_entries.begin();
131
 
        KIO::UDSEntryListIterator end = home_entries.end();
132
 
 
133
 
        for(; it!=end; ++it)
134
 
        {
135
 
                listEntry(*it, false);
136
 
        }
137
 
 
138
 
        entry.clear();
139
 
        listEntry(entry, true);
140
 
 
141
 
        finished();
142
 
}
143
 
 
144
 
void HomeProtocol::stat(const KURL &url)
145
 
{
146
 
        kdDebug() << "HomeProtocol::stat: " << url << endl;
147
 
 
148
 
        QString path = url.path();
149
 
        if ( path.isEmpty() || path == "/" )
150
 
        {
151
 
                // The root is "virtual" - it's not a single physical directory
152
 
                KIO::UDSEntry entry;
153
 
                m_impl.createTopLevelEntry( entry );
154
 
                statEntry( entry );
155
 
                finished();
156
 
                return;
157
 
        }
158
 
 
159
 
        QString name;
160
 
        bool ok = m_impl.parseURL(url, name, path);
161
 
 
162
 
        if ( !ok )
163
 
        {
164
 
                error(KIO::ERR_MALFORMED_URL, url.prettyURL());
165
 
                return;
166
 
        }
167
 
 
168
 
        if( path.isEmpty() )
169
 
        {
170
 
                KIO::UDSEntry entry;
171
 
 
172
 
                if ( m_impl.statHome(name, entry) )
173
 
                {
174
 
                        statEntry(entry);
175
 
                        finished();
176
 
                }
177
 
                else
178
 
                {
179
 
                        error(KIO::ERR_DOES_NOT_EXIST, url.prettyURL());
180
 
                }
181
 
        }
182
 
        else
183
 
        {
184
 
                ForwardingSlaveBase::stat(url);
185
 
        }
186
 
}