Offline-capable prayer times, Adhan, and Quran player for GNOME. Features: -Working Quran player with multiple reciters. -Working Athan audio and notifications. -Automatic location finding and offline cache. -The widget can calculate prayer times offline. Keywords: muslim, islam, islamic, azan, athan, adhan, Quran
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-X-004 warning
extensions should avoid synchronous file IO in shell code
Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.
logic/api.js:184
file.load_contents(null)
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 10 ungated console.log/warn/error calls (threshold: 5).
logic/api.js:39
console.log('[SalatPrayerTime] Cache params changed, will refetch.')
logic/api.js:45
console.log('[SalatPrayerTime] Cache is stale (>5 days), will refetch.')
logic/api.js:52
console.log(`[SalatPrayerTime] Cache hit for ${dateKey}.`)
logic/api.js:56
console.log(`[SalatPrayerTime] Cache miss for ${dateKey}.`)
logic/api.js:96
console.log(`[SalatPrayerTime] Cached ${Object.keys(days).length} days from AlAdhan.`)
logic/api.js:210
console.log('[SalatPrayerTime] Cache cleared.')
logic/api.js:22
console.error('[SalatPrayerTime] Cache dir error:', e)
logic/api.js:188
console.error('[SalatPrayerTime] Cache read error:', e)
logic/api.js:201
console.error('[SalatPrayerTime] Cache write error:', e)
logic/api.js:212
console.error('[SalatPrayerTime] Cache clear error:', e)
EGO-L-002 warning
objects created by extension should be destroyed in disable()
Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.
extension.js:191
this._hijriItem = hijriItem
extension.js:185
this._hijriLabel = new St.Label({
text: '...',
x_expand: true,
style: 'text-align: center; font-style: italic; padding: 4px 8px;'
})
extension.js:114
this._nextPrayerLabel = new St.Label({
text: '...',
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
style: 'padding: 0px 8px;'
})
extension.js:244
this._offlineItem = offlineItem
extension.js:238
this._offlineLabel = new St.Label({
text: '',
x_expand: true,
style: 'text-align: center; color: #f9a825; font-weight: bold; padding: 2px 8px;'
})
extension.js:294
this._playPauseBtn = new St.Button({
child: new St.Icon({ icon_name: 'media-playback-start-symbolic', icon_size: 24 })
})
extension.js:271
this._quranSeparator = new PopupMenu.PopupSeparatorMenuItem('Quran Player')
extension.js:265
this._settingsItem = settingsItem
extension.js:252
this._settingsLabel = new St.Label({
text: this._t('Settings', 'الإعدادات'),
y_expand: true,
y_align: Clutter.ActorAlign.CENTER
})
extension.js:202
this._specialItem = specialItem
extension.js:196
this._specialLabel = new St.Label({
text: '',
x_expand: true,
style: 'text-align: center; font-weight: bold; padding: 0 8px 4px;'
})
extension.js:274
this._surahSubMenu = new PopupMenu.PopupSubMenuMenuItem('Select Surah (Loading...)')
extension.js:278
this._verseLabel = new St.Label({
text: 'Press Play to start recitation',
style: 'text-align: center; max-width: 300px; padding: 10px; font-size: 1.1em;'
})
extension.js:277
this._verseTextItem = new PopupMenu.PopupBaseMenuItem({ reactive: false })
EGO-L-005 warning
owned object references should be released in disable()
Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.
extension.js:191
this._hijriItem = hijriItem
extension.js:185
this._hijriLabel = new St.Label({
text: '...',
x_expand: true,
style: 'text-align: center; font-style: italic; padding: 4px 8px;'
})
extension.js:114
this._nextPrayerLabel = new St.Label({
text: '...',
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
style: 'padding: 0px 8px;'
})
extension.js:244
this._offlineItem = offlineItem
extension.js:238
this._offlineLabel = new St.Label({
text: '',
x_expand: true,
style: 'text-align: center; color: #f9a825; font-weight: bold; padding: 2px 8px;'
})
extension.js:294
this._playPauseBtn = new St.Button({
child: new St.Icon({ icon_name: 'media-playback-start-symbolic', icon_size: 24 })
})
extension.js:271
this._quranSeparator = new PopupMenu.PopupSeparatorMenuItem('Quran Player')
extension.js:265
this._settingsItem = settingsItem
extension.js:252
this._settingsLabel = new St.Label({
text: this._t('Settings', 'الإعدادات'),
y_expand: true,
y_align: Clutter.ActorAlign.CENTER
})
extension.js:202
this._specialItem = specialItem
extension.js:196
this._specialLabel = new St.Label({
text: '',
x_expand: true,
style: 'text-align: center; font-weight: bold; padding: 0 8px 4px;'
})
extension.js:274
this._surahSubMenu = new PopupMenu.PopupSubMenuMenuItem('Select Surah (Loading...)')
extension.js:278
this._verseLabel = new St.Label({
text: 'Press Play to start recitation',
style: 'text-align: center; max-width: 300px; padding: 10px; font-size: 1.1em;'
})
extension.js:277
this._verseTextItem = new PopupMenu.PopupBaseMenuItem({ reactive: false })
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
extension.js:54
this._adhanPlayer.connect('eos', () => this._onAdhanEnded())
extension.js:52
this._playerA.connect('eos', () => this._onQuranVerseEnded(this._playerB))
extension.js:53
this._playerB.connect('eos', () => this._onQuranVerseEnded(this._playerA))
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
extension.js:894
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 40, () => {
if (this._isAdhanPlaying) { this._adhanPlayer.stop(); this._onAdhanEnded(); }
return GLib.SOURCE_REMOVE;
})
extension.js:900
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 15, () => {
if (this._isAdhanPlaying) { this._adhanPlayer.stop(); this._onAdhanEnded(); }
return GLib.SOURCE_REMOVE;
})
| Version | Status |
|---|---|
| 2 | Unreviewed |
| 1 | Rejected |