1 // -*- c++ -*-
2 
3 /*
4     SPDX-FileCopyrightText: 2003 Richard J. Moore <rich@kde.org>
5 
6     SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 
9 #include "autorefresh.h"
10 #include <kparts/part.h>
11 
12 #include <kiconloader.h>
13 #include <kmessagebox.h>
14 #include <KLocalizedString>
15 #include <qtimer.h>
16 #include <kselectaction.h>
17 #include <kactioncollection.h>
18 #include <kpluginfactory.h>
19 #include <KParts/ReadOnlyPart>
20 
AutoRefresh(QObject * parent,const QVariantList &)21 AutoRefresh::AutoRefresh(QObject *parent, const QVariantList & /*args*/)
22     : Plugin(parent)
23 {
24     timer = new QTimer(this);
25     connect(timer, &QTimer::timeout, this, &AutoRefresh::slotRefresh);
26 
27     refresher = actionCollection()->add<KSelectAction>(QStringLiteral("autorefresh"));
28     refresher->setText(i18n("&Auto Refresh"));
29     refresher->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh")));
30     connect(refresher, SIGNAL(triggered(QAction*)), this, SLOT(slotIntervalChanged()));
31     QStringList sl;
32     sl << i18n("None");
33     sl << i18n("Every 15 Seconds");
34     sl << i18n("Every 30 Seconds");
35     sl << i18n("Every Minute");
36     sl << i18n("Every 5 Minutes");
37     sl << i18n("Every 10 Minutes");
38     sl << i18n("Every 15 Minutes");
39     sl << i18n("Every 30 Minutes");
40     sl << i18n("Every 60 Minutes");
41     sl << i18n("Every 2 Hours");
42     sl << i18n("Every 6 Hours");
43 
44     refresher->setItems(sl);
45     refresher->setCurrentItem(0);
46 }
47 
~AutoRefresh()48 AutoRefresh::~AutoRefresh()
49 {
50 }
51 
slotIntervalChanged()52 void AutoRefresh::slotIntervalChanged()
53 {
54     int idx = refresher->currentItem();
55     int timeout = 0;
56     switch (idx) {
57     case 1:
58         timeout = (15 * 1000);
59         break;
60     case 2:
61         timeout = (30 * 1000);
62         break;
63     case 3:
64         timeout = (60 * 1000);
65         break;
66     case 4:
67         timeout = (5 * 60 * 1000);
68         break;
69     case 5:
70         timeout = (10 * 60 * 1000);
71         break;
72     case 6:
73         timeout = (15 * 60 * 1000);
74         break;
75     case 7:
76         timeout = (30 * 60 * 1000);
77         break;
78     case 8:
79         timeout = (60 * 60 * 1000);
80         break;
81     case 9:
82         timeout = (2 * 60 * 60 * 1000);
83         break;
84     case 10:
85         timeout = (6 * 60 * 60 * 1000);
86         break;
87     default:
88         break;
89     }
90     timer->stop();
91     if (timeout) {
92         timer->start(timeout);
93     }
94 }
95 
slotRefresh()96 void AutoRefresh::slotRefresh()
97 {
98     KParts::ReadOnlyPart *part = qobject_cast< KParts::ReadOnlyPart * >(parent());
99     if (!part) {
100         QString title = i18nc("@title:window", "Cannot Refresh Source");
101         QString text = i18n("<qt>This plugin cannot auto-refresh the current part.</qt>");
102 
103         KMessageBox::error(nullptr, text, title);
104     } else {
105         // Get URL
106         QUrl url = part->url();
107         part->openUrl(url);
108     }
109 }
110 
111 K_PLUGIN_FACTORY(AutoRefreshFactory, registerPlugin< AutoRefresh >();)
112 
113 #include "autorefresh.moc"
114 
115