#define FileViewer_h_
#include "AppControlUtils.h"
+#include "WorkingDir.h"
namespace Msg
{
class FileViewer
{
- public:
- FileViewer();
+ public:
+ FileViewer(WorkingDirRef workingDir);
- static bool launch(const std::string &file);
+ static bool launch(const std::string &file);
+ bool launchWithCopy(const std::string &file);
- private:
- FileViewer(const FileViewer&) = delete;
- FileViewer& operator=(const FileViewer&) = delete;
+ private:
+ FileViewer(const FileViewer&) = delete;
+ FileViewer& operator=(const FileViewer&) = delete;
+
+ private:
+ WorkingDirRef m_WorkingDir;
+ std::string m_FilePath;
};
}
using namespace Msg;
-FileViewer::FileViewer()
+FileViewer::FileViewer(WorkingDirRef workingDir)
+ : m_WorkingDir(workingDir)
{
}
{
app_control_set_operation(svc_handle, APP_CONTROL_OPERATION_VIEW);
app_control_set_mime(svc_handle, mime.c_str());
- app_control_set_uri(svc_handle, file.c_str());
+ std::string uri = "file://" + file;
+ app_control_set_uri(svc_handle, uri.c_str());
app_control_set_launch_mode(svc_handle, APP_CONTROL_LAUNCH_MODE_GROUP);
int ret = app_control_send_launch_request(svc_handle, nullptr, nullptr);
MSG_LOG("Result code: ", ret);
return res;
}
+bool FileViewer::launchWithCopy(const std::string &file)
+{
+ bool res = false;
+ if(m_WorkingDir)
+ {
+ // Remove previous file (correct only for APP_CONTROL_LAUNCH_MODE_GROUP)
+ if(!m_FilePath.empty())
+ m_WorkingDir->removeFile(m_FilePath);
+
+ m_FilePath = m_WorkingDir->addFile(file);
+ if(!m_FilePath.empty())
+ res = launch(m_FilePath);
+ }
+
+ return res;
+}
+
#include "App.h"
#include "ConvListItem.h"
#include "ContactManager.h"
-#include "WorkingDir.h"
+#include "FileViewer.h"
#include <unordered_map>
#include <unordered_set>
void selectListItems(bool state);
bool isAllListItemSelected() const;
ConvListItem *getItem(MsgId msgId) const;
+ void appendItem(const MsgConversationItem &item);
void appendItem(ConvListItem *item);
void deleteItem(ConvListItem *item);
void demoteItem(ConvListItem *item); //move down existing item
IConvListListener *m_pListner;
App &m_App;
WorkingDirRef m_WorkingDir;
+ FileViewer m_FileViewer;
ThumbnailMaker::ThumbId m_OwnerThumbId;
ThumbnailMaker::ThumbId m_RecipThumbId;
std::string m_SearchWord;
#include "App.h"
#include <string>
#include "MessageDetailContent.h"
-#include "WorkingDir.h"
+#include "FileViewer.h"
#include "MsgUtils.h"
namespace Msg
*/
ConvListItem(const MsgConversationItem &item,
App &app,
+ FileViewer &fileViewer,
WorkingDirRef workingDir,
const std::string &searchWord,
const ThumbnailMaker::ThumbId &thumbId);
IConvListItemListener *m_pListener;
App &m_App;
WorkingDirRef m_WorkingDir;
+ FileViewer &m_FileViewer;
MsgId m_MsgId;
bool m_IsDraft;
Message::NetworkStatus m_NetworkStatus;
, m_pListner(nullptr)
, m_App(app)
, m_WorkingDir(workingDir)
+ , m_FileViewer(workingDir)
, m_OwnerThumbId(m_App.getThumbnailMaker().getThumbId(ThumbnailMaker::OwnerThumb))
, m_RecipThumbId(m_App.getThumbnailMaker().getThumbId(ThumbnailMaker::SingleThumb))
, m_SearchWord()
for(int i = 0; i < convListLen; ++i)
{
MsgConversationItem &item = convList->at(i);
- const ThumbnailMaker::ThumbId &thumbId = item.getDirection() == Message::MD_Received ? m_RecipThumbId : m_OwnerThumbId;
- appendItem(new ConvListItem(item, m_App, m_WorkingDir, m_SearchWord, thumbId));
+ appendItem(item);
}
}
return it != m_ConvListItemMap.end() ? it->second : nullptr;
}
+void ConvList::appendItem(const MsgConversationItem &item)
+{
+ const ThumbnailMaker::ThumbId &thumbId = item.getDirection() == Message::MD_Received ? m_RecipThumbId : m_OwnerThumbId;
+ appendItem(new ConvListItem(item, m_App, m_FileViewer, m_WorkingDir, m_SearchWord, thumbId));
+}
+
void ConvList::appendItem(ConvListItem *item)
{
dateLineAddIfNec(item);
if(msg && msg->getThreadId() == m_ThreadId && msg->getMessageStorageType() != Message::MS_Sim)
{
MsgConversationItemRef item = m_MsgEngine.getStorage().getConversationItem(msgId);
- const ThumbnailMaker::ThumbId &thumbId = item->getDirection() == Message::MD_Received ? m_RecipThumbId : m_OwnerThumbId;
- appendItem(new ConvListItem(*item, m_App, m_WorkingDir, m_SearchWord, thumbId));
- inserted = true;
+ if(item)
+ {
+ appendItem(*item);
+ inserted = true;
+ }
}
}
if(inserted)
ConvListItem::ConvListItem(const MsgConversationItem &item,
App &app,
+ FileViewer &fileViewer,
WorkingDirRef workingDir,
const std::string &searchWord,
const ThumbnailMaker::ThumbId &thumbId)
, m_pListener(nullptr)
, m_App(app)
, m_WorkingDir(workingDir)
+ , m_FileViewer(fileViewer)
, m_MsgId(item.getMsgId())
, m_IsDraft(item.isDraft())
, m_NetworkStatus(item.getNetworkStatus())
void ConvListItem::onItemClicked(BubbleEntity::Item &item)
{
MSG_LOG("");
- FileViewer::launch(item.value2);
+ m_FileViewer.launchWithCopy(item.value2);
}
void ConvListItem::onCopyTextItemPressed(ContextPopupItem &item)