summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/base/src/nsSubscribableServer.h
blob: 7fbafd08385734e94b4fbda14f713975c0326108 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef nsSubscribableServer_h__
#define nsSubscribableServer_h__

#include "nsCOMPtr.h"
#include "nsString.h"
#include "mozilla/dom/XULTreeElement.h"
#include "nsITreeSelection.h"
#include "nsITreeView.h"
#include "nsISubscribableServer.h"
#include "nsTArray.h"

struct SubscribeTreeNode;

class nsSubscribableServer : public nsISubscribableServer, public nsITreeView {
 public:
  nsSubscribableServer();

  nsresult Init();

  NS_DECL_THREADSAFE_ISUPPORTS
  NS_DECL_NSISUBSCRIBABLESERVER
  NS_DECL_NSITREEVIEW

 private:
  virtual ~nsSubscribableServer();

  nsresult ConvertNameToUnichar(const char* inStr, char16_t** outStr);
  nsCOMPtr<nsISubscribeListener> mSubscribeListener;
  nsCString mIncomingServerUri;
  char mDelimiter;
  bool mShowFullName;
  bool mStopped;
  nsCString mServerType;

  // root of the folder tree while items are discovered on the server
  SubscribeTreeNode* mTreeRoot;
  // array of nodes representing the rows for the tree element
  nsTArray<SubscribeTreeNode*> mRowMap;
  nsCOMPtr<nsITreeSelection> mSelection;
  RefPtr<mozilla::dom::XULTreeElement> mTree;
  void FreeSubtree(SubscribeTreeNode* node);
  void FreeRows();
  SubscribeTreeNode* CreateNode(SubscribeTreeNode* parent,
                                nsACString const& name, nsACString const& path);
  nsresult AddChildNode(SubscribeTreeNode* parent, nsACString const& name,
                        const nsACString& aPath, SubscribeTreeNode** child);
  nsresult FindAndCreateNode(const nsACString& aPath,
                             SubscribeTreeNode** aResult);

  int32_t GetRow(SubscribeTreeNode* node, bool* open);
  int32_t AddSubtree(SubscribeTreeNode* node, int32_t index);
};

#endif  // nsSubscribableServer_h__