Review of "Salaat Prayer Times" version 1

Details Page Preview

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

Extension Homepage
https://github.com/MazenMohamed203/SalaatprayertimesGnome

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 6

Shexli found 6 issues that may need reviewer attention.

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()`.

File Operations

  • 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).

No excessive logging

  • 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.

Destroy all objects

  • 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`.

Destroy all objects

  • 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.

Disconnect all signals

  • 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.

Remove main loop sources

  • 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;
                })

All Versions

Version Status
2 Unreviewed
1 Rejected

Previous Reviews on this Version

Mazen@ auto- rejected
Auto-rejected because of new version 2 was uploaded