ProtocolSettings.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. /*
  2. * Copyright 2009-2011, Pier Luigi Fiorini. All rights reserved.
  3. * Copyright 2003-2009, IM Kit Team. All rights reserved.
  4. * Copyright 2021, Jaidyn Levesque. All rights reserved.
  5. * Distributed under the terms of the MIT License.
  6. *
  7. * Authors:
  8. * Michael Davidson, slaad@bong.com.au
  9. * Pier Luigi Fiorini, pierluigi.fiorini@gmail.com
  10. * Jaidyn Levesque, jadedctrl@teknik.io
  11. */
  12. #include "ProtocolSettings.h"
  13. #include <Directory.h>
  14. #include <File.h>
  15. #include <Message.h>
  16. #include <ObjectList.h>
  17. #include <Path.h>
  18. #include "ChatProtocolAddOn.h"
  19. #include "Utils.h"
  20. ProtocolSettings::ProtocolSettings(ChatProtocolAddOn* addOn)
  21. :
  22. fTemplate(addOn->Protocol(), "account"),
  23. fAddOn(addOn)
  24. {
  25. }
  26. status_t
  27. ProtocolSettings::InitCheck() const
  28. {
  29. return fStatus;
  30. }
  31. ChatProtocolAddOn*
  32. ProtocolSettings::AddOn() const
  33. {
  34. return fAddOn;
  35. }
  36. BObjectList<BString>
  37. ProtocolSettings::Accounts() const
  38. {
  39. BObjectList<BString> list(true);
  40. BPath path(AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature()));
  41. if (path.InitCheck() != B_OK)
  42. return list;
  43. BDirectory dir(path.Path());
  44. BEntry entry;
  45. while (dir.GetNextEntry(&entry) == B_OK) {
  46. BFile file(&entry, B_READ_ONLY);
  47. BMessage msg;
  48. if (msg.Unflatten(&file) == B_OK) {
  49. char buffer[B_PATH_NAME_LENGTH];
  50. if (entry.GetName(buffer) == B_OK)
  51. list.AddItem(new BString(buffer));
  52. }
  53. }
  54. return list;
  55. }
  56. status_t
  57. ProtocolSettings::Load(const char* account, BView* parent)
  58. {
  59. BMessage* settings = NULL;
  60. if (account) {
  61. status_t ret = Load(account, &settings);
  62. if (ret != B_OK)
  63. return ret;
  64. }
  65. return fTemplate.Load(parent, settings);
  66. }
  67. status_t
  68. ProtocolSettings::Load(const char* account, BMessage** settings)
  69. {
  70. if (!account || !settings)
  71. return B_BAD_VALUE;
  72. status_t ret = B_ERROR;
  73. // Find user's settings path
  74. BPath path(AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature()));
  75. if ((ret = path.InitCheck()) != B_OK)
  76. return ret;
  77. // Load settings file
  78. path.Append(account);
  79. BFile file(path.Path(), B_READ_ONLY);
  80. BMessage* msg = new BMessage();
  81. ret = msg->Unflatten(&file);
  82. *settings = msg;
  83. return ret;
  84. }
  85. status_t
  86. ProtocolSettings::Save(const char* account, BView* parent, BString* errorText)
  87. {
  88. if (!parent)
  89. debugger("Couldn't save protocol's settings GUI on a NULL parent!");
  90. BMessage settings;
  91. status_t status = fTemplate.Save(parent, &settings, errorText);
  92. if (status != B_OK)
  93. return status;
  94. return Save(account, settings);
  95. }
  96. status_t
  97. ProtocolSettings::Save(const char* account, BMessage settings)
  98. {
  99. // Find user's settings path
  100. BPath path(AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature()));
  101. status_t ret;
  102. if ((ret = path.InitCheck()) != B_OK)
  103. return ret;
  104. // Load settings file
  105. path.Append(account);
  106. BFile file(path.Path(), B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
  107. return settings.Flatten(&file);
  108. }
  109. status_t
  110. ProtocolSettings::Rename(const char* from, const char* to)
  111. {
  112. status_t ret = B_ERROR;
  113. // Find user's settings path
  114. BPath path(AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature()));
  115. if ((ret = path.InitCheck()) != B_OK)
  116. return ret;
  117. path.Append(from);
  118. // Delete settings file
  119. BEntry entry(path.Path());
  120. if ((ret = entry.Rename(to)) != B_OK)
  121. return ret;
  122. return B_OK;
  123. }
  124. status_t
  125. ProtocolSettings::Delete(const char* account)
  126. {
  127. status_t ret = B_ERROR;
  128. // Find user's settings path
  129. BPath path(AccountPath(fAddOn->Signature(), fAddOn->ProtoSignature()));
  130. if ((ret = path.InitCheck()) != B_OK)
  131. return ret;
  132. path.Append(account);
  133. // Delete settings file
  134. BEntry entry(path.Path());
  135. if ((ret = entry.Remove()) != B_OK)
  136. return ret;
  137. return B_OK;
  138. }